From 844f5103992238c0c23203286dad16a466e89c97 Mon Sep 17 00:00:00 2001 From: julieng Date: Tue, 3 Aug 2021 08:03:09 +0200 Subject: move *.html to *.md --- .../a_re-introduction_to_javascript/index.html | 1045 -------------------- .../a_re-introduction_to_javascript/index.md | 1045 ++++++++++++++++++++ .../fr/web/javascript/about_javascript/index.html | 57 -- files/fr/web/javascript/about_javascript/index.md | 57 ++ files/fr/web/javascript/closures/index.html | 367 ------- files/fr/web/javascript/closures/index.md | 367 +++++++ files/fr/web/javascript/data_structures/index.html | 320 ------ files/fr/web/javascript/data_structures/index.md | 320 ++++++ .../index.html | 325 ------ .../index.md | 325 ++++++ .../equality_comparisons_and_sameness/index.html | 461 --------- .../equality_comparisons_and_sameness/index.md | 461 +++++++++ files/fr/web/javascript/eventloop/index.html | 155 --- files/fr/web/javascript/eventloop/index.md | 155 +++ .../control_flow_and_error_handling/index.html | 430 -------- .../guide/control_flow_and_error_handling/index.md | 430 ++++++++ .../guide/details_of_the_object_model/index.html | 685 ------------- .../guide/details_of_the_object_model/index.md | 685 +++++++++++++ .../guide/expressions_and_operators/index.html | 935 ------------------ .../guide/expressions_and_operators/index.md | 935 ++++++++++++++++++ files/fr/web/javascript/guide/functions/index.html | 671 ------------- files/fr/web/javascript/guide/functions/index.md | 671 +++++++++++++ .../javascript/guide/grammar_and_types/index.html | 710 ------------- .../javascript/guide/grammar_and_types/index.md | 710 +++++++++++++ files/fr/web/javascript/guide/index.html | 169 ---- files/fr/web/javascript/guide/index.md | 169 ++++ .../guide/indexed_collections/index.html | 426 -------- .../javascript/guide/indexed_collections/index.md | 426 ++++++++ .../web/javascript/guide/introduction/index.html | 138 --- .../fr/web/javascript/guide/introduction/index.md | 138 +++ .../guide/iterators_and_generators/index.html | 176 ---- .../guide/iterators_and_generators/index.md | 176 ++++ .../javascript/guide/keyed_collections/index.html | 153 --- .../javascript/guide/keyed_collections/index.md | 153 +++ .../guide/loops_and_iteration/index.html | 350 ------- .../javascript/guide/loops_and_iteration/index.md | 350 +++++++ .../javascript/guide/meta_programming/index.html | 279 ------ .../web/javascript/guide/meta_programming/index.md | 279 ++++++ files/fr/web/javascript/guide/modules/index.html | 432 -------- files/fr/web/javascript/guide/modules/index.md | 432 ++++++++ .../javascript/guide/numbers_and_dates/index.html | 392 -------- .../javascript/guide/numbers_and_dates/index.md | 392 ++++++++ .../regular_expressions/assertions/index.html | 107 -- .../guide/regular_expressions/assertions/index.md | 107 ++ .../character_classes/index.html | 181 ---- .../regular_expressions/character_classes/index.md | 181 ++++ .../groups_and_ranges/index.html | 92 -- .../regular_expressions/groups_and_ranges/index.md | 92 ++ .../guide/regular_expressions/index.html | 746 -------------- .../javascript/guide/regular_expressions/index.md | 746 ++++++++++++++ .../regular_expressions/quantifiers/index.html | 98 -- .../guide/regular_expressions/quantifiers/index.md | 98 ++ .../unicode_property_escapes/index.html | 431 -------- .../unicode_property_escapes/index.md | 431 ++++++++ .../javascript/guide/text_formatting/index.html | 254 ----- .../web/javascript/guide/text_formatting/index.md | 254 +++++ .../web/javascript/guide/using_promises/index.html | 315 ------ .../web/javascript/guide/using_promises/index.md | 315 ++++++ .../guide/working_with_objects/index.html | 532 ---------- .../javascript/guide/working_with_objects/index.md | 532 ++++++++++ files/fr/web/javascript/index.html | 129 --- files/fr/web/javascript/index.md | 129 +++ .../inheritance_and_the_prototype_chain/index.html | 574 ----------- .../inheritance_and_the_prototype_chain/index.md | 574 +++++++++++ .../javascript_technologies_overview/index.html | 85 -- .../javascript_technologies_overview/index.md | 85 ++ .../web/javascript/language_resources/index.html | 151 --- .../fr/web/javascript/language_resources/index.md | 151 +++ .../fr/web/javascript/memory_management/index.html | 208 ---- files/fr/web/javascript/memory_management/index.md | 208 ++++ files/fr/web/javascript/reference/about/index.html | 54 - files/fr/web/javascript/reference/about/index.md | 54 + .../reference/classes/constructor/index.html | 172 ---- .../reference/classes/constructor/index.md | 172 ++++ .../reference/classes/extends/index.html | 114 --- .../javascript/reference/classes/extends/index.md | 114 +++ .../fr/web/javascript/reference/classes/index.html | 411 -------- files/fr/web/javascript/reference/classes/index.md | 411 ++++++++ .../classes/private_class_fields/index.html | 207 ---- .../classes/private_class_fields/index.md | 207 ++++ .../classes/public_class_fields/index.html | 265 ----- .../reference/classes/public_class_fields/index.md | 265 +++++ .../javascript/reference/classes/static/index.html | 127 --- .../javascript/reference/classes/static/index.md | 127 +++ .../deprecated_and_obsolete_features/index.html | 293 ------ .../deprecated_and_obsolete_features/index.md | 293 ++++++ .../the_legacy_iterator_protocol/index.html | 80 -- .../the_legacy_iterator_protocol/index.md | 80 ++ .../reference/errors/already_has_pragma/index.html | 42 - .../reference/errors/already_has_pragma/index.md | 42 + .../errors/array_sort_argument/index.html | 48 - .../reference/errors/array_sort_argument/index.md | 48 + .../reference/errors/bad_octal/index.html | 53 - .../javascript/reference/errors/bad_octal/index.md | 53 + .../reference/errors/bad_radix/index.html | 64 -- .../javascript/reference/errors/bad_radix/index.md | 64 ++ .../reference/errors/bad_regexp_flag/index.html | 107 -- .../reference/errors/bad_regexp_flag/index.md | 107 ++ .../errors/bad_return_or_yield/index.html | 58 -- .../reference/errors/bad_return_or_yield/index.md | 58 ++ .../errors/called_on_incompatible_type/index.html | 76 -- .../errors/called_on_incompatible_type/index.md | 76 ++ .../index.html | 63 -- .../index.md | 63 ++ .../errors/cant_access_property/index.html | 60 -- .../reference/errors/cant_access_property/index.md | 60 ++ .../errors/cant_assign_to_property/index.html | 56 -- .../errors/cant_assign_to_property/index.md | 56 ++ .../index.html | 66 -- .../index.md | 66 ++ .../reference/errors/cant_delete/index.html | 60 -- .../reference/errors/cant_delete/index.md | 60 ++ .../errors/cant_redefine_property/index.html | 52 - .../errors/cant_redefine_property/index.md | 52 + .../errors/cyclic_object_value/index.html | 69 -- .../reference/errors/cyclic_object_value/index.md | 69 ++ .../reference/errors/dead_object/index.html | 50 - .../reference/errors/dead_object/index.md | 50 + .../errors/delete_in_strict_mode/index.html | 69 -- .../errors/delete_in_strict_mode/index.md | 69 ++ .../index.html | 76 -- .../deprecated_caller_or_arguments_usage/index.md | 76 ++ .../deprecated_expression_closures/index.html | 80 -- .../errors/deprecated_expression_closures/index.md | 80 ++ .../reference/errors/deprecated_octal/index.html | 69 -- .../reference/errors/deprecated_octal/index.md | 69 ++ .../errors/deprecated_source_map_pragma/index.html | 59 -- .../errors/deprecated_source_map_pragma/index.md | 59 ++ .../errors/deprecated_string_generics/index.html | 106 -- .../errors/deprecated_string_generics/index.md | 106 ++ .../errors/deprecated_tolocaleformat/index.html | 92 -- .../errors/deprecated_tolocaleformat/index.md | 92 ++ .../reference/errors/equal_as_assign/index.html | 54 - .../reference/errors/equal_as_assign/index.md | 54 + .../for-each-in_loops_are_deprecated/index.html | 169 ---- .../for-each-in_loops_are_deprecated/index.md | 169 ++++ .../reference/errors/getter_only/index.html | 85 -- .../reference/errors/getter_only/index.md | 85 ++ .../errors/identifier_after_number/index.html | 57 -- .../errors/identifier_after_number/index.md | 57 ++ .../reference/errors/illegal_character/index.html | 84 -- .../reference/errors/illegal_character/index.md | 84 ++ .../errors/in_operator_no_object/index.html | 74 -- .../errors/in_operator_no_object/index.md | 74 ++ .../fr/web/javascript/reference/errors/index.html | 24 - files/fr/web/javascript/reference/errors/index.md | 24 + .../errors/invalid_array_length/index.html | 80 -- .../reference/errors/invalid_array_length/index.md | 80 ++ .../invalid_assignment_left-hand_side/index.html | 55 -- .../invalid_assignment_left-hand_side/index.md | 55 ++ .../errors/invalid_const_assignment/index.html | 91 -- .../errors/invalid_const_assignment/index.md | 91 ++ .../reference/errors/invalid_date/index.html | 57 -- .../reference/errors/invalid_date/index.md | 57 ++ .../errors/invalid_for-in_initializer/index.html | 75 -- .../errors/invalid_for-in_initializer/index.md | 75 ++ .../errors/invalid_for-of_initializer/index.html | 64 -- .../errors/invalid_for-of_initializer/index.md | 64 ++ .../index.html | 63 -- .../index.md | 63 ++ .../reference/errors/is_not_iterable/index.html | 129 --- .../reference/errors/is_not_iterable/index.md | 129 +++ .../reference/errors/json_bad_parse/index.html | 113 --- .../reference/errors/json_bad_parse/index.md | 113 +++ .../errors/malformed_formal_parameter/index.html | 65 -- .../errors/malformed_formal_parameter/index.md | 65 ++ .../reference/errors/malformed_uri/index.html | 67 -- .../reference/errors/malformed_uri/index.md | 67 ++ .../errors/missing_bracket_after_list/index.html | 58 -- .../errors/missing_bracket_after_list/index.md | 58 ++ .../missing_colon_after_property_id/index.html | 78 -- .../missing_colon_after_property_id/index.md | 78 ++ .../missing_curly_after_function_body/index.html | 68 -- .../missing_curly_after_function_body/index.md | 68 ++ .../missing_curly_after_property_list/index.html | 53 - .../missing_curly_after_property_list/index.md | 53 + .../errors/missing_formal_parameter/index.html | 78 -- .../errors/missing_formal_parameter/index.md | 78 ++ .../errors/missing_initializer_in_const/index.html | 60 -- .../errors/missing_initializer_in_const/index.md | 60 ++ .../missing_name_after_dot_operator/index.html | 70 -- .../missing_name_after_dot_operator/index.md | 70 ++ .../index.html | 57 -- .../index.md | 57 ++ .../missing_parenthesis_after_condition/index.html | 71 -- .../missing_parenthesis_after_condition/index.md | 71 ++ .../missing_semicolon_before_statement/index.html | 84 -- .../missing_semicolon_before_statement/index.md | 84 ++ .../errors/more_arguments_needed/index.html | 50 - .../errors/more_arguments_needed/index.md | 50 + .../errors/negative_repetition_count/index.html | 46 - .../errors/negative_repetition_count/index.md | 46 + .../reference/errors/no_non-null_object/index.html | 67 -- .../reference/errors/no_non-null_object/index.md | 67 ++ .../reference/errors/no_properties/index.html | 43 - .../reference/errors/no_properties/index.md | 43 + .../reference/errors/no_variable_name/index.html | 84 -- .../reference/errors/no_variable_name/index.md | 84 ++ .../non_configurable_array_element/index.html | 84 -- .../errors/non_configurable_array_element/index.md | 84 ++ .../reference/errors/not_a_codepoint/index.html | 57 -- .../reference/errors/not_a_codepoint/index.md | 57 ++ .../reference/errors/not_a_constructor/index.html | 97 -- .../reference/errors/not_a_constructor/index.md | 97 ++ .../reference/errors/not_a_function/index.html | 156 --- .../reference/errors/not_a_function/index.md | 156 +++ .../reference/errors/not_defined/index.html | 71 -- .../reference/errors/not_defined/index.md | 71 ++ .../reference/errors/precision_range/index.html | 99 -- .../reference/errors/precision_range/index.md | 99 ++ .../errors/property_access_denied/index.html | 48 - .../errors/property_access_denied/index.md | 48 + .../reference/errors/read-only/index.html | 81 -- .../javascript/reference/errors/read-only/index.md | 81 ++ .../errors/redeclared_parameter/index.html | 63 -- .../reference/errors/redeclared_parameter/index.md | 63 ++ .../index.html | 89 -- .../index.md | 89 ++ .../errors/reserved_identifier/index.html | 82 -- .../reference/errors/reserved_identifier/index.md | 82 ++ .../errors/resulting_string_too_large/index.html | 50 - .../errors/resulting_string_too_large/index.md | 50 + .../reference/errors/stmt_after_return/index.html | 80 -- .../reference/errors/stmt_after_return/index.md | 80 ++ .../errors/strict_non_simple_params/index.html | 116 --- .../errors/strict_non_simple_params/index.md | 116 +++ .../reference/errors/too_much_recursion/index.html | 70 -- .../reference/errors/too_much_recursion/index.md | 70 ++ .../reference/errors/undeclared_var/index.html | 67 -- .../reference/errors/undeclared_var/index.md | 67 ++ .../reference/errors/undefined_prop/index.html | 58 -- .../reference/errors/undefined_prop/index.md | 58 ++ .../reference/errors/unexpected_token/index.html | 78 -- .../reference/errors/unexpected_token/index.md | 78 ++ .../reference/errors/unexpected_type/index.html | 74 -- .../reference/errors/unexpected_type/index.md | 74 ++ .../errors/unnamed_function_statement/index.html | 116 --- .../errors/unnamed_function_statement/index.md | 116 +++ .../errors/unterminated_string_literal/index.html | 78 -- .../errors/unterminated_string_literal/index.md | 78 ++ .../reference/errors/var_hides_argument/index.html | 56 -- .../reference/errors/var_hides_argument/index.md | 56 ++ .../functions/arguments/@@iterator/index.html | 78 -- .../functions/arguments/@@iterator/index.md | 78 ++ .../functions/arguments/callee/index.html | 157 --- .../reference/functions/arguments/callee/index.md | 157 +++ .../reference/functions/arguments/index.html | 247 ----- .../reference/functions/arguments/index.md | 247 +++++ .../functions/arguments/length/index.html | 91 -- .../reference/functions/arguments/length/index.md | 91 ++ .../reference/functions/arrow_functions/index.html | 374 ------- .../reference/functions/arrow_functions/index.md | 374 +++++++ .../functions/default_parameters/index.html | 211 ---- .../functions/default_parameters/index.md | 211 ++++ .../javascript/reference/functions/get/index.html | 177 ---- .../javascript/reference/functions/get/index.md | 177 ++++ .../web/javascript/reference/functions/index.html | 825 ---------------- .../fr/web/javascript/reference/functions/index.md | 825 ++++++++++++++++ .../functions/method_definitions/index.html | 216 ---- .../functions/method_definitions/index.md | 216 ++++ .../reference/functions/rest_parameters/index.html | 216 ---- .../reference/functions/rest_parameters/index.md | 216 ++++ .../javascript/reference/functions/set/index.html | 139 --- .../javascript/reference/functions/set/index.md | 139 +++ .../global_objects/aggregateerror/index.html | 84 -- .../global_objects/aggregateerror/index.md | 84 ++ .../global_objects/array/@@iterator/index.html | 89 -- .../global_objects/array/@@iterator/index.md | 89 ++ .../global_objects/array/@@species/index.html | 75 -- .../global_objects/array/@@species/index.md | 75 ++ .../global_objects/array/@@unscopables/index.html | 73 -- .../global_objects/array/@@unscopables/index.md | 73 ++ .../global_objects/array/array/index.html | 85 -- .../reference/global_objects/array/array/index.md | 85 ++ .../global_objects/array/concat/index.html | 155 --- .../reference/global_objects/array/concat/index.md | 155 +++ .../global_objects/array/copywithin/index.html | 192 ---- .../global_objects/array/copywithin/index.md | 192 ++++ .../global_objects/array/entries/index.html | 92 -- .../global_objects/array/entries/index.md | 92 ++ .../global_objects/array/every/index.html | 196 ---- .../reference/global_objects/array/every/index.md | 196 ++++ .../reference/global_objects/array/fill/index.html | 150 --- .../reference/global_objects/array/fill/index.md | 150 +++ .../global_objects/array/filter/index.html | 223 ----- .../reference/global_objects/array/filter/index.md | 223 +++++ .../reference/global_objects/array/find/index.html | 142 --- .../reference/global_objects/array/find/index.md | 142 +++ .../global_objects/array/findindex/index.html | 176 ---- .../global_objects/array/findindex/index.md | 176 ++++ .../reference/global_objects/array/flat/index.html | 143 --- .../reference/global_objects/array/flat/index.md | 143 +++ .../global_objects/array/flatmap/index.html | 120 --- .../global_objects/array/flatmap/index.md | 120 +++ .../global_objects/array/foreach/index.html | 271 ----- .../global_objects/array/foreach/index.md | 271 +++++ .../reference/global_objects/array/from/index.html | 135 --- .../reference/global_objects/array/from/index.md | 135 +++ .../global_objects/array/includes/index.html | 134 --- .../global_objects/array/includes/index.md | 134 +++ .../reference/global_objects/array/index.html | 456 --------- .../reference/global_objects/array/index.md | 456 +++++++++ .../global_objects/array/indexof/index.html | 209 ---- .../global_objects/array/indexof/index.md | 209 ++++ .../global_objects/array/isarray/index.html | 114 --- .../global_objects/array/isarray/index.md | 114 +++ .../reference/global_objects/array/join/index.html | 107 -- .../reference/global_objects/array/join/index.md | 107 ++ .../reference/global_objects/array/keys/index.html | 82 -- .../reference/global_objects/array/keys/index.md | 82 ++ .../global_objects/array/lastindexof/index.html | 162 --- .../global_objects/array/lastindexof/index.md | 162 +++ .../global_objects/array/length/index.html | 120 --- .../reference/global_objects/array/length/index.md | 120 +++ .../reference/global_objects/array/map/index.html | 210 ---- .../reference/global_objects/array/map/index.md | 210 ++++ .../reference/global_objects/array/of/index.html | 102 -- .../reference/global_objects/array/of/index.md | 102 ++ .../reference/global_objects/array/pop/index.html | 106 -- .../reference/global_objects/array/pop/index.md | 106 ++ .../reference/global_objects/array/push/index.html | 139 --- .../reference/global_objects/array/push/index.md | 139 +++ .../global_objects/array/reduce/index.html | 402 -------- .../reference/global_objects/array/reduce/index.md | 402 ++++++++ .../global_objects/array/reduceright/index.html | 279 ------ .../global_objects/array/reduceright/index.md | 279 ++++++ .../global_objects/array/reverse/index.html | 100 -- .../global_objects/array/reverse/index.md | 100 ++ .../global_objects/array/shift/index.html | 113 --- .../reference/global_objects/array/shift/index.md | 113 +++ .../global_objects/array/slice/index.html | 166 ---- .../reference/global_objects/array/slice/index.md | 166 ++++ .../reference/global_objects/array/some/index.html | 128 --- .../reference/global_objects/array/some/index.md | 128 +++ .../reference/global_objects/array/sort/index.html | 283 ------ .../reference/global_objects/array/sort/index.md | 283 ++++++ .../global_objects/array/splice/index.html | 132 --- .../reference/global_objects/array/splice/index.md | 132 +++ .../global_objects/array/tolocalestring/index.html | 185 ---- .../global_objects/array/tolocalestring/index.md | 185 ++++ .../global_objects/array/tosource/index.html | 67 -- .../global_objects/array/tosource/index.md | 67 ++ .../global_objects/array/tostring/index.html | 78 -- .../global_objects/array/tostring/index.md | 78 ++ .../global_objects/array/unshift/index.html | 117 --- .../global_objects/array/unshift/index.md | 117 +++ .../global_objects/array/values/index.html | 97 -- .../reference/global_objects/array/values/index.md | 97 ++ .../arraybuffer/@@species/index.html | 71 -- .../global_objects/arraybuffer/@@species/index.md | 71 ++ .../arraybuffer/bytelength/index.html | 68 -- .../global_objects/arraybuffer/bytelength/index.md | 68 ++ .../global_objects/arraybuffer/index.html | 142 --- .../reference/global_objects/arraybuffer/index.md | 142 +++ .../global_objects/arraybuffer/isview/index.html | 87 -- .../global_objects/arraybuffer/isview/index.md | 87 ++ .../global_objects/arraybuffer/slice/index.html | 82 -- .../global_objects/arraybuffer/slice/index.md | 82 ++ .../global_objects/asyncfunction/index.html | 118 --- .../global_objects/asyncfunction/index.md | 118 +++ .../global_objects/atomics/add/index.html | 81 -- .../reference/global_objects/atomics/add/index.md | 81 ++ .../global_objects/atomics/and/index.html | 127 --- .../reference/global_objects/atomics/and/index.md | 127 +++ .../atomics/compareexchange/index.html | 84 -- .../atomics/compareexchange/index.md | 84 ++ .../global_objects/atomics/exchange/index.html | 83 -- .../global_objects/atomics/exchange/index.md | 83 ++ .../reference/global_objects/atomics/index.html | 114 --- .../reference/global_objects/atomics/index.md | 114 +++ .../global_objects/atomics/islockfree/index.html | 71 -- .../global_objects/atomics/islockfree/index.md | 71 ++ .../global_objects/atomics/load/index.html | 79 -- .../reference/global_objects/atomics/load/index.md | 79 ++ .../global_objects/atomics/notify/index.html | 93 -- .../global_objects/atomics/notify/index.md | 93 ++ .../reference/global_objects/atomics/or/index.html | 127 --- .../reference/global_objects/atomics/or/index.md | 127 +++ .../global_objects/atomics/store/index.html | 87 -- .../global_objects/atomics/store/index.md | 87 ++ .../global_objects/atomics/sub/index.html | 83 -- .../reference/global_objects/atomics/sub/index.md | 83 ++ .../global_objects/atomics/wait/index.html | 95 -- .../reference/global_objects/atomics/wait/index.md | 95 ++ .../global_objects/atomics/xor/index.html | 127 --- .../reference/global_objects/atomics/xor/index.md | 127 +++ .../global_objects/bigint/asintn/index.html | 73 -- .../global_objects/bigint/asintn/index.md | 73 ++ .../global_objects/bigint/asuintn/index.html | 73 -- .../global_objects/bigint/asuintn/index.md | 73 ++ .../reference/global_objects/bigint/index.html | 279 ------ .../reference/global_objects/bigint/index.md | 279 ++++++ .../bigint/tolocalestring/index.html | 129 --- .../global_objects/bigint/tolocalestring/index.md | 129 +++ .../global_objects/bigint/tostring/index.html | 94 -- .../global_objects/bigint/tostring/index.md | 94 ++ .../global_objects/bigint/valueof/index.html | 59 -- .../global_objects/bigint/valueof/index.md | 59 ++ .../global_objects/bigint64array/index.html | 183 ---- .../global_objects/bigint64array/index.md | 183 ++++ .../global_objects/biguint64array/index.html | 183 ---- .../global_objects/biguint64array/index.md | 183 ++++ .../reference/global_objects/boolean/index.html | 163 --- .../reference/global_objects/boolean/index.md | 163 +++ .../global_objects/boolean/tosource/index.html | 56 -- .../global_objects/boolean/tosource/index.md | 56 ++ .../global_objects/boolean/tostring/index.html | 85 -- .../global_objects/boolean/tostring/index.md | 85 ++ .../global_objects/boolean/valueof/index.html | 81 -- .../global_objects/boolean/valueof/index.md | 81 ++ .../global_objects/dataview/buffer/index.html | 68 -- .../global_objects/dataview/buffer/index.md | 68 ++ .../global_objects/dataview/bytelength/index.html | 75 -- .../global_objects/dataview/bytelength/index.md | 75 ++ .../global_objects/dataview/byteoffset/index.html | 72 -- .../global_objects/dataview/byteoffset/index.md | 72 ++ .../global_objects/dataview/getbigint64/index.html | 85 -- .../global_objects/dataview/getbigint64/index.md | 85 ++ .../dataview/getbiguint64/index.html | 85 -- .../global_objects/dataview/getbiguint64/index.md | 85 ++ .../global_objects/dataview/getfloat32/index.html | 93 -- .../global_objects/dataview/getfloat32/index.md | 93 ++ .../global_objects/dataview/getfloat64/index.html | 93 -- .../global_objects/dataview/getfloat64/index.md | 93 ++ .../global_objects/dataview/getint16/index.html | 93 -- .../global_objects/dataview/getint16/index.md | 93 ++ .../global_objects/dataview/getint32/index.html | 93 -- .../global_objects/dataview/getint32/index.md | 93 ++ .../global_objects/dataview/getint8/index.html | 91 -- .../global_objects/dataview/getint8/index.md | 91 ++ .../global_objects/dataview/getuint16/index.html | 93 -- .../global_objects/dataview/getuint16/index.md | 93 ++ .../global_objects/dataview/getuint32/index.html | 93 -- .../global_objects/dataview/getuint32/index.md | 93 ++ .../global_objects/dataview/getuint8/index.html | 91 -- .../global_objects/dataview/getuint8/index.md | 91 ++ .../reference/global_objects/dataview/index.html | 163 --- .../reference/global_objects/dataview/index.md | 163 +++ .../global_objects/dataview/setbigint64/index.html | 81 -- .../global_objects/dataview/setbigint64/index.md | 81 ++ .../dataview/setbiguint64/index.html | 82 -- .../global_objects/dataview/setbiguint64/index.md | 82 ++ .../global_objects/dataview/setfloat32/index.html | 92 -- .../global_objects/dataview/setfloat32/index.md | 92 ++ .../global_objects/dataview/setfloat64/index.html | 92 -- .../global_objects/dataview/setfloat64/index.md | 92 ++ .../global_objects/dataview/setint16/index.html | 92 -- .../global_objects/dataview/setint16/index.md | 92 ++ .../global_objects/dataview/setint32/index.html | 92 -- .../global_objects/dataview/setint32/index.md | 92 ++ .../global_objects/dataview/setint8/index.html | 92 -- .../global_objects/dataview/setint8/index.md | 92 ++ .../global_objects/dataview/setuint16/index.html | 92 -- .../global_objects/dataview/setuint16/index.md | 92 ++ .../global_objects/dataview/setuint32/index.html | 92 -- .../global_objects/dataview/setuint32/index.md | 92 ++ .../global_objects/dataview/setuint8/index.html | 90 -- .../global_objects/dataview/setuint8/index.md | 90 ++ .../global_objects/date/@@toprimitive/index.html | 66 -- .../global_objects/date/@@toprimitive/index.md | 66 ++ .../global_objects/date/getdate/index.html | 85 -- .../reference/global_objects/date/getdate/index.md | 85 ++ .../global_objects/date/getday/index.html | 92 -- .../reference/global_objects/date/getday/index.md | 92 ++ .../global_objects/date/getfullyear/index.html | 81 -- .../global_objects/date/getfullyear/index.md | 81 ++ .../global_objects/date/gethours/index.html | 80 -- .../global_objects/date/gethours/index.md | 80 ++ .../global_objects/date/getmilliseconds/index.html | 78 -- .../global_objects/date/getmilliseconds/index.md | 78 ++ .../global_objects/date/getminutes/index.html | 80 -- .../global_objects/date/getminutes/index.md | 80 ++ .../global_objects/date/getmonth/index.html | 91 -- .../global_objects/date/getmonth/index.md | 91 ++ .../global_objects/date/getseconds/index.html | 80 -- .../global_objects/date/getseconds/index.md | 80 ++ .../global_objects/date/gettime/index.html | 119 --- .../reference/global_objects/date/gettime/index.md | 119 +++ .../date/gettimezoneoffset/index.html | 79 -- .../global_objects/date/gettimezoneoffset/index.md | 79 ++ .../global_objects/date/getutcdate/index.html | 79 -- .../global_objects/date/getutcdate/index.md | 79 ++ .../global_objects/date/getutcday/index.html | 79 -- .../global_objects/date/getutcday/index.md | 79 ++ .../global_objects/date/getutcfullyear/index.html | 77 -- .../global_objects/date/getutcfullyear/index.md | 77 ++ .../global_objects/date/getutchours/index.html | 78 -- .../global_objects/date/getutchours/index.md | 78 ++ .../date/getutcmilliseconds/index.html | 82 -- .../date/getutcmilliseconds/index.md | 82 ++ .../global_objects/date/getutcminutes/index.html | 78 -- .../global_objects/date/getutcminutes/index.md | 78 ++ .../global_objects/date/getutcmonth/index.html | 78 -- .../global_objects/date/getutcmonth/index.md | 78 ++ .../global_objects/date/getutcseconds/index.html | 78 -- .../global_objects/date/getutcseconds/index.md | 78 ++ .../global_objects/date/getyear/index.html | 126 --- .../reference/global_objects/date/getyear/index.md | 126 +++ .../reference/global_objects/date/index.html | 256 ----- .../reference/global_objects/date/index.md | 256 +++++ .../reference/global_objects/date/now/index.html | 103 -- .../reference/global_objects/date/now/index.md | 103 ++ .../reference/global_objects/date/parse/index.html | 195 ---- .../reference/global_objects/date/parse/index.md | 195 ++++ .../global_objects/date/setdate/index.html | 95 -- .../reference/global_objects/date/setdate/index.md | 95 ++ .../global_objects/date/setfullyear/index.html | 94 -- .../global_objects/date/setfullyear/index.md | 94 ++ .../global_objects/date/sethours/index.html | 100 -- .../global_objects/date/sethours/index.md | 100 ++ .../global_objects/date/setmilliseconds/index.html | 87 -- .../global_objects/date/setmilliseconds/index.md | 87 ++ .../global_objects/date/setminutes/index.html | 97 -- .../global_objects/date/setminutes/index.md | 97 ++ .../global_objects/date/setmonth/index.html | 104 -- .../global_objects/date/setmonth/index.md | 104 ++ .../global_objects/date/setseconds/index.html | 95 -- .../global_objects/date/setseconds/index.md | 95 ++ .../global_objects/date/settime/index.html | 88 -- .../reference/global_objects/date/settime/index.md | 88 ++ .../global_objects/date/setutcdate/index.html | 87 -- .../global_objects/date/setutcdate/index.md | 87 ++ .../global_objects/date/setutcfullyear/index.html | 93 -- .../global_objects/date/setutcfullyear/index.md | 93 ++ .../global_objects/date/setutchours/index.html | 95 -- .../global_objects/date/setutchours/index.md | 95 ++ .../date/setutcmilliseconds/index.html | 87 -- .../date/setutcmilliseconds/index.md | 87 ++ .../global_objects/date/setutcminutes/index.html | 93 -- .../global_objects/date/setutcminutes/index.md | 93 ++ .../global_objects/date/setutcmonth/index.html | 91 -- .../global_objects/date/setutcmonth/index.md | 91 ++ .../global_objects/date/setutcseconds/index.html | 91 -- .../global_objects/date/setutcseconds/index.md | 91 ++ .../global_objects/date/setyear/index.html | 93 -- .../reference/global_objects/date/setyear/index.md | 93 ++ .../global_objects/date/todatestring/index.html | 91 -- .../global_objects/date/todatestring/index.md | 91 ++ .../global_objects/date/togmtstring/index.html | 84 -- .../global_objects/date/togmtstring/index.md | 84 ++ .../global_objects/date/toisostring/index.html | 104 -- .../global_objects/date/toisostring/index.md | 104 ++ .../global_objects/date/tojson/index.html | 78 -- .../reference/global_objects/date/tojson/index.md | 78 ++ .../date/tolocaledatestring/index.html | 183 ---- .../date/tolocaledatestring/index.md | 183 ++++ .../global_objects/date/tolocalestring/index.html | 201 ---- .../global_objects/date/tolocalestring/index.md | 201 ++++ .../date/tolocaletimestring/index.html | 175 ---- .../date/tolocaletimestring/index.md | 175 ++++ .../global_objects/date/tosource/index.html | 56 -- .../global_objects/date/tosource/index.md | 56 ++ .../global_objects/date/tostring/index.html | 132 --- .../global_objects/date/tostring/index.md | 132 +++ .../global_objects/date/totimestring/index.html | 85 -- .../global_objects/date/totimestring/index.md | 85 ++ .../global_objects/date/toutcstring/index.html | 89 -- .../global_objects/date/toutcstring/index.md | 89 ++ .../reference/global_objects/date/utc/index.html | 134 --- .../reference/global_objects/date/utc/index.md | 134 +++ .../global_objects/date/valueof/index.html | 84 -- .../reference/global_objects/date/valueof/index.md | 84 ++ .../reference/global_objects/decodeuri/index.html | 100 -- .../reference/global_objects/decodeuri/index.md | 100 ++ .../global_objects/decodeuricomponent/index.html | 89 -- .../global_objects/decodeuricomponent/index.md | 89 ++ .../reference/global_objects/encodeuri/index.html | 121 --- .../reference/global_objects/encodeuri/index.md | 121 +++ .../global_objects/encodeuricomponent/index.html | 160 --- .../global_objects/encodeuricomponent/index.md | 160 +++ .../global_objects/error/columnnumber/index.html | 40 - .../global_objects/error/columnnumber/index.md | 40 + .../global_objects/error/filename/index.html | 45 - .../global_objects/error/filename/index.md | 45 + .../reference/global_objects/error/index.html | 246 ----- .../reference/global_objects/error/index.md | 246 +++++ .../global_objects/error/linenumber/index.html | 52 - .../global_objects/error/linenumber/index.md | 52 + .../global_objects/error/message/index.html | 73 -- .../global_objects/error/message/index.md | 73 ++ .../reference/global_objects/error/name/index.html | 73 -- .../reference/global_objects/error/name/index.md | 73 ++ .../global_objects/error/stack/index.html | 121 --- .../reference/global_objects/error/stack/index.md | 121 +++ .../global_objects/error/tosource/index.html | 52 - .../global_objects/error/tosource/index.md | 52 + .../global_objects/error/tostring/index.html | 109 -- .../global_objects/error/tostring/index.md | 109 ++ .../reference/global_objects/escape/index.html | 96 -- .../reference/global_objects/escape/index.md | 96 ++ .../reference/global_objects/eval/index.html | 278 ------ .../reference/global_objects/eval/index.md | 278 ++++++ .../reference/global_objects/evalerror/index.html | 115 --- .../reference/global_objects/evalerror/index.md | 115 +++ .../global_objects/float32array/index.html | 204 ---- .../reference/global_objects/float32array/index.md | 204 ++++ .../global_objects/float64array/index.html | 203 ---- .../reference/global_objects/float64array/index.md | 203 ++++ .../global_objects/function/apply/index.html | 208 ---- .../global_objects/function/apply/index.md | 208 ++++ .../global_objects/function/arguments/index.html | 90 -- .../global_objects/function/arguments/index.md | 90 ++ .../global_objects/function/bind/index.html | 247 ----- .../global_objects/function/bind/index.md | 247 +++++ .../global_objects/function/call/index.html | 174 ---- .../global_objects/function/call/index.md | 174 ++++ .../global_objects/function/caller/index.html | 82 -- .../global_objects/function/caller/index.md | 82 ++ .../global_objects/function/displayname/index.html | 80 -- .../global_objects/function/displayname/index.md | 80 ++ .../reference/global_objects/function/index.html | 150 --- .../reference/global_objects/function/index.md | 150 +++ .../global_objects/function/length/index.html | 88 -- .../global_objects/function/length/index.md | 88 ++ .../global_objects/function/name/index.html | 200 ---- .../global_objects/function/name/index.md | 200 ++++ .../global_objects/function/tosource/index.html | 66 -- .../global_objects/function/tosource/index.md | 66 ++ .../global_objects/function/tostring/index.html | 95 -- .../global_objects/function/tostring/index.md | 95 ++ .../reference/global_objects/generator/index.html | 134 --- .../reference/global_objects/generator/index.md | 134 +++ .../global_objects/generator/next/index.html | 113 --- .../global_objects/generator/next/index.md | 113 +++ .../global_objects/generator/return/index.html | 101 -- .../global_objects/generator/return/index.md | 101 ++ .../global_objects/generator/throw/index.html | 98 -- .../global_objects/generator/throw/index.md | 98 ++ .../global_objects/generatorfunction/index.html | 112 --- .../global_objects/generatorfunction/index.md | 112 +++ .../reference/global_objects/globalthis/index.html | 84 -- .../reference/global_objects/globalthis/index.md | 84 ++ .../javascript/reference/global_objects/index.html | 186 ---- .../javascript/reference/global_objects/index.md | 186 ++++ .../reference/global_objects/infinity/index.html | 80 -- .../reference/global_objects/infinity/index.md | 80 ++ .../reference/global_objects/int16array/index.html | 204 ---- .../reference/global_objects/int16array/index.md | 204 ++++ .../reference/global_objects/int32array/index.html | 204 ---- .../reference/global_objects/int32array/index.md | 204 ++++ .../reference/global_objects/int8array/index.html | 205 ---- .../reference/global_objects/int8array/index.md | 205 ++++ .../global_objects/internalerror/index.html | 78 -- .../global_objects/internalerror/index.md | 78 ++ .../intl/collator/compare/index.html | 98 -- .../global_objects/intl/collator/compare/index.md | 98 ++ .../global_objects/intl/collator/index.html | 175 ---- .../global_objects/intl/collator/index.md | 175 ++++ .../intl/collator/resolvedoptions/index.html | 92 -- .../intl/collator/resolvedoptions/index.md | 92 ++ .../intl/collator/supportedlocalesof/index.html | 95 -- .../intl/collator/supportedlocalesof/index.md | 95 ++ .../intl/datetimeformat/format/index.html | 123 --- .../intl/datetimeformat/format/index.md | 123 +++ .../intl/datetimeformat/formatrange/index.html | 81 -- .../intl/datetimeformat/formatrange/index.md | 81 ++ .../datetimeformat/formatrangetoparts/index.html | 74 -- .../datetimeformat/formatrangetoparts/index.md | 74 ++ .../intl/datetimeformat/formattoparts/index.html | 165 ---- .../intl/datetimeformat/formattoparts/index.md | 165 ++++ .../global_objects/intl/datetimeformat/index.html | 294 ------ .../global_objects/intl/datetimeformat/index.md | 294 ++++++ .../intl/datetimeformat/resolvedoptions/index.html | 73 -- .../intl/datetimeformat/resolvedoptions/index.md | 73 ++ .../datetimeformat/supportedlocalesof/index.html | 95 -- .../datetimeformat/supportedlocalesof/index.md | 95 ++ .../intl/displaynames/displaynames/index.html | 104 -- .../intl/displaynames/displaynames/index.md | 104 ++ .../global_objects/intl/displaynames/index.html | 144 --- .../global_objects/intl/displaynames/index.md | 144 +++ .../intl/getcanonicallocales/index.html | 70 -- .../intl/getcanonicallocales/index.md | 70 ++ .../reference/global_objects/intl/index.html | 162 --- .../reference/global_objects/intl/index.md | 162 +++ .../intl/listformat/format/index.html | 67 -- .../global_objects/intl/listformat/format/index.md | 67 ++ .../intl/listformat/formattoparts/index.html | 89 -- .../intl/listformat/formattoparts/index.md | 89 ++ .../global_objects/intl/listformat/index.html | 152 --- .../global_objects/intl/listformat/index.md | 152 +++ .../intl/listformat/resolvedoptions/index.html | 81 -- .../intl/listformat/resolvedoptions/index.md | 81 ++ .../intl/listformat/supportedlocalesof/index.html | 87 -- .../intl/listformat/supportedlocalesof/index.md | 87 ++ .../global_objects/intl/locale/basename/index.html | 74 -- .../global_objects/intl/locale/basename/index.md | 74 ++ .../global_objects/intl/locale/calendar/index.html | 157 --- .../global_objects/intl/locale/calendar/index.md | 157 +++ .../intl/locale/casefirst/index.html | 93 -- .../global_objects/intl/locale/casefirst/index.md | 93 ++ .../intl/locale/collation/index.html | 166 ---- .../global_objects/intl/locale/collation/index.md | 166 ++++ .../intl/locale/hourcycle/index.html | 94 -- .../global_objects/intl/locale/hourcycle/index.md | 94 ++ .../global_objects/intl/locale/index.html | 71 -- .../reference/global_objects/intl/locale/index.md | 71 ++ .../global_objects/intl/locale/language/index.html | 68 -- .../global_objects/intl/locale/language/index.md | 68 ++ .../global_objects/intl/locale/maximize/index.html | 75 -- .../global_objects/intl/locale/maximize/index.md | 75 ++ .../global_objects/intl/locale/minimize/index.html | 77 -- .../global_objects/intl/locale/minimize/index.md | 77 ++ .../intl/locale/numberingsystem/index.html | 424 -------- .../intl/locale/numberingsystem/index.md | 424 ++++++++ .../global_objects/intl/locale/numeric/index.html | 68 -- .../global_objects/intl/locale/numeric/index.md | 68 ++ .../global_objects/intl/locale/region/index.html | 70 -- .../global_objects/intl/locale/region/index.md | 70 ++ .../global_objects/intl/locale/script/index.html | 67 -- .../global_objects/intl/locale/script/index.md | 67 ++ .../global_objects/intl/locale/tostring/index.html | 66 -- .../global_objects/intl/locale/tostring/index.md | 66 ++ .../intl/numberformat/format/index.html | 94 -- .../intl/numberformat/format/index.md | 94 ++ .../intl/numberformat/formattoparts/index.html | 148 --- .../intl/numberformat/formattoparts/index.md | 148 +++ .../global_objects/intl/numberformat/index.html | 198 ---- .../global_objects/intl/numberformat/index.md | 198 ++++ .../intl/numberformat/resolvedoptions/index.html | 104 -- .../intl/numberformat/resolvedoptions/index.md | 104 ++ .../numberformat/supportedlocalesof/index.html | 95 -- .../intl/numberformat/supportedlocalesof/index.md | 95 ++ .../global_objects/intl/pluralrules/index.html | 157 --- .../global_objects/intl/pluralrules/index.md | 157 +++ .../intl/pluralrules/resolvedoptions/index.html | 89 -- .../intl/pluralrules/resolvedoptions/index.md | 89 ++ .../intl/pluralrules/select/index.html | 76 -- .../intl/pluralrules/select/index.md | 76 ++ .../intl/pluralrules/supportedlocalesof/index.html | 81 -- .../intl/pluralrules/supportedlocalesof/index.md | 81 ++ .../intl/relativetimeformat/format/index.html | 97 -- .../intl/relativetimeformat/format/index.md | 97 ++ .../relativetimeformat/formattoparts/index.html | 80 -- .../intl/relativetimeformat/formattoparts/index.md | 80 ++ .../intl/relativetimeformat/index.html | 154 --- .../intl/relativetimeformat/index.md | 154 +++ .../relativetimeformat/resolvedoptions/index.html | 98 -- .../relativetimeformat/resolvedoptions/index.md | 98 ++ .../supportedlocalesof/index.html | 85 -- .../relativetimeformat/supportedlocalesof/index.md | 85 ++ .../reference/global_objects/isfinite/index.html | 98 -- .../reference/global_objects/isfinite/index.md | 98 ++ .../reference/global_objects/isnan/index.html | 154 --- .../reference/global_objects/isnan/index.md | 154 +++ .../reference/global_objects/json/index.html | 150 --- .../reference/global_objects/json/index.md | 150 +++ .../reference/global_objects/json/parse/index.html | 128 --- .../reference/global_objects/json/parse/index.md | 128 +++ .../global_objects/json/stringify/index.html | 367 ------- .../global_objects/json/stringify/index.md | 367 +++++++ .../global_objects/map/@@iterator/index.html | 89 -- .../global_objects/map/@@iterator/index.md | 89 ++ .../global_objects/map/@@species/index.html | 71 -- .../global_objects/map/@@species/index.md | 71 ++ .../global_objects/map/@@tostringtag/index.html | 54 - .../global_objects/map/@@tostringtag/index.md | 54 + .../reference/global_objects/map/clear/index.html | 75 -- .../reference/global_objects/map/clear/index.md | 75 ++ .../reference/global_objects/map/delete/index.html | 74 -- .../reference/global_objects/map/delete/index.md | 74 ++ .../global_objects/map/entries/index.html | 78 -- .../reference/global_objects/map/entries/index.md | 78 ++ .../global_objects/map/foreach/index.html | 102 -- .../reference/global_objects/map/foreach/index.md | 102 ++ .../reference/global_objects/map/get/index.html | 76 -- .../reference/global_objects/map/get/index.md | 76 ++ .../reference/global_objects/map/has/index.html | 76 -- .../reference/global_objects/map/has/index.md | 76 ++ .../reference/global_objects/map/index.html | 276 ------ .../reference/global_objects/map/index.md | 276 ++++++ .../reference/global_objects/map/keys/index.html | 75 -- .../reference/global_objects/map/keys/index.md | 75 ++ .../reference/global_objects/map/set/index.html | 93 -- .../reference/global_objects/map/set/index.md | 93 ++ .../reference/global_objects/map/size/index.html | 65 -- .../reference/global_objects/map/size/index.md | 65 ++ .../reference/global_objects/map/values/index.html | 75 -- .../reference/global_objects/map/values/index.md | 75 ++ .../reference/global_objects/math/abs/index.html | 100 -- .../reference/global_objects/math/abs/index.md | 100 ++ .../reference/global_objects/math/acos/index.html | 100 -- .../reference/global_objects/math/acos/index.md | 100 ++ .../reference/global_objects/math/acosh/index.html | 97 -- .../reference/global_objects/math/acosh/index.md | 97 ++ .../reference/global_objects/math/asin/index.html | 99 -- .../reference/global_objects/math/asin/index.md | 99 ++ .../reference/global_objects/math/asinh/index.html | 88 -- .../reference/global_objects/math/asinh/index.md | 88 ++ .../reference/global_objects/math/atan/index.html | 102 -- .../reference/global_objects/math/atan/index.md | 102 ++ .../reference/global_objects/math/atan2/index.html | 110 --- .../reference/global_objects/math/atan2/index.md | 110 +++ .../reference/global_objects/math/atanh/index.html | 99 -- .../reference/global_objects/math/atanh/index.md | 99 ++ .../reference/global_objects/math/cbrt/index.html | 88 -- .../reference/global_objects/math/cbrt/index.md | 88 ++ .../reference/global_objects/math/ceil/index.html | 174 ---- .../reference/global_objects/math/ceil/index.md | 174 ++++ .../reference/global_objects/math/clz32/index.html | 92 -- .../reference/global_objects/math/clz32/index.md | 92 ++ .../reference/global_objects/math/cos/index.html | 95 -- .../reference/global_objects/math/cos/index.md | 95 ++ .../reference/global_objects/math/cosh/index.html | 103 -- .../reference/global_objects/math/cosh/index.md | 103 ++ .../reference/global_objects/math/e/index.html | 82 -- .../reference/global_objects/math/e/index.md | 82 ++ .../reference/global_objects/math/exp/index.html | 93 -- .../reference/global_objects/math/exp/index.md | 93 ++ .../reference/global_objects/math/expm1/index.html | 91 -- .../reference/global_objects/math/expm1/index.md | 91 ++ .../reference/global_objects/math/floor/index.html | 97 -- .../reference/global_objects/math/floor/index.md | 97 ++ .../global_objects/math/fround/index.html | 86 -- .../reference/global_objects/math/fround/index.md | 86 ++ .../reference/global_objects/math/hypot/index.html | 126 --- .../reference/global_objects/math/hypot/index.md | 126 +++ .../reference/global_objects/math/imul/index.html | 90 -- .../reference/global_objects/math/imul/index.md | 90 ++ .../reference/global_objects/math/index.html | 170 ---- .../reference/global_objects/math/index.md | 170 ++++ .../reference/global_objects/math/ln10/index.html | 82 -- .../reference/global_objects/math/ln10/index.md | 82 ++ .../reference/global_objects/math/ln2/index.html | 82 -- .../reference/global_objects/math/ln2/index.md | 82 ++ .../reference/global_objects/math/log/index.html | 104 -- .../reference/global_objects/math/log/index.md | 104 ++ .../reference/global_objects/math/log10/index.html | 97 -- .../reference/global_objects/math/log10/index.md | 97 ++ .../global_objects/math/log10e/index.html | 82 -- .../reference/global_objects/math/log10e/index.md | 82 ++ .../reference/global_objects/math/log1p/index.html | 96 -- .../reference/global_objects/math/log1p/index.md | 96 ++ .../reference/global_objects/math/log2/index.html | 89 -- .../reference/global_objects/math/log2/index.md | 89 ++ .../reference/global_objects/math/log2e/index.html | 82 -- .../reference/global_objects/math/log2e/index.md | 82 ++ .../reference/global_objects/math/max/index.html | 112 --- .../reference/global_objects/math/max/index.md | 112 +++ .../reference/global_objects/math/min/index.html | 108 -- .../reference/global_objects/math/min/index.md | 108 ++ .../reference/global_objects/math/pi/index.html | 80 -- .../reference/global_objects/math/pi/index.md | 80 ++ .../reference/global_objects/math/pow/index.html | 103 -- .../reference/global_objects/math/pow/index.md | 103 ++ .../global_objects/math/random/index.html | 113 --- .../reference/global_objects/math/random/index.md | 113 +++ .../reference/global_objects/math/round/index.html | 94 -- .../reference/global_objects/math/round/index.md | 94 ++ .../reference/global_objects/math/sign/index.html | 89 -- .../reference/global_objects/math/sign/index.md | 89 ++ .../reference/global_objects/math/sin/index.html | 91 -- .../reference/global_objects/math/sin/index.md | 91 ++ .../reference/global_objects/math/sinh/index.html | 95 -- .../reference/global_objects/math/sinh/index.md | 95 ++ .../reference/global_objects/math/sqrt/index.html | 94 -- .../reference/global_objects/math/sqrt/index.md | 94 ++ .../global_objects/math/sqrt1_2/index.html | 79 -- .../reference/global_objects/math/sqrt1_2/index.md | 79 ++ .../reference/global_objects/math/sqrt2/index.html | 79 -- .../reference/global_objects/math/sqrt2/index.md | 79 ++ .../reference/global_objects/math/tan/index.html | 98 -- .../reference/global_objects/math/tan/index.md | 98 ++ .../reference/global_objects/math/tanh/index.html | 105 -- .../reference/global_objects/math/tanh/index.md | 105 ++ .../reference/global_objects/math/trunc/index.html | 94 -- .../reference/global_objects/math/trunc/index.md | 94 ++ .../reference/global_objects/nan/index.html | 89 -- .../reference/global_objects/nan/index.md | 89 ++ .../reference/global_objects/null/index.html | 88 -- .../reference/global_objects/null/index.md | 88 ++ .../global_objects/number/epsilon/index.html | 75 -- .../global_objects/number/epsilon/index.md | 75 ++ .../reference/global_objects/number/index.html | 202 ---- .../reference/global_objects/number/index.md | 202 ++++ .../global_objects/number/isfinite/index.html | 112 --- .../global_objects/number/isfinite/index.md | 112 +++ .../global_objects/number/isinteger/index.html | 99 -- .../global_objects/number/isinteger/index.md | 99 ++ .../global_objects/number/isnan/index.html | 101 -- .../reference/global_objects/number/isnan/index.md | 101 ++ .../global_objects/number/issafeinteger/index.html | 99 -- .../global_objects/number/issafeinteger/index.md | 99 ++ .../number/max_safe_integer/index.html | 73 -- .../number/max_safe_integer/index.md | 73 ++ .../global_objects/number/max_value/index.html | 79 -- .../global_objects/number/max_value/index.md | 79 ++ .../number/min_safe_integer/index.html | 71 -- .../number/min_safe_integer/index.md | 71 ++ .../global_objects/number/min_value/index.html | 82 -- .../global_objects/number/min_value/index.md | 82 ++ .../reference/global_objects/number/nan/index.html | 63 -- .../reference/global_objects/number/nan/index.md | 63 ++ .../number/negative_infinity/index.html | 98 -- .../number/negative_infinity/index.md | 98 ++ .../global_objects/number/parsefloat/index.html | 81 -- .../global_objects/number/parsefloat/index.md | 81 ++ .../global_objects/number/parseint/index.html | 81 -- .../global_objects/number/parseint/index.md | 81 ++ .../number/positive_infinity/index.html | 99 -- .../number/positive_infinity/index.md | 99 ++ .../global_objects/number/toexponential/index.html | 106 -- .../global_objects/number/toexponential/index.md | 106 ++ .../global_objects/number/tofixed/index.html | 110 --- .../global_objects/number/tofixed/index.md | 110 +++ .../number/tolocalestring/index.html | 196 ---- .../global_objects/number/tolocalestring/index.md | 196 ++++ .../global_objects/number/toprecision/index.html | 104 -- .../global_objects/number/toprecision/index.md | 104 ++ .../global_objects/number/tosource/index.html | 56 -- .../global_objects/number/tosource/index.md | 56 ++ .../global_objects/number/tostring/index.html | 117 --- .../global_objects/number/tostring/index.md | 117 +++ .../global_objects/number/valueof/index.html | 83 -- .../global_objects/number/valueof/index.md | 83 ++ .../object/__definegetter__/index.html | 100 -- .../object/__definegetter__/index.md | 100 ++ .../object/__definesetter__/index.html | 112 --- .../object/__definesetter__/index.md | 112 +++ .../object/__lookupgetter__/index.html | 88 -- .../object/__lookupgetter__/index.md | 88 ++ .../object/__lookupsetter__/index.html | 88 -- .../object/__lookupsetter__/index.md | 88 ++ .../global_objects/object/assign/index.html | 214 ---- .../global_objects/object/assign/index.md | 214 ++++ .../global_objects/object/constructor/index.html | 230 ----- .../global_objects/object/constructor/index.md | 230 +++++ .../global_objects/object/create/index.html | 215 ---- .../global_objects/object/create/index.md | 215 ++++ .../object/defineproperties/index.html | 195 ---- .../object/defineproperties/index.md | 195 ++++ .../object/defineproperty/index.html | 418 -------- .../global_objects/object/defineproperty/index.md | 418 ++++++++ .../global_objects/object/entries/index.html | 157 --- .../global_objects/object/entries/index.md | 157 +++ .../global_objects/object/freeze/index.html | 252 ----- .../global_objects/object/freeze/index.md | 252 +++++ .../global_objects/object/fromentries/index.html | 105 -- .../global_objects/object/fromentries/index.md | 105 ++ .../object/getownpropertydescriptor/index.html | 146 --- .../object/getownpropertydescriptor/index.md | 146 +++ .../object/getownpropertydescriptors/index.html | 117 --- .../object/getownpropertydescriptors/index.md | 117 +++ .../object/getownpropertynames/index.html | 177 ---- .../object/getownpropertynames/index.md | 177 ++++ .../object/getownpropertysymbols/index.html | 87 -- .../object/getownpropertysymbols/index.md | 87 ++ .../object/getprototypeof/index.html | 96 -- .../global_objects/object/getprototypeof/index.md | 96 ++ .../object/hasownproperty/index.html | 155 --- .../global_objects/object/hasownproperty/index.md | 155 +++ .../reference/global_objects/object/index.html | 181 ---- .../reference/global_objects/object/index.md | 181 ++++ .../reference/global_objects/object/is/index.html | 127 --- .../reference/global_objects/object/is/index.md | 127 +++ .../global_objects/object/isextensible/index.html | 109 -- .../global_objects/object/isextensible/index.md | 109 ++ .../global_objects/object/isfrozen/index.html | 172 ---- .../global_objects/object/isfrozen/index.md | 172 ++++ .../global_objects/object/isprototypeof/index.html | 121 --- .../global_objects/object/isprototypeof/index.md | 121 +++ .../global_objects/object/issealed/index.html | 132 --- .../global_objects/object/issealed/index.md | 132 +++ .../global_objects/object/keys/index.html | 124 --- .../reference/global_objects/object/keys/index.md | 124 +++ .../object/preventextensions/index.html | 136 --- .../object/preventextensions/index.md | 136 +++ .../object/propertyisenumerable/index.html | 145 --- .../object/propertyisenumerable/index.md | 145 +++ .../global_objects/object/proto/index.html | 161 --- .../reference/global_objects/object/proto/index.md | 161 +++ .../global_objects/object/seal/index.html | 150 --- .../reference/global_objects/object/seal/index.md | 150 +++ .../object/setprototypeof/index.html | 207 ---- .../global_objects/object/setprototypeof/index.md | 207 ++++ .../object/tolocalestring/index.html | 82 -- .../global_objects/object/tolocalestring/index.md | 82 ++ .../global_objects/object/tosource/index.html | 129 --- .../global_objects/object/tosource/index.md | 129 +++ .../global_objects/object/tostring/index.html | 133 --- .../global_objects/object/tostring/index.md | 133 +++ .../global_objects/object/valueof/index.html | 117 --- .../global_objects/object/valueof/index.md | 117 +++ .../global_objects/object/values/index.html | 104 -- .../global_objects/object/values/index.md | 104 ++ .../reference/global_objects/parsefloat/index.html | 147 --- .../reference/global_objects/parsefloat/index.md | 147 +++ .../reference/global_objects/parseint/index.html | 203 ---- .../reference/global_objects/parseint/index.md | 203 ++++ .../global_objects/promise/all/index.html | 223 ----- .../reference/global_objects/promise/all/index.md | 223 +++++ .../global_objects/promise/allsettled/index.html | 65 -- .../global_objects/promise/allsettled/index.md | 65 ++ .../global_objects/promise/any/index.html | 146 --- .../reference/global_objects/promise/any/index.md | 146 +++ .../global_objects/promise/catch/index.html | 161 --- .../global_objects/promise/catch/index.md | 161 +++ .../global_objects/promise/finally/index.html | 105 -- .../global_objects/promise/finally/index.md | 105 ++ .../reference/global_objects/promise/index.html | 234 ----- .../reference/global_objects/promise/index.md | 234 +++++ .../global_objects/promise/race/index.html | 188 ---- .../reference/global_objects/promise/race/index.md | 188 ++++ .../global_objects/promise/reject/index.html | 76 -- .../global_objects/promise/reject/index.md | 76 ++ .../global_objects/promise/resolve/index.html | 153 --- .../global_objects/promise/resolve/index.md | 153 +++ .../global_objects/promise/then/index.html | 264 ----- .../reference/global_objects/promise/then/index.md | 264 +++++ .../reference/global_objects/proxy/index.html | 406 -------- .../reference/global_objects/proxy/index.md | 406 ++++++++ .../global_objects/proxy/proxy/apply/index.html | 115 --- .../global_objects/proxy/proxy/apply/index.md | 115 +++ .../proxy/proxy/construct/index.html | 134 --- .../global_objects/proxy/proxy/construct/index.md | 134 +++ .../proxy/proxy/defineproperty/index.html | 141 --- .../proxy/proxy/defineproperty/index.md | 141 +++ .../proxy/proxy/deleteproperty/index.html | 110 --- .../proxy/proxy/deleteproperty/index.md | 110 +++ .../global_objects/proxy/proxy/get/index.html | 133 --- .../global_objects/proxy/proxy/get/index.md | 133 +++ .../proxy/getownpropertydescriptor/index.html | 129 --- .../proxy/proxy/getownpropertydescriptor/index.md | 129 +++ .../proxy/proxy/getprototypeof/index.html | 151 --- .../proxy/proxy/getprototypeof/index.md | 151 +++ .../global_objects/proxy/proxy/has/index.html | 127 --- .../global_objects/proxy/proxy/has/index.md | 127 +++ .../global_objects/proxy/proxy/index.html | 82 -- .../reference/global_objects/proxy/proxy/index.md | 82 ++ .../proxy/proxy/isextensible/index.html | 120 --- .../proxy/proxy/isextensible/index.md | 120 +++ .../global_objects/proxy/proxy/ownkeys/index.html | 133 --- .../global_objects/proxy/proxy/ownkeys/index.md | 133 +++ .../proxy/proxy/preventextensions/index.html | 121 --- .../proxy/proxy/preventextensions/index.md | 121 +++ .../global_objects/proxy/proxy/set/index.html | 121 --- .../global_objects/proxy/proxy/set/index.md | 121 +++ .../proxy/proxy/setprototypeof/index.html | 133 --- .../proxy/proxy/setprototypeof/index.md | 133 +++ .../global_objects/proxy/revocable/index.html | 91 -- .../global_objects/proxy/revocable/index.md | 91 ++ .../reference/global_objects/rangeerror/index.html | 141 --- .../reference/global_objects/rangeerror/index.md | 141 +++ .../global_objects/referenceerror/index.html | 128 --- .../global_objects/referenceerror/index.md | 128 +++ .../global_objects/reflect/apply/index.html | 97 -- .../global_objects/reflect/apply/index.md | 97 ++ .../index.html | 101 -- .../comparing_reflect_and_object_methods/index.md | 101 ++ .../global_objects/reflect/construct/index.html | 160 --- .../global_objects/reflect/construct/index.md | 160 +++ .../reflect/defineproperty/index.html | 97 -- .../global_objects/reflect/defineproperty/index.md | 97 ++ .../reflect/deleteproperty/index.html | 93 -- .../global_objects/reflect/deleteproperty/index.md | 93 ++ .../global_objects/reflect/get/index.html | 95 -- .../reference/global_objects/reflect/get/index.md | 95 ++ .../reflect/getownpropertydescriptor/index.html | 100 -- .../reflect/getownpropertydescriptor/index.md | 100 ++ .../reflect/getprototypeof/index.html | 103 -- .../global_objects/reflect/getprototypeof/index.md | 103 ++ .../global_objects/reflect/has/index.html | 93 -- .../reference/global_objects/reflect/has/index.md | 93 ++ .../reference/global_objects/reflect/index.html | 84 -- .../reference/global_objects/reflect/index.md | 84 ++ .../global_objects/reflect/isextensible/index.html | 110 --- .../global_objects/reflect/isextensible/index.md | 110 +++ .../global_objects/reflect/ownkeys/index.html | 90 -- .../global_objects/reflect/ownkeys/index.md | 90 ++ .../reflect/preventextensions/index.html | 100 -- .../reflect/preventextensions/index.md | 100 ++ .../global_objects/reflect/set/index.html | 106 -- .../reference/global_objects/reflect/set/index.md | 106 ++ .../reflect/setprototypeof/index.html | 97 -- .../global_objects/reflect/setprototypeof/index.md | 97 ++ .../global_objects/regexp/@@match/index.html | 116 --- .../global_objects/regexp/@@match/index.md | 116 +++ .../global_objects/regexp/@@matchall/index.html | 106 -- .../global_objects/regexp/@@matchall/index.md | 106 ++ .../global_objects/regexp/@@replace/index.html | 121 --- .../global_objects/regexp/@@replace/index.md | 121 +++ .../global_objects/regexp/@@search/index.html | 115 --- .../global_objects/regexp/@@search/index.md | 115 +++ .../global_objects/regexp/@@species/index.html | 74 -- .../global_objects/regexp/@@species/index.md | 74 ++ .../global_objects/regexp/@@split/index.html | 115 --- .../global_objects/regexp/@@split/index.md | 115 +++ .../global_objects/regexp/compile/index.html | 86 -- .../global_objects/regexp/compile/index.md | 86 ++ .../global_objects/regexp/dotall/index.html | 49 - .../global_objects/regexp/dotall/index.md | 49 + .../global_objects/regexp/exec/index.html | 199 ---- .../reference/global_objects/regexp/exec/index.md | 199 ++++ .../global_objects/regexp/flags/index.html | 79 -- .../reference/global_objects/regexp/flags/index.md | 79 ++ .../global_objects/regexp/global/index.html | 89 -- .../global_objects/regexp/global/index.md | 89 ++ .../global_objects/regexp/ignorecase/index.html | 82 -- .../global_objects/regexp/ignorecase/index.md | 82 ++ .../reference/global_objects/regexp/index.html | 240 ----- .../reference/global_objects/regexp/index.md | 240 +++++ .../global_objects/regexp/input/index.html | 58 -- .../reference/global_objects/regexp/input/index.md | 58 ++ .../global_objects/regexp/lastindex/index.html | 103 -- .../global_objects/regexp/lastindex/index.md | 103 ++ .../global_objects/regexp/lastmatch/index.html | 57 -- .../global_objects/regexp/lastmatch/index.md | 57 ++ .../global_objects/regexp/lastparen/index.html | 56 -- .../global_objects/regexp/lastparen/index.md | 56 ++ .../global_objects/regexp/leftcontext/index.html | 55 -- .../global_objects/regexp/leftcontext/index.md | 55 ++ .../global_objects/regexp/multiline/index.html | 86 -- .../global_objects/regexp/multiline/index.md | 86 ++ .../reference/global_objects/regexp/n/index.html | 67 -- .../reference/global_objects/regexp/n/index.md | 67 ++ .../global_objects/regexp/rightcontext/index.html | 56 -- .../global_objects/regexp/rightcontext/index.md | 56 ++ .../global_objects/regexp/source/index.html | 81 -- .../global_objects/regexp/source/index.md | 81 ++ .../global_objects/regexp/sticky/index.html | 94 -- .../global_objects/regexp/sticky/index.md | 94 ++ .../global_objects/regexp/test/index.html | 135 --- .../reference/global_objects/regexp/test/index.md | 135 +++ .../global_objects/regexp/tosource/index.html | 56 -- .../global_objects/regexp/tosource/index.md | 56 ++ .../global_objects/regexp/tostring/index.html | 93 -- .../global_objects/regexp/tostring/index.md | 93 ++ .../global_objects/regexp/unicode/index.html | 73 -- .../global_objects/regexp/unicode/index.md | 73 ++ .../global_objects/set/@@iterator/index.html | 89 -- .../global_objects/set/@@iterator/index.md | 89 ++ .../global_objects/set/@@species/index.html | 71 -- .../global_objects/set/@@species/index.md | 71 ++ .../reference/global_objects/set/add/index.html | 78 -- .../reference/global_objects/set/add/index.md | 78 ++ .../reference/global_objects/set/clear/index.html | 74 -- .../reference/global_objects/set/clear/index.md | 74 ++ .../reference/global_objects/set/delete/index.html | 93 -- .../reference/global_objects/set/delete/index.md | 93 ++ .../global_objects/set/entries/index.html | 74 -- .../reference/global_objects/set/entries/index.md | 74 ++ .../global_objects/set/foreach/index.html | 111 --- .../reference/global_objects/set/foreach/index.md | 111 +++ .../reference/global_objects/set/has/index.html | 88 -- .../reference/global_objects/set/has/index.md | 88 ++ .../reference/global_objects/set/index.html | 246 ----- .../reference/global_objects/set/index.md | 246 +++++ .../reference/global_objects/set/size/index.html | 66 -- .../reference/global_objects/set/size/index.md | 66 ++ .../reference/global_objects/set/values/index.html | 75 -- .../reference/global_objects/set/values/index.md | 75 ++ .../sharedarraybuffer/bytelength/index.html | 59 -- .../sharedarraybuffer/bytelength/index.md | 59 ++ .../global_objects/sharedarraybuffer/index.html | 132 --- .../global_objects/sharedarraybuffer/index.md | 132 +++ .../sharedarraybuffer/slice/index.html | 89 -- .../sharedarraybuffer/slice/index.md | 89 ++ .../global_objects/string/@@iterator/index.html | 86 -- .../global_objects/string/@@iterator/index.md | 86 ++ .../global_objects/string/anchor/index.html | 85 -- .../global_objects/string/anchor/index.md | 85 ++ .../reference/global_objects/string/big/index.html | 80 -- .../reference/global_objects/string/big/index.md | 80 ++ .../global_objects/string/blink/index.html | 84 -- .../reference/global_objects/string/blink/index.md | 84 ++ .../global_objects/string/bold/index.html | 82 -- .../reference/global_objects/string/bold/index.md | 82 ++ .../global_objects/string/charat/index.html | 246 ----- .../global_objects/string/charat/index.md | 246 +++++ .../global_objects/string/charcodeat/index.html | 172 ---- .../global_objects/string/charcodeat/index.md | 172 ++++ .../global_objects/string/codepointat/index.html | 141 --- .../global_objects/string/codepointat/index.md | 141 +++ .../global_objects/string/concat/index.html | 103 -- .../global_objects/string/concat/index.md | 103 ++ .../global_objects/string/endswith/index.html | 100 -- .../global_objects/string/endswith/index.md | 100 ++ .../global_objects/string/fixed/index.html | 73 -- .../reference/global_objects/string/fixed/index.md | 73 ++ .../global_objects/string/fontcolor/index.html | 88 -- .../global_objects/string/fontcolor/index.md | 88 ++ .../global_objects/string/fontsize/index.html | 87 -- .../global_objects/string/fontsize/index.md | 87 ++ .../global_objects/string/fromcharcode/index.html | 114 --- .../global_objects/string/fromcharcode/index.md | 114 +++ .../global_objects/string/fromcodepoint/index.html | 108 -- .../global_objects/string/fromcodepoint/index.md | 108 ++ .../global_objects/string/includes/index.html | 126 --- .../global_objects/string/includes/index.md | 126 +++ .../reference/global_objects/string/index.html | 391 -------- .../reference/global_objects/string/index.md | 391 ++++++++ .../global_objects/string/indexof/index.html | 160 --- .../global_objects/string/indexof/index.md | 160 +++ .../global_objects/string/italics/index.html | 82 -- .../global_objects/string/italics/index.md | 82 ++ .../global_objects/string/lastindexof/index.html | 122 --- .../global_objects/string/lastindexof/index.md | 122 +++ .../global_objects/string/length/index.html | 98 -- .../global_objects/string/length/index.md | 98 ++ .../global_objects/string/link/index.html | 84 -- .../reference/global_objects/string/link/index.md | 84 ++ .../global_objects/string/localecompare/index.html | 182 ---- .../global_objects/string/localecompare/index.md | 182 ++++ .../global_objects/string/match/index.html | 154 --- .../reference/global_objects/string/match/index.md | 154 +++ .../global_objects/string/matchall/index.html | 119 --- .../global_objects/string/matchall/index.md | 119 +++ .../global_objects/string/normalize/index.html | 124 --- .../global_objects/string/normalize/index.md | 124 +++ .../global_objects/string/padend/index.html | 73 -- .../global_objects/string/padend/index.md | 73 ++ .../global_objects/string/padstart/index.html | 75 -- .../global_objects/string/padstart/index.md | 75 ++ .../reference/global_objects/string/raw/index.html | 113 --- .../reference/global_objects/string/raw/index.md | 113 +++ .../global_objects/string/repeat/index.html | 84 -- .../global_objects/string/repeat/index.md | 84 ++ .../global_objects/string/replace/index.html | 306 ------ .../global_objects/string/replace/index.md | 306 ++++++ .../global_objects/string/replaceall/index.html | 167 ---- .../global_objects/string/replaceall/index.md | 167 ++++ .../global_objects/string/search/index.html | 103 -- .../global_objects/string/search/index.md | 103 ++ .../global_objects/string/slice/index.html | 126 --- .../reference/global_objects/string/slice/index.md | 126 +++ .../global_objects/string/small/index.html | 79 -- .../reference/global_objects/string/small/index.md | 79 ++ .../global_objects/string/split/index.html | 212 ---- .../reference/global_objects/string/split/index.md | 212 ++++ .../global_objects/string/startswith/index.html | 84 -- .../global_objects/string/startswith/index.md | 84 ++ .../global_objects/string/strike/index.html | 82 -- .../global_objects/string/strike/index.md | 82 ++ .../reference/global_objects/string/sub/index.html | 75 -- .../reference/global_objects/string/sub/index.md | 75 ++ .../global_objects/string/substr/index.html | 136 --- .../global_objects/string/substr/index.md | 136 +++ .../global_objects/string/substring/index.html | 177 ---- .../global_objects/string/substring/index.md | 177 ++++ .../reference/global_objects/string/sup/index.html | 75 -- .../reference/global_objects/string/sup/index.md | 75 ++ .../string/tolocalelowercase/index.html | 106 -- .../string/tolocalelowercase/index.md | 106 ++ .../string/tolocaleuppercase/index.html | 107 -- .../string/tolocaleuppercase/index.md | 107 ++ .../global_objects/string/tolowercase/index.html | 78 -- .../global_objects/string/tolowercase/index.md | 78 ++ .../global_objects/string/tosource/index.html | 57 -- .../global_objects/string/tosource/index.md | 57 ++ .../global_objects/string/tostring/index.html | 81 -- .../global_objects/string/tostring/index.md | 81 ++ .../global_objects/string/touppercase/index.html | 104 -- .../global_objects/string/touppercase/index.md | 104 ++ .../global_objects/string/trim/index.html | 93 -- .../reference/global_objects/string/trim/index.md | 93 ++ .../global_objects/string/trimend/index.html | 79 -- .../global_objects/string/trimend/index.md | 79 ++ .../global_objects/string/trimstart/index.html | 79 -- .../global_objects/string/trimstart/index.md | 79 ++ .../global_objects/string/valueof/index.html | 80 -- .../global_objects/string/valueof/index.md | 80 ++ .../global_objects/symbol/@@toprimitive/index.html | 63 -- .../global_objects/symbol/@@toprimitive/index.md | 63 ++ .../global_objects/symbol/asynciterator/index.html | 79 -- .../global_objects/symbol/asynciterator/index.md | 79 ++ .../global_objects/symbol/description/index.html | 71 -- .../global_objects/symbol/description/index.md | 71 ++ .../reference/global_objects/symbol/for/index.html | 110 --- .../reference/global_objects/symbol/for/index.md | 110 +++ .../global_objects/symbol/hasinstance/index.html | 64 -- .../global_objects/symbol/hasinstance/index.md | 64 ++ .../reference/global_objects/symbol/index.html | 226 ----- .../reference/global_objects/symbol/index.md | 226 +++++ .../symbol/isconcatspreadable/index.html | 109 -- .../symbol/isconcatspreadable/index.md | 109 ++ .../global_objects/symbol/iterator/index.html | 121 --- .../global_objects/symbol/iterator/index.md | 121 +++ .../global_objects/symbol/keyfor/index.html | 77 -- .../global_objects/symbol/keyfor/index.md | 77 ++ .../global_objects/symbol/match/index.html | 78 -- .../reference/global_objects/symbol/match/index.md | 78 ++ .../global_objects/symbol/matchall/index.html | 64 -- .../global_objects/symbol/matchall/index.md | 64 ++ .../global_objects/symbol/replace/index.html | 58 -- .../global_objects/symbol/replace/index.md | 58 ++ .../global_objects/symbol/search/index.html | 58 -- .../global_objects/symbol/search/index.md | 58 ++ .../global_objects/symbol/species/index.html | 72 -- .../global_objects/symbol/species/index.md | 72 ++ .../global_objects/symbol/split/index.html | 58 -- .../reference/global_objects/symbol/split/index.md | 58 ++ .../global_objects/symbol/toprimitive/index.html | 87 -- .../global_objects/symbol/toprimitive/index.md | 87 ++ .../global_objects/symbol/tosource/index.html | 59 -- .../global_objects/symbol/tosource/index.md | 59 ++ .../global_objects/symbol/tostring/index.html | 79 -- .../global_objects/symbol/tostring/index.md | 79 ++ .../global_objects/symbol/tostringtag/index.html | 92 -- .../global_objects/symbol/tostringtag/index.md | 92 ++ .../global_objects/symbol/unscopables/index.html | 92 -- .../global_objects/symbol/unscopables/index.md | 92 ++ .../global_objects/symbol/valueof/index.html | 63 -- .../global_objects/symbol/valueof/index.md | 63 ++ .../global_objects/syntaxerror/index.html | 130 --- .../reference/global_objects/syntaxerror/index.md | 130 +++ .../typedarray/@@iterator/index.html | 85 -- .../global_objects/typedarray/@@iterator/index.md | 85 ++ .../global_objects/typedarray/@@species/index.html | 87 -- .../global_objects/typedarray/@@species/index.md | 87 ++ .../global_objects/typedarray/buffer/index.html | 65 -- .../global_objects/typedarray/buffer/index.md | 65 ++ .../typedarray/bytelength/index.html | 72 -- .../global_objects/typedarray/bytelength/index.md | 72 ++ .../typedarray/byteoffset/index.html | 67 -- .../global_objects/typedarray/byteoffset/index.md | 67 ++ .../typedarray/bytes_per_element/index.html | 79 -- .../typedarray/bytes_per_element/index.md | 79 ++ .../typedarray/copywithin/index.html | 84 -- .../global_objects/typedarray/copywithin/index.md | 84 ++ .../global_objects/typedarray/entries/index.html | 90 -- .../global_objects/typedarray/entries/index.md | 90 ++ .../global_objects/typedarray/every/index.html | 107 -- .../global_objects/typedarray/every/index.md | 107 ++ .../global_objects/typedarray/fill/index.html | 97 -- .../global_objects/typedarray/fill/index.md | 97 ++ .../global_objects/typedarray/filter/index.html | 108 -- .../global_objects/typedarray/filter/index.md | 108 ++ .../global_objects/typedarray/find/index.html | 111 --- .../global_objects/typedarray/find/index.md | 111 +++ .../global_objects/typedarray/findindex/index.html | 113 --- .../global_objects/typedarray/findindex/index.md | 113 +++ .../global_objects/typedarray/foreach/index.html | 113 --- .../global_objects/typedarray/foreach/index.md | 113 +++ .../global_objects/typedarray/from/index.html | 129 --- .../global_objects/typedarray/from/index.md | 129 +++ .../global_objects/typedarray/includes/index.html | 83 -- .../global_objects/typedarray/includes/index.md | 83 ++ .../reference/global_objects/typedarray/index.html | 283 ------ .../reference/global_objects/typedarray/index.md | 283 ++++++ .../global_objects/typedarray/indexof/index.html | 89 -- .../global_objects/typedarray/indexof/index.md | 89 ++ .../global_objects/typedarray/join/index.html | 89 -- .../global_objects/typedarray/join/index.md | 89 ++ .../global_objects/typedarray/keys/index.html | 91 -- .../global_objects/typedarray/keys/index.md | 91 ++ .../typedarray/lastindexof/index.html | 84 -- .../global_objects/typedarray/lastindexof/index.md | 84 ++ .../global_objects/typedarray/length/index.html | 72 -- .../global_objects/typedarray/length/index.md | 72 ++ .../global_objects/typedarray/map/index.html | 114 --- .../global_objects/typedarray/map/index.md | 114 +++ .../global_objects/typedarray/name/index.html | 74 -- .../global_objects/typedarray/name/index.md | 74 ++ .../global_objects/typedarray/of/index.html | 96 -- .../global_objects/typedarray/of/index.md | 96 ++ .../global_objects/typedarray/reduce/index.html | 95 -- .../global_objects/typedarray/reduce/index.md | 95 ++ .../typedarray/reduceright/index.html | 99 -- .../global_objects/typedarray/reduceright/index.md | 99 ++ .../global_objects/typedarray/reverse/index.html | 67 -- .../global_objects/typedarray/reverse/index.md | 67 ++ .../global_objects/typedarray/set/index.html | 94 -- .../global_objects/typedarray/set/index.md | 94 ++ .../global_objects/typedarray/slice/index.html | 101 -- .../global_objects/typedarray/slice/index.md | 101 ++ .../global_objects/typedarray/some/index.html | 122 --- .../global_objects/typedarray/some/index.md | 122 +++ .../global_objects/typedarray/sort/index.html | 89 -- .../global_objects/typedarray/sort/index.md | 89 ++ .../global_objects/typedarray/subarray/index.html | 93 -- .../global_objects/typedarray/subarray/index.md | 93 ++ .../typedarray/tolocalestring/index.html | 77 -- .../typedarray/tolocalestring/index.md | 77 ++ .../global_objects/typedarray/tostring/index.html | 76 -- .../global_objects/typedarray/tostring/index.md | 76 ++ .../global_objects/typedarray/values/index.html | 89 -- .../global_objects/typedarray/values/index.md | 89 ++ .../reference/global_objects/typeerror/index.html | 130 --- .../reference/global_objects/typeerror/index.md | 130 +++ .../global_objects/uint16array/index.html | 205 ---- .../reference/global_objects/uint16array/index.md | 205 ++++ .../global_objects/uint32array/index.html | 205 ---- .../reference/global_objects/uint32array/index.md | 205 ++++ .../reference/global_objects/uint8array/index.html | 205 ---- .../reference/global_objects/uint8array/index.md | 205 ++++ .../global_objects/uint8clampedarray/index.html | 207 ---- .../global_objects/uint8clampedarray/index.md | 207 ++++ .../reference/global_objects/undefined/index.html | 134 --- .../reference/global_objects/undefined/index.md | 134 +++ .../reference/global_objects/unescape/index.html | 91 -- .../reference/global_objects/unescape/index.md | 91 ++ .../reference/global_objects/uneval/index.html | 68 -- .../reference/global_objects/uneval/index.md | 68 ++ .../reference/global_objects/urierror/index.html | 134 --- .../reference/global_objects/urierror/index.md | 134 +++ .../global_objects/weakmap/clear/index.html | 51 - .../global_objects/weakmap/clear/index.md | 51 + .../global_objects/weakmap/delete/index.html | 75 -- .../global_objects/weakmap/delete/index.md | 75 ++ .../global_objects/weakmap/get/index.html | 76 -- .../reference/global_objects/weakmap/get/index.md | 76 ++ .../global_objects/weakmap/has/index.html | 76 -- .../reference/global_objects/weakmap/has/index.md | 76 ++ .../reference/global_objects/weakmap/index.html | 162 --- .../reference/global_objects/weakmap/index.md | 162 +++ .../global_objects/weakmap/set/index.html | 87 -- .../reference/global_objects/weakmap/set/index.md | 87 ++ .../global_objects/weakset/add/index.html | 81 -- .../reference/global_objects/weakset/add/index.md | 81 ++ .../global_objects/weakset/delete/index.html | 79 -- .../global_objects/weakset/delete/index.md | 79 ++ .../global_objects/weakset/has/index.html | 80 -- .../reference/global_objects/weakset/has/index.md | 80 ++ .../reference/global_objects/weakset/index.html | 145 --- .../reference/global_objects/weakset/index.md | 145 +++ .../global_objects/webassembly/compile/index.html | 86 -- .../global_objects/webassembly/compile/index.md | 86 ++ .../webassembly/compileerror/index.html | 117 --- .../webassembly/compileerror/index.md | 117 +++ .../webassembly/compilestreaming/index.html | 80 -- .../webassembly/compilestreaming/index.md | 80 ++ .../global_objects/webassembly/global/index.html | 116 --- .../global_objects/webassembly/global/index.md | 116 +++ .../global_objects/webassembly/index.html | 105 -- .../reference/global_objects/webassembly/index.md | 105 ++ .../webassembly/instance/exports/index.html | 68 -- .../webassembly/instance/exports/index.md | 68 ++ .../global_objects/webassembly/instance/index.html | 78 -- .../global_objects/webassembly/instance/index.md | 78 ++ .../webassembly/instantiate/index.html | 172 ---- .../webassembly/instantiate/index.md | 172 ++++ .../webassembly/instantiatestreaming/index.html | 87 -- .../webassembly/instantiatestreaming/index.md | 87 ++ .../webassembly/linkerror/index.html | 116 --- .../global_objects/webassembly/linkerror/index.md | 116 +++ .../webassembly/memory/buffer/index.html | 64 -- .../webassembly/memory/buffer/index.md | 64 ++ .../webassembly/memory/grow/index.html | 78 -- .../webassembly/memory/grow/index.md | 78 ++ .../global_objects/webassembly/memory/index.html | 120 --- .../global_objects/webassembly/memory/index.md | 120 +++ .../webassembly/module/customsections/index.html | 95 -- .../webassembly/module/customsections/index.md | 95 ++ .../webassembly/module/exports/index.html | 105 -- .../webassembly/module/exports/index.md | 105 ++ .../webassembly/module/imports/index.html | 81 -- .../webassembly/module/imports/index.md | 81 ++ .../global_objects/webassembly/module/index.html | 86 -- .../global_objects/webassembly/module/index.md | 86 ++ .../webassembly/runtimeerror/index.html | 116 --- .../webassembly/runtimeerror/index.md | 116 +++ .../webassembly/table/get/index.html | 84 -- .../global_objects/webassembly/table/get/index.md | 84 ++ .../webassembly/table/grow/index.html | 80 -- .../global_objects/webassembly/table/grow/index.md | 80 ++ .../global_objects/webassembly/table/index.html | 134 --- .../global_objects/webassembly/table/index.md | 134 +++ .../webassembly/table/length/index.html | 65 -- .../webassembly/table/length/index.md | 65 ++ .../webassembly/table/set/index.html | 102 -- .../global_objects/webassembly/table/set/index.md | 102 ++ .../global_objects/webassembly/validate/index.html | 78 -- .../global_objects/webassembly/validate/index.md | 78 ++ files/fr/web/javascript/reference/index.html | 50 - files/fr/web/javascript/reference/index.md | 50 + .../reference/iteration_protocols/index.html | 354 ------- .../reference/iteration_protocols/index.md | 354 +++++++ .../reference/lexical_grammar/index.html | 592 ----------- .../javascript/reference/lexical_grammar/index.md | 592 +++++++++++ .../reference/operators/addition/index.html | 70 -- .../reference/operators/addition/index.md | 70 ++ .../operators/addition_assignment/index.html | 66 -- .../operators/addition_assignment/index.md | 66 ++ .../reference/operators/assignment/index.html | 62 -- .../reference/operators/assignment/index.md | 62 ++ .../reference/operators/async_function/index.html | 115 --- .../reference/operators/async_function/index.md | 115 +++ .../reference/operators/await/index.html | 131 --- .../javascript/reference/operators/await/index.md | 131 +++ .../reference/operators/bitwise_and/index.html | 102 -- .../reference/operators/bitwise_and/index.md | 102 ++ .../operators/bitwise_and_assignment/index.html | 50 - .../operators/bitwise_and_assignment/index.md | 50 + .../reference/operators/bitwise_not/index.html | 90 -- .../reference/operators/bitwise_not/index.md | 90 ++ .../reference/operators/bitwise_or/index.html | 104 -- .../reference/operators/bitwise_or/index.md | 104 ++ .../operators/bitwise_or_assignment/index.html | 53 - .../operators/bitwise_or_assignment/index.md | 53 + .../reference/operators/bitwise_xor/index.html | 104 -- .../reference/operators/bitwise_xor/index.md | 104 ++ .../operators/bitwise_xor_assignment/index.html | 57 -- .../operators/bitwise_xor_assignment/index.md | 57 ++ .../reference/operators/class/index.html | 108 -- .../javascript/reference/operators/class/index.md | 108 ++ .../reference/operators/comma_operator/index.html | 104 -- .../reference/operators/comma_operator/index.md | 104 ++ .../operators/conditional_operator/index.html | 146 --- .../operators/conditional_operator/index.md | 146 +++ .../reference/operators/decrement/index.html | 70 -- .../reference/operators/decrement/index.md | 70 ++ .../reference/operators/delete/index.html | 302 ------ .../javascript/reference/operators/delete/index.md | 302 ++++++ .../operators/destructuring_assignment/index.html | 426 -------- .../operators/destructuring_assignment/index.md | 426 ++++++++ .../reference/operators/division/index.html | 63 -- .../reference/operators/division/index.md | 63 ++ .../operators/division_assignment/index.html | 51 - .../operators/division_assignment/index.md | 51 + .../reference/operators/equality/index.html | 125 --- .../reference/operators/equality/index.md | 125 +++ .../reference/operators/exponentiation/index.html | 95 -- .../reference/operators/exponentiation/index.md | 95 ++ .../operators/exponentiation_assignment/index.html | 49 - .../operators/exponentiation_assignment/index.md | 49 + .../reference/operators/function/index.html | 154 --- .../reference/operators/function/index.md | 154 +++ .../reference/operators/function_star_/index.html | 88 -- .../reference/operators/function_star_/index.md | 88 ++ .../reference/operators/greater_than/index.html | 100 -- .../reference/operators/greater_than/index.md | 100 ++ .../operators/greater_than_or_equal/index.html | 99 -- .../operators/greater_than_or_equal/index.md | 99 ++ .../reference/operators/grouping/index.html | 88 -- .../reference/operators/grouping/index.md | 88 ++ .../javascript/reference/operators/in/index.html | 139 --- .../web/javascript/reference/operators/in/index.md | 139 +++ .../reference/operators/increment/index.html | 70 -- .../reference/operators/increment/index.md | 70 ++ .../web/javascript/reference/operators/index.html | 286 ------ .../fr/web/javascript/reference/operators/index.md | 286 ++++++ .../reference/operators/inequality/index.html | 102 -- .../reference/operators/inequality/index.md | 102 ++ .../reference/operators/instanceof/index.html | 164 --- .../reference/operators/instanceof/index.md | 164 +++ .../reference/operators/left_shift/index.html | 62 -- .../reference/operators/left_shift/index.md | 62 ++ .../operators/left_shift_assignment/index.html | 51 - .../operators/left_shift_assignment/index.md | 51 + .../reference/operators/less_than/index.html | 115 --- .../reference/operators/less_than/index.md | 115 +++ .../operators/less_than_or_equal/index.html | 99 -- .../operators/less_than_or_equal/index.md | 99 ++ .../reference/operators/logical_and/index.html | 157 --- .../reference/operators/logical_and/index.md | 157 +++ .../operators/logical_and_assignment/index.html | 78 -- .../operators/logical_and_assignment/index.md | 78 ++ .../reference/operators/logical_not/index.html | 95 -- .../reference/operators/logical_not/index.md | 95 ++ .../logical_nullish_assignment/index.html | 78 -- .../operators/logical_nullish_assignment/index.md | 78 ++ .../reference/operators/logical_or/index.html | 158 --- .../reference/operators/logical_or/index.md | 158 +++ .../operators/logical_or_assignment/index.html | 84 -- .../operators/logical_or_assignment/index.md | 84 ++ .../reference/operators/multiplication/index.html | 65 -- .../reference/operators/multiplication/index.md | 65 ++ .../operators/multiplication_assignment/index.html | 48 - .../operators/multiplication_assignment/index.md | 48 + .../reference/operators/new.target/index.html | 107 -- .../reference/operators/new.target/index.md | 107 ++ .../javascript/reference/operators/new/index.html | 194 ---- .../javascript/reference/operators/new/index.md | 194 ++++ .../nullish_coalescing_operator/index.html | 142 --- .../operators/nullish_coalescing_operator/index.md | 142 +++ .../operators/object_initializer/index.html | 302 ------ .../operators/object_initializer/index.md | 302 ++++++ .../operators/operator_precedence/index.html | 360 ------- .../operators/operator_precedence/index.md | 360 +++++++ .../operators/optional_chaining/index.html | 185 ---- .../reference/operators/optional_chaining/index.md | 185 ++++ .../operators/property_accessors/index.html | 151 --- .../operators/property_accessors/index.md | 151 +++ .../reference/operators/remainder/index.html | 80 -- .../reference/operators/remainder/index.md | 80 ++ .../operators/remainder_assignment/index.html | 50 - .../operators/remainder_assignment/index.md | 50 + .../reference/operators/right_shift/index.html | 67 -- .../reference/operators/right_shift/index.md | 67 ++ .../operators/right_shift_assignment/index.html | 51 - .../operators/right_shift_assignment/index.md | 51 + .../reference/operators/spread_syntax/index.html | 259 ----- .../reference/operators/spread_syntax/index.md | 259 +++++ .../reference/operators/strict_equality/index.html | 100 -- .../reference/operators/strict_equality/index.md | 100 ++ .../operators/strict_inequality/index.html | 97 -- .../reference/operators/strict_inequality/index.md | 97 ++ .../reference/operators/subtraction/index.html | 59 -- .../reference/operators/subtraction/index.md | 59 ++ .../operators/subtraction_assignment/index.html | 49 - .../operators/subtraction_assignment/index.md | 49 + .../reference/operators/super/index.html | 165 ---- .../javascript/reference/operators/super/index.md | 165 ++++ .../javascript/reference/operators/this/index.html | 417 -------- .../javascript/reference/operators/this/index.md | 417 ++++++++ .../reference/operators/typeof/index.html | 270 ----- .../javascript/reference/operators/typeof/index.md | 270 +++++ .../reference/operators/unary_negation/index.html | 65 -- .../reference/operators/unary_negation/index.md | 65 ++ .../reference/operators/unary_plus/index.html | 69 -- .../reference/operators/unary_plus/index.md | 69 ++ .../operators/unsigned_right_shift/index.html | 66 -- .../operators/unsigned_right_shift/index.md | 66 ++ .../unsigned_right_shift_assignment/index.html | 51 - .../unsigned_right_shift_assignment/index.md | 51 + .../javascript/reference/operators/void/index.html | 119 --- .../javascript/reference/operators/void/index.md | 119 +++ .../reference/operators/yield/index.html | 124 --- .../javascript/reference/operators/yield/index.md | 124 +++ .../reference/operators/yield_star_/index.html | 159 --- .../reference/operators/yield_star_/index.md | 159 +++ .../reference/statements/async_function/index.html | 258 ----- .../reference/statements/async_function/index.md | 258 +++++ .../reference/statements/block/index.html | 117 --- .../javascript/reference/statements/block/index.md | 117 +++ .../reference/statements/break/index.html | 153 --- .../javascript/reference/statements/break/index.md | 153 +++ .../reference/statements/class/index.html | 113 --- .../javascript/reference/statements/class/index.md | 113 +++ .../reference/statements/const/index.html | 141 --- .../javascript/reference/statements/const/index.md | 141 +++ .../reference/statements/continue/index.html | 160 --- .../reference/statements/continue/index.md | 160 +++ .../reference/statements/debugger/index.html | 78 -- .../reference/statements/debugger/index.md | 78 ++ .../reference/statements/do...while/index.html | 87 -- .../reference/statements/do...while/index.md | 87 ++ .../reference/statements/empty/index.html | 105 -- .../javascript/reference/statements/empty/index.md | 105 ++ .../reference/statements/export/index.html | 181 ---- .../reference/statements/export/index.md | 181 ++++ .../reference/statements/for-await...of/index.html | 139 --- .../reference/statements/for-await...of/index.md | 139 +++ .../reference/statements/for...in/index.html | 156 --- .../reference/statements/for...in/index.md | 156 +++ .../reference/statements/for...of/index.html | 313 ------ .../reference/statements/for...of/index.md | 313 ++++++ .../javascript/reference/statements/for/index.html | 145 --- .../javascript/reference/statements/for/index.md | 145 +++ .../reference/statements/function/index.html | 172 ---- .../reference/statements/function/index.md | 172 ++++ .../reference/statements/function_star_/index.html | 241 ----- .../reference/statements/function_star_/index.md | 241 +++++ .../reference/statements/if...else/index.html | 128 --- .../reference/statements/if...else/index.md | 128 +++ .../reference/statements/import.meta/index.html | 69 -- .../reference/statements/import.meta/index.md | 69 ++ .../reference/statements/import/index.html | 235 ----- .../reference/statements/import/index.md | 235 +++++ .../web/javascript/reference/statements/index.html | 149 --- .../web/javascript/reference/statements/index.md | 149 +++ .../reference/statements/label/index.html | 205 ---- .../javascript/reference/statements/label/index.md | 205 ++++ .../javascript/reference/statements/let/index.html | 368 ------- .../javascript/reference/statements/let/index.md | 368 +++++++ .../reference/statements/return/index.html | 166 ---- .../reference/statements/return/index.md | 166 ++++ .../reference/statements/switch/index.html | 314 ------ .../reference/statements/switch/index.md | 314 ++++++ .../reference/statements/throw/index.html | 198 ---- .../javascript/reference/statements/throw/index.md | 198 ++++ .../reference/statements/try...catch/index.html | 291 ------ .../reference/statements/try...catch/index.md | 291 ++++++ .../javascript/reference/statements/var/index.html | 217 ---- .../javascript/reference/statements/var/index.md | 217 ++++ .../reference/statements/while/index.html | 99 -- .../javascript/reference/statements/while/index.md | 99 ++ .../reference/statements/with/index.html | 134 --- .../javascript/reference/statements/with/index.md | 134 +++ .../javascript/reference/strict_mode/index.html | 378 ------- .../web/javascript/reference/strict_mode/index.md | 378 +++++++ .../transitioning_to_strict_mode/index.html | 142 --- .../transitioning_to_strict_mode/index.md | 142 +++ .../reference/template_literals/index.html | 246 ----- .../reference/template_literals/index.md | 246 +++++ .../reference/trailing_commas/index.html | 182 ---- .../javascript/reference/trailing_commas/index.md | 182 ++++ files/fr/web/javascript/shells/index.html | 43 - files/fr/web/javascript/shells/index.md | 43 + .../index.html | 138 --- .../index.md | 138 +++ files/fr/web/javascript/typed_arrays/index.html | 177 ---- files/fr/web/javascript/typed_arrays/index.md | 177 ++++ 1682 files changed, 106811 insertions(+), 106811 deletions(-) delete mode 100644 files/fr/web/javascript/a_re-introduction_to_javascript/index.html create mode 100644 files/fr/web/javascript/a_re-introduction_to_javascript/index.md delete mode 100644 files/fr/web/javascript/about_javascript/index.html create mode 100644 files/fr/web/javascript/about_javascript/index.md delete mode 100644 files/fr/web/javascript/closures/index.html create mode 100644 files/fr/web/javascript/closures/index.md delete mode 100644 files/fr/web/javascript/data_structures/index.html create mode 100644 files/fr/web/javascript/data_structures/index.md delete mode 100644 files/fr/web/javascript/enumerability_and_ownership_of_properties/index.html create mode 100644 files/fr/web/javascript/enumerability_and_ownership_of_properties/index.md delete mode 100644 files/fr/web/javascript/equality_comparisons_and_sameness/index.html create mode 100644 files/fr/web/javascript/equality_comparisons_and_sameness/index.md delete mode 100644 files/fr/web/javascript/eventloop/index.html create mode 100644 files/fr/web/javascript/eventloop/index.md delete mode 100644 files/fr/web/javascript/guide/control_flow_and_error_handling/index.html create mode 100644 files/fr/web/javascript/guide/control_flow_and_error_handling/index.md delete mode 100644 files/fr/web/javascript/guide/details_of_the_object_model/index.html create mode 100644 files/fr/web/javascript/guide/details_of_the_object_model/index.md delete mode 100644 files/fr/web/javascript/guide/expressions_and_operators/index.html create mode 100644 files/fr/web/javascript/guide/expressions_and_operators/index.md delete mode 100644 files/fr/web/javascript/guide/functions/index.html create mode 100644 files/fr/web/javascript/guide/functions/index.md delete mode 100644 files/fr/web/javascript/guide/grammar_and_types/index.html create mode 100644 files/fr/web/javascript/guide/grammar_and_types/index.md delete mode 100644 files/fr/web/javascript/guide/index.html create mode 100644 files/fr/web/javascript/guide/index.md delete mode 100644 files/fr/web/javascript/guide/indexed_collections/index.html create mode 100644 files/fr/web/javascript/guide/indexed_collections/index.md delete mode 100644 files/fr/web/javascript/guide/introduction/index.html create mode 100644 files/fr/web/javascript/guide/introduction/index.md delete mode 100644 files/fr/web/javascript/guide/iterators_and_generators/index.html create mode 100644 files/fr/web/javascript/guide/iterators_and_generators/index.md delete mode 100644 files/fr/web/javascript/guide/keyed_collections/index.html create mode 100644 files/fr/web/javascript/guide/keyed_collections/index.md delete mode 100644 files/fr/web/javascript/guide/loops_and_iteration/index.html create mode 100644 files/fr/web/javascript/guide/loops_and_iteration/index.md delete mode 100644 files/fr/web/javascript/guide/meta_programming/index.html create mode 100644 files/fr/web/javascript/guide/meta_programming/index.md delete mode 100644 files/fr/web/javascript/guide/modules/index.html create mode 100644 files/fr/web/javascript/guide/modules/index.md delete mode 100644 files/fr/web/javascript/guide/numbers_and_dates/index.html create mode 100644 files/fr/web/javascript/guide/numbers_and_dates/index.md delete mode 100644 files/fr/web/javascript/guide/regular_expressions/assertions/index.html create mode 100644 files/fr/web/javascript/guide/regular_expressions/assertions/index.md delete mode 100644 files/fr/web/javascript/guide/regular_expressions/character_classes/index.html create mode 100644 files/fr/web/javascript/guide/regular_expressions/character_classes/index.md delete mode 100644 files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.html create mode 100644 files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.md delete mode 100644 files/fr/web/javascript/guide/regular_expressions/index.html create mode 100644 files/fr/web/javascript/guide/regular_expressions/index.md delete mode 100644 files/fr/web/javascript/guide/regular_expressions/quantifiers/index.html create mode 100644 files/fr/web/javascript/guide/regular_expressions/quantifiers/index.md delete mode 100644 files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html create mode 100644 files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.md delete mode 100644 files/fr/web/javascript/guide/text_formatting/index.html create mode 100644 files/fr/web/javascript/guide/text_formatting/index.md delete mode 100644 files/fr/web/javascript/guide/using_promises/index.html create mode 100644 files/fr/web/javascript/guide/using_promises/index.md delete mode 100644 files/fr/web/javascript/guide/working_with_objects/index.html create mode 100644 files/fr/web/javascript/guide/working_with_objects/index.md delete mode 100644 files/fr/web/javascript/index.html create mode 100644 files/fr/web/javascript/index.md delete mode 100644 files/fr/web/javascript/inheritance_and_the_prototype_chain/index.html create mode 100644 files/fr/web/javascript/inheritance_and_the_prototype_chain/index.md delete mode 100644 files/fr/web/javascript/javascript_technologies_overview/index.html create mode 100644 files/fr/web/javascript/javascript_technologies_overview/index.md delete mode 100644 files/fr/web/javascript/language_resources/index.html create mode 100644 files/fr/web/javascript/language_resources/index.md delete mode 100644 files/fr/web/javascript/memory_management/index.html create mode 100644 files/fr/web/javascript/memory_management/index.md delete mode 100644 files/fr/web/javascript/reference/about/index.html create mode 100644 files/fr/web/javascript/reference/about/index.md delete mode 100644 files/fr/web/javascript/reference/classes/constructor/index.html create mode 100644 files/fr/web/javascript/reference/classes/constructor/index.md delete mode 100644 files/fr/web/javascript/reference/classes/extends/index.html create mode 100644 files/fr/web/javascript/reference/classes/extends/index.md delete mode 100644 files/fr/web/javascript/reference/classes/index.html create mode 100644 files/fr/web/javascript/reference/classes/index.md delete mode 100644 files/fr/web/javascript/reference/classes/private_class_fields/index.html create mode 100644 files/fr/web/javascript/reference/classes/private_class_fields/index.md delete mode 100644 files/fr/web/javascript/reference/classes/public_class_fields/index.html create mode 100644 files/fr/web/javascript/reference/classes/public_class_fields/index.md delete mode 100644 files/fr/web/javascript/reference/classes/static/index.html create mode 100644 files/fr/web/javascript/reference/classes/static/index.md delete mode 100644 files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.html create mode 100644 files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.md delete mode 100644 files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html create mode 100644 files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.md delete mode 100644 files/fr/web/javascript/reference/errors/already_has_pragma/index.html create mode 100644 files/fr/web/javascript/reference/errors/already_has_pragma/index.md delete mode 100644 files/fr/web/javascript/reference/errors/array_sort_argument/index.html create mode 100644 files/fr/web/javascript/reference/errors/array_sort_argument/index.md delete mode 100644 files/fr/web/javascript/reference/errors/bad_octal/index.html create mode 100644 files/fr/web/javascript/reference/errors/bad_octal/index.md delete mode 100644 files/fr/web/javascript/reference/errors/bad_radix/index.html create mode 100644 files/fr/web/javascript/reference/errors/bad_radix/index.md delete mode 100644 files/fr/web/javascript/reference/errors/bad_regexp_flag/index.html create mode 100644 files/fr/web/javascript/reference/errors/bad_regexp_flag/index.md delete mode 100644 files/fr/web/javascript/reference/errors/bad_return_or_yield/index.html create mode 100644 files/fr/web/javascript/reference/errors/bad_return_or_yield/index.md delete mode 100644 files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.html create mode 100644 files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.md delete mode 100644 files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html create mode 100644 files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.md delete mode 100644 files/fr/web/javascript/reference/errors/cant_access_property/index.html create mode 100644 files/fr/web/javascript/reference/errors/cant_access_property/index.md delete mode 100644 files/fr/web/javascript/reference/errors/cant_assign_to_property/index.html create mode 100644 files/fr/web/javascript/reference/errors/cant_assign_to_property/index.md delete mode 100644 files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html create mode 100644 files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.md delete mode 100644 files/fr/web/javascript/reference/errors/cant_delete/index.html create mode 100644 files/fr/web/javascript/reference/errors/cant_delete/index.md delete mode 100644 files/fr/web/javascript/reference/errors/cant_redefine_property/index.html create mode 100644 files/fr/web/javascript/reference/errors/cant_redefine_property/index.md delete mode 100644 files/fr/web/javascript/reference/errors/cyclic_object_value/index.html create mode 100644 files/fr/web/javascript/reference/errors/cyclic_object_value/index.md delete mode 100644 files/fr/web/javascript/reference/errors/dead_object/index.html create mode 100644 files/fr/web/javascript/reference/errors/dead_object/index.md delete mode 100644 files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.html create mode 100644 files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.md delete mode 100644 files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html create mode 100644 files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.md delete mode 100644 files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.html create mode 100644 files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.md delete mode 100644 files/fr/web/javascript/reference/errors/deprecated_octal/index.html create mode 100644 files/fr/web/javascript/reference/errors/deprecated_octal/index.md delete mode 100644 files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.html create mode 100644 files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.md delete mode 100644 files/fr/web/javascript/reference/errors/deprecated_string_generics/index.html create mode 100644 files/fr/web/javascript/reference/errors/deprecated_string_generics/index.md delete mode 100644 files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.html create mode 100644 files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.md delete mode 100644 files/fr/web/javascript/reference/errors/equal_as_assign/index.html create mode 100644 files/fr/web/javascript/reference/errors/equal_as_assign/index.md delete mode 100644 files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html create mode 100644 files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.md delete mode 100644 files/fr/web/javascript/reference/errors/getter_only/index.html create mode 100644 files/fr/web/javascript/reference/errors/getter_only/index.md delete mode 100644 files/fr/web/javascript/reference/errors/identifier_after_number/index.html create mode 100644 files/fr/web/javascript/reference/errors/identifier_after_number/index.md delete mode 100644 files/fr/web/javascript/reference/errors/illegal_character/index.html create mode 100644 files/fr/web/javascript/reference/errors/illegal_character/index.md delete mode 100644 files/fr/web/javascript/reference/errors/in_operator_no_object/index.html create mode 100644 files/fr/web/javascript/reference/errors/in_operator_no_object/index.md delete mode 100644 files/fr/web/javascript/reference/errors/index.html create mode 100644 files/fr/web/javascript/reference/errors/index.md delete mode 100644 files/fr/web/javascript/reference/errors/invalid_array_length/index.html create mode 100644 files/fr/web/javascript/reference/errors/invalid_array_length/index.md delete mode 100644 files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html create mode 100644 files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.md delete mode 100644 files/fr/web/javascript/reference/errors/invalid_const_assignment/index.html create mode 100644 files/fr/web/javascript/reference/errors/invalid_const_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/errors/invalid_date/index.html create mode 100644 files/fr/web/javascript/reference/errors/invalid_date/index.md delete mode 100644 files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.html create mode 100644 files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.md delete mode 100644 files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.html create mode 100644 files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.md delete mode 100644 files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html create mode 100644 files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.md delete mode 100644 files/fr/web/javascript/reference/errors/is_not_iterable/index.html create mode 100644 files/fr/web/javascript/reference/errors/is_not_iterable/index.md delete mode 100644 files/fr/web/javascript/reference/errors/json_bad_parse/index.html create mode 100644 files/fr/web/javascript/reference/errors/json_bad_parse/index.md delete mode 100644 files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.html create mode 100644 files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.md delete mode 100644 files/fr/web/javascript/reference/errors/malformed_uri/index.html create mode 100644 files/fr/web/javascript/reference/errors/malformed_uri/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_formal_parameter/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_formal_parameter/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.md delete mode 100644 files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.html create mode 100644 files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.md delete mode 100644 files/fr/web/javascript/reference/errors/more_arguments_needed/index.html create mode 100644 files/fr/web/javascript/reference/errors/more_arguments_needed/index.md delete mode 100644 files/fr/web/javascript/reference/errors/negative_repetition_count/index.html create mode 100644 files/fr/web/javascript/reference/errors/negative_repetition_count/index.md delete mode 100644 files/fr/web/javascript/reference/errors/no_non-null_object/index.html create mode 100644 files/fr/web/javascript/reference/errors/no_non-null_object/index.md delete mode 100644 files/fr/web/javascript/reference/errors/no_properties/index.html create mode 100644 files/fr/web/javascript/reference/errors/no_properties/index.md delete mode 100644 files/fr/web/javascript/reference/errors/no_variable_name/index.html create mode 100644 files/fr/web/javascript/reference/errors/no_variable_name/index.md delete mode 100644 files/fr/web/javascript/reference/errors/non_configurable_array_element/index.html create mode 100644 files/fr/web/javascript/reference/errors/non_configurable_array_element/index.md delete mode 100644 files/fr/web/javascript/reference/errors/not_a_codepoint/index.html create mode 100644 files/fr/web/javascript/reference/errors/not_a_codepoint/index.md delete mode 100644 files/fr/web/javascript/reference/errors/not_a_constructor/index.html create mode 100644 files/fr/web/javascript/reference/errors/not_a_constructor/index.md delete mode 100644 files/fr/web/javascript/reference/errors/not_a_function/index.html create mode 100644 files/fr/web/javascript/reference/errors/not_a_function/index.md delete mode 100644 files/fr/web/javascript/reference/errors/not_defined/index.html create mode 100644 files/fr/web/javascript/reference/errors/not_defined/index.md delete mode 100644 files/fr/web/javascript/reference/errors/precision_range/index.html create mode 100644 files/fr/web/javascript/reference/errors/precision_range/index.md delete mode 100644 files/fr/web/javascript/reference/errors/property_access_denied/index.html create mode 100644 files/fr/web/javascript/reference/errors/property_access_denied/index.md delete mode 100644 files/fr/web/javascript/reference/errors/read-only/index.html create mode 100644 files/fr/web/javascript/reference/errors/read-only/index.md delete mode 100644 files/fr/web/javascript/reference/errors/redeclared_parameter/index.html create mode 100644 files/fr/web/javascript/reference/errors/redeclared_parameter/index.md delete mode 100644 files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html create mode 100644 files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.md delete mode 100644 files/fr/web/javascript/reference/errors/reserved_identifier/index.html create mode 100644 files/fr/web/javascript/reference/errors/reserved_identifier/index.md delete mode 100644 files/fr/web/javascript/reference/errors/resulting_string_too_large/index.html create mode 100644 files/fr/web/javascript/reference/errors/resulting_string_too_large/index.md delete mode 100644 files/fr/web/javascript/reference/errors/stmt_after_return/index.html create mode 100644 files/fr/web/javascript/reference/errors/stmt_after_return/index.md delete mode 100644 files/fr/web/javascript/reference/errors/strict_non_simple_params/index.html create mode 100644 files/fr/web/javascript/reference/errors/strict_non_simple_params/index.md delete mode 100644 files/fr/web/javascript/reference/errors/too_much_recursion/index.html create mode 100644 files/fr/web/javascript/reference/errors/too_much_recursion/index.md delete mode 100644 files/fr/web/javascript/reference/errors/undeclared_var/index.html create mode 100644 files/fr/web/javascript/reference/errors/undeclared_var/index.md delete mode 100644 files/fr/web/javascript/reference/errors/undefined_prop/index.html create mode 100644 files/fr/web/javascript/reference/errors/undefined_prop/index.md delete mode 100644 files/fr/web/javascript/reference/errors/unexpected_token/index.html create mode 100644 files/fr/web/javascript/reference/errors/unexpected_token/index.md delete mode 100644 files/fr/web/javascript/reference/errors/unexpected_type/index.html create mode 100644 files/fr/web/javascript/reference/errors/unexpected_type/index.md delete mode 100644 files/fr/web/javascript/reference/errors/unnamed_function_statement/index.html create mode 100644 files/fr/web/javascript/reference/errors/unnamed_function_statement/index.md delete mode 100644 files/fr/web/javascript/reference/errors/unterminated_string_literal/index.html create mode 100644 files/fr/web/javascript/reference/errors/unterminated_string_literal/index.md delete mode 100644 files/fr/web/javascript/reference/errors/var_hides_argument/index.html create mode 100644 files/fr/web/javascript/reference/errors/var_hides_argument/index.md delete mode 100644 files/fr/web/javascript/reference/functions/arguments/@@iterator/index.html create mode 100644 files/fr/web/javascript/reference/functions/arguments/@@iterator/index.md delete mode 100644 files/fr/web/javascript/reference/functions/arguments/callee/index.html create mode 100644 files/fr/web/javascript/reference/functions/arguments/callee/index.md delete mode 100644 files/fr/web/javascript/reference/functions/arguments/index.html create mode 100644 files/fr/web/javascript/reference/functions/arguments/index.md delete mode 100644 files/fr/web/javascript/reference/functions/arguments/length/index.html create mode 100644 files/fr/web/javascript/reference/functions/arguments/length/index.md delete mode 100644 files/fr/web/javascript/reference/functions/arrow_functions/index.html create mode 100644 files/fr/web/javascript/reference/functions/arrow_functions/index.md delete mode 100644 files/fr/web/javascript/reference/functions/default_parameters/index.html create mode 100644 files/fr/web/javascript/reference/functions/default_parameters/index.md delete mode 100644 files/fr/web/javascript/reference/functions/get/index.html create mode 100644 files/fr/web/javascript/reference/functions/get/index.md delete mode 100644 files/fr/web/javascript/reference/functions/index.html create mode 100644 files/fr/web/javascript/reference/functions/index.md delete mode 100644 files/fr/web/javascript/reference/functions/method_definitions/index.html create mode 100644 files/fr/web/javascript/reference/functions/method_definitions/index.md delete mode 100644 files/fr/web/javascript/reference/functions/rest_parameters/index.html create mode 100644 files/fr/web/javascript/reference/functions/rest_parameters/index.md delete mode 100644 files/fr/web/javascript/reference/functions/set/index.html create mode 100644 files/fr/web/javascript/reference/functions/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/aggregateerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/aggregateerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/@@iterator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/@@iterator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/@@species/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/@@species/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/concat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/concat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/copywithin/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/copywithin/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/entries/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/entries/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/every/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/every/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/fill/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/fill/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/filter/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/filter/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/find/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/find/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/findindex/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/findindex/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/flat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/flat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/flatmap/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/flatmap/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/foreach/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/foreach/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/from/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/from/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/includes/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/includes/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/indexof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/indexof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/isarray/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/isarray/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/join/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/join/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/keys/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/keys/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/lastindexof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/lastindexof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/length/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/length/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/map/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/map/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/of/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/of/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/pop/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/pop/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/push/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/push/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/reduce/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/reduce/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/reduceright/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/reduceright/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/reverse/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/reverse/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/shift/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/shift/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/slice/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/slice/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/some/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/some/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/sort/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/sort/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/splice/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/splice/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/unshift/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/unshift/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/array/values/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/array/values/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/asyncfunction/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/asyncfunction/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/add/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/add/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/and/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/and/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/exchange/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/exchange/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/load/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/load/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/notify/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/notify/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/or/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/or/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/store/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/store/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/sub/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/sub/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/wait/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/wait/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/atomics/xor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/atomics/xor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/bigint/asintn/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/bigint/asintn/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/bigint/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/bigint/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/bigint/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/bigint/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/bigint/valueof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/bigint/valueof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/bigint64array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/bigint64array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/biguint64array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/biguint64array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/boolean/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/boolean/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/boolean/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/boolean/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/boolean/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/boolean/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/boolean/valueof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/boolean/valueof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/buffer/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/buffer/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getint16/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getint16/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getint32/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getint32/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getint8/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getint8/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setint16/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setint16/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setint32/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setint32/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setint8/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setint8/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getdate/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getdate/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getday/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getday/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getfullyear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getfullyear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/gethours/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/gethours/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getminutes/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getminutes/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getmonth/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getmonth/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/gettime/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/gettime/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcdate/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcdate/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcday/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcday/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutchours/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutchours/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/getyear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/getyear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/now/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/now/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/parse/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/parse/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setdate/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setdate/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setfullyear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setfullyear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/sethours/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/sethours/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setminutes/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setminutes/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setmonth/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setmonth/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/settime/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/settime/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcdate/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcdate/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setutchours/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setutchours/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/setyear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/setyear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/todatestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/todatestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/togmtstring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/togmtstring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/toisostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/toisostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/tojson/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/tojson/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/totimestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/totimestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/toutcstring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/toutcstring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/utc/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/utc/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/date/valueof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/date/valueof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/decodeuri/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/decodeuri/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/encodeuri/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/encodeuri/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/columnnumber/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/columnnumber/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/filename/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/filename/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/linenumber/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/linenumber/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/message/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/message/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/name/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/name/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/stack/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/stack/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/error/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/error/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/escape/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/escape/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/eval/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/eval/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/evalerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/evalerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/float32array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/float32array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/float64array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/float64array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/apply/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/apply/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/arguments/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/arguments/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/bind/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/bind/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/call/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/call/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/caller/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/caller/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/displayname/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/displayname/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/length/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/length/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/name/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/name/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/function/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/function/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/generator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/generator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/generator/next/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/generator/next/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/generator/return/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/generator/return/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/generator/throw/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/generator/throw/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/generatorfunction/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/generatorfunction/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/globalthis/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/globalthis/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/infinity/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/infinity/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/int16array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/int16array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/int32array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/int32array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/int8array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/int8array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/internalerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/internalerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/displaynames/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/displaynames/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/language/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/language/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/region/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/region/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/script/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/script/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/isfinite/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/isfinite/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/isnan/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/isnan/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/json/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/json/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/json/parse/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/json/parse/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/json/stringify/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/json/stringify/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/@@iterator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/@@iterator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/@@species/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/@@species/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/clear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/clear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/delete/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/delete/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/entries/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/entries/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/foreach/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/foreach/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/get/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/get/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/has/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/has/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/keys/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/keys/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/size/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/size/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/map/values/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/map/values/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/abs/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/abs/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/acos/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/acos/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/acosh/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/acosh/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/asin/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/asin/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/asinh/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/asinh/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/atan/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/atan/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/atan2/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/atan2/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/atanh/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/atanh/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/cbrt/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/cbrt/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/ceil/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/ceil/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/clz32/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/clz32/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/cos/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/cos/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/cosh/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/cosh/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/e/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/e/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/exp/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/exp/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/expm1/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/expm1/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/floor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/floor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/fround/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/fround/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/hypot/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/hypot/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/imul/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/imul/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/ln10/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/ln10/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/ln2/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/ln2/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/log/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/log/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/log10/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/log10/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/log10e/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/log10e/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/log1p/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/log1p/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/log2/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/log2/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/log2e/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/log2e/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/max/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/max/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/min/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/min/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/pi/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/pi/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/pow/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/pow/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/random/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/random/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/round/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/round/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/sign/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/sign/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/sin/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/sin/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/sinh/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/sinh/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/sqrt/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/sqrt/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/sqrt2/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/sqrt2/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/tan/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/tan/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/tanh/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/tanh/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/math/trunc/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/math/trunc/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/nan/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/nan/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/null/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/null/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/epsilon/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/epsilon/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/isfinite/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/isfinite/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/isinteger/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/isinteger/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/isnan/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/isnan/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/max_value/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/max_value/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/min_value/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/min_value/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/nan/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/nan/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/parsefloat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/parsefloat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/parseint/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/parseint/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/toexponential/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/toexponential/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/tofixed/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/tofixed/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/toprecision/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/toprecision/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/number/valueof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/number/valueof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/assign/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/assign/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/constructor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/constructor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/create/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/create/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/defineproperties/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/defineproperties/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/defineproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/defineproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/entries/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/entries/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/freeze/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/freeze/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/fromentries/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/fromentries/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/is/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/is/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/isextensible/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/isextensible/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/isfrozen/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/isfrozen/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/issealed/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/issealed/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/keys/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/keys/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/preventextensions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/preventextensions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/proto/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/proto/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/seal/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/seal/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/valueof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/valueof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/object/values/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/object/values/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/parsefloat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/parsefloat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/parseint/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/parseint/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/all/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/all/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/allsettled/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/allsettled/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/any/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/any/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/catch/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/catch/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/finally/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/finally/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/race/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/race/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/reject/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/reject/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/resolve/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/resolve/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/promise/then/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/promise/then/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/rangeerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/rangeerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/referenceerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/referenceerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/apply/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/apply/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/construct/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/construct/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/get/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/get/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/has/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/has/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@match/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@match/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@search/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@search/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@species/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@species/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@split/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/@@split/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/compile/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/compile/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/dotall/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/dotall/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/exec/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/exec/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/flags/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/flags/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/global/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/global/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/input/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/input/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/multiline/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/multiline/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/n/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/n/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/source/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/source/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/sticky/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/sticky/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/test/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/test/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/regexp/unicode/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/regexp/unicode/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/@@iterator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/@@iterator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/@@species/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/@@species/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/add/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/add/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/clear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/clear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/delete/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/delete/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/entries/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/entries/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/foreach/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/foreach/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/has/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/has/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/size/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/size/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/set/values/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/set/values/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/@@iterator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/@@iterator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/anchor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/anchor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/big/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/big/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/blink/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/blink/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/bold/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/bold/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/charat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/charat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/charcodeat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/charcodeat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/codepointat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/codepointat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/concat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/concat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/endswith/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/endswith/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/fixed/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/fixed/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/fontcolor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/fontcolor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/fontsize/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/fontsize/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/includes/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/includes/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/indexof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/indexof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/italics/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/italics/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/lastindexof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/lastindexof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/length/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/length/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/link/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/link/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/localecompare/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/localecompare/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/match/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/match/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/matchall/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/matchall/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/normalize/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/normalize/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/padend/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/padend/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/padstart/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/padstart/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/raw/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/raw/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/repeat/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/repeat/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/replace/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/replace/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/replaceall/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/replaceall/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/search/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/search/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/slice/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/slice/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/small/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/small/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/split/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/split/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/startswith/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/startswith/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/strike/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/strike/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/sub/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/sub/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/substr/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/substr/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/substring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/substring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/sup/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/sup/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/tolowercase/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/tolowercase/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/touppercase/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/touppercase/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/trim/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/trim/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/trimend/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/trimend/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/trimstart/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/trimstart/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/string/valueof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/string/valueof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/description/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/description/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/for/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/for/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/iterator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/iterator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/match/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/match/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/matchall/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/matchall/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/replace/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/replace/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/search/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/search/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/species/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/species/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/split/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/split/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/tosource/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/tosource/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/symbol/valueof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/symbol/valueof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/syntaxerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/syntaxerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/entries/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/entries/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/every/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/every/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/fill/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/fill/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/filter/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/filter/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/find/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/find/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/from/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/from/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/includes/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/includes/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/join/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/join/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/keys/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/keys/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/length/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/length/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/map/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/map/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/name/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/name/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/of/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/of/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/slice/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/slice/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/some/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/some/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/sort/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/sort/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/values/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typedarray/values/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/typeerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/typeerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/uint16array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/uint16array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/uint32array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/uint32array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/uint8array/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/uint8array/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/undefined/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/undefined/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/unescape/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/unescape/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/uneval/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/uneval/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/urierror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/urierror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/clear/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/clear/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/delete/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/delete/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/get/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/get/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/has/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/has/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakmap/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakset/add/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakset/add/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakset/delete/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakset/delete/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakset/has/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakset/has/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/weakset/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/weakset/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/compile/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/compile/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/global/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/global/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instance/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instance/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/memory/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/memory/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/module/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/validate/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/webassembly/validate/index.md delete mode 100644 files/fr/web/javascript/reference/index.html create mode 100644 files/fr/web/javascript/reference/index.md delete mode 100644 files/fr/web/javascript/reference/iteration_protocols/index.html create mode 100644 files/fr/web/javascript/reference/iteration_protocols/index.md delete mode 100644 files/fr/web/javascript/reference/lexical_grammar/index.html create mode 100644 files/fr/web/javascript/reference/lexical_grammar/index.md delete mode 100644 files/fr/web/javascript/reference/operators/addition/index.html create mode 100644 files/fr/web/javascript/reference/operators/addition/index.md delete mode 100644 files/fr/web/javascript/reference/operators/addition_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/addition_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/async_function/index.html create mode 100644 files/fr/web/javascript/reference/operators/async_function/index.md delete mode 100644 files/fr/web/javascript/reference/operators/await/index.html create mode 100644 files/fr/web/javascript/reference/operators/await/index.md delete mode 100644 files/fr/web/javascript/reference/operators/bitwise_and/index.html create mode 100644 files/fr/web/javascript/reference/operators/bitwise_and/index.md delete mode 100644 files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/bitwise_not/index.html create mode 100644 files/fr/web/javascript/reference/operators/bitwise_not/index.md delete mode 100644 files/fr/web/javascript/reference/operators/bitwise_or/index.html create mode 100644 files/fr/web/javascript/reference/operators/bitwise_or/index.md delete mode 100644 files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/bitwise_xor/index.html create mode 100644 files/fr/web/javascript/reference/operators/bitwise_xor/index.md delete mode 100644 files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/class/index.html create mode 100644 files/fr/web/javascript/reference/operators/class/index.md delete mode 100644 files/fr/web/javascript/reference/operators/comma_operator/index.html create mode 100644 files/fr/web/javascript/reference/operators/comma_operator/index.md delete mode 100644 files/fr/web/javascript/reference/operators/conditional_operator/index.html create mode 100644 files/fr/web/javascript/reference/operators/conditional_operator/index.md delete mode 100644 files/fr/web/javascript/reference/operators/decrement/index.html create mode 100644 files/fr/web/javascript/reference/operators/decrement/index.md delete mode 100644 files/fr/web/javascript/reference/operators/delete/index.html create mode 100644 files/fr/web/javascript/reference/operators/delete/index.md delete mode 100644 files/fr/web/javascript/reference/operators/destructuring_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/destructuring_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/division/index.html create mode 100644 files/fr/web/javascript/reference/operators/division/index.md delete mode 100644 files/fr/web/javascript/reference/operators/division_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/division_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/equality/index.html create mode 100644 files/fr/web/javascript/reference/operators/equality/index.md delete mode 100644 files/fr/web/javascript/reference/operators/exponentiation/index.html create mode 100644 files/fr/web/javascript/reference/operators/exponentiation/index.md delete mode 100644 files/fr/web/javascript/reference/operators/exponentiation_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/exponentiation_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/function/index.html create mode 100644 files/fr/web/javascript/reference/operators/function/index.md delete mode 100644 files/fr/web/javascript/reference/operators/function_star_/index.html create mode 100644 files/fr/web/javascript/reference/operators/function_star_/index.md delete mode 100644 files/fr/web/javascript/reference/operators/greater_than/index.html create mode 100644 files/fr/web/javascript/reference/operators/greater_than/index.md delete mode 100644 files/fr/web/javascript/reference/operators/greater_than_or_equal/index.html create mode 100644 files/fr/web/javascript/reference/operators/greater_than_or_equal/index.md delete mode 100644 files/fr/web/javascript/reference/operators/grouping/index.html create mode 100644 files/fr/web/javascript/reference/operators/grouping/index.md delete mode 100644 files/fr/web/javascript/reference/operators/in/index.html create mode 100644 files/fr/web/javascript/reference/operators/in/index.md delete mode 100644 files/fr/web/javascript/reference/operators/increment/index.html create mode 100644 files/fr/web/javascript/reference/operators/increment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/index.html create mode 100644 files/fr/web/javascript/reference/operators/index.md delete mode 100644 files/fr/web/javascript/reference/operators/inequality/index.html create mode 100644 files/fr/web/javascript/reference/operators/inequality/index.md delete mode 100644 files/fr/web/javascript/reference/operators/instanceof/index.html create mode 100644 files/fr/web/javascript/reference/operators/instanceof/index.md delete mode 100644 files/fr/web/javascript/reference/operators/left_shift/index.html create mode 100644 files/fr/web/javascript/reference/operators/left_shift/index.md delete mode 100644 files/fr/web/javascript/reference/operators/left_shift_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/left_shift_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/less_than/index.html create mode 100644 files/fr/web/javascript/reference/operators/less_than/index.md delete mode 100644 files/fr/web/javascript/reference/operators/less_than_or_equal/index.html create mode 100644 files/fr/web/javascript/reference/operators/less_than_or_equal/index.md delete mode 100644 files/fr/web/javascript/reference/operators/logical_and/index.html create mode 100644 files/fr/web/javascript/reference/operators/logical_and/index.md delete mode 100644 files/fr/web/javascript/reference/operators/logical_and_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/logical_and_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/logical_not/index.html create mode 100644 files/fr/web/javascript/reference/operators/logical_not/index.md delete mode 100644 files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/logical_or/index.html create mode 100644 files/fr/web/javascript/reference/operators/logical_or/index.md delete mode 100644 files/fr/web/javascript/reference/operators/logical_or_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/logical_or_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/multiplication/index.html create mode 100644 files/fr/web/javascript/reference/operators/multiplication/index.md delete mode 100644 files/fr/web/javascript/reference/operators/multiplication_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/multiplication_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/new.target/index.html create mode 100644 files/fr/web/javascript/reference/operators/new.target/index.md delete mode 100644 files/fr/web/javascript/reference/operators/new/index.html create mode 100644 files/fr/web/javascript/reference/operators/new/index.md delete mode 100644 files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.html create mode 100644 files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.md delete mode 100644 files/fr/web/javascript/reference/operators/object_initializer/index.html create mode 100644 files/fr/web/javascript/reference/operators/object_initializer/index.md delete mode 100644 files/fr/web/javascript/reference/operators/operator_precedence/index.html create mode 100644 files/fr/web/javascript/reference/operators/operator_precedence/index.md delete mode 100644 files/fr/web/javascript/reference/operators/optional_chaining/index.html create mode 100644 files/fr/web/javascript/reference/operators/optional_chaining/index.md delete mode 100644 files/fr/web/javascript/reference/operators/property_accessors/index.html create mode 100644 files/fr/web/javascript/reference/operators/property_accessors/index.md delete mode 100644 files/fr/web/javascript/reference/operators/remainder/index.html create mode 100644 files/fr/web/javascript/reference/operators/remainder/index.md delete mode 100644 files/fr/web/javascript/reference/operators/remainder_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/remainder_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/right_shift/index.html create mode 100644 files/fr/web/javascript/reference/operators/right_shift/index.md delete mode 100644 files/fr/web/javascript/reference/operators/right_shift_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/right_shift_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/spread_syntax/index.html create mode 100644 files/fr/web/javascript/reference/operators/spread_syntax/index.md delete mode 100644 files/fr/web/javascript/reference/operators/strict_equality/index.html create mode 100644 files/fr/web/javascript/reference/operators/strict_equality/index.md delete mode 100644 files/fr/web/javascript/reference/operators/strict_inequality/index.html create mode 100644 files/fr/web/javascript/reference/operators/strict_inequality/index.md delete mode 100644 files/fr/web/javascript/reference/operators/subtraction/index.html create mode 100644 files/fr/web/javascript/reference/operators/subtraction/index.md delete mode 100644 files/fr/web/javascript/reference/operators/subtraction_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/subtraction_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/super/index.html create mode 100644 files/fr/web/javascript/reference/operators/super/index.md delete mode 100644 files/fr/web/javascript/reference/operators/this/index.html create mode 100644 files/fr/web/javascript/reference/operators/this/index.md delete mode 100644 files/fr/web/javascript/reference/operators/typeof/index.html create mode 100644 files/fr/web/javascript/reference/operators/typeof/index.md delete mode 100644 files/fr/web/javascript/reference/operators/unary_negation/index.html create mode 100644 files/fr/web/javascript/reference/operators/unary_negation/index.md delete mode 100644 files/fr/web/javascript/reference/operators/unary_plus/index.html create mode 100644 files/fr/web/javascript/reference/operators/unary_plus/index.md delete mode 100644 files/fr/web/javascript/reference/operators/unsigned_right_shift/index.html create mode 100644 files/fr/web/javascript/reference/operators/unsigned_right_shift/index.md delete mode 100644 files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html create mode 100644 files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.md delete mode 100644 files/fr/web/javascript/reference/operators/void/index.html create mode 100644 files/fr/web/javascript/reference/operators/void/index.md delete mode 100644 files/fr/web/javascript/reference/operators/yield/index.html create mode 100644 files/fr/web/javascript/reference/operators/yield/index.md delete mode 100644 files/fr/web/javascript/reference/operators/yield_star_/index.html create mode 100644 files/fr/web/javascript/reference/operators/yield_star_/index.md delete mode 100644 files/fr/web/javascript/reference/statements/async_function/index.html create mode 100644 files/fr/web/javascript/reference/statements/async_function/index.md delete mode 100644 files/fr/web/javascript/reference/statements/block/index.html create mode 100644 files/fr/web/javascript/reference/statements/block/index.md delete mode 100644 files/fr/web/javascript/reference/statements/break/index.html create mode 100644 files/fr/web/javascript/reference/statements/break/index.md delete mode 100644 files/fr/web/javascript/reference/statements/class/index.html create mode 100644 files/fr/web/javascript/reference/statements/class/index.md delete mode 100644 files/fr/web/javascript/reference/statements/const/index.html create mode 100644 files/fr/web/javascript/reference/statements/const/index.md delete mode 100644 files/fr/web/javascript/reference/statements/continue/index.html create mode 100644 files/fr/web/javascript/reference/statements/continue/index.md delete mode 100644 files/fr/web/javascript/reference/statements/debugger/index.html create mode 100644 files/fr/web/javascript/reference/statements/debugger/index.md delete mode 100644 files/fr/web/javascript/reference/statements/do...while/index.html create mode 100644 files/fr/web/javascript/reference/statements/do...while/index.md delete mode 100644 files/fr/web/javascript/reference/statements/empty/index.html create mode 100644 files/fr/web/javascript/reference/statements/empty/index.md delete mode 100644 files/fr/web/javascript/reference/statements/export/index.html create mode 100644 files/fr/web/javascript/reference/statements/export/index.md delete mode 100644 files/fr/web/javascript/reference/statements/for-await...of/index.html create mode 100644 files/fr/web/javascript/reference/statements/for-await...of/index.md delete mode 100644 files/fr/web/javascript/reference/statements/for...in/index.html create mode 100644 files/fr/web/javascript/reference/statements/for...in/index.md delete mode 100644 files/fr/web/javascript/reference/statements/for...of/index.html create mode 100644 files/fr/web/javascript/reference/statements/for...of/index.md delete mode 100644 files/fr/web/javascript/reference/statements/for/index.html create mode 100644 files/fr/web/javascript/reference/statements/for/index.md delete mode 100644 files/fr/web/javascript/reference/statements/function/index.html create mode 100644 files/fr/web/javascript/reference/statements/function/index.md delete mode 100644 files/fr/web/javascript/reference/statements/function_star_/index.html create mode 100644 files/fr/web/javascript/reference/statements/function_star_/index.md delete mode 100644 files/fr/web/javascript/reference/statements/if...else/index.html create mode 100644 files/fr/web/javascript/reference/statements/if...else/index.md delete mode 100644 files/fr/web/javascript/reference/statements/import.meta/index.html create mode 100644 files/fr/web/javascript/reference/statements/import.meta/index.md delete mode 100644 files/fr/web/javascript/reference/statements/import/index.html create mode 100644 files/fr/web/javascript/reference/statements/import/index.md delete mode 100644 files/fr/web/javascript/reference/statements/index.html create mode 100644 files/fr/web/javascript/reference/statements/index.md delete mode 100644 files/fr/web/javascript/reference/statements/label/index.html create mode 100644 files/fr/web/javascript/reference/statements/label/index.md delete mode 100644 files/fr/web/javascript/reference/statements/let/index.html create mode 100644 files/fr/web/javascript/reference/statements/let/index.md delete mode 100644 files/fr/web/javascript/reference/statements/return/index.html create mode 100644 files/fr/web/javascript/reference/statements/return/index.md delete mode 100644 files/fr/web/javascript/reference/statements/switch/index.html create mode 100644 files/fr/web/javascript/reference/statements/switch/index.md delete mode 100644 files/fr/web/javascript/reference/statements/throw/index.html create mode 100644 files/fr/web/javascript/reference/statements/throw/index.md delete mode 100644 files/fr/web/javascript/reference/statements/try...catch/index.html create mode 100644 files/fr/web/javascript/reference/statements/try...catch/index.md delete mode 100644 files/fr/web/javascript/reference/statements/var/index.html create mode 100644 files/fr/web/javascript/reference/statements/var/index.md delete mode 100644 files/fr/web/javascript/reference/statements/while/index.html create mode 100644 files/fr/web/javascript/reference/statements/while/index.md delete mode 100644 files/fr/web/javascript/reference/statements/with/index.html create mode 100644 files/fr/web/javascript/reference/statements/with/index.md delete mode 100644 files/fr/web/javascript/reference/strict_mode/index.html create mode 100644 files/fr/web/javascript/reference/strict_mode/index.md delete mode 100644 files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html create mode 100644 files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.md delete mode 100644 files/fr/web/javascript/reference/template_literals/index.html create mode 100644 files/fr/web/javascript/reference/template_literals/index.md delete mode 100644 files/fr/web/javascript/reference/trailing_commas/index.html create mode 100644 files/fr/web/javascript/reference/trailing_commas/index.md delete mode 100644 files/fr/web/javascript/shells/index.html create mode 100644 files/fr/web/javascript/shells/index.md delete mode 100644 files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.html create mode 100644 files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.md delete mode 100644 files/fr/web/javascript/typed_arrays/index.html create mode 100644 files/fr/web/javascript/typed_arrays/index.md (limited to 'files') diff --git a/files/fr/web/javascript/a_re-introduction_to_javascript/index.html b/files/fr/web/javascript/a_re-introduction_to_javascript/index.html deleted file mode 100644 index 0724f02931..0000000000 --- a/files/fr/web/javascript/a_re-introduction_to_javascript/index.html +++ /dev/null @@ -1,1045 +0,0 @@ ---- -title: Une réintroduction à JavaScript -slug: Web/JavaScript/A_re-introduction_to_JavaScript -tags: - - CodingScripting - - Guide - - Intermediate - - Intro - - JavaScript - - Learn -translation_of: Web/JavaScript/A_re-introduction_to_JavaScript -original_slug: Web/JavaScript/Une_réintroduction_à_JavaScript ---- -
{{jsSidebar}}
- -

Pourquoi une réintroduction ? Parce que JavaScript est connu pour être source d'incompréhensions. Bien que souvent raillé comme étant un simple jouet, derrière sa simplicité désarmante se cachent certaines fonctionnalités de langage très puissantes. JavaScript est maintenant utilisé par un nombre incroyable d'applications de haut rang, ce qui montre qu'une connaissance approfondie de cette technologie est une compétence importante pour toute développeuse ou développeur web ou mobile.

- -

Il peut être utile de commencer avec un aperçu de l'histoire de ce langage. JavaScript a été créé en 1995 par Brendan Eich, alors ingénieur à Netscape. Ce langage est sorti au grand jour pour la première fois avec Netscape 2 au début de l'année 1996. Il était au départ censé s'appeler LiveScript, mais a été renommé par une décision marketing mal avisée dans le but de capitaliser sur la popularité du langage Java de Sun Microsystems, malgré le fait qu'ils n'aient que très peu en commun. Cela n'a jamais cessé d'être une source de confusion.

- -

Quelques mois plus tard, Microsoft a lancé avec Internet Explorer 3 une version du langage globalement compatible, appelée JScript. Quelques mois après, Netscape a soumis le langage à l'Ecma International, une organisation de normalisation européenne, ce qui a permis d'aboutir à la première édition du standard ECMAScript en 1997. Ce standard a reçu une mise à jour importante appelée ECMAScript edition 3 en 1999, et est resté relativement stable depuis. La quatrième édition a été abandonnée suite à des différends portants sur la complexité du langage. De nombreuses sections de la quatrième édition ont été utilisées pour servir de fondation à la cinquième édition d'ECMAScript, publiée en décembre 2009. La sixième édition, qui apporte des nouveautés majeures, a été publiée en juin 2015.

- -
-

Note : Dans la suite de cet article et à des fins de simplicité, nous utiliserons les termes « JavaScript » et « ECMAScript » pour désigner la même chose.

-
- -

Contrairement à la plupart des langages de programmation, JavaScript n'a pas de concept d'entrée ou de sortie. Il est conçu pour s'exécuter comme un langage de script dans un environnement hôte, et c'est à cet environnement de fournir des mécanismes de communication avec le monde extérieur. L'environnement hôte le plus commun est un navigateur, mais des interpréteurs JavaScript existent également dans Adobe Acrobat, Photoshop, les images SVG, le moteur de widgets de Yahoo!, et même au sein d'environnements côté serveur tels que Node.js. Cette liste ne se limite pas qu'à ces éléments et on retrouve également JavaScript dans les bases de données NoSQL telles que Apache CouchDB, les ordinateurs embarqués ou encore des environnements de bureaux comme GNOME (l'une des interfaces graphiques les plus populaires des systèmes d'exploitation GNU/Linux), etc.

- -

Aperçu

- -

JavaScript est un langage dynamique multi-paradigme : il dispose de différents types, opérateurs, objets natifs et méthodes. Sa syntaxe s'inspire des langages Java et C et de nombreuses structures de ces langages s'appliquent également à JavaScript. JavaScript permet la programmation orientée objet avec les prototypes (voir l'héritage et la chaîne de prototypes et les classes apparues avec ES6/ES2015). JavaScript permet également la programmation fonctionnelle car ses fonctions sont des objets et on peut donc stocker ces fonctions dans des variables et les transmettre comme n'importe quel objet.

- -

Commençons par nous intéresser aux briques de base de tout langage : les types. Les programmes en JavaScript manipulent des valeurs, et ces valeurs appartiennent toutes à un type. Les types JavaScript sont :

- - - -

On aura également undefined et null, qui sont relativement étranges. Les tableaux ou Array permettent d'organiser des séries d'objets au sein d'un même objet. Les dates (Date) et les expressions rationnelles (RegExp) qui sont également des objets nativement disponibles en JavaScript. Afin d'être tout à fait précis, les fonctions sont aussi une sorte particulière d'objets, de sorte que le diagramme de types ressemble plutôt à ceci :

- - - -

Enfin, il y a également quelques types natifs pour gérer les exceptions : Error. Pour garder une approche simple, nous utiliserons la première de ces listes pour présenter les types.

- -

Les nombres

- -

ECMAScript possède deux types numériques intégrés : Number et BigInt.

- -

Les nombres en JavaScript sont « des valeurs au format IEEE 754 en double précision 64 bits », d'après la spécification. Cela permet de représenter les nombres entre -(2^53 − 1) et 2^53 − 1. Lorsqu'on fait référence (ici ou dans les autres articles) à des entiers, on parle généralement d'une représentation d'un entier avec une valeur de type Number. En effet, les valeurs Number ne sont pas strictement des entiers et il faut donc prendre quelques précautions :

- -
-console.log(3 / 2);             // 1.5 et pas 1
-console.log(Math.floor(3 / 2)); // 1
-
- -

Ainsi, un entier apparent est en fait implicitement un nombre à virgule flottante.

- -

Aussi, faites attention à des choses comme :

- -
0.1 + 0.2 == 0.30000000000000004;
- -

Dans la pratique, les valeurs entières sont traitées comme des entiers représentés sur 32 bits (certaines implémentations les stockent même ainsi tant qu'il n'y a pas besoin d'effectuer une opération valide pour un nombre mais pas pour un entier sur 32 bits). Cette représentation peut être importante pour les opérations binaires.

- -

Les opérateurs arithmétiques standards sont gérés, dont l'addition, la soustraction, le reste arithmétique et ainsi de suite. Il existe également un objet natif, qui n'a pas été mentionné jusqu'à présent, appelé Math, qui permet de gérer certaines fonctions et constantes mathématiques plus avancées :

- -
-Math.sin(3.5);
-let circonference = 2 * Math.PI * r;
-
- -

On peut convertir une chaîne de caractères en un nombre entier à l'aide de la fonction intégrée parseInt(). Elle reçoit la base de conversion comme second paramètre, qui devrait toujours être fourni afin de lever une éventuelle ambiguïté :

- -
-parseInt("123", 10); // 123
-parseInt("010", 10); //10
-
- -

Si la base n'est pas indiquée, les résultats peuvent être surprenants dans les anciens navigateurs qui datent de 2013 ou avant où les chaînes commençant par 0 pouvaient ne pas être considérées comme exprimées en notation octale. À moins que vous ne soyez certain du format de votre chaîne de caractères, vous pouvez obtenir des résultats surprenants sur ces anciens navigateurs :

- -
-parseInt("010");  //  8
-parseInt("0x10"); // 16
-
- -

Cela se produit parce que la fonction parseInt() a été implémentée pour traiter la première chaîne comme un nombre octal à cause du zéro initial et la seconde comme une représentation hexadécimale car commençant avec 0x. Une telle notation hexadécimale peut toujours être utilisée mais la notation octale a été retirée.

- -

Si on souhaite convertir un nombre binaire en un entier, il suffit de changer la base :

- -
parseInt("11", 2); // 3
- -

De la même manière, vous pouvez traiter les nombres à virgule flottante à l'aide de la fonction intégrée parseFloat(), qui, à la différence de parseInt(), utilise toujours la base 10.

- -

On peut également utiliser l'opérateur unaire + pour convertir des valeurs en nombres :

- -
-+ "42";   // 42
-+ "010";  // 10
-+ "0x10"; // 16
-
- -

Une valeur spéciale appelée NaN (qui signifie « Not a Number », soit « pas un nombre ») est renvoyée si la chaîne est non numérique :

- -
parseInt("coucou", 10); // NaN
- -

NaN est « toxique » : si cette valeur est fournie en entrée pour n'importe quelle opération mathématique, le résultat sera également NaN :

- -
NaN + 5; // NaN
- -

Cette valeur peut être détectée grâce à la fonction native Number.isNaN() (qui fait exactement ce que son nom indique) :

- -
-Number.isNaN(NaN); // true
-Number.isNaN('bonjour'); // false
-Number.isNaN('1'); // false
-Number.isNaN(undefined); // false
-Number.isNaN({}); // false
-Number.isNaN([1]) // false
-Number.isNaN([1,2]) // false
-
- -

Mais ne testez pas le NaN en utilisant la fonction globale isNaN(), qui a un comportement peu intuitif :

- -
-isNaN('bonjour'); // true
-isNaN('1'); // false
-isNaN(undefined); // true
-isNaN({}); // true
-isNaN([1]) // false
-isNaN([1,2]) // true
-
- -

JavaScript dispose également de valeur spéciales pour l'infini Infinity et l'infini négatif (-Infinity) :

- -
-1 / 0; // Infinity
--1 / 0; // -Infinity
-
- -

Il est possible de tester les valeurs Infinity, -Infinity et NaN à l'aide de la fonction native isFinite() :

- -
-isFinite(1/0); // false
-isFinite(-Infinity); // false
-isFinite(NaN); // false
-
- -
-

Note : Les fonctions parseFloat() et parseInt() traitent une chaîne de caractères jusqu'à ce qu'elles atteignent un caractère qui n'est pas valide pour le format numérique indiqué, puis renvoient le nombre traité jusqu'à ce point. Cependant, l'opérateur "+" convertit simplement la chaîne à NaN à partir du moment où la chaîne contient le moindre caractère non valide. Vous pouvez tester ce comportement en manipulant la chaîne "10.2abc" avec chaque méthode dans la console afin de mieux comprendre les différences.

-
- -

Les chaînes de caractères

- -

Les chaînes en JavaScript sont des séquences de caractères Unicode. Cette nouvelle devrait être bien accueillie par toute personne qui a déjà eu affaire à des problèmes d'internationalisation. Pour être plus précis, ce sont des séquences de codets UTF-16 : chaque codet est représenté par un nombre sur 16 bits et chaque caractère Unicode est représenté par 1 ou 2 codets.

- -

Si vous voulez représenter un seul caractère, il suffit d'utiliser une chaîne qui contient un seul caractère.

- -

Pour connaître la longueur d'une chaîne, utilisez sa propriété length :

- -
"bonjour".length; // 7
- -

C'est notre première rencontre avec les objets JavaScript ! Les chaînes peuvent également être utilisées comme des objets. Elles possèdent aussi des méthodes permettant de manipuler la chaîne et d'accéder à certaines informations sur cette chaîne de caractères :

- -
-"bonjour".charAt(0); // "b"
-"coucou monde".replace("coucou", "bonjour"); // "bonjour monde"
-"bonjour".toUpperCase(); // "BONJOUR"
-
- -

Les autres types

- -

JavaScript fait la distinction entre null, qui est un objet de type object indiquant une absence délibérée de valeur, et undefined qui est un objet de type undefined indiquant une variable non initialisée — c'est-à-dire qui n'a pas encore été assignée. Nous parlerons des variables plus tard, mais en JavaScript il est possible de déclarer une variable sans lui assigner de valeur. Si vous faites cela, le type de la variable sera undefined qui est une constante.

- -

JavaScript dispose d'un type booléen, dont les valeurs possibles sont true (vrai) et false (faux). L'un et l'autre sont des mots clés. Toute valeur peut être convertie en une valeur booléenne selon les règles suivantes :

- -
    -
  1. false, 0, la chaîne vide (""), NaN, null et undefined deviennent toutes false
  2. -
  3. toutes les autres valeurs deviennent true.
  4. -
- -

Cette conversion peut être faite de manière explicite à l'aide de la fonction Boolean() :

- -
-Boolean("");  // false
-Boolean(234); // true
-
- -

Cependant, c'est rarement nécessaire, puisque JavaScript effectuera cette conversion silencieusement chaque fois qu'il attend une valeur booléenne, par exemple dans une instruction if (voir plus bas). Pour cette raison, on parle souvent simplement de valeurs « vraies » et « fausses » pour indiquer des valeurs devenant respectivement true et false lorsqu'elles sont converties en valeurs booléennes.

- -

Les opérations booléennes comme && (et logique), || (ou logique) et ! (non logique) sont également gérées, comme on le verra plus bas.

- -

Les variables

- -

En JavaScript, on peut déclarer de nouvelles variables grâce à l'un de ces trois mots-clés : let, const, ou var.

- -

let permet de déclarer des variables qui pourront être utilisées dans un bloc. La variable déclarée avec let est uniquement disponible dans le bloc qui contient la déclaration.

- -
-let a;
-let nom = "Simon";
-
- -

Voici un exemple de portée avec let :

- -
-// variableLet n'est pas utilisable ici
-
-for (let variableLet = 0; variableLet < 5; variableLet++) {
-  // variableLet peut être utilisée ici
-}
-
-// variableLet n'est pas utilisable ici
-
- -

const permet de déclarer des variables dont la valeur ne doit pas changer. Une variable déclarée avec const est disponible dans le bloc dans lequel elle est déclarée.

- -
-const Pi = 3.14; // la constante Pi est définie
-Pi = 1; // produira une erreur, car on ne peut pas modifier une variable constante.
-
- -

var est le mot-clé le plus fréquemment utilisé pour déclarer des variables. Ce mot-clé était disponible avant let et const (c'était alors le seul qui permettait de déclarer des variables). Une variable qu'on déclare avec var est disponible dans la fonction dans laquelle elle est déclarée.

- -
-var a;
-var nom = "simon";
-
- -

Voici un exemple pour étudier la portée d'une variable déclarée avec var :

- -
-// variableVar *est* utilisable ici
-
-for (var variableVar = 0; variableVar < 5; variableVar++) {
-  // variableVar *est* également disponible ici
-}
-
-// variableVar *est* toujours disponible ici
- -

Si on déclare une variable sans lui affecter aucune valeur, son type sera alors undefined.

- -

JavaScript possède une différence importante quant aux autres langages de programmation comme Java : en JavaScript, les blocs ne créent pas de portées pour les variables déclarées avec var, c'est la fonction qui gère la portée d'une variable déclarée avec var. Aussi, si une variable est définie avec var au sein d'une instruction conditionnelle avec if, cette variable sera visible depuis l'ensemble de la fonction. Avec ECMAScript 2015, les instructions de déclarations, let et const permettent de créer des variables dont la portée est limitée à celle du bloc qui l'englobe.

- -

Les opérateurs

- -

Les opérateurs numériques en JavaScript sont +, -, *, / et % (qui est l'opérateur de reste, à ne pas confondre avec le « modulo » mathématique). Les valeurs sont affectées à l'aide de = et il existe également des opérateurs d'affectation combinés comme += et -=. Ils sont équivalents à x = x opérateur y.

- -
-x += 5;
-x = x + 5;
-
- -

Vous pouvez utiliser ++ et -- respectivement pour incrémenter et pour décrémenter. Ils peuvent être utilisés comme opérateurs préfixes ou suffixes.

- -

L'opérateur + permet également de concaténer des chaînes :

- -
"coucou" + " monde"; // "coucou monde"
- -

Si vous additionnez une chaîne à un nombre (ou une autre valeur), tout est d'abord converti en une chaîne. Ceci pourrait vous surprendre :

- -
-"3" + 4 + 5; // "345"
-3 + 4 + "5"; // "75"
-
- -

L'ajout d'une chaîne vide à une valeur est une manière utile de convertir cette valeur une chaîne de caractères.

- -

Les comparaisons en JavaScript se font à l'aide des opérateurs <, >, <= et >=. Ceux-ci fonctionnent tant pour les chaînes que pour les nombres. L'égalité est un peu moins évidente. L'opérateur double égal effectue une équivalence si vous lui donnez des types différents, ce qui donne parfois des résultats intéressants :

- -
-123 == "123"; // true
-1 == true;    // true
-
- -

Pour éviter les conversions implicites avant les comparaisons, utilisez l'opérateur triple égal :

- -
-123 === "123"; //false
-true === true; // true
-
- -

Les opérateurs != et !== existent également.

- -

JavaScript dispose également d'opérations bit à bit.

- -

Les structures de contrôle

- -

JavaScript dispose d'un ensemble de structures de contrôle similaires aux autres langages de la famille du langage C. Les structures conditionnelles sont présentes avec if et else ; lesquels peuvent être chaînés si nécessaire :

- -
-let nom = "des chatons";
-if (nom == "des chiots") {
-  nom += " !";
-} else if (nom == "des chatons") {
-  nom += " !!";
-} else {
-  nom = " !" + nom;
-}
-nom == "des chatons !!"
-
- -

JavaScript dispose également de boucles while et do-while. Les premières permettent de former des boucles basiques ; les secondes permettent de construire des boucles qui seront exécutées au moins une fois :

- -
-while (true) {
-  // une boucle infinie !
-}
-
-let input;
-do {
-  input = getInput();
-} while (inputNonValide(input));
-
- -

Les boucles for en JavaScript sont les mêmes qu'en C et en Java : elles permettent de fournir les informations de contrôle de la boucle en une seule ligne.

- -
-for (let i = 0; i < 5; i++) {
-  // Sera exécutée cinq fois
-}
-
- -

JavaScript permet également d'utiliser deux autres types de boucles : for...of :

- -
-for (let element of tableau) {
-  // utiliser des instructions
-  // pour manipuler la valeur element
-}
-
- -

et for...in :

- -
-for (let propriete in objet) {
-  // utiliser des instructions
-  // pour manipuler la propriété de l'objet
-}
-
- -

Les opérateurs && et || utilisent une logique de court-circuit, ce qui signifie qu'ils exécuteront leur second opérande ou non selon la valeur du premier. C'est très utile pour vérifier qu'un objet n'est pas égal à null avant d'essayer d'accéder à ses attributs :

- -
let nom = o && o.getNom();
- -

Ou pour définir des valeurs par défaut :

- -
let nom = autreNom || "nomParDéfaut";
- -

De la même façon, le OU peut être utilisé pour mettre en cache des valeurs (lorsque les valeurs équivalentes à faux sont invalides) :

- -
let nom = nomEnCache || (nomEnCache = getNom());
- -

JavaScript propose également un opérateur ternaire pour les assignations conditionnelles en une ligne :

- -
let permis = (age > 18) ? "oui" : "non";
- -

L'instruction switch peut être utilisée pour différentes branches de code basées sur un nombre ou une chaîne :

- -
-switch (action) {
-  case 'dessiner':
-    dessine();
-    break;
-  case 'manger':
-    mange();
-    break;
-  default:
-    neRienFaire();
-}
-
- -

Si vous n'ajoutez pas d'instruction break, l'exécution va se poursuivre au niveau suivant. C'est rarement ce qui est désiré, en fait ça vaut même la peine de préciser dans un commentaire si la poursuite au cas suivant est délibérée pour aider au débogage :

- -
switch (a) {
-  case 1: // identique au cas 2
-  case 2:
-    mange();
-    break;
-  default:
-    nerienfaire();
-}
- -

La clause default est optionnelle. Vous pouvez placer des expressions à la fois dans la partie switch et dans les cas à gérer si vous voulez ; les comparaisons entre les deux se font comme si on avait utilisé l'opérateur === :

- -
switch (1 + 3){
-  case 2 + 2:
-    yay();
-    break;
-  default:
-    nArriveJamais();
-}
- -

Les objets

- -

Les objets en JavaScript sont simplement des collections de paires nom-valeur. Dans ce sens, ils sont similaires aux :

- - - -

Le fait que cette structure de données soit si largement utilisée est un témoignage de sa polyvalence. Puisque tout (sauf les types de base) est un objet en JavaScript, tout programme écrit dans ce langage implique naturellement un grand nombre de recherches dans des tables de hachage. C'est une bonne chose que ce soit si rapide !

- -

La partie « nom » est une chaîne JavaScript, tandis que la partie « valeur » peut être n'importe quelle valeur JavaScript, y compris d'autres objets. Cela permet de construire des structures de données de n'importe quel niveau de complexité.

- -

Il existe deux façons très simples pour créer un objet vide :

- -
let obj = new Object();
- -

Et :

- -
let obj = {};
- -

Ils sont sémantiquement équivalents ; la seconde écriture est appelée syntaxe littérale d'objet et est plus pratique. Cette syntaxe est également au cœur du format JSON et devrait être privilégiée à tout moment.

- -

La syntaxe littérale pour écrire un objet peut être utilisée afin d'initialiser tout un objet :

- -
-let obj = {
-  name: 'Carotte',
-  _for: 'Max', // Le mot "for" est un mot réservé, utilisez plutôt "_for".
-  details: {
-    color: 'orange',
-    size: 12
-  }
-};
- -

L'accès aux attributs peut être enchaîné :

- -
-obj.details.color; // orange
-obj['details']['size']; // 12
-
- -

L'exemple suivant crée un prototype d'objet (Person) et une instance de ce prototype (you).

- -
-function Person(name, age) {
-  this.name = name;
-  this.age = age;
-}
-
-// Définir un objet
-let you = new Person('You', 24);
-// Nous créons une nouvelle personne nommée "You" âgée de 24 ans.
-
- -

Une fois l'objet créé, on peut accéder à ses propriétés de l'une des deux manières suivantes :

- -
-// notation par points
-obj.name = 'Simon';
-let name = obj.name;
-
- -

Et…

- -
-// notation entre crochets
-obj['name'] = 'Simon';
-let name = obj['name'];
-// on peut utiliser une variable pour définir une clé
-let user = prompt('quelle clé ?');
-obj[user] = prompt('quelle valeur ?');
-
- -

Ces deux méthodes sont également sémantiquement équivalentes. La seconde méthode a l'avantage de fournir le nom de l'attribut de l'objet dans une chaîne, ce qui signifie qu'il peut être calculé au moment de l'exécution (mais ce qui peut empêcher certaines optimisations du moteur JavaScript). Elle peut également être utilisée pour définir et lire des propriétés dont les noms sont des mots réservés :

- -
-obj.for = "Simon"; // erreur de syntaxe, car "for" est un mot réservé
-obj["for"] = "Simon"; // fonctionne très bien
-
- -
-

Note : À partir d'ECMAScript 5, les mots réservés peuvent être utilisés comme noms de propriétés d'objets « en vrac ». Cela signifie qu'ils n'ont pas besoin d'être « habillés » de guillemets lors de la définition des littéraux d'objet. Voir la spécification ES5.

-
- -

Pour en savoir plus sur les objets et les prototypes, voir Object.prototype. Pour une explication des prototypes d'objets et des chaînes de prototypes, voir l'héritage et la chaîne de prototypes.

- -
-

Note : À partir d'ECMAScript 2015, les clés des objets peuvent être définies par la variable en utilisant la notation entre parenthèses lors de sa création. {[phoneType] : 12345} est possible au lieu de simplement var userPhone = {}; userPhone[phoneType] = 12345;.

-
- -

Les tableaux

- -

Les tableaux (Arrays) en JavaScript sont en fait un type spécial d'objets. Ils fonctionnent d'une façon tout à fait similaire aux objets normaux (on peut naturellement accéder aux propriétés numériques avec la syntaxe des crochets []), mais ils ont également une propriété magique appelée length. Elle vaut toujours un de plus que le plus grand indice dans le tableau.

- -

L'ancienne manière de créer des tableaux est celle-ci :

- -
-let a = new Array();
-a[0] = "chien";
-a[1] = "chat";
-a[2] = "poule";
-a.length; // 3
-
- -

Une notation plus pratique est la syntaxe littérale :

- -
-let a = ["chien", "chat", "poule"];
-a.length; // 3
-
- -

Notez que array.length ne correspond pas nécessairement au nombre d'éléments dans le tableau. Observez le code suivant :

- -
-let a = ["chien", "chat", "poule"];
-a[100] = "renard";
-a.length // 101
-
- -

Rappelez-vous : la longueur du tableau vaut simplement un de plus que l'indice le plus élevé.

- -

Si vous interrogez un élément de tableau non existant, vous obtenez undefined :

- -
typeof(a[90]); // undefined
- -

Si vous prenez cela en compte, il est possible de parcourir un tableau à l'aide de la boucle suivante :

- -
-for (let i = 0; i < a.length; i++) {
-  // Faire quelque chose avec a[i]
-}
-
- -

ES2015 a introduit la boucle plus concise for...of pour les objets itérables tels que les tableaux :

- -
-for (const currentValue of a) {
-  // Faire quelque chose avec currentValue
-}
-
- -

Vous pourriez également itérer sur un tableau en utilisant une boucle for...in, cependant cela n'itère pas sur les éléments du tableau, mais sur les indices du tableau. De plus, si quelqu'un ajoutait de nouvelles propriétés à Array.prototype, elles seraient également parcourues par une telle boucle. Par conséquent, ce type de boucle n'est pas recommandé pour les tableaux.

- -

Une autre façon d'itérer sur un tableau qui a été ajoutée avec ECMAScript 5 est forEach() :

- -
-['chien', 'chat', 'poule'].forEach(function(currentValue, index, array) {
-  // Faire quelque chose avec currentValue ou array[index]
-});
-
- -

Si vous voulez ajouter un élément à un tableau, procédez comme suit :

- -
a.push(item);
- -

Les tableaux sont accompagnés d'un certain nombre de méthodes. Voir également la documentation complète sur les méthodes des tableaux.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nom de la méthodeDescription
a.toString()Renvoie une chaîne composée des différents éléments auxquels on a appliqué toString(), séparés par des virgules.
a.toLocaleString()Renvoie une chaîne composée des différents éléments auxquels on a appliqué toLocaleString(), séparés par des virgules.
a.concat(item1[, item2[, ...[, itemN]]])Renvoie un nouveau tableau auquel on a ajouté les éléments.
a.join(sep)Convertit le tableau en une chaîne dont les valeurs sont séparées par le paramètre sep.
a.pop()Renvoie le dernier élément du tableau et le retire du tableau.
a.push(item1, ..., itemN)Ajoute un ou plusieurs éléments à la fin du tableau.
a.shift()Renvoie le premier élément du tableau et le retire du tableau.
a.unshift(item1[, item2[, ...[, itemN]]])Ajoute des éléments au début du tableau.
a.slice(start[, end])Renvoie un sous-tableau.
a.sort([cmpfn])Trie le tableau (avec une fonction de comparaison optionnelle).
a.splice(start, delcount[, item1[, ...[, itemN]]])Permet de modifier un tableau en en supprimant une partie et en la remplaçant avec plus d'éléments.
a.reverse()Retourne le tableau.
- -

Les fonctions

- -

Avec les objets, les fonctions sont les composants de base d'une bonne compréhension de JavaScript. La fonction la plus basique n'a rien de compliqué :

- -
-function ajoute(x, y) {
-  let total = x + y;
-  return total;
-}
-
- -

Ceci représente tout ce qu'il y a à savoir à propos des fonctions basiques. Une fonction JavaScript peut recevoir 0 paramètre nommé ou plus. Son corps peut contenir autant d'instructions que vous le voulez et permet de déclarer des variables qui sont locales à la fonction. L'instruction return peut être utilisée pour renvoyer une valeur à tout moment, mettant ainsi fin à la fonction. Si aucune instruction return n'est utilisée (ou que l'instruction return n'est suivie d'aucune valeur), JavaScript renvoie undefined.

- -

On se rendra compte que les paramètres sont plus des indications qu'autre chose. Il est en effet possible d'appeler une fonction sans lui fournir les paramètres qu'elle attend, auquel cas ils vaudront undefined.

- -
-ajoute(); // NaN 
-// Il n'est pas possible d'additionner des variables indéfinies
-
- -

Il est également possible de fournir plus de paramètres que demandé par la fonction :

- -
-ajoute(2, 3, 4); // 5
-// les deux premiers sont additionnés ; 4 est ignoré
-
- -

Par définition les fonctions ont accès à des variables supplémentaires à l'intérieur de leur corps, appelée arguments. Il s'agit d'un objet semblable à un tableau qui contient toutes les valeurs reçues par la fonction. Réécrivons la fonction ajoute pour recevoir autant de valeurs qu'on veut :

- -
function ajoute() {
-  let somme = 0;
-  for (let i = 0, j = arguments.length; i < j; i++) {
-    somme += arguments[i];
-  }
-  return somme;
-}
-
-ajoute(2, 3, 4, 5); // 14
-
- -

Ce n'est cependant pas vraiment plus utile que d'écrire 2 + 3 + 4 + 5. Écrivons plutôt une fonction de calcul de moyenne :

- -
-function moyenne() {
-  let somme = 0;
-  for (let i = 0, j = arguments.length; i < j; i++) {
-    somme += arguments[i];
-  }
-  return somme / arguments.length;
-}
-moyenne(2, 3, 4, 5); // 3.5
-
- -

C'est assez utile, mais cela semble un peu verbeux. Pour réduire un peu plus ce code, nous pouvons envisager de substituer l'utilisation du tableau d'arguments par la syntaxe du reste des paramètres. De cette façon, nous pouvons passer un nombre quelconque d'arguments dans la fonction tout en gardant notre code minimal. L'opérateur du reste des paramètres est utilisé dans les listes de paramètres de fonctions avec le format : ...variable et il inclura dans cette variable la liste entière des arguments non capturés avec lesquels la fonction a été appelée. Nous remplacerons également la boucle for par une boucle for...of pour retourner les valeurs dans notre variable.

- -
-function moyenne(...args) {
-  let somme = 0;
-  for (let valeur of args) {
-    somme += valeur;
-  }
-  return somme / args.length;
-}
-moyenne(2, 3, 4, 5); // 3.5
-
- -

Avec le reste des paramètres, dans l'exemple précédent, args contient tous les arguments passés à la fonction.

- -

Il est important de noter que, quel que soit l'endroit où est écrit l'opérateur du reste des paramètres au sein de la déclaration de fonction, il stockera tous les arguments écrits après mais pas avant. Autrement dit, function avg(premiereValeur, ...args) stockera la première valeur passée à la fonction dans la variable firstValue et les autres arguments iront dans args.

- -

C'est très pratique, mais on rencontre un nouveau problème. La fonction moyenne() reçoit une liste de valeurs séparées par des virgules, mais comment fait-on si on souhaite trouver la moyenne des valeurs d'un tableau ?

- -

On pourrait simplement récrire la fonction comme ceci :

- -
-function moyenneTableau(arr) {
-  let somme = 0;
-  for (let i = 0, j = arr.length; i < j; i++) {
-    somme += arr[i];
-  }
-  return somme / arr.length;
-}
-moyenneTableau([2, 3, 4, 5]); // 3.5
-
- -

Mais ce serait bien si on pouvait réutiliser la fonction qu'on avait déjà créée. Par chance, JavaScript permet d'appeler une fonction et de lui donner un tableau de paramètres d'une longueur arbitraire, à l'aide de la méthode apply() de tout objet Function.

- -
moyenne.apply(null, [2, 3, 4, 5]); // 3.5
- -

Le second paramètre envoyé à apply() est le tableau à utiliser comme paramètre ; nous parlerons du premier plus tard. Cela permet de souligner le fait que les fonctions sont aussi des objets.

- -

On peut également utiliser l'opérateur de décomposition pour l'appel et la définition de la fonction pour écrire, par exemple, moyenne(...nombres).

- -

Fonctions anonymes

- -

JavaScript vous permet de créer des fonctions anonymes, c'est-à-dire des fonctions sans nom :

- -
-function() {
-  let somme = 0;
-  for (let i = 0, j = arguments.length; i < j; i++) {
-    somme += arguments[i];
-  }
-  return somme / arguments.length;
-};
-
- -

Mais une telle fonction anonyme n'est pas utile en soi, car sans nom, il n'y a aucun moyen d'appeler la fonction. En pratique, les fonctions anonymes sont donc généralement utilisées comme arguments pour d'autres fonctions ou sont rendues appelables en les assignant immédiatement à une variable qui peut être utilisée pour invoquer la fonction :

- -
-let moyenne = function() {
-  let somme = 0;
-  for (let i = 0, j = arguments.length; i < j; i++) {
-    somme += arguments[i];
-  }
-  return somme / arguments.length;
-};
-
- -

Cela rend la fonction anonyme invocable en appelant moyenne() avec des arguments — c'est-à-dire que c'est sémantiquement équivalent à déclarer la fonction en utilisant la forme nommée fonction moyenne().

- -

Mais les fonctions anonymes peuvent être utiles même si elles ne sont jamais affectées à des variables ou transmises comme arguments à d'autres fonctions : JavaScript fournit un mécanisme permettant de déclarer et d'invoquer simultanément une fonction à l'aide d'une seule expression. Cela s'appelle une expression de fonction invoquée immédiatement (IIFE pour l'acronyme anglais), et la syntaxe pour l'utiliser avec une fonction anonyme ressemble à ceci :

- -
-(function() {
-  // …
-})();
-
- -

De plus amples détails sur les IIFE sont hors de portée de cet article d'introduction — mais un bon exemple de ce à quoi ils sont particulièrement utiles se trouve dans la section Émulation de méthodes privées avec des fermetures de l'article Fermetures.

- -

Fonctions récursives

- -

JavaScript permet d'appeler des fonctions récursivement. C'est particulièrement utile lorsqu'on a affaire à des structures en arbre, comme c'est le cas dans le DOM du navigateur.

- -
-function countChars(elm) {
-  if (elm.nodeType == 3) { // TEXT_NODE
-    return elm.nodeValue.length;
-  }
-  let count = 0;
-  for (let i = 0, child; child = elm.childNodes[i]; i++) {
-    count += countChars(child);
-  }
-  return count;
-}
-
- -

Cela met en évidence un problème potentiel avec les fonctions anonymes : comment les appeler de manière récursive si elles n'ont pas de nom ? JavaScript vous permet de nommer les expressions de fonctions pour cela. Vous pouvez utiliser des IIFE (« Immediately Invoked Function Expressions » en anglais soit « Expressions de fonctions immédiatement invoquées » en français) nommées, comme indiqué ci-dessous :

- -
-let charsInBody = (function counter(elm) {
-  if (elm.nodeType == 3) { // TEXT_NODE
-    return elm.nodeValue.length;
-  }
-  let count = 0;
-  for (let i = 0, child; child = elm.childNodes[i]; i++) {
-    count += counter(child);
-  }
-  return count;
-})(document.body);
-
- -

Le nom fourni à l'expression de la fonction n'est disponible qu'au sein de la portée de la fonction. Cela permet au moteur JavaScript de faire des optimisations. Cela rend également le code plus lisible. Le nom apparaîtra également dans le débogueur et les piles d'appel, ce qui permettra de gagner du temps.

- -

En JavaScript, les fonctions sont également des objets. Il est donc possible de leur ajouter ou de modifier leurs propriétés.

- -

Les objets personnalisés

- -
-

Note : Pour une approche plus détaillée de la programmation orientée objet en JavaScript, voir l'Introduction à JavaScript orienté objet.

-
- -

Dans la programmation orientée objet classique, les objets sont des collections de données et de méthodes opérant sur ces données. Imaginons un objet personne avec les champs prénom et nom. Il y a deux manières d'afficher son nom complet : de la façon « prénom nom » ou de la façon « nom prénom ». À l'aide des fonctions et des objets vus précédemment, voici une manière de le faire :

- -
-function creerPersonne(prenom, nom) {
-  return {
-    prenom: prenom,
-    nom: nom
-  };
-}
-
-function personneNomComplet(personne) {
-  return personne.prenom + ' ' + personne.nom;
-}
-
-function personneNomCompletInverse(personne) {
-  return personne.nom + ' ' + personne.prenom;
-}
-
-let s = creerPersonne("Simon", "Willison");
-personneNomComplet(s); // Simon Willison
-personneNomCompletInverse(s); // Willison Simon
-
- -

Ça fonctionne, mais c'est inutilement verbeux. On va se retrouver avec des dizaines de fonctions dans l'espace de noms global. Ce dont on aurait vraiment besoin, c'est d'une manière d'attacher une fonction à un objet. Comme les fonctions sont des objets, c'est facile :

- -
-function creerPersonne(prenom, nom) {
-  return {
-    prenom: prenom,
-    nom: nom,
-    nomComplet: function() {
-      return this.prenom + ' ' + this.nom;
-    },
-    nomCompletInverse: function() {
-      return this.nom + ' ' + this.prenom;
-    }
-  };
-}
-
-let s = creerPersonne("Simon", "Willison")
-s.nomComplet(); // Simon Willison
-s.nomCompletInverse(); // Willison Simon
-
- -

Il y a quelque chose que nous n'avons pas vu jusqu'à présent : le mot-clé this. Utilisé au sein d'une fonction, this fait référence à l'objet courant. Sa signification dépend de la façon dont la fonction a été appelée. Si elle a été appelée avec la notation utilisant le point ou les crochets sur un objet, cet objet devient this. Si cette notation n'a pas été utilisée pour l'appel, this fera référence à l'objet global.

- -

C'est une source fréquente d'erreurs. Par exemple :

- -
-let s = creerPersonne("Simon", "Willison");
-let nomComplet = s.nomComplet;
-nomComplet(); // undefined undefined
-
- -

Lorsqu'on appelle nomComplet() seul, sans utiliser s.nomComplet(), this est lié à l'objet global. Comme il n'y a pas de variables globales appelées prenom ou nom, on se retrouve avec undefined pour chacune.

- -

On peut se servir du mot-clé this pour améliorer notre fonction de construction :

- -
-function Personne(prenom, nom) {
-  this.prenom = prenom;
-  this.nom = nom;
-  this.nomComplet = function() {
-    return this.prenom + ' ' + this.nom;
-  }
-  this.nomCompletInverse = function() {
-    return this.nom + ' ' + this.prenom;
-  }
-}
-let s = new Personne("Simon", "Willison");
-
- -

Nous avons utilisé un nouveau mot clé : new. new est très lié à this. Il crée un nouvel objet vide et appelle ensuite la fonction spécifiée, avec this pointant vers ce nouvel objet. On notera cependant que la fonction appelée avec ce this ne renvoie pas de valeur mais ne fait que modifier l'objet this. C'est l'opérateur new qui renvoie l'objet this à l'endroit de l'appel. Les fonctions prévues pour être appelées par new sont appelées des constructeurs. L'usage courant est de mettre la première lettre de ces fonctions en majuscule pour se souvenir de les appeler avec new.

- -

La fonction améliorée présente toujours le même écueil avec l'appel de personneNomComplet() seul.

- -

Nos objets Personne s'améliorent, mais il leur reste certaines aspérités pas très esthétiques. Chaque fois que l'on crée une personne, on crée deux nouveaux objets de fonctions en même temps. Ne serait-ce pas mieux si ce code était partagé ?

- -
-function personneNomComplet() {
-  return this.prenom + ' ' + this.nom;
-}
-
-function personneNomCompletInverse() {
-  return this.nom + ' ' + this.prenom;
-}
-
-function Personne(prenom, nom) {
-  this.prenom = prenom;
-  this.nom = nom;
-  this.nomComplet = personneNomComplet;
-  this.nomCompletInverse = personneNomCompletInverse;
-}
-
- -

C'est mieux : on crée les fonctions une seule fois, et on leur assigne des références au sein du constructeur. Est-il possible de faire encore mieux que ça ? La réponse est oui :

- -
-function Personne(prenom, nom) {
-  this.prenom = prenom;
-  this.nom = nom;
-}
-
-Personne.prototype.nomComplet = function() {
-  return this.prenom + ', ' + this.nom;
-}
-
-Personne.prototype.nomCompletInverse = function() {
-  return this.nom + ', ' + this.prenom;
-}
-
- -

Personne.prototype est un objet partagé par toutes les instances de Personne. Il fait partie d'une chaîne de résolution (qui a un nom spécial, la « chaîne de prototypes ») : chaque fois que vous essayez d'accéder à une propriété de Personne qui n'est pas définie, JavaScript va vérifier Personne.prototype pour voir si cette propriété n'existe pas plutôt à cet endroit. Par conséquent, tout ce qui est assigné à Personne.prototype devient disponible à toutes les instances de ce constructeur via l'objet this.

- -

C'est un outil incroyablement puissant. JavaScript vous permet de modifier le prototype de quelque chose à tout moment dans votre programme, cela signifie qu'il est possible d'ajouter des méthodes supplémentaires à des objets existants lors de l'exécution :

- -
-let s = new Personne("Simon", "Willison");
-s.prenomEnMajuscules(); // TypeError on line 1: s.prenomEnMajuscules is not a function
-
-Personne.prototype.prenomEnMajuscules = function prenomEnMajuscules() {
-  return this.prenom.toUpperCase()
-}
-s.prenomEnMajuscules(); // "SIMON"
-
- -

Il est également possible d'ajouter des choses aux prototypes de classes d'objets JavaScript prédéfinies. Ajoutons par exemple une méthode à String qui renvoie cette chaîne à l'envers :

- -
-let s = "Simon";
-s.inverse(); // TypeError on line 1: s.inverse is not a function
-
-String.prototype.inverse = function inverse() {
-  let r = "";
-  for (let i = this.length - 1; i >= 0; i--) {
-    r += this[i];
-  }
-  return r;
-}
-s.inverse(); // "nomiS"
-
- -

Notre nouvelle méthode fonctionne même sur les chaînes littérales !

- -
"Ceci peut maintenant être inversé.".inverse() // ".ésrevni ertê tnanetniam tuep iceC"
- -

Comme mentionné précédemment, le prototype fait partie d'une chaîne de prototypes. Le début de cette chaîne est Object.prototype, dont toString() fait partie des méthodes. C'est cette méthode qui est appelée quand vous essayez de représenter un objet sous la forme d'une chaîne. Elle sera utile pour déboguer nos objets Personne :

- -
-let s = new Personne("Simon", "Willison");
-s; // [object Object]
-
-Personne.prototype.toString = function() {
-  return '<Personne : ' + this.nomComplet() + '>';
-}
-s.toString(); // "<Personne : Simon Willison>"
-
- -

Vous vous souvenez de la fonction moyenne.apply() qui avait un premier paramètre défini à null ? Nous pouvons en reparler à présent. Le premier paramètre d'apply() est l'objet qui doit être traité comme this. Par exemple, voici une implémentation de new :

- -
-function trivialNew(constructor, ...args) {
-  let o = {}; // Crée un objet
-  constructor.apply(o, ...args);
-  return o;
-}
-
- -

Ce n'est pas une réplique exacte de new parce qu'elle n'initialise pas la chaîne de prototype. La méthode apply() est difficile à illustrer, ce n'est pas quelque chose qu'on utilise très souvent, mais c'est utile de savoir qu'elle existe. Dans ce fragment de code, on utilise le reste des arguments, représentés par ...args. Comme son nom l'indique, cela représente le reste des arguments passés à la fonction.

- -

Appeler

- -
let bill = trivialNew(Personne, ["William", "Orange"]);
- -

est donc quasiment équivalent à :

- -
let bill = new Personne("William", "Orange");
- -

apply() possède une fonction proche, appelée call, qui permet de définir la valeur de this mais qui prend une liste d'arguments plutôt qu'un tableau.

- -
-function nomMajuscule() {
-  return this.nom.toUpperCase();
-}
-let s = new Personne("Simon", "Willison");
-nomMajuscule.call(s); // correspond à:
-s.nomMajuscule = nomMajuscule;
-s.nomMajuscule();
-
- -

Les fonctions internes

- -

Comme nous l'avons déjà vu, les déclarations de fonctions JavaScript peuvent se trouver à l'intérieur d'autres fonctions. Un détail important des fonctions définies à l'intérieur d'autres fonctions est qu'elles peuvent accéder à des variables de leur fonction parente :

- -
-function parentFunc() {
-  let a = 1;
-  function fonctionImbriquee() {
-    let b = 4; // Inacessible depuis parentFunc()
-    return a + b;
-  }
-  return fonctionImbriquee(); // 5
-}
- -

Cela peut s'avérer très utile dans l'écriture de code plus facilement maintenable. Si une fonction A dépend d'une ou deux autres fonctions B et C qui ne sont utiles à aucun autre endroit de votre code, on peut imbriquer ces fonctions utilitaires B et C à l'intérieur de la fonction A. Cela diminue le nombre de fonctions se trouvant dans la portée globale, ce qui est toujours une bonne chose.

- -

C'est également un bon moyen de se préserver de l'attrait trompeur des variables globales. Lorsqu'on écrit du code complexe, il est souvent tentant d'utiliser des variables globales pour partager des valeurs entre différentes fonctions, ce qui mène à du code difficile à maintenir. Les fonctions internes peuvent partager des variables avec leur parent, de sorte que vous pouvez utiliser ce mécanisme pour coupler des fonctions ensemble lorsque cela a un sens, sans pour autant polluer l'espace de noms global. Ce sont ainsi des « globales locales ». Cette technique doit être utilisée parcimonieusement, mais il est utile de s'en souvenir.

- -

Les fermetures (Closures)

- -

Cela nous amène à l'une des abstractions les plus spectaculaires que JavaScript a à nous offrir. C'est également un des concepts les plus déroutants. Que fait ce fragment de code ?

- -
-function creerAdditionneur(a) {
-  return function(b) {
-    return a + b;
-  }
-}
-let ajoute5 = creerAdditionneur(5);
-let ajoute20 = creerAdditionneur(20);
-ajoute5(6); // ?
-ajoute20(7); // ?
-
- -

Le nom de la fonction creerAdditionneur devrait vous donner un indice : elle crée de nouveaux additionneurs sous forme de fonctions qui, quand elles sont appelées avec un paramètre, l'ajoutent à celui avec lequel elles ont été créées.

- -

Ce qui se passe ici est sensiblement la même chose qu'avec les fonctions internes dont nous avons parlé précédemment : une fonction définie à l'intérieur d'une autre fonction a accès aux variables de sa fonction extérieure. La seule différence ici est que la fonction extérieure a déjà renvoyé son résultat, et le bon sens semblerait vouloir être que ses variables locales n'existent plus. Mais elles existent encore ; autrement les additionneurs présentés ci-dessus ne fonctionneraient pas. Ce n'est pas tout, il y a même deux « copies » différentes des variables locales de creerAdditionneur : une dans laquelle a vaut 5 et une autre dans laquelle a vaut 20. Quel est donc le résultat de ces appels de fonction ?

- -
-ajoute5(6); // renvoie 11
-ajoute20(7); // renvoie 27
-
- -

Voici ce qui se passe en réalité. Lorsque JavaScript exécute une fonction, un objet de portée est créé pour conserver les variables locales créées au sein de cette fonction. Il est initialisé avec les variables passées en paramètres à la fonction. Cela ressemble à l'objet global dans lequel toutes les variables et fonctions globales se trouvent, mais avec quelques différences importantes : premièrement, un nouvel objet de portée est créé chaque fois qu'une fonction commence à s'exécuter, et deuxièmement, contrairement à l'objet global (qui est accessible via this et qui, dans le navigateur, correspond à l'objet window), on ne peut pas directement accéder à ces objets de portée depuis le code JavaScript. Il n'existe pas de mécanisme permettant de parcourir les propriétés de l'objet de la portée courante par exemple.

- -

Donc, quand creerAdditionneur() est appelée, une portée est créée avec une propriété : a, qui est l'argument passé à la fonction creerAdditionneur(). Celle-ci renvoie alors une fonction nouvellement créée. Normalement, le ramasse-miettes de JavaScript devrait supprimer l'objet de portée créé pour creerAdditionneur() à ce moment, mais la fonction renvoyée garde une référence vers cet objet de portée. Par conséquent, il ne sera pas supprimé par le ramasse-miettes tant qu'il y a toujours des références à l'objet de type fonction que creerAdditionneur() a renvoyé.

- -

Les objets de portée forment une chaîne appelée chaîne de portée, similaire à la chaîne de prototypes utilisée par le système d'objets de JavaScript.

- -

Une fermeture est la combinaison d'une fonction et de la portée de l'objet dans lequel elle a été créée. Les fermetures vous permettent de sauvegarder l'état — en tant que telles, elles peuvent souvent être utilisées à la place des objets. Vous pouvez trouver plusieurs excellentes introductions aux fermetures dans cet article.

diff --git a/files/fr/web/javascript/a_re-introduction_to_javascript/index.md b/files/fr/web/javascript/a_re-introduction_to_javascript/index.md new file mode 100644 index 0000000000..0724f02931 --- /dev/null +++ b/files/fr/web/javascript/a_re-introduction_to_javascript/index.md @@ -0,0 +1,1045 @@ +--- +title: Une réintroduction à JavaScript +slug: Web/JavaScript/A_re-introduction_to_JavaScript +tags: + - CodingScripting + - Guide + - Intermediate + - Intro + - JavaScript + - Learn +translation_of: Web/JavaScript/A_re-introduction_to_JavaScript +original_slug: Web/JavaScript/Une_réintroduction_à_JavaScript +--- +
{{jsSidebar}}
+ +

Pourquoi une réintroduction ? Parce que JavaScript est connu pour être source d'incompréhensions. Bien que souvent raillé comme étant un simple jouet, derrière sa simplicité désarmante se cachent certaines fonctionnalités de langage très puissantes. JavaScript est maintenant utilisé par un nombre incroyable d'applications de haut rang, ce qui montre qu'une connaissance approfondie de cette technologie est une compétence importante pour toute développeuse ou développeur web ou mobile.

+ +

Il peut être utile de commencer avec un aperçu de l'histoire de ce langage. JavaScript a été créé en 1995 par Brendan Eich, alors ingénieur à Netscape. Ce langage est sorti au grand jour pour la première fois avec Netscape 2 au début de l'année 1996. Il était au départ censé s'appeler LiveScript, mais a été renommé par une décision marketing mal avisée dans le but de capitaliser sur la popularité du langage Java de Sun Microsystems, malgré le fait qu'ils n'aient que très peu en commun. Cela n'a jamais cessé d'être une source de confusion.

+ +

Quelques mois plus tard, Microsoft a lancé avec Internet Explorer 3 une version du langage globalement compatible, appelée JScript. Quelques mois après, Netscape a soumis le langage à l'Ecma International, une organisation de normalisation européenne, ce qui a permis d'aboutir à la première édition du standard ECMAScript en 1997. Ce standard a reçu une mise à jour importante appelée ECMAScript edition 3 en 1999, et est resté relativement stable depuis. La quatrième édition a été abandonnée suite à des différends portants sur la complexité du langage. De nombreuses sections de la quatrième édition ont été utilisées pour servir de fondation à la cinquième édition d'ECMAScript, publiée en décembre 2009. La sixième édition, qui apporte des nouveautés majeures, a été publiée en juin 2015.

+ +
+

Note : Dans la suite de cet article et à des fins de simplicité, nous utiliserons les termes « JavaScript » et « ECMAScript » pour désigner la même chose.

+
+ +

Contrairement à la plupart des langages de programmation, JavaScript n'a pas de concept d'entrée ou de sortie. Il est conçu pour s'exécuter comme un langage de script dans un environnement hôte, et c'est à cet environnement de fournir des mécanismes de communication avec le monde extérieur. L'environnement hôte le plus commun est un navigateur, mais des interpréteurs JavaScript existent également dans Adobe Acrobat, Photoshop, les images SVG, le moteur de widgets de Yahoo!, et même au sein d'environnements côté serveur tels que Node.js. Cette liste ne se limite pas qu'à ces éléments et on retrouve également JavaScript dans les bases de données NoSQL telles que Apache CouchDB, les ordinateurs embarqués ou encore des environnements de bureaux comme GNOME (l'une des interfaces graphiques les plus populaires des systèmes d'exploitation GNU/Linux), etc.

+ +

Aperçu

+ +

JavaScript est un langage dynamique multi-paradigme : il dispose de différents types, opérateurs, objets natifs et méthodes. Sa syntaxe s'inspire des langages Java et C et de nombreuses structures de ces langages s'appliquent également à JavaScript. JavaScript permet la programmation orientée objet avec les prototypes (voir l'héritage et la chaîne de prototypes et les classes apparues avec ES6/ES2015). JavaScript permet également la programmation fonctionnelle car ses fonctions sont des objets et on peut donc stocker ces fonctions dans des variables et les transmettre comme n'importe quel objet.

+ +

Commençons par nous intéresser aux briques de base de tout langage : les types. Les programmes en JavaScript manipulent des valeurs, et ces valeurs appartiennent toutes à un type. Les types JavaScript sont :

+ + + +

On aura également undefined et null, qui sont relativement étranges. Les tableaux ou Array permettent d'organiser des séries d'objets au sein d'un même objet. Les dates (Date) et les expressions rationnelles (RegExp) qui sont également des objets nativement disponibles en JavaScript. Afin d'être tout à fait précis, les fonctions sont aussi une sorte particulière d'objets, de sorte que le diagramme de types ressemble plutôt à ceci :

+ + + +

Enfin, il y a également quelques types natifs pour gérer les exceptions : Error. Pour garder une approche simple, nous utiliserons la première de ces listes pour présenter les types.

+ +

Les nombres

+ +

ECMAScript possède deux types numériques intégrés : Number et BigInt.

+ +

Les nombres en JavaScript sont « des valeurs au format IEEE 754 en double précision 64 bits », d'après la spécification. Cela permet de représenter les nombres entre -(2^53 − 1) et 2^53 − 1. Lorsqu'on fait référence (ici ou dans les autres articles) à des entiers, on parle généralement d'une représentation d'un entier avec une valeur de type Number. En effet, les valeurs Number ne sont pas strictement des entiers et il faut donc prendre quelques précautions :

+ +
+console.log(3 / 2);             // 1.5 et pas 1
+console.log(Math.floor(3 / 2)); // 1
+
+ +

Ainsi, un entier apparent est en fait implicitement un nombre à virgule flottante.

+ +

Aussi, faites attention à des choses comme :

+ +
0.1 + 0.2 == 0.30000000000000004;
+ +

Dans la pratique, les valeurs entières sont traitées comme des entiers représentés sur 32 bits (certaines implémentations les stockent même ainsi tant qu'il n'y a pas besoin d'effectuer une opération valide pour un nombre mais pas pour un entier sur 32 bits). Cette représentation peut être importante pour les opérations binaires.

+ +

Les opérateurs arithmétiques standards sont gérés, dont l'addition, la soustraction, le reste arithmétique et ainsi de suite. Il existe également un objet natif, qui n'a pas été mentionné jusqu'à présent, appelé Math, qui permet de gérer certaines fonctions et constantes mathématiques plus avancées :

+ +
+Math.sin(3.5);
+let circonference = 2 * Math.PI * r;
+
+ +

On peut convertir une chaîne de caractères en un nombre entier à l'aide de la fonction intégrée parseInt(). Elle reçoit la base de conversion comme second paramètre, qui devrait toujours être fourni afin de lever une éventuelle ambiguïté :

+ +
+parseInt("123", 10); // 123
+parseInt("010", 10); //10
+
+ +

Si la base n'est pas indiquée, les résultats peuvent être surprenants dans les anciens navigateurs qui datent de 2013 ou avant où les chaînes commençant par 0 pouvaient ne pas être considérées comme exprimées en notation octale. À moins que vous ne soyez certain du format de votre chaîne de caractères, vous pouvez obtenir des résultats surprenants sur ces anciens navigateurs :

+ +
+parseInt("010");  //  8
+parseInt("0x10"); // 16
+
+ +

Cela se produit parce que la fonction parseInt() a été implémentée pour traiter la première chaîne comme un nombre octal à cause du zéro initial et la seconde comme une représentation hexadécimale car commençant avec 0x. Une telle notation hexadécimale peut toujours être utilisée mais la notation octale a été retirée.

+ +

Si on souhaite convertir un nombre binaire en un entier, il suffit de changer la base :

+ +
parseInt("11", 2); // 3
+ +

De la même manière, vous pouvez traiter les nombres à virgule flottante à l'aide de la fonction intégrée parseFloat(), qui, à la différence de parseInt(), utilise toujours la base 10.

+ +

On peut également utiliser l'opérateur unaire + pour convertir des valeurs en nombres :

+ +
++ "42";   // 42
++ "010";  // 10
++ "0x10"; // 16
+
+ +

Une valeur spéciale appelée NaN (qui signifie « Not a Number », soit « pas un nombre ») est renvoyée si la chaîne est non numérique :

+ +
parseInt("coucou", 10); // NaN
+ +

NaN est « toxique » : si cette valeur est fournie en entrée pour n'importe quelle opération mathématique, le résultat sera également NaN :

+ +
NaN + 5; // NaN
+ +

Cette valeur peut être détectée grâce à la fonction native Number.isNaN() (qui fait exactement ce que son nom indique) :

+ +
+Number.isNaN(NaN); // true
+Number.isNaN('bonjour'); // false
+Number.isNaN('1'); // false
+Number.isNaN(undefined); // false
+Number.isNaN({}); // false
+Number.isNaN([1]) // false
+Number.isNaN([1,2]) // false
+
+ +

Mais ne testez pas le NaN en utilisant la fonction globale isNaN(), qui a un comportement peu intuitif :

+ +
+isNaN('bonjour'); // true
+isNaN('1'); // false
+isNaN(undefined); // true
+isNaN({}); // true
+isNaN([1]) // false
+isNaN([1,2]) // true
+
+ +

JavaScript dispose également de valeur spéciales pour l'infini Infinity et l'infini négatif (-Infinity) :

+ +
+1 / 0; // Infinity
+-1 / 0; // -Infinity
+
+ +

Il est possible de tester les valeurs Infinity, -Infinity et NaN à l'aide de la fonction native isFinite() :

+ +
+isFinite(1/0); // false
+isFinite(-Infinity); // false
+isFinite(NaN); // false
+
+ +
+

Note : Les fonctions parseFloat() et parseInt() traitent une chaîne de caractères jusqu'à ce qu'elles atteignent un caractère qui n'est pas valide pour le format numérique indiqué, puis renvoient le nombre traité jusqu'à ce point. Cependant, l'opérateur "+" convertit simplement la chaîne à NaN à partir du moment où la chaîne contient le moindre caractère non valide. Vous pouvez tester ce comportement en manipulant la chaîne "10.2abc" avec chaque méthode dans la console afin de mieux comprendre les différences.

+
+ +

Les chaînes de caractères

+ +

Les chaînes en JavaScript sont des séquences de caractères Unicode. Cette nouvelle devrait être bien accueillie par toute personne qui a déjà eu affaire à des problèmes d'internationalisation. Pour être plus précis, ce sont des séquences de codets UTF-16 : chaque codet est représenté par un nombre sur 16 bits et chaque caractère Unicode est représenté par 1 ou 2 codets.

+ +

Si vous voulez représenter un seul caractère, il suffit d'utiliser une chaîne qui contient un seul caractère.

+ +

Pour connaître la longueur d'une chaîne, utilisez sa propriété length :

+ +
"bonjour".length; // 7
+ +

C'est notre première rencontre avec les objets JavaScript ! Les chaînes peuvent également être utilisées comme des objets. Elles possèdent aussi des méthodes permettant de manipuler la chaîne et d'accéder à certaines informations sur cette chaîne de caractères :

+ +
+"bonjour".charAt(0); // "b"
+"coucou monde".replace("coucou", "bonjour"); // "bonjour monde"
+"bonjour".toUpperCase(); // "BONJOUR"
+
+ +

Les autres types

+ +

JavaScript fait la distinction entre null, qui est un objet de type object indiquant une absence délibérée de valeur, et undefined qui est un objet de type undefined indiquant une variable non initialisée — c'est-à-dire qui n'a pas encore été assignée. Nous parlerons des variables plus tard, mais en JavaScript il est possible de déclarer une variable sans lui assigner de valeur. Si vous faites cela, le type de la variable sera undefined qui est une constante.

+ +

JavaScript dispose d'un type booléen, dont les valeurs possibles sont true (vrai) et false (faux). L'un et l'autre sont des mots clés. Toute valeur peut être convertie en une valeur booléenne selon les règles suivantes :

+ +
    +
  1. false, 0, la chaîne vide (""), NaN, null et undefined deviennent toutes false
  2. +
  3. toutes les autres valeurs deviennent true.
  4. +
+ +

Cette conversion peut être faite de manière explicite à l'aide de la fonction Boolean() :

+ +
+Boolean("");  // false
+Boolean(234); // true
+
+ +

Cependant, c'est rarement nécessaire, puisque JavaScript effectuera cette conversion silencieusement chaque fois qu'il attend une valeur booléenne, par exemple dans une instruction if (voir plus bas). Pour cette raison, on parle souvent simplement de valeurs « vraies » et « fausses » pour indiquer des valeurs devenant respectivement true et false lorsqu'elles sont converties en valeurs booléennes.

+ +

Les opérations booléennes comme && (et logique), || (ou logique) et ! (non logique) sont également gérées, comme on le verra plus bas.

+ +

Les variables

+ +

En JavaScript, on peut déclarer de nouvelles variables grâce à l'un de ces trois mots-clés : let, const, ou var.

+ +

let permet de déclarer des variables qui pourront être utilisées dans un bloc. La variable déclarée avec let est uniquement disponible dans le bloc qui contient la déclaration.

+ +
+let a;
+let nom = "Simon";
+
+ +

Voici un exemple de portée avec let :

+ +
+// variableLet n'est pas utilisable ici
+
+for (let variableLet = 0; variableLet < 5; variableLet++) {
+  // variableLet peut être utilisée ici
+}
+
+// variableLet n'est pas utilisable ici
+
+ +

const permet de déclarer des variables dont la valeur ne doit pas changer. Une variable déclarée avec const est disponible dans le bloc dans lequel elle est déclarée.

+ +
+const Pi = 3.14; // la constante Pi est définie
+Pi = 1; // produira une erreur, car on ne peut pas modifier une variable constante.
+
+ +

var est le mot-clé le plus fréquemment utilisé pour déclarer des variables. Ce mot-clé était disponible avant let et const (c'était alors le seul qui permettait de déclarer des variables). Une variable qu'on déclare avec var est disponible dans la fonction dans laquelle elle est déclarée.

+ +
+var a;
+var nom = "simon";
+
+ +

Voici un exemple pour étudier la portée d'une variable déclarée avec var :

+ +
+// variableVar *est* utilisable ici
+
+for (var variableVar = 0; variableVar < 5; variableVar++) {
+  // variableVar *est* également disponible ici
+}
+
+// variableVar *est* toujours disponible ici
+ +

Si on déclare une variable sans lui affecter aucune valeur, son type sera alors undefined.

+ +

JavaScript possède une différence importante quant aux autres langages de programmation comme Java : en JavaScript, les blocs ne créent pas de portées pour les variables déclarées avec var, c'est la fonction qui gère la portée d'une variable déclarée avec var. Aussi, si une variable est définie avec var au sein d'une instruction conditionnelle avec if, cette variable sera visible depuis l'ensemble de la fonction. Avec ECMAScript 2015, les instructions de déclarations, let et const permettent de créer des variables dont la portée est limitée à celle du bloc qui l'englobe.

+ +

Les opérateurs

+ +

Les opérateurs numériques en JavaScript sont +, -, *, / et % (qui est l'opérateur de reste, à ne pas confondre avec le « modulo » mathématique). Les valeurs sont affectées à l'aide de = et il existe également des opérateurs d'affectation combinés comme += et -=. Ils sont équivalents à x = x opérateur y.

+ +
+x += 5;
+x = x + 5;
+
+ +

Vous pouvez utiliser ++ et -- respectivement pour incrémenter et pour décrémenter. Ils peuvent être utilisés comme opérateurs préfixes ou suffixes.

+ +

L'opérateur + permet également de concaténer des chaînes :

+ +
"coucou" + " monde"; // "coucou monde"
+ +

Si vous additionnez une chaîne à un nombre (ou une autre valeur), tout est d'abord converti en une chaîne. Ceci pourrait vous surprendre :

+ +
+"3" + 4 + 5; // "345"
+3 + 4 + "5"; // "75"
+
+ +

L'ajout d'une chaîne vide à une valeur est une manière utile de convertir cette valeur une chaîne de caractères.

+ +

Les comparaisons en JavaScript se font à l'aide des opérateurs <, >, <= et >=. Ceux-ci fonctionnent tant pour les chaînes que pour les nombres. L'égalité est un peu moins évidente. L'opérateur double égal effectue une équivalence si vous lui donnez des types différents, ce qui donne parfois des résultats intéressants :

+ +
+123 == "123"; // true
+1 == true;    // true
+
+ +

Pour éviter les conversions implicites avant les comparaisons, utilisez l'opérateur triple égal :

+ +
+123 === "123"; //false
+true === true; // true
+
+ +

Les opérateurs != et !== existent également.

+ +

JavaScript dispose également d'opérations bit à bit.

+ +

Les structures de contrôle

+ +

JavaScript dispose d'un ensemble de structures de contrôle similaires aux autres langages de la famille du langage C. Les structures conditionnelles sont présentes avec if et else ; lesquels peuvent être chaînés si nécessaire :

+ +
+let nom = "des chatons";
+if (nom == "des chiots") {
+  nom += " !";
+} else if (nom == "des chatons") {
+  nom += " !!";
+} else {
+  nom = " !" + nom;
+}
+nom == "des chatons !!"
+
+ +

JavaScript dispose également de boucles while et do-while. Les premières permettent de former des boucles basiques ; les secondes permettent de construire des boucles qui seront exécutées au moins une fois :

+ +
+while (true) {
+  // une boucle infinie !
+}
+
+let input;
+do {
+  input = getInput();
+} while (inputNonValide(input));
+
+ +

Les boucles for en JavaScript sont les mêmes qu'en C et en Java : elles permettent de fournir les informations de contrôle de la boucle en une seule ligne.

+ +
+for (let i = 0; i < 5; i++) {
+  // Sera exécutée cinq fois
+}
+
+ +

JavaScript permet également d'utiliser deux autres types de boucles : for...of :

+ +
+for (let element of tableau) {
+  // utiliser des instructions
+  // pour manipuler la valeur element
+}
+
+ +

et for...in :

+ +
+for (let propriete in objet) {
+  // utiliser des instructions
+  // pour manipuler la propriété de l'objet
+}
+
+ +

Les opérateurs && et || utilisent une logique de court-circuit, ce qui signifie qu'ils exécuteront leur second opérande ou non selon la valeur du premier. C'est très utile pour vérifier qu'un objet n'est pas égal à null avant d'essayer d'accéder à ses attributs :

+ +
let nom = o && o.getNom();
+ +

Ou pour définir des valeurs par défaut :

+ +
let nom = autreNom || "nomParDéfaut";
+ +

De la même façon, le OU peut être utilisé pour mettre en cache des valeurs (lorsque les valeurs équivalentes à faux sont invalides) :

+ +
let nom = nomEnCache || (nomEnCache = getNom());
+ +

JavaScript propose également un opérateur ternaire pour les assignations conditionnelles en une ligne :

+ +
let permis = (age > 18) ? "oui" : "non";
+ +

L'instruction switch peut être utilisée pour différentes branches de code basées sur un nombre ou une chaîne :

+ +
+switch (action) {
+  case 'dessiner':
+    dessine();
+    break;
+  case 'manger':
+    mange();
+    break;
+  default:
+    neRienFaire();
+}
+
+ +

Si vous n'ajoutez pas d'instruction break, l'exécution va se poursuivre au niveau suivant. C'est rarement ce qui est désiré, en fait ça vaut même la peine de préciser dans un commentaire si la poursuite au cas suivant est délibérée pour aider au débogage :

+ +
switch (a) {
+  case 1: // identique au cas 2
+  case 2:
+    mange();
+    break;
+  default:
+    nerienfaire();
+}
+ +

La clause default est optionnelle. Vous pouvez placer des expressions à la fois dans la partie switch et dans les cas à gérer si vous voulez ; les comparaisons entre les deux se font comme si on avait utilisé l'opérateur === :

+ +
switch (1 + 3){
+  case 2 + 2:
+    yay();
+    break;
+  default:
+    nArriveJamais();
+}
+ +

Les objets

+ +

Les objets en JavaScript sont simplement des collections de paires nom-valeur. Dans ce sens, ils sont similaires aux :

+ + + +

Le fait que cette structure de données soit si largement utilisée est un témoignage de sa polyvalence. Puisque tout (sauf les types de base) est un objet en JavaScript, tout programme écrit dans ce langage implique naturellement un grand nombre de recherches dans des tables de hachage. C'est une bonne chose que ce soit si rapide !

+ +

La partie « nom » est une chaîne JavaScript, tandis que la partie « valeur » peut être n'importe quelle valeur JavaScript, y compris d'autres objets. Cela permet de construire des structures de données de n'importe quel niveau de complexité.

+ +

Il existe deux façons très simples pour créer un objet vide :

+ +
let obj = new Object();
+ +

Et :

+ +
let obj = {};
+ +

Ils sont sémantiquement équivalents ; la seconde écriture est appelée syntaxe littérale d'objet et est plus pratique. Cette syntaxe est également au cœur du format JSON et devrait être privilégiée à tout moment.

+ +

La syntaxe littérale pour écrire un objet peut être utilisée afin d'initialiser tout un objet :

+ +
+let obj = {
+  name: 'Carotte',
+  _for: 'Max', // Le mot "for" est un mot réservé, utilisez plutôt "_for".
+  details: {
+    color: 'orange',
+    size: 12
+  }
+};
+ +

L'accès aux attributs peut être enchaîné :

+ +
+obj.details.color; // orange
+obj['details']['size']; // 12
+
+ +

L'exemple suivant crée un prototype d'objet (Person) et une instance de ce prototype (you).

+ +
+function Person(name, age) {
+  this.name = name;
+  this.age = age;
+}
+
+// Définir un objet
+let you = new Person('You', 24);
+// Nous créons une nouvelle personne nommée "You" âgée de 24 ans.
+
+ +

Une fois l'objet créé, on peut accéder à ses propriétés de l'une des deux manières suivantes :

+ +
+// notation par points
+obj.name = 'Simon';
+let name = obj.name;
+
+ +

Et…

+ +
+// notation entre crochets
+obj['name'] = 'Simon';
+let name = obj['name'];
+// on peut utiliser une variable pour définir une clé
+let user = prompt('quelle clé ?');
+obj[user] = prompt('quelle valeur ?');
+
+ +

Ces deux méthodes sont également sémantiquement équivalentes. La seconde méthode a l'avantage de fournir le nom de l'attribut de l'objet dans une chaîne, ce qui signifie qu'il peut être calculé au moment de l'exécution (mais ce qui peut empêcher certaines optimisations du moteur JavaScript). Elle peut également être utilisée pour définir et lire des propriétés dont les noms sont des mots réservés :

+ +
+obj.for = "Simon"; // erreur de syntaxe, car "for" est un mot réservé
+obj["for"] = "Simon"; // fonctionne très bien
+
+ +
+

Note : À partir d'ECMAScript 5, les mots réservés peuvent être utilisés comme noms de propriétés d'objets « en vrac ». Cela signifie qu'ils n'ont pas besoin d'être « habillés » de guillemets lors de la définition des littéraux d'objet. Voir la spécification ES5.

+
+ +

Pour en savoir plus sur les objets et les prototypes, voir Object.prototype. Pour une explication des prototypes d'objets et des chaînes de prototypes, voir l'héritage et la chaîne de prototypes.

+ +
+

Note : À partir d'ECMAScript 2015, les clés des objets peuvent être définies par la variable en utilisant la notation entre parenthèses lors de sa création. {[phoneType] : 12345} est possible au lieu de simplement var userPhone = {}; userPhone[phoneType] = 12345;.

+
+ +

Les tableaux

+ +

Les tableaux (Arrays) en JavaScript sont en fait un type spécial d'objets. Ils fonctionnent d'une façon tout à fait similaire aux objets normaux (on peut naturellement accéder aux propriétés numériques avec la syntaxe des crochets []), mais ils ont également une propriété magique appelée length. Elle vaut toujours un de plus que le plus grand indice dans le tableau.

+ +

L'ancienne manière de créer des tableaux est celle-ci :

+ +
+let a = new Array();
+a[0] = "chien";
+a[1] = "chat";
+a[2] = "poule";
+a.length; // 3
+
+ +

Une notation plus pratique est la syntaxe littérale :

+ +
+let a = ["chien", "chat", "poule"];
+a.length; // 3
+
+ +

Notez que array.length ne correspond pas nécessairement au nombre d'éléments dans le tableau. Observez le code suivant :

+ +
+let a = ["chien", "chat", "poule"];
+a[100] = "renard";
+a.length // 101
+
+ +

Rappelez-vous : la longueur du tableau vaut simplement un de plus que l'indice le plus élevé.

+ +

Si vous interrogez un élément de tableau non existant, vous obtenez undefined :

+ +
typeof(a[90]); // undefined
+ +

Si vous prenez cela en compte, il est possible de parcourir un tableau à l'aide de la boucle suivante :

+ +
+for (let i = 0; i < a.length; i++) {
+  // Faire quelque chose avec a[i]
+}
+
+ +

ES2015 a introduit la boucle plus concise for...of pour les objets itérables tels que les tableaux :

+ +
+for (const currentValue of a) {
+  // Faire quelque chose avec currentValue
+}
+
+ +

Vous pourriez également itérer sur un tableau en utilisant une boucle for...in, cependant cela n'itère pas sur les éléments du tableau, mais sur les indices du tableau. De plus, si quelqu'un ajoutait de nouvelles propriétés à Array.prototype, elles seraient également parcourues par une telle boucle. Par conséquent, ce type de boucle n'est pas recommandé pour les tableaux.

+ +

Une autre façon d'itérer sur un tableau qui a été ajoutée avec ECMAScript 5 est forEach() :

+ +
+['chien', 'chat', 'poule'].forEach(function(currentValue, index, array) {
+  // Faire quelque chose avec currentValue ou array[index]
+});
+
+ +

Si vous voulez ajouter un élément à un tableau, procédez comme suit :

+ +
a.push(item);
+ +

Les tableaux sont accompagnés d'un certain nombre de méthodes. Voir également la documentation complète sur les méthodes des tableaux.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nom de la méthodeDescription
a.toString()Renvoie une chaîne composée des différents éléments auxquels on a appliqué toString(), séparés par des virgules.
a.toLocaleString()Renvoie une chaîne composée des différents éléments auxquels on a appliqué toLocaleString(), séparés par des virgules.
a.concat(item1[, item2[, ...[, itemN]]])Renvoie un nouveau tableau auquel on a ajouté les éléments.
a.join(sep)Convertit le tableau en une chaîne dont les valeurs sont séparées par le paramètre sep.
a.pop()Renvoie le dernier élément du tableau et le retire du tableau.
a.push(item1, ..., itemN)Ajoute un ou plusieurs éléments à la fin du tableau.
a.shift()Renvoie le premier élément du tableau et le retire du tableau.
a.unshift(item1[, item2[, ...[, itemN]]])Ajoute des éléments au début du tableau.
a.slice(start[, end])Renvoie un sous-tableau.
a.sort([cmpfn])Trie le tableau (avec une fonction de comparaison optionnelle).
a.splice(start, delcount[, item1[, ...[, itemN]]])Permet de modifier un tableau en en supprimant une partie et en la remplaçant avec plus d'éléments.
a.reverse()Retourne le tableau.
+ +

Les fonctions

+ +

Avec les objets, les fonctions sont les composants de base d'une bonne compréhension de JavaScript. La fonction la plus basique n'a rien de compliqué :

+ +
+function ajoute(x, y) {
+  let total = x + y;
+  return total;
+}
+
+ +

Ceci représente tout ce qu'il y a à savoir à propos des fonctions basiques. Une fonction JavaScript peut recevoir 0 paramètre nommé ou plus. Son corps peut contenir autant d'instructions que vous le voulez et permet de déclarer des variables qui sont locales à la fonction. L'instruction return peut être utilisée pour renvoyer une valeur à tout moment, mettant ainsi fin à la fonction. Si aucune instruction return n'est utilisée (ou que l'instruction return n'est suivie d'aucune valeur), JavaScript renvoie undefined.

+ +

On se rendra compte que les paramètres sont plus des indications qu'autre chose. Il est en effet possible d'appeler une fonction sans lui fournir les paramètres qu'elle attend, auquel cas ils vaudront undefined.

+ +
+ajoute(); // NaN 
+// Il n'est pas possible d'additionner des variables indéfinies
+
+ +

Il est également possible de fournir plus de paramètres que demandé par la fonction :

+ +
+ajoute(2, 3, 4); // 5
+// les deux premiers sont additionnés ; 4 est ignoré
+
+ +

Par définition les fonctions ont accès à des variables supplémentaires à l'intérieur de leur corps, appelée arguments. Il s'agit d'un objet semblable à un tableau qui contient toutes les valeurs reçues par la fonction. Réécrivons la fonction ajoute pour recevoir autant de valeurs qu'on veut :

+ +
function ajoute() {
+  let somme = 0;
+  for (let i = 0, j = arguments.length; i < j; i++) {
+    somme += arguments[i];
+  }
+  return somme;
+}
+
+ajoute(2, 3, 4, 5); // 14
+
+ +

Ce n'est cependant pas vraiment plus utile que d'écrire 2 + 3 + 4 + 5. Écrivons plutôt une fonction de calcul de moyenne :

+ +
+function moyenne() {
+  let somme = 0;
+  for (let i = 0, j = arguments.length; i < j; i++) {
+    somme += arguments[i];
+  }
+  return somme / arguments.length;
+}
+moyenne(2, 3, 4, 5); // 3.5
+
+ +

C'est assez utile, mais cela semble un peu verbeux. Pour réduire un peu plus ce code, nous pouvons envisager de substituer l'utilisation du tableau d'arguments par la syntaxe du reste des paramètres. De cette façon, nous pouvons passer un nombre quelconque d'arguments dans la fonction tout en gardant notre code minimal. L'opérateur du reste des paramètres est utilisé dans les listes de paramètres de fonctions avec le format : ...variable et il inclura dans cette variable la liste entière des arguments non capturés avec lesquels la fonction a été appelée. Nous remplacerons également la boucle for par une boucle for...of pour retourner les valeurs dans notre variable.

+ +
+function moyenne(...args) {
+  let somme = 0;
+  for (let valeur of args) {
+    somme += valeur;
+  }
+  return somme / args.length;
+}
+moyenne(2, 3, 4, 5); // 3.5
+
+ +

Avec le reste des paramètres, dans l'exemple précédent, args contient tous les arguments passés à la fonction.

+ +

Il est important de noter que, quel que soit l'endroit où est écrit l'opérateur du reste des paramètres au sein de la déclaration de fonction, il stockera tous les arguments écrits après mais pas avant. Autrement dit, function avg(premiereValeur, ...args) stockera la première valeur passée à la fonction dans la variable firstValue et les autres arguments iront dans args.

+ +

C'est très pratique, mais on rencontre un nouveau problème. La fonction moyenne() reçoit une liste de valeurs séparées par des virgules, mais comment fait-on si on souhaite trouver la moyenne des valeurs d'un tableau ?

+ +

On pourrait simplement récrire la fonction comme ceci :

+ +
+function moyenneTableau(arr) {
+  let somme = 0;
+  for (let i = 0, j = arr.length; i < j; i++) {
+    somme += arr[i];
+  }
+  return somme / arr.length;
+}
+moyenneTableau([2, 3, 4, 5]); // 3.5
+
+ +

Mais ce serait bien si on pouvait réutiliser la fonction qu'on avait déjà créée. Par chance, JavaScript permet d'appeler une fonction et de lui donner un tableau de paramètres d'une longueur arbitraire, à l'aide de la méthode apply() de tout objet Function.

+ +
moyenne.apply(null, [2, 3, 4, 5]); // 3.5
+ +

Le second paramètre envoyé à apply() est le tableau à utiliser comme paramètre ; nous parlerons du premier plus tard. Cela permet de souligner le fait que les fonctions sont aussi des objets.

+ +

On peut également utiliser l'opérateur de décomposition pour l'appel et la définition de la fonction pour écrire, par exemple, moyenne(...nombres).

+ +

Fonctions anonymes

+ +

JavaScript vous permet de créer des fonctions anonymes, c'est-à-dire des fonctions sans nom :

+ +
+function() {
+  let somme = 0;
+  for (let i = 0, j = arguments.length; i < j; i++) {
+    somme += arguments[i];
+  }
+  return somme / arguments.length;
+};
+
+ +

Mais une telle fonction anonyme n'est pas utile en soi, car sans nom, il n'y a aucun moyen d'appeler la fonction. En pratique, les fonctions anonymes sont donc généralement utilisées comme arguments pour d'autres fonctions ou sont rendues appelables en les assignant immédiatement à une variable qui peut être utilisée pour invoquer la fonction :

+ +
+let moyenne = function() {
+  let somme = 0;
+  for (let i = 0, j = arguments.length; i < j; i++) {
+    somme += arguments[i];
+  }
+  return somme / arguments.length;
+};
+
+ +

Cela rend la fonction anonyme invocable en appelant moyenne() avec des arguments — c'est-à-dire que c'est sémantiquement équivalent à déclarer la fonction en utilisant la forme nommée fonction moyenne().

+ +

Mais les fonctions anonymes peuvent être utiles même si elles ne sont jamais affectées à des variables ou transmises comme arguments à d'autres fonctions : JavaScript fournit un mécanisme permettant de déclarer et d'invoquer simultanément une fonction à l'aide d'une seule expression. Cela s'appelle une expression de fonction invoquée immédiatement (IIFE pour l'acronyme anglais), et la syntaxe pour l'utiliser avec une fonction anonyme ressemble à ceci :

+ +
+(function() {
+  // …
+})();
+
+ +

De plus amples détails sur les IIFE sont hors de portée de cet article d'introduction — mais un bon exemple de ce à quoi ils sont particulièrement utiles se trouve dans la section Émulation de méthodes privées avec des fermetures de l'article Fermetures.

+ +

Fonctions récursives

+ +

JavaScript permet d'appeler des fonctions récursivement. C'est particulièrement utile lorsqu'on a affaire à des structures en arbre, comme c'est le cas dans le DOM du navigateur.

+ +
+function countChars(elm) {
+  if (elm.nodeType == 3) { // TEXT_NODE
+    return elm.nodeValue.length;
+  }
+  let count = 0;
+  for (let i = 0, child; child = elm.childNodes[i]; i++) {
+    count += countChars(child);
+  }
+  return count;
+}
+
+ +

Cela met en évidence un problème potentiel avec les fonctions anonymes : comment les appeler de manière récursive si elles n'ont pas de nom ? JavaScript vous permet de nommer les expressions de fonctions pour cela. Vous pouvez utiliser des IIFE (« Immediately Invoked Function Expressions » en anglais soit « Expressions de fonctions immédiatement invoquées » en français) nommées, comme indiqué ci-dessous :

+ +
+let charsInBody = (function counter(elm) {
+  if (elm.nodeType == 3) { // TEXT_NODE
+    return elm.nodeValue.length;
+  }
+  let count = 0;
+  for (let i = 0, child; child = elm.childNodes[i]; i++) {
+    count += counter(child);
+  }
+  return count;
+})(document.body);
+
+ +

Le nom fourni à l'expression de la fonction n'est disponible qu'au sein de la portée de la fonction. Cela permet au moteur JavaScript de faire des optimisations. Cela rend également le code plus lisible. Le nom apparaîtra également dans le débogueur et les piles d'appel, ce qui permettra de gagner du temps.

+ +

En JavaScript, les fonctions sont également des objets. Il est donc possible de leur ajouter ou de modifier leurs propriétés.

+ +

Les objets personnalisés

+ +
+

Note : Pour une approche plus détaillée de la programmation orientée objet en JavaScript, voir l'Introduction à JavaScript orienté objet.

+
+ +

Dans la programmation orientée objet classique, les objets sont des collections de données et de méthodes opérant sur ces données. Imaginons un objet personne avec les champs prénom et nom. Il y a deux manières d'afficher son nom complet : de la façon « prénom nom » ou de la façon « nom prénom ». À l'aide des fonctions et des objets vus précédemment, voici une manière de le faire :

+ +
+function creerPersonne(prenom, nom) {
+  return {
+    prenom: prenom,
+    nom: nom
+  };
+}
+
+function personneNomComplet(personne) {
+  return personne.prenom + ' ' + personne.nom;
+}
+
+function personneNomCompletInverse(personne) {
+  return personne.nom + ' ' + personne.prenom;
+}
+
+let s = creerPersonne("Simon", "Willison");
+personneNomComplet(s); // Simon Willison
+personneNomCompletInverse(s); // Willison Simon
+
+ +

Ça fonctionne, mais c'est inutilement verbeux. On va se retrouver avec des dizaines de fonctions dans l'espace de noms global. Ce dont on aurait vraiment besoin, c'est d'une manière d'attacher une fonction à un objet. Comme les fonctions sont des objets, c'est facile :

+ +
+function creerPersonne(prenom, nom) {
+  return {
+    prenom: prenom,
+    nom: nom,
+    nomComplet: function() {
+      return this.prenom + ' ' + this.nom;
+    },
+    nomCompletInverse: function() {
+      return this.nom + ' ' + this.prenom;
+    }
+  };
+}
+
+let s = creerPersonne("Simon", "Willison")
+s.nomComplet(); // Simon Willison
+s.nomCompletInverse(); // Willison Simon
+
+ +

Il y a quelque chose que nous n'avons pas vu jusqu'à présent : le mot-clé this. Utilisé au sein d'une fonction, this fait référence à l'objet courant. Sa signification dépend de la façon dont la fonction a été appelée. Si elle a été appelée avec la notation utilisant le point ou les crochets sur un objet, cet objet devient this. Si cette notation n'a pas été utilisée pour l'appel, this fera référence à l'objet global.

+ +

C'est une source fréquente d'erreurs. Par exemple :

+ +
+let s = creerPersonne("Simon", "Willison");
+let nomComplet = s.nomComplet;
+nomComplet(); // undefined undefined
+
+ +

Lorsqu'on appelle nomComplet() seul, sans utiliser s.nomComplet(), this est lié à l'objet global. Comme il n'y a pas de variables globales appelées prenom ou nom, on se retrouve avec undefined pour chacune.

+ +

On peut se servir du mot-clé this pour améliorer notre fonction de construction :

+ +
+function Personne(prenom, nom) {
+  this.prenom = prenom;
+  this.nom = nom;
+  this.nomComplet = function() {
+    return this.prenom + ' ' + this.nom;
+  }
+  this.nomCompletInverse = function() {
+    return this.nom + ' ' + this.prenom;
+  }
+}
+let s = new Personne("Simon", "Willison");
+
+ +

Nous avons utilisé un nouveau mot clé : new. new est très lié à this. Il crée un nouvel objet vide et appelle ensuite la fonction spécifiée, avec this pointant vers ce nouvel objet. On notera cependant que la fonction appelée avec ce this ne renvoie pas de valeur mais ne fait que modifier l'objet this. C'est l'opérateur new qui renvoie l'objet this à l'endroit de l'appel. Les fonctions prévues pour être appelées par new sont appelées des constructeurs. L'usage courant est de mettre la première lettre de ces fonctions en majuscule pour se souvenir de les appeler avec new.

+ +

La fonction améliorée présente toujours le même écueil avec l'appel de personneNomComplet() seul.

+ +

Nos objets Personne s'améliorent, mais il leur reste certaines aspérités pas très esthétiques. Chaque fois que l'on crée une personne, on crée deux nouveaux objets de fonctions en même temps. Ne serait-ce pas mieux si ce code était partagé ?

+ +
+function personneNomComplet() {
+  return this.prenom + ' ' + this.nom;
+}
+
+function personneNomCompletInverse() {
+  return this.nom + ' ' + this.prenom;
+}
+
+function Personne(prenom, nom) {
+  this.prenom = prenom;
+  this.nom = nom;
+  this.nomComplet = personneNomComplet;
+  this.nomCompletInverse = personneNomCompletInverse;
+}
+
+ +

C'est mieux : on crée les fonctions une seule fois, et on leur assigne des références au sein du constructeur. Est-il possible de faire encore mieux que ça ? La réponse est oui :

+ +
+function Personne(prenom, nom) {
+  this.prenom = prenom;
+  this.nom = nom;
+}
+
+Personne.prototype.nomComplet = function() {
+  return this.prenom + ', ' + this.nom;
+}
+
+Personne.prototype.nomCompletInverse = function() {
+  return this.nom + ', ' + this.prenom;
+}
+
+ +

Personne.prototype est un objet partagé par toutes les instances de Personne. Il fait partie d'une chaîne de résolution (qui a un nom spécial, la « chaîne de prototypes ») : chaque fois que vous essayez d'accéder à une propriété de Personne qui n'est pas définie, JavaScript va vérifier Personne.prototype pour voir si cette propriété n'existe pas plutôt à cet endroit. Par conséquent, tout ce qui est assigné à Personne.prototype devient disponible à toutes les instances de ce constructeur via l'objet this.

+ +

C'est un outil incroyablement puissant. JavaScript vous permet de modifier le prototype de quelque chose à tout moment dans votre programme, cela signifie qu'il est possible d'ajouter des méthodes supplémentaires à des objets existants lors de l'exécution :

+ +
+let s = new Personne("Simon", "Willison");
+s.prenomEnMajuscules(); // TypeError on line 1: s.prenomEnMajuscules is not a function
+
+Personne.prototype.prenomEnMajuscules = function prenomEnMajuscules() {
+  return this.prenom.toUpperCase()
+}
+s.prenomEnMajuscules(); // "SIMON"
+
+ +

Il est également possible d'ajouter des choses aux prototypes de classes d'objets JavaScript prédéfinies. Ajoutons par exemple une méthode à String qui renvoie cette chaîne à l'envers :

+ +
+let s = "Simon";
+s.inverse(); // TypeError on line 1: s.inverse is not a function
+
+String.prototype.inverse = function inverse() {
+  let r = "";
+  for (let i = this.length - 1; i >= 0; i--) {
+    r += this[i];
+  }
+  return r;
+}
+s.inverse(); // "nomiS"
+
+ +

Notre nouvelle méthode fonctionne même sur les chaînes littérales !

+ +
"Ceci peut maintenant être inversé.".inverse() // ".ésrevni ertê tnanetniam tuep iceC"
+ +

Comme mentionné précédemment, le prototype fait partie d'une chaîne de prototypes. Le début de cette chaîne est Object.prototype, dont toString() fait partie des méthodes. C'est cette méthode qui est appelée quand vous essayez de représenter un objet sous la forme d'une chaîne. Elle sera utile pour déboguer nos objets Personne :

+ +
+let s = new Personne("Simon", "Willison");
+s; // [object Object]
+
+Personne.prototype.toString = function() {
+  return '<Personne : ' + this.nomComplet() + '>';
+}
+s.toString(); // "<Personne : Simon Willison>"
+
+ +

Vous vous souvenez de la fonction moyenne.apply() qui avait un premier paramètre défini à null ? Nous pouvons en reparler à présent. Le premier paramètre d'apply() est l'objet qui doit être traité comme this. Par exemple, voici une implémentation de new :

+ +
+function trivialNew(constructor, ...args) {
+  let o = {}; // Crée un objet
+  constructor.apply(o, ...args);
+  return o;
+}
+
+ +

Ce n'est pas une réplique exacte de new parce qu'elle n'initialise pas la chaîne de prototype. La méthode apply() est difficile à illustrer, ce n'est pas quelque chose qu'on utilise très souvent, mais c'est utile de savoir qu'elle existe. Dans ce fragment de code, on utilise le reste des arguments, représentés par ...args. Comme son nom l'indique, cela représente le reste des arguments passés à la fonction.

+ +

Appeler

+ +
let bill = trivialNew(Personne, ["William", "Orange"]);
+ +

est donc quasiment équivalent à :

+ +
let bill = new Personne("William", "Orange");
+ +

apply() possède une fonction proche, appelée call, qui permet de définir la valeur de this mais qui prend une liste d'arguments plutôt qu'un tableau.

+ +
+function nomMajuscule() {
+  return this.nom.toUpperCase();
+}
+let s = new Personne("Simon", "Willison");
+nomMajuscule.call(s); // correspond à:
+s.nomMajuscule = nomMajuscule;
+s.nomMajuscule();
+
+ +

Les fonctions internes

+ +

Comme nous l'avons déjà vu, les déclarations de fonctions JavaScript peuvent se trouver à l'intérieur d'autres fonctions. Un détail important des fonctions définies à l'intérieur d'autres fonctions est qu'elles peuvent accéder à des variables de leur fonction parente :

+ +
+function parentFunc() {
+  let a = 1;
+  function fonctionImbriquee() {
+    let b = 4; // Inacessible depuis parentFunc()
+    return a + b;
+  }
+  return fonctionImbriquee(); // 5
+}
+ +

Cela peut s'avérer très utile dans l'écriture de code plus facilement maintenable. Si une fonction A dépend d'une ou deux autres fonctions B et C qui ne sont utiles à aucun autre endroit de votre code, on peut imbriquer ces fonctions utilitaires B et C à l'intérieur de la fonction A. Cela diminue le nombre de fonctions se trouvant dans la portée globale, ce qui est toujours une bonne chose.

+ +

C'est également un bon moyen de se préserver de l'attrait trompeur des variables globales. Lorsqu'on écrit du code complexe, il est souvent tentant d'utiliser des variables globales pour partager des valeurs entre différentes fonctions, ce qui mène à du code difficile à maintenir. Les fonctions internes peuvent partager des variables avec leur parent, de sorte que vous pouvez utiliser ce mécanisme pour coupler des fonctions ensemble lorsque cela a un sens, sans pour autant polluer l'espace de noms global. Ce sont ainsi des « globales locales ». Cette technique doit être utilisée parcimonieusement, mais il est utile de s'en souvenir.

+ +

Les fermetures (Closures)

+ +

Cela nous amène à l'une des abstractions les plus spectaculaires que JavaScript a à nous offrir. C'est également un des concepts les plus déroutants. Que fait ce fragment de code ?

+ +
+function creerAdditionneur(a) {
+  return function(b) {
+    return a + b;
+  }
+}
+let ajoute5 = creerAdditionneur(5);
+let ajoute20 = creerAdditionneur(20);
+ajoute5(6); // ?
+ajoute20(7); // ?
+
+ +

Le nom de la fonction creerAdditionneur devrait vous donner un indice : elle crée de nouveaux additionneurs sous forme de fonctions qui, quand elles sont appelées avec un paramètre, l'ajoutent à celui avec lequel elles ont été créées.

+ +

Ce qui se passe ici est sensiblement la même chose qu'avec les fonctions internes dont nous avons parlé précédemment : une fonction définie à l'intérieur d'une autre fonction a accès aux variables de sa fonction extérieure. La seule différence ici est que la fonction extérieure a déjà renvoyé son résultat, et le bon sens semblerait vouloir être que ses variables locales n'existent plus. Mais elles existent encore ; autrement les additionneurs présentés ci-dessus ne fonctionneraient pas. Ce n'est pas tout, il y a même deux « copies » différentes des variables locales de creerAdditionneur : une dans laquelle a vaut 5 et une autre dans laquelle a vaut 20. Quel est donc le résultat de ces appels de fonction ?

+ +
+ajoute5(6); // renvoie 11
+ajoute20(7); // renvoie 27
+
+ +

Voici ce qui se passe en réalité. Lorsque JavaScript exécute une fonction, un objet de portée est créé pour conserver les variables locales créées au sein de cette fonction. Il est initialisé avec les variables passées en paramètres à la fonction. Cela ressemble à l'objet global dans lequel toutes les variables et fonctions globales se trouvent, mais avec quelques différences importantes : premièrement, un nouvel objet de portée est créé chaque fois qu'une fonction commence à s'exécuter, et deuxièmement, contrairement à l'objet global (qui est accessible via this et qui, dans le navigateur, correspond à l'objet window), on ne peut pas directement accéder à ces objets de portée depuis le code JavaScript. Il n'existe pas de mécanisme permettant de parcourir les propriétés de l'objet de la portée courante par exemple.

+ +

Donc, quand creerAdditionneur() est appelée, une portée est créée avec une propriété : a, qui est l'argument passé à la fonction creerAdditionneur(). Celle-ci renvoie alors une fonction nouvellement créée. Normalement, le ramasse-miettes de JavaScript devrait supprimer l'objet de portée créé pour creerAdditionneur() à ce moment, mais la fonction renvoyée garde une référence vers cet objet de portée. Par conséquent, il ne sera pas supprimé par le ramasse-miettes tant qu'il y a toujours des références à l'objet de type fonction que creerAdditionneur() a renvoyé.

+ +

Les objets de portée forment une chaîne appelée chaîne de portée, similaire à la chaîne de prototypes utilisée par le système d'objets de JavaScript.

+ +

Une fermeture est la combinaison d'une fonction et de la portée de l'objet dans lequel elle a été créée. Les fermetures vous permettent de sauvegarder l'état — en tant que telles, elles peuvent souvent être utilisées à la place des objets. Vous pouvez trouver plusieurs excellentes introductions aux fermetures dans cet article.

diff --git a/files/fr/web/javascript/about_javascript/index.html b/files/fr/web/javascript/about_javascript/index.html deleted file mode 100644 index 3cdf73b473..0000000000 --- a/files/fr/web/javascript/about_javascript/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: À propos de JavaScript -slug: Web/JavaScript/About_JavaScript -tags: - - Débutant - - Intro - - JavaScript -translation_of: Web/JavaScript/About_JavaScript -original_slug: Web/JavaScript/A_propos ---- -
{{jsSidebar}}
- -

Qu'est-ce que JavaScript ?

- -

JavaScript®, souvent abrégé en JS, est le langage de script développé par Netscape utilisé dans des millions de pages web et d'applications serveur dans le monde entier. Le JavaScript de Netscape est une extension du langage de script standard ECMA-262 Edition 3 (ECMAScript), ne différant que légèrement des standards publiés. JavaScript est un langage léger, interprété, orienté objet (les fonctions étant des objets à part entière). Il est orienté prototype, multi-paradigme étant dynamique, impératif et fonctionnel à la fois

- -

Contrairement à une conception populaire, JavaScript n'est pas « du Java interprété ». En quelques mots, JavaScript est un langage de script dynamique utilisant une construction d'objets basée sur des prototypes. La syntaxe de base est volontairement similaire à Java et à C++ pour réduire le nombre de concepts nouveaux à assimiler par un débutant. Les structures de contrôle, telles que les instructions if, les boucles for et while, les blocs switch et try..catch fonctionnent de la même manière que dans ces langages (ou presque).

- -

JavaScript peut être employé en tant que langage procédural ou orienté objet. Les objets sont créés par le programme et des méthodes et des propriétés lui sont attachés lors de l'exécution, contrairement aux définitions de classes courantes dans les langages compilés comme C++ et Java. Une fois qu'un objet a été construit, il peut servir de modèle (ou prototype) pour créer des objets similaires.

- -

Parmi les capacités dynamiques de JavaScript, on peut citer la construction d'objets à l'exécution, les listes de paramètres variables, les fonctions comme variables, la création des scripts dynamique (via eval), le parcours d'objets (via for ... in), et la récupération du code source (les programmes JavaScript peuvent décompiler les corps de fonction pour retrouver le code source).

- -

Pour une description approfondie de la programation en JavaScript, consultez les liens de la section ressources JavaScript ci-dessous.

- -

Les implémentations de JavaScript disponibles

- -

Mozilla héberge deux implémentations de JavaScript. La première au monde est celle créée par Brendan Eich chez Netscape, et depuis mise à jour pour se conformer à la cinquième édition d'ECMA-262 (aussi appelé ECMAScript 5). Ce moteur, portant le nom de code SpiderMonkey, est implémenté en C. Le moteur Rhino, créé principalement par Norris Boyd (également chez Netscape) est une implémentation de JavaScript en Java. Comme SpiderMonkey, Rhino suit la spécification ECMA-262 Edition 5.

- -

Plusieurs optimisations ont été apportées au moteur JavaScript au fur et à mesure, parmi lesquelles on peut citer : TraceMonkey (Firefox 3.5), JägerMonkey (Firefox 4) et IonMonkey.

- -

En plus de ces implémentations, il existe d'autres moteurs JavaScript largement utilisés comme :

- - - -

Chacun des moteurs JavaScript de Mozilla expose une API publique que les applications peuvent appeler pour utiliser JavaScript. L'environnement hôte le plus courant pour JavaScript est, de loin, un navigateur Web. Les navigateurs utilisent typiquement l'API publique pour créer des « objets hôtes », reflétant le DOM en JavaScript.

- -

Une autre utilisation courante de JavaScript est d'être un langage de script côté serveur (Web). Un serveur web JavaScript exposerait, lui, des objets hôtes représentant les requêtes HTTP et leurs réponses, qui peuvent ensuite être manipulées par un programme JavaScript pour générer dynamiquement des pages Web.

- -

Ressources JavaScript

- -
-
SpiderMonkey
-
Informations concernant l'intégration du moteur JavaScript en C/C++ (SpiderMonkey).
-
Rhino
-
Informations concernant l'intégration du moteur JavaScript en Java (Rhino).
-
Ressources sur le langage JavaScript
-
Liens vers les standards JavaScript publiées.
-
Une réintroduction à JavaScript
-
Le guide JavaScript et la référence JavaScript
-
- -

JavaScript® est une marque déposée d'Oracle aux États-Unis et dans d'autres pays.

diff --git a/files/fr/web/javascript/about_javascript/index.md b/files/fr/web/javascript/about_javascript/index.md new file mode 100644 index 0000000000..3cdf73b473 --- /dev/null +++ b/files/fr/web/javascript/about_javascript/index.md @@ -0,0 +1,57 @@ +--- +title: À propos de JavaScript +slug: Web/JavaScript/About_JavaScript +tags: + - Débutant + - Intro + - JavaScript +translation_of: Web/JavaScript/About_JavaScript +original_slug: Web/JavaScript/A_propos +--- +
{{jsSidebar}}
+ +

Qu'est-ce que JavaScript ?

+ +

JavaScript®, souvent abrégé en JS, est le langage de script développé par Netscape utilisé dans des millions de pages web et d'applications serveur dans le monde entier. Le JavaScript de Netscape est une extension du langage de script standard ECMA-262 Edition 3 (ECMAScript), ne différant que légèrement des standards publiés. JavaScript est un langage léger, interprété, orienté objet (les fonctions étant des objets à part entière). Il est orienté prototype, multi-paradigme étant dynamique, impératif et fonctionnel à la fois

+ +

Contrairement à une conception populaire, JavaScript n'est pas « du Java interprété ». En quelques mots, JavaScript est un langage de script dynamique utilisant une construction d'objets basée sur des prototypes. La syntaxe de base est volontairement similaire à Java et à C++ pour réduire le nombre de concepts nouveaux à assimiler par un débutant. Les structures de contrôle, telles que les instructions if, les boucles for et while, les blocs switch et try..catch fonctionnent de la même manière que dans ces langages (ou presque).

+ +

JavaScript peut être employé en tant que langage procédural ou orienté objet. Les objets sont créés par le programme et des méthodes et des propriétés lui sont attachés lors de l'exécution, contrairement aux définitions de classes courantes dans les langages compilés comme C++ et Java. Une fois qu'un objet a été construit, il peut servir de modèle (ou prototype) pour créer des objets similaires.

+ +

Parmi les capacités dynamiques de JavaScript, on peut citer la construction d'objets à l'exécution, les listes de paramètres variables, les fonctions comme variables, la création des scripts dynamique (via eval), le parcours d'objets (via for ... in), et la récupération du code source (les programmes JavaScript peuvent décompiler les corps de fonction pour retrouver le code source).

+ +

Pour une description approfondie de la programation en JavaScript, consultez les liens de la section ressources JavaScript ci-dessous.

+ +

Les implémentations de JavaScript disponibles

+ +

Mozilla héberge deux implémentations de JavaScript. La première au monde est celle créée par Brendan Eich chez Netscape, et depuis mise à jour pour se conformer à la cinquième édition d'ECMA-262 (aussi appelé ECMAScript 5). Ce moteur, portant le nom de code SpiderMonkey, est implémenté en C. Le moteur Rhino, créé principalement par Norris Boyd (également chez Netscape) est une implémentation de JavaScript en Java. Comme SpiderMonkey, Rhino suit la spécification ECMA-262 Edition 5.

+ +

Plusieurs optimisations ont été apportées au moteur JavaScript au fur et à mesure, parmi lesquelles on peut citer : TraceMonkey (Firefox 3.5), JägerMonkey (Firefox 4) et IonMonkey.

+ +

En plus de ces implémentations, il existe d'autres moteurs JavaScript largement utilisés comme :

+ + + +

Chacun des moteurs JavaScript de Mozilla expose une API publique que les applications peuvent appeler pour utiliser JavaScript. L'environnement hôte le plus courant pour JavaScript est, de loin, un navigateur Web. Les navigateurs utilisent typiquement l'API publique pour créer des « objets hôtes », reflétant le DOM en JavaScript.

+ +

Une autre utilisation courante de JavaScript est d'être un langage de script côté serveur (Web). Un serveur web JavaScript exposerait, lui, des objets hôtes représentant les requêtes HTTP et leurs réponses, qui peuvent ensuite être manipulées par un programme JavaScript pour générer dynamiquement des pages Web.

+ +

Ressources JavaScript

+ +
+
SpiderMonkey
+
Informations concernant l'intégration du moteur JavaScript en C/C++ (SpiderMonkey).
+
Rhino
+
Informations concernant l'intégration du moteur JavaScript en Java (Rhino).
+
Ressources sur le langage JavaScript
+
Liens vers les standards JavaScript publiées.
+
Une réintroduction à JavaScript
+
Le guide JavaScript et la référence JavaScript
+
+ +

JavaScript® est une marque déposée d'Oracle aux États-Unis et dans d'autres pays.

diff --git a/files/fr/web/javascript/closures/index.html b/files/fr/web/javascript/closures/index.html deleted file mode 100644 index 85a39326f2..0000000000 --- a/files/fr/web/javascript/closures/index.html +++ /dev/null @@ -1,367 +0,0 @@ ---- -title: Closures (Fermetures) -slug: Web/JavaScript/Closures -tags: - - Closure - - Intermédiaire - - JavaScript -translation_of: Web/JavaScript/Closures ---- -
{{jsSidebar("Intermediate")}}
- -

Une fermeture est la paire formée d'une fonction et des références à son état environnant (l'environnement lexical). En d'autres termes, une fermeture donne accès à la portée d'une fonction externe à partir d'une fonction interne (on dit aussi que la fonction « capture son environnement »). En JavaScript, une fermeture est créée chaque fois qu'une fonction est créée.

- -

Portée

- -

Dans l'exemple suivant :

- -
function init() {
-  var nom = "Mozilla"; // nom est une variable locale de init
-  function afficheNom() { // afficheNom est une fonction interne de init
-    console.log(nom); // ici nom est une variable libre (définie dans la fonction parente)
-  }
-  afficheNom();
-};
-init();
- -

La fonction init créé une variable locale nom et une fonction interne afficheNom. La fonction interne est seulement visible de l'intérieur de init. Contrairement à init, afficheNom ne possède pas de variable locale propre, mais elle utilise la variable nom de la fonction parente (ceci dit afficheNom pourrait utiliser ses variables locales propres si elle en avait).

- -

{{JSFiddleEmbed("https://jsfiddle.net/78dg25ax/", "js,result", 250)}}

- -

Vous pouvez exécuter le code sur cette page pour voir son fonctionnement. On a ici un exemple de portée lexicale : en JavaScript, la portée d'une variable est définie par son emplacement dans le code source (elle apparaît de façon lexicale), les fonctions imbriquées ont ainsi accès aux variables déclarées dans les portées parentes.

- -

Fermeture

- -

Étudions l'exemple suivant :

- -
function creerFonction() {
-  var nom = "Mozilla";
-  function afficheNom() {
-    console.log(nom);
-  }
-  return afficheNom;
-}
-
-var maFonction = creerFonction();
-maFonction();
-
- -

Ce code produit le même résultat que l'appel à init() étudié précédemment : "Mozilla" est affiché dans la console. L'intérêt de ce code est qu'une fermeture contenant la fonction afficheNom est renvoyée par la fonction parente, avant d'être exécutée.

- -

Le code continue à fonctionner, ce qui peut paraître contre-intuitif au regard de la syntaxe utilisée. Usuellement, les variables locales d'une fonction n'existent que pendant l'exécution d'une fonction. Une fois que creerFonction() a fini son exécution, on aurait pû penser que la variable nom n'est plus accessible. Cependant, le code fonctionne : en JavaScript, la variable est donc accessible d'une certaine façon.

- -

L'explication est la suivante : maFonction est une fermeture. La fermeture combine la fonction afficheNom et son environnement. Cet environnement est composé de toutes les variables locales accessibles (dans la portée) à la création de la fermeture. Ici maFonction est une fermeture qui contient la fonction afficheNom et une référence à la variable var nom = "Mozilla" qui existait lorsque la fermeture a été créée. L'instance de afficheNom conserve une référence à son environnement lexical, dans lequel nom  existe. Pour cette raison, lorsque maFonction est invoquée, la variable nom reste disponible et "Mozilla" est transmis à console.log.

- -

Voici un exemple un peu plus intéressant—une fonction ajouterA :

- -
function ajouterA(x) {
-  return function(y) {
-    return x + y;
-  };
-};
-
-var ajouter_5 = ajouterA(5);
-var ajouter_10 = ajouterA(10);
-
-console.log(ajouter_5(2));  // 7
-console.log(ajouter_10(2)); // 12
-
- -

On définit une fonction ajouterA(x) avec un seul argument x et qui renvoie une fonction anonyme. La fonction anonyme a un seul argument y, et renvoie la somme de x et y.

- -

La fonction ajouterA permet de créer des fermetures qui font la somme de leur argument et d'un nombre fixé. Dans l'exemple ci-dessus, on crée  ajouter_5 et ajouter_10. Elles partagent la même fonction, mais des environnements différents. Dans ajouter_5, x vaut 5 ; dans ajouter_10, x vaut 10.

- -

Les fermetures en pratique

- -

On a vu la théorie décrivant les fermetures. Est-ce qu'elles sont utiles pour autant ? Une fermeture permet d'associer des données (l'environnement) avec une fonction qui agit sur ces données. On peut faire un parallèle avec la programmation orientée objet car les objets permettent d'associer des données (les propriétés) avec des méthodes.

- -

Ainsi, on peut utiliser une fermeture pour tout endroit où on utiliserait un objet et ce avec une seule méthode.

- -

Beaucoup de code JavaScript utilisé sur le Web gère des événements : on définit un comportement, puis on l'attache à un événement déclenché par l'utilisateur (tel un clic ou une frappe clavier). Notre code est généralement une fonction de rappel (ou callback) exécutée en réponse à l'événement.

- -

Voici un exemple concret : si on souhaite ajouter des boutons à une page afin d'ajuster la taille du texte, on pourrait définir la taille de police de l'élément body en pixels, et celles des autres éléments relativement à cette première taille grâce à l'unité em :

- -
body {
-  font-family: Helvetica, Arial, sans-serif;
-  font-size: 12px;
-}
-
-h1 {
-  font-size: 1.5em;
-}
-h2 {
-  font-size: 1.2em;
-}
-
- -

Les boutons vont ensuite changer la taille de la police de l'élément body, ce changement étant répercuté aux autres éléments grâce aux unités relatives.

- -

Voici le code JavaScript qui correspond :

- -
function fabriqueRedimensionneur(taille) {
-  return function() {
-    document.body.style.fontSize = taille + 'px';
-  };
-};
-
-var taille12 = fabriqueRedimensionneur(12);
-var taille14 = fabriqueRedimensionneur(14);
-var taille16 = fabriqueRedimensionneur(16);
-
- -

taille12, taille14, et taille16 sont désormais des fermetures qui peuvent, respectivement, redimensionner le texte de l'élément body à 12, 14, ou 16 pixels. On peut les attacher aux boutons de la façon suivantes :

- -
document.getElementById('taille-12').onclick = taille12;
-document.getElementById('taille-14').onclick = taille14;
-document.getElementById('taille-16').onclick = taille16;
-
- -
<a href="#" id="taille-12">12</a>
-<a href="#" id="taille-14">14</a>
-<a href="#" id="taille-16">16</a>
-
- -

{{JSFiddleEmbed("https://jsfiddle.net/vnkuZ/7726", "js,result", 200)}}

- -

Émuler des méthodes privées avec des fermetures

- -

Certains langages de programmation, comme Java, permettent d'avoir des méthodes privées, c'est-à-dire qu'on ne peut les utiliser qu'au sein de la même classe.

- -

JavaScript ne permet pas de faire cela de façon native. En revanche, on peut émuler ce comportement grâce aux fermetures. Les méthodes privées ne sont pas seulement utiles en termes de restriction d'accès au code, elles permettent également de gérer un espace de nom (namespace) global qui isole les méthodes secondaires de l'interface publique du code ainsi rendu plus propre.

- -

Voici comment définir une fonction publique accédant à des fonctions et des variables privées en utilisant des fermetures. Cette façon de procéder est également connue comme le patron de conception module :

- -
var compteur = (function() {
-  var compteurPrive = 0;
-  function changeValeur(val) {
-    compteurPrive += val;
-  }
-  return {
-    increment: function() {
-      changeValeur(1);
-    },
-    decrement: function() {
-      changeValeur(-1);
-    },
-    valeur: function() {
-      return compteurPrive;
-    }
-  };
-})();
-
-console.log(compteur.valeur()); /* Affiche 0 */
-compteur.increment();
-compteur.increment();
-console.log(compteur.valeur()); /* Affiche 2 */
-compteur.decrement();
-console.log(compteur.valeur()); /* Affiche 1 */
-
- -

Il y a beaucoup de différences par rapport aux exemples précédents. Au lieu de retourner une simple fonction, on retourne un objet anonyme qui contient 3 fonctions. Et ces 3 fonctions partagent le même environnement. L'objet retourné est affecté à la variable compteur, et les 3 fonctions sont alors accessibles sous les noms compteur.increment, compteur.decrement, et compteur.valeur.

- -

L'environnement partagé vient du corps de la fonction anonyme qui est exécutée dès sa définition complète. L'environnement en question contient deux éléments privés : une variable compteurPrive et une fonction changeValeur. Aucun de ces deux éléments ne peut être utilisé en dehors de la fonction anonyme ; seules les trois fonctions renvoyées par la fonction anonyme sont publiques.

- -

Ces trois fonctions publiques sont des fermetures qui partagent le même environnement. Grâce à la portée lexicale, chacune a accès à compteurPrive et à changeValeur.

- -

On remarquera qu'on définit une fonction anonyme qui crée un compteur puis qu'on l'appelle immédiatement pour assigner le résultat à la variable compteur. On pourrait stocker cette fonction dans une variable puis l'appeler plusieurs fois afin de créer plusieurs compteurs.

- -
var creerCompteur = function() {
-  var compteurPrive = 0;
-  function changeValeur(val) {
-    compteurPrive += val;
-  }
-  return {
-    increment: function() {
-      changeValeur(1);
-    },
-    decrement: function() {
-      changeValeur(-1);
-    },
-    valeur: function() {
-      return compteurPrive;
-    }
-  };
-};
-
-var compteur1 = creerCompteur();
-var compteur2 = creerCompteur();
-console.log(compteur1.valeur()); /* Affiche 0 */
-compteur1.increment();
-compteur1.increment();
-console.log(compteur1.valeur()); /* Affiche 2 */
-compteur1.decrement();
-console.log(compteur1.valeur()); /* Affiche 1 */
-console.log(compteur2.valeur()); /* Affiche 0 */
-
- -

Ici on peut voir que chacun des deux compteurs est indépendant de l'autre. Un nouvel environnement est instancié à chaque appel creerCompteur().

- -

L'utilisation de fermetures permet ainsi de bénéficier de certains concepts liés à la programmation orientée objet comme l'encapsulation et la dissimulation de données.

- -

Les fermetures et les boucles : attention au mélange

- -

Avant que le mot clé let ne soit introduit avec ECMAScript 2015, un problème se posait fréquemment lorsqu'on manipulait des fermetures au sein d'une boucle. Par exemple :

- -
<p id="aide">Des aides seront affichées ici</p>
-<p>E-mail : <input type="text" id="email" name="email"></p>
-<p>Nom : <input type="text" id="nom" name="nom"></p>
-<p>Âge : <input type="text" id="âge" name="âge"></p>
-
- -
function afficherAide(aide) {
-  document.getElementById('aide').innerHTML = aide;
-}
-
-function preparerAide() {
-  var texteAide = [
-      {'id': 'email', 'aide': 'Votre adresse e-mail'},
-      {'id': 'nom', 'aide': 'Vos prénom et nom'},
-      {'id': 'âge', 'aide': 'Votre âge (plus de 16 ans requis)'}
-    ];
-
-  for (var i = 0; i < texteAide.length; i++) {
-    var item = texteAide[i];
-    document.getElementById(item.id).onfocus = function() {
-      afficherAide(item.aide);
-    }
-  }
-}
-
-preparerAide();
-
- -

{{JSFiddleEmbed("https://jsfiddle.net/v7gjv/8164/", "", 200)}}

- -

Lorsqu'on essaie ce code, on s'aperçoit qu'il ne fonctionne pas exactement comme on le souhaitait : en effet, quelque soit le champ sur lequel on se situe, c'est toujours le message d'aide concernant l'âge qui s'affiche.

- -

La cause de ce problème est que les fonctions attachées à onfocus sont des fermetures qui partagent le même environnement. À chaque itération de boucle, l'environnement de la fermeture créée contient une référence sur la même instance de la variable item. Ainsi, lorsque la fonction de rappel de onfocus est exécutée, la boucle a déjà été effectuée entièrement, et la variable item partagée par les trois fermetures pointe sur le dernier élément de texteAide.

- -

Une solution consiste à utiliser plus de fermetures et à appliquer une fabrique de fonction comme on a vu précédemment :

- -
function afficheAide(aide) {
-  document.getElementById('aide').innerHTML = aide;
-}
-
-function creerCallbackAide(aide) {
-  return function() {
-    afficheAide(aide);
-  };
-}
-
-function prepareAide() {
-  var texteAide = [
-      {'id': 'email', 'aide': 'Votre adresse e-mail'},
-      {'id': 'nom', 'aide': 'Votre prénom et nom'},
-      {'id': 'âge', 'aide': 'Your age (you must be over 16)'}
-    ];
-
-  for (var i = 0; i < texteAide.length; i++) {
-    var item = texteAide[i];
-    document.getElementById(item.id).onfocus = creerCallbackAide(item.aide);
-  }
-}
-
-prepareAide();
-
- -

Voici une autre solution qui permet de ne pas utiliser plus de fermetures :

- -
function afficheAide(aide) {
-  document.getElementById('aide').innerHTML = aide;
-}
-
-function prepareAide() {
-  var texteAide = [
-      {'id': 'email', 'aide': 'Votre adresse e-mail'},
-      {'id': 'nom', 'aide': 'Votre prénom et nom'},
-      {'id': 'âge', 'aide': 'Votre âge (vous devez être majeur)'}
-    ];
-
-  for (var i = 0; i < texteAide.length; i++) {
-    let item = texteAide[i];
-    document.getElementById(item.id).onfocus = function() {
-      afficheAide(item.aide);
-    }
-  }
-}
-
-prepareAide();
- -

Dans ce fragment de code, nous avons utilisé let au lieu de var afin que chaque fermeture soit liée avec les variable de bloc.

- -

{{JSFiddleEmbed("https://jsfiddle.net/v7gjv/9573/", "", 300)}}

- -

Autrement, on aurait pu utiliser forEach() afin de parcourir le tableau texteAide et attacher un gestionnaire d'évènement sur chaque {{htmlelement("div")}} :

- -
function afficheAide(aide) {
-  document.getElementById('aide').innerHTML = aide;
-}
-
-function prepareAide() {
-  var texteAide = [
-      {'id': 'email', 'aide': 'Votre adresse e-mail'},
-      {'id': 'nom', 'aide': 'Votre prénom et nom'},
-      {'id': 'âge', 'aide': 'Votre âge (vous devez être majeur)'}
-    ];
-
-  texteAide.forEach(function(texte) {
-      document.getElementById(texte.id).onfocus = function() {
-        afficheAide(texte.help);
-      }
-  });
-}
-
-prepareAide();
- -

Les performances et les fermetures

- -

Il est mal avisé de créer des fonctions imbriquées et des fermetures sans utilité. En effet, cela peut dégrader les performances en termes de vitesse d'exécution et de consommation de mémoire.

- -

Quand, par exemple, on crée un nouvel objet, les méthodes devraient être associées au prototype de l'objet et non pas définies dans le constructeur de l'objet. De cette façon, on évite que les méthodes soient réassignées à chaque fois qu'un nouvel objet est créé.

- -

Voici un exemple de la mauvaise façon de procéder :

- -
function MonObjet(nom, message) {
-  this.nom = nom.toString();
-  this.message = message.toString();
-  this.getNom = function() {
-    return this.nom;
-  };
-
-  this.getMessage = function() {
-    return this.message;
-  };
-}
-
- -

Le fragment de code précédent ne tire pas partie des avantages des fermetures. Il pourrait être mieux écrit ainsi :

- -
function MonObjet(nom, message) {
-  this.nom = nom.toString();
-  this.message = message.toString();
-}
-MonObjet.prototype = {
-  getNom: function() {
-    return this.nom;
-  },
-  getMessage: function() {
-    return this.message;
-  }
-};
-
- -

Cependant, redéfinir le prototype est déconseillé, donc encore meilleur serait d'ajouter les méthodes :

- -
function MonObjet(nom, message) {
-  this.nom = nom.toString();
-  this.message = message.toString();
-}
-MonObjet.prototype.getNom = function() {
-  return this.nom;
-};
-MonObjet.prototype.getMessage = function() {
-  return this.message;
-};
-
- -

Les deux derniers exemples permettent de voir que le prototype hérité est partagé par tous les objets construits et que les méthodes n'ont pas besoin d'être reconstruites pour chaque création d'objet. Veuillez consulter la page sur le modèle objet JavaScript en détails pour plus d'informations.

diff --git a/files/fr/web/javascript/closures/index.md b/files/fr/web/javascript/closures/index.md new file mode 100644 index 0000000000..85a39326f2 --- /dev/null +++ b/files/fr/web/javascript/closures/index.md @@ -0,0 +1,367 @@ +--- +title: Closures (Fermetures) +slug: Web/JavaScript/Closures +tags: + - Closure + - Intermédiaire + - JavaScript +translation_of: Web/JavaScript/Closures +--- +
{{jsSidebar("Intermediate")}}
+ +

Une fermeture est la paire formée d'une fonction et des références à son état environnant (l'environnement lexical). En d'autres termes, une fermeture donne accès à la portée d'une fonction externe à partir d'une fonction interne (on dit aussi que la fonction « capture son environnement »). En JavaScript, une fermeture est créée chaque fois qu'une fonction est créée.

+ +

Portée

+ +

Dans l'exemple suivant :

+ +
function init() {
+  var nom = "Mozilla"; // nom est une variable locale de init
+  function afficheNom() { // afficheNom est une fonction interne de init
+    console.log(nom); // ici nom est une variable libre (définie dans la fonction parente)
+  }
+  afficheNom();
+};
+init();
+ +

La fonction init créé une variable locale nom et une fonction interne afficheNom. La fonction interne est seulement visible de l'intérieur de init. Contrairement à init, afficheNom ne possède pas de variable locale propre, mais elle utilise la variable nom de la fonction parente (ceci dit afficheNom pourrait utiliser ses variables locales propres si elle en avait).

+ +

{{JSFiddleEmbed("https://jsfiddle.net/78dg25ax/", "js,result", 250)}}

+ +

Vous pouvez exécuter le code sur cette page pour voir son fonctionnement. On a ici un exemple de portée lexicale : en JavaScript, la portée d'une variable est définie par son emplacement dans le code source (elle apparaît de façon lexicale), les fonctions imbriquées ont ainsi accès aux variables déclarées dans les portées parentes.

+ +

Fermeture

+ +

Étudions l'exemple suivant :

+ +
function creerFonction() {
+  var nom = "Mozilla";
+  function afficheNom() {
+    console.log(nom);
+  }
+  return afficheNom;
+}
+
+var maFonction = creerFonction();
+maFonction();
+
+ +

Ce code produit le même résultat que l'appel à init() étudié précédemment : "Mozilla" est affiché dans la console. L'intérêt de ce code est qu'une fermeture contenant la fonction afficheNom est renvoyée par la fonction parente, avant d'être exécutée.

+ +

Le code continue à fonctionner, ce qui peut paraître contre-intuitif au regard de la syntaxe utilisée. Usuellement, les variables locales d'une fonction n'existent que pendant l'exécution d'une fonction. Une fois que creerFonction() a fini son exécution, on aurait pû penser que la variable nom n'est plus accessible. Cependant, le code fonctionne : en JavaScript, la variable est donc accessible d'une certaine façon.

+ +

L'explication est la suivante : maFonction est une fermeture. La fermeture combine la fonction afficheNom et son environnement. Cet environnement est composé de toutes les variables locales accessibles (dans la portée) à la création de la fermeture. Ici maFonction est une fermeture qui contient la fonction afficheNom et une référence à la variable var nom = "Mozilla" qui existait lorsque la fermeture a été créée. L'instance de afficheNom conserve une référence à son environnement lexical, dans lequel nom  existe. Pour cette raison, lorsque maFonction est invoquée, la variable nom reste disponible et "Mozilla" est transmis à console.log.

+ +

Voici un exemple un peu plus intéressant—une fonction ajouterA :

+ +
function ajouterA(x) {
+  return function(y) {
+    return x + y;
+  };
+};
+
+var ajouter_5 = ajouterA(5);
+var ajouter_10 = ajouterA(10);
+
+console.log(ajouter_5(2));  // 7
+console.log(ajouter_10(2)); // 12
+
+ +

On définit une fonction ajouterA(x) avec un seul argument x et qui renvoie une fonction anonyme. La fonction anonyme a un seul argument y, et renvoie la somme de x et y.

+ +

La fonction ajouterA permet de créer des fermetures qui font la somme de leur argument et d'un nombre fixé. Dans l'exemple ci-dessus, on crée  ajouter_5 et ajouter_10. Elles partagent la même fonction, mais des environnements différents. Dans ajouter_5, x vaut 5 ; dans ajouter_10, x vaut 10.

+ +

Les fermetures en pratique

+ +

On a vu la théorie décrivant les fermetures. Est-ce qu'elles sont utiles pour autant ? Une fermeture permet d'associer des données (l'environnement) avec une fonction qui agit sur ces données. On peut faire un parallèle avec la programmation orientée objet car les objets permettent d'associer des données (les propriétés) avec des méthodes.

+ +

Ainsi, on peut utiliser une fermeture pour tout endroit où on utiliserait un objet et ce avec une seule méthode.

+ +

Beaucoup de code JavaScript utilisé sur le Web gère des événements : on définit un comportement, puis on l'attache à un événement déclenché par l'utilisateur (tel un clic ou une frappe clavier). Notre code est généralement une fonction de rappel (ou callback) exécutée en réponse à l'événement.

+ +

Voici un exemple concret : si on souhaite ajouter des boutons à une page afin d'ajuster la taille du texte, on pourrait définir la taille de police de l'élément body en pixels, et celles des autres éléments relativement à cette première taille grâce à l'unité em :

+ +
body {
+  font-family: Helvetica, Arial, sans-serif;
+  font-size: 12px;
+}
+
+h1 {
+  font-size: 1.5em;
+}
+h2 {
+  font-size: 1.2em;
+}
+
+ +

Les boutons vont ensuite changer la taille de la police de l'élément body, ce changement étant répercuté aux autres éléments grâce aux unités relatives.

+ +

Voici le code JavaScript qui correspond :

+ +
function fabriqueRedimensionneur(taille) {
+  return function() {
+    document.body.style.fontSize = taille + 'px';
+  };
+};
+
+var taille12 = fabriqueRedimensionneur(12);
+var taille14 = fabriqueRedimensionneur(14);
+var taille16 = fabriqueRedimensionneur(16);
+
+ +

taille12, taille14, et taille16 sont désormais des fermetures qui peuvent, respectivement, redimensionner le texte de l'élément body à 12, 14, ou 16 pixels. On peut les attacher aux boutons de la façon suivantes :

+ +
document.getElementById('taille-12').onclick = taille12;
+document.getElementById('taille-14').onclick = taille14;
+document.getElementById('taille-16').onclick = taille16;
+
+ +
<a href="#" id="taille-12">12</a>
+<a href="#" id="taille-14">14</a>
+<a href="#" id="taille-16">16</a>
+
+ +

{{JSFiddleEmbed("https://jsfiddle.net/vnkuZ/7726", "js,result", 200)}}

+ +

Émuler des méthodes privées avec des fermetures

+ +

Certains langages de programmation, comme Java, permettent d'avoir des méthodes privées, c'est-à-dire qu'on ne peut les utiliser qu'au sein de la même classe.

+ +

JavaScript ne permet pas de faire cela de façon native. En revanche, on peut émuler ce comportement grâce aux fermetures. Les méthodes privées ne sont pas seulement utiles en termes de restriction d'accès au code, elles permettent également de gérer un espace de nom (namespace) global qui isole les méthodes secondaires de l'interface publique du code ainsi rendu plus propre.

+ +

Voici comment définir une fonction publique accédant à des fonctions et des variables privées en utilisant des fermetures. Cette façon de procéder est également connue comme le patron de conception module :

+ +
var compteur = (function() {
+  var compteurPrive = 0;
+  function changeValeur(val) {
+    compteurPrive += val;
+  }
+  return {
+    increment: function() {
+      changeValeur(1);
+    },
+    decrement: function() {
+      changeValeur(-1);
+    },
+    valeur: function() {
+      return compteurPrive;
+    }
+  };
+})();
+
+console.log(compteur.valeur()); /* Affiche 0 */
+compteur.increment();
+compteur.increment();
+console.log(compteur.valeur()); /* Affiche 2 */
+compteur.decrement();
+console.log(compteur.valeur()); /* Affiche 1 */
+
+ +

Il y a beaucoup de différences par rapport aux exemples précédents. Au lieu de retourner une simple fonction, on retourne un objet anonyme qui contient 3 fonctions. Et ces 3 fonctions partagent le même environnement. L'objet retourné est affecté à la variable compteur, et les 3 fonctions sont alors accessibles sous les noms compteur.increment, compteur.decrement, et compteur.valeur.

+ +

L'environnement partagé vient du corps de la fonction anonyme qui est exécutée dès sa définition complète. L'environnement en question contient deux éléments privés : une variable compteurPrive et une fonction changeValeur. Aucun de ces deux éléments ne peut être utilisé en dehors de la fonction anonyme ; seules les trois fonctions renvoyées par la fonction anonyme sont publiques.

+ +

Ces trois fonctions publiques sont des fermetures qui partagent le même environnement. Grâce à la portée lexicale, chacune a accès à compteurPrive et à changeValeur.

+ +

On remarquera qu'on définit une fonction anonyme qui crée un compteur puis qu'on l'appelle immédiatement pour assigner le résultat à la variable compteur. On pourrait stocker cette fonction dans une variable puis l'appeler plusieurs fois afin de créer plusieurs compteurs.

+ +
var creerCompteur = function() {
+  var compteurPrive = 0;
+  function changeValeur(val) {
+    compteurPrive += val;
+  }
+  return {
+    increment: function() {
+      changeValeur(1);
+    },
+    decrement: function() {
+      changeValeur(-1);
+    },
+    valeur: function() {
+      return compteurPrive;
+    }
+  };
+};
+
+var compteur1 = creerCompteur();
+var compteur2 = creerCompteur();
+console.log(compteur1.valeur()); /* Affiche 0 */
+compteur1.increment();
+compteur1.increment();
+console.log(compteur1.valeur()); /* Affiche 2 */
+compteur1.decrement();
+console.log(compteur1.valeur()); /* Affiche 1 */
+console.log(compteur2.valeur()); /* Affiche 0 */
+
+ +

Ici on peut voir que chacun des deux compteurs est indépendant de l'autre. Un nouvel environnement est instancié à chaque appel creerCompteur().

+ +

L'utilisation de fermetures permet ainsi de bénéficier de certains concepts liés à la programmation orientée objet comme l'encapsulation et la dissimulation de données.

+ +

Les fermetures et les boucles : attention au mélange

+ +

Avant que le mot clé let ne soit introduit avec ECMAScript 2015, un problème se posait fréquemment lorsqu'on manipulait des fermetures au sein d'une boucle. Par exemple :

+ +
<p id="aide">Des aides seront affichées ici</p>
+<p>E-mail : <input type="text" id="email" name="email"></p>
+<p>Nom : <input type="text" id="nom" name="nom"></p>
+<p>Âge : <input type="text" id="âge" name="âge"></p>
+
+ +
function afficherAide(aide) {
+  document.getElementById('aide').innerHTML = aide;
+}
+
+function preparerAide() {
+  var texteAide = [
+      {'id': 'email', 'aide': 'Votre adresse e-mail'},
+      {'id': 'nom', 'aide': 'Vos prénom et nom'},
+      {'id': 'âge', 'aide': 'Votre âge (plus de 16 ans requis)'}
+    ];
+
+  for (var i = 0; i < texteAide.length; i++) {
+    var item = texteAide[i];
+    document.getElementById(item.id).onfocus = function() {
+      afficherAide(item.aide);
+    }
+  }
+}
+
+preparerAide();
+
+ +

{{JSFiddleEmbed("https://jsfiddle.net/v7gjv/8164/", "", 200)}}

+ +

Lorsqu'on essaie ce code, on s'aperçoit qu'il ne fonctionne pas exactement comme on le souhaitait : en effet, quelque soit le champ sur lequel on se situe, c'est toujours le message d'aide concernant l'âge qui s'affiche.

+ +

La cause de ce problème est que les fonctions attachées à onfocus sont des fermetures qui partagent le même environnement. À chaque itération de boucle, l'environnement de la fermeture créée contient une référence sur la même instance de la variable item. Ainsi, lorsque la fonction de rappel de onfocus est exécutée, la boucle a déjà été effectuée entièrement, et la variable item partagée par les trois fermetures pointe sur le dernier élément de texteAide.

+ +

Une solution consiste à utiliser plus de fermetures et à appliquer une fabrique de fonction comme on a vu précédemment :

+ +
function afficheAide(aide) {
+  document.getElementById('aide').innerHTML = aide;
+}
+
+function creerCallbackAide(aide) {
+  return function() {
+    afficheAide(aide);
+  };
+}
+
+function prepareAide() {
+  var texteAide = [
+      {'id': 'email', 'aide': 'Votre adresse e-mail'},
+      {'id': 'nom', 'aide': 'Votre prénom et nom'},
+      {'id': 'âge', 'aide': 'Your age (you must be over 16)'}
+    ];
+
+  for (var i = 0; i < texteAide.length; i++) {
+    var item = texteAide[i];
+    document.getElementById(item.id).onfocus = creerCallbackAide(item.aide);
+  }
+}
+
+prepareAide();
+
+ +

Voici une autre solution qui permet de ne pas utiliser plus de fermetures :

+ +
function afficheAide(aide) {
+  document.getElementById('aide').innerHTML = aide;
+}
+
+function prepareAide() {
+  var texteAide = [
+      {'id': 'email', 'aide': 'Votre adresse e-mail'},
+      {'id': 'nom', 'aide': 'Votre prénom et nom'},
+      {'id': 'âge', 'aide': 'Votre âge (vous devez être majeur)'}
+    ];
+
+  for (var i = 0; i < texteAide.length; i++) {
+    let item = texteAide[i];
+    document.getElementById(item.id).onfocus = function() {
+      afficheAide(item.aide);
+    }
+  }
+}
+
+prepareAide();
+ +

Dans ce fragment de code, nous avons utilisé let au lieu de var afin que chaque fermeture soit liée avec les variable de bloc.

+ +

{{JSFiddleEmbed("https://jsfiddle.net/v7gjv/9573/", "", 300)}}

+ +

Autrement, on aurait pu utiliser forEach() afin de parcourir le tableau texteAide et attacher un gestionnaire d'évènement sur chaque {{htmlelement("div")}} :

+ +
function afficheAide(aide) {
+  document.getElementById('aide').innerHTML = aide;
+}
+
+function prepareAide() {
+  var texteAide = [
+      {'id': 'email', 'aide': 'Votre adresse e-mail'},
+      {'id': 'nom', 'aide': 'Votre prénom et nom'},
+      {'id': 'âge', 'aide': 'Votre âge (vous devez être majeur)'}
+    ];
+
+  texteAide.forEach(function(texte) {
+      document.getElementById(texte.id).onfocus = function() {
+        afficheAide(texte.help);
+      }
+  });
+}
+
+prepareAide();
+ +

Les performances et les fermetures

+ +

Il est mal avisé de créer des fonctions imbriquées et des fermetures sans utilité. En effet, cela peut dégrader les performances en termes de vitesse d'exécution et de consommation de mémoire.

+ +

Quand, par exemple, on crée un nouvel objet, les méthodes devraient être associées au prototype de l'objet et non pas définies dans le constructeur de l'objet. De cette façon, on évite que les méthodes soient réassignées à chaque fois qu'un nouvel objet est créé.

+ +

Voici un exemple de la mauvaise façon de procéder :

+ +
function MonObjet(nom, message) {
+  this.nom = nom.toString();
+  this.message = message.toString();
+  this.getNom = function() {
+    return this.nom;
+  };
+
+  this.getMessage = function() {
+    return this.message;
+  };
+}
+
+ +

Le fragment de code précédent ne tire pas partie des avantages des fermetures. Il pourrait être mieux écrit ainsi :

+ +
function MonObjet(nom, message) {
+  this.nom = nom.toString();
+  this.message = message.toString();
+}
+MonObjet.prototype = {
+  getNom: function() {
+    return this.nom;
+  },
+  getMessage: function() {
+    return this.message;
+  }
+};
+
+ +

Cependant, redéfinir le prototype est déconseillé, donc encore meilleur serait d'ajouter les méthodes :

+ +
function MonObjet(nom, message) {
+  this.nom = nom.toString();
+  this.message = message.toString();
+}
+MonObjet.prototype.getNom = function() {
+  return this.nom;
+};
+MonObjet.prototype.getMessage = function() {
+  return this.message;
+};
+
+ +

Les deux derniers exemples permettent de voir que le prototype hérité est partagé par tous les objets construits et que les méthodes n'ont pas besoin d'être reconstruites pour chaque création d'objet. Veuillez consulter la page sur le modèle objet JavaScript en détails pour plus d'informations.

diff --git a/files/fr/web/javascript/data_structures/index.html b/files/fr/web/javascript/data_structures/index.html deleted file mode 100644 index 7390a819aa..0000000000 --- a/files/fr/web/javascript/data_structures/index.html +++ /dev/null @@ -1,320 +0,0 @@ ---- -title: Structures de données -slug: Web/JavaScript/Data_structures -tags: - - Débutant - - JavaScript - - Types -translation_of: Web/JavaScript/Data_structures -original_slug: Web/JavaScript/Structures_de_données ---- -
{{jsSidebar("More")}}
- -

Les langages de programmation disposent de structures de données natives. Selon les langages, les structures mises à disposition peuvent être différentes. Dans cet article, on listera les structures de données natives en JavaScript. On détaillera leurs propriétés et les façons de les utiliser voire de les combiner. Dans certains cas, on comparera ces structures avec celles d'autres langages.

- -

Un typage dynamique

- -

JavaScript est un langage dont le typage est faible et dynamique. Cela signifie qu'il n'est pas nécessaire de déclarer le type d'une variable avant de l'utiliser. Le type de la variable sera automatiquement déterminé lorsque le programme sera exécuté. Cela signifie également que la même variable pourra avoir différents types au cours de son existence :

- -
var toto = 42;       // toto est un nombre
-    toto = "machin"; // toto est une chaîne de caractères désormais
-    toto = true;     // et maintenant, toto est un booléen
-
- -

Les types de données

- -

Le dernier standard ECMAScript définit 8 types de données :

- - - -

Les valeurs primitives

- -

Tous les types, sauf les objets, définissent des valeurs immuables (qu'on ne peut modifier). Ainsi, contrairement au C, les chaînes de caractères sont immuables en JavaScript. Les valeurs immuables pour chacun de ces types sont appelées « valeurs primitives ».

- -

Le type booléen

- -

Un booléen représente le résultat d'une assertion logique et peut avoir deux valeurs : true (pour le vrai logique) et false (pour le faux logique) (voir {{jsxref("Boolean")}} pour plus de détails sur la représentation objet de ce type).

- -

Le type nul

- -

Le type nul ne possède qu'une valeur : null. Voir {{jsxref("null")}} et {{Glossary("Null")}} pour plus d'informations.

- -

Le type indéfini

- -

Une variable à laquelle on n'a pas affecté de valeur vaudra undefined. Voir {{jsxref("undefined")}} et {{Glossary("Undefined")}} pour plus d'informations.

- -

Le type nombre

- -

ECMAScript possède deux types numériques natifs : Number et BigInt (cf. ci-après)

- -

Le type Number est géré pour représenter les nombres : les nombres flottants à précision double, représentés sur 64 bits, selon le format IEEE 754 (les nombres compris entre -(2^53 -1) et 2^53 -1). Il n'y a donc pas de type à part pour représenter les nombres entiers. En plus de sa capacité à représenter les nombres décimaux, le type nombre possède trois valeurs symboliques : +Infinity, -Infinity, et {{jsxref("NaN")}} (Not A Number en anglais, qui signifie « n'est pas un nombre »).

- -

Afin de vérifier que des valeurs sont supérieures/inférieures à +/-Infinity, on peut utiliser les constantes {{jsxref("Number.MAX_VALUE")}} et {{jsxref("Number.MIN_VALUE")}}. À partir d'ECMAScript 6, on peut également vérifier si un nombre est/sera compris dans l'intervalle de représentation pour les nombres flottants à précision double en utilisant la méthode {{jsxref("Number.isSafeInteger()")}} ainsi que les valeurs {{jsxref("Number.MAX_SAFE_INTEGER")}} et {{jsxref("Number.MIN_SAFE_INTEGER")}}. En dehors de cet intervalle et pour JavaScript, on considère que les nombres ne sont plus représentés correctement. On manipule alors une approximation de la valeur sous forme d'un nombre à virgule flottante à précision double.

- -

Le type nombre possède un seul entier pouvant être représenté de deux façons différentes : 0 qui peut être représenté par -0 et +0. ("0" étant un alias pour +0). En pratique, cela n'a généralement aucun impact et +0 === -0 vaut bien true. Malgré tout, on peut observer certaines différences quand on divise par zéro :

- -
42 / +0
-// Infinity
-
-42 / -0
-// -Infinity
-
- -

Dans la plupart des cas, un nombre représente sa propre valeur, malgré tout les opérateurs binaires peuvent être utilisés pour représenter plusieurs valeurs booléennes grâce à un seul nombre (on parle alors de masque de bits). Ceci est généralement une mauvaise pratique (lisibilité, maintenabilité) bien que ça puisse être utile lorsqu'on souhaite minimiser le nombre de bits qu'on utilise.

- -

Le type BigInt

- -

Le type {{jsxref("BigInt")}} permet de représenter des entiers avec une précision arbitraire. Avec ce type, on peut donc manipuler des entiers plus grands que ceux représentables avec Number. Pour créer un grand entier, on ajoutera un n après l'entier ou on appellera le constructeur {{jsxref("BigInt")}}.

- -

La plus grande valeur représentable avec le type Number est accessible avec la constante {{jsxref("Number.MAX_VALUE")}}. Avec l'apparition de BigInt, on peut représenter et manipuler des entiers plus grands.

- -
const x = 2n ** 53n;
-9007199254740992n;
-const y = x + 1n;
-9007199254740993n
-
- -

À l'instar des nombres classiques, on peut utiliser les opérateurs +*, -, ** et %. Un grand entier ne sera pas strictement égal à un nombre mais on pourra avoir une égalité faible.

- -

Un grand entier se comportera comme un nombre lorsqu'il est converti en booléen avec if, ||, &&, Boolean et !.

- -

Il n'est pas possible d'utiliser des grands entiers et des nombres de façon interchangeable. Une exception {{jsxref("TypeError")}} sera déclenchée en cas d'incompatibilité.

- -

Le type chaîne de caractères (String)

- -

Ce type JavaScript est utilisé afin de représenter des données textuelles. C'est un ensemble d'« éléments » de valeurs entières non-signées représentées sur 16 bits. Chaque élément occupe une position au sein de cette chaîne de caractères. Le premier élément est situé à l'indice 0, le deuxième à l'indice 1 et ainsi de suite. La longueur d'une chaîne de caractères correspond au nombre d'éléments qu'elle contient.

- -

À la différence des chaînes de caractères dans le langage C, les chaînes de caractères JavaScript sont immuables. Cela signifie qu'une fois qu'une chaîne est créée, il est impossible de la modifier. En revanche, il est toujours possible de créer une autre chaîne basée sur la première grâce à des opérations. Par exemple :

- - - -

Attention à ne pas utiliser les chaînes pour tout et n'importe quoi !

- -

Ça peut être tentant de vouloir utiliser des chaînes afin de représenter des données complexes. En revanche, les avantages de cette méthode ne sont que très superficiels :

- - - -

En utilisant des conventions, il peut être possible de représenter n'importe quelle donnée sous forme d'une chaîne de caractères, en revanche cela n'est souvent pas la meilleure façon. (Par exemple, avec un séparateur, on pourrait émuler le comportement d'un tableau en « interdisant » que ce séparateur soit utilisé pour éléments, etc. on pourrait ensuite définir un caractère d'échappement, qui serait à son tour inutilisable dans les chaînes : toutes ces pseudo-conventions entraîneront de lourdes conséquences en termes de maintenance.)

- -

En résumé, les chaînes doivent être utilisées pour les données textuelles. Pour des données plus complexes, utilisez une abstraction adéquate et analysez/parsez les chaînes que vous recevez d'autres API.

- -

Le type symbole

- -

Les symboles sont une nouveautés du langage, apportée par ECMAScript 6. Un symbole est une valeur primitive unique et immuable pouvant être utilisée comme clé pour propriété d'un objet (voir ci-après). Dans d'autres langages de programmation, les symboles sont appelés atomes. Pour plus de détails, voir les pages {{Glossary("Symbol","Symbole")}} et le constructeur {{jsxref("Symbol")}} JavaScript.

- -

Les objets

- -

En informatique, un objet est une valeur conservée en mémoire à laquelle on fait référence grâce à un {{Glossary("Identifier", "identifiant")}}.

- -

Propriétés

- -

En JavaScript, les objets peuvent être considérés comme des collections de propriétés. En utilisant un littéral objet, il est possible d'initialiser un ensemble limité de propriétés ; d'autres propriétés peuvent ensuite être ajoutées et/ou retirées. Les valeurs des propriétés peuvent être de n'importe quel type, y compris des objets. Cela permet de construire des structures de données complexes. Les propriétés sont identifiées grâce à une « clé ». Une clé peut être une chaîne de caractères ou un symbole.

- -

Il existe deux types de propriétés qui ont certains attributs : des propriétés de données (data property) et des propriétés d'accesseur.

- -

Propriétés de données

- -

Elles associent une clé avec une valeur et possèdent les attributs suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Attributs d'une propriété de données
AttributTypeDescriptionValeur par défaut
[[Value]]N'importe quelle valeur JavaScriptLa valeur obtenue lorsqu'on accède à la propriété.undefined
[[Writable]]BooléenS'il vaut false, la valeur de la propriété (l'attribut [[Value]]) ne peut être changé.false
[[Enumerable]]BooléenS'il vaut true, la propriété pourra être listée par une boucle for...in. Voir également l'article sur le caractère énumérable des propriétés.false
[[Configurable]]BooléenS'il vaut false, la propriété ne pourra pas être supprimée, elle ne pourra pas être changée en accesseur et les attributs autres que [[Value]] et [[Writable]] ne pourront pas être modifiés.false
- - - - - - - - - - - - - - - - - - - - - - - - - -
Attributes obsolètes (faisaient partie d'ECMAScript 3, renommés avec ECMAScript 5)
AttributTypeDescription
Read-onlyBooléenÉtat symétrique pour l'attribut ES5 [[Writable]].
DontEnumBooléenÉtat symétrique pour l'attribut ES5 [[Enumerable]].
DontDeleteBooléenÉtat symétrique pour l'attribut ES5 [[Configurable]].
- -

Propriétés d'accesseur

- -

Ces propriétés associent une clé avec une ou deux fonctions accesseur et mutateur qui permettent de récupérer ou d'enregistrer une valeur. Elles possèdent les attributs suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Attributs d'une propriété d'accesseur
AttributTypeDescriptionValeur par défaut
[[Get]]Un objet Function ou undefinedLa fonction qui est appelée sans argument afin de récupérer la valeur de la propriété quand on souhaite y accéder. Voir aussi la page sur get.undefined
[[Set]]Un objet Function ou undefinedLa fonction, appelée avec un argument qui contient la valeur qu'on souhaite affecter à la valeur et qui est exécutée à chaque fois qu'on souhaite modifier la valeur. Voir aussi la page sur set.undefined
[[Enumerable]]BooléenS'il vaut true, la propriété sera listée dans les boucles for...in.false
[[Configurable]]BooléenS'il vaut false, la propriété ne pourra pas être supprimée et ne pourra pas être transformée en une propriété de données.false
- -
-

Note : Les attributs sont généralement utilisés par le moteur JavaScript plutôt qu'explicitement dans les scripts. Il est impossible d'y accéder directement (plus d'informations sur {{jsxref("Object.defineProperty()")}}. C'est pour cela que l'attribut est décrit entre double crochets (comme dans la spécification ECMAScript) plutôt qu'entre crochets simples qui pourraient laisser penser à une propriété « classique ».

-
- -

Les objets « normaux » et les fonctions

- -

Un objet JavaScript est un ensemble de correspondances entre des clés et des valeurs. Les clés sont représentées par des chaînes ou des symboles ({{jsxref("Symbol")}}). Les valeurs peuvent être de n'importe quel type. Grâce à cela, les objets peuvent, naturellement, être utilisés comme tables de hachage.

- -

Les fonctions sont des objets classiques à la seule différence qu'on peut les appeler.

- -

Les dates

- -

Lorsqu'on souhaite représenter des dates, il est tout indiqué d'utiliser le type utilitaire natif Date de JavaScript.

- -

Les collections indexées : les tableaux (Arrays) et les tableaux typés (Typed Arrays)

- -

Les tableaux (ou Arrays en anglais) sont des objets natifs qui permettent d'organiser des valeurs numérotées et qui ont une relation particulière avec la propriété length. De plus, les tableaux héritent de Array.prototype qui permet de bénéficier de plusieurs méthodes pour manipuler les tableaux. Par exemple, indexOf qui permet de rechercher une valeur dans le tableau ou push qui permet d'ajouter un élément au tableau. Les tableaux sont donc indiqués quand on souhaite représenter des listes de valeurs ou d'objets.

- -

Les tableaux typés (Typed Arrays en anglais) ont été ajoutés avec ECMAScript 6 et offrent une vue sous forme d'un tableau pour manipuler des tampons de données binaires. Le tableau qui suit illustre les types de données équivalents en C :

- -

{{page("fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray", "Les_objets_TypedArray", "", 0, 3)}}

- -

Les collections avec clés : Maps, Sets, WeakMaps, WeakSets

- -

Ces structures de données utilisent des clés pour référencer des objets. Elles ont été introduites avec ECMAScript 6. {{jsxref("Set")}} et {{jsxref("WeakSet")}} représentent des ensembles d'objets, {{jsxref("Map")}} et {{jsxref("WeakMap")}} associent une valeur à un objet. Il est possible d'énumérer les valeurs contenues dans un objet Map mais pas dans un objet WeakMap. Les WeakMaps quant à eux permettent certaines optimisations dans la gestion de la mémoire et le travail du ramasse-miettes.

- -

Il est possible d'implémenter les Maps et Sets grâce à ECMAScript 5. Cependant, comme les objets ne peuvent pas être comparés (avec une relation d'ordre par exemple), la complexité obtenue pour rechercher un élément serait nécessairement linéaire. Les implémentations natives (y compris celle des WeakMaps) permettent d'obtenir des performances logarithmiques voire constantes.

- -

Généralement, si on voulait lier des données à un nœud DOM, on pouvait utiliser les attributs data-* ou définir les propriétés à un même l'objet. Malheureusement, cela rendait les données disponibles à n'importe quel script fonctionnant dans le même contexte. Les Maps et WeakMaps permettent de gérer plus simplement une liaison « privée » entre des données et un objet.

- -

Les données structurées : JSON

- -

JSON (JavaScript Object Notation) est un format d'échange de données léger, dérivé de JavaScript et utilisé par plusieurs langages de programmation. JSON permet ainsi de construire des structures de données universelles pouvant être échangées entre programmes. Pour plus d'informations, voir les pages {{Glossary("JSON")}} et {{jsxref("JSON")}}.

- -

Les autres objets de la bibliothèque standard

- -

JavaScript possède une bibliothèque standard d'objets natifs. Veuillez lire la référence pour en savoir plus sur ces objets.

- -

Déterminer le type des objets grâce à l'opérateur typeof

- -

L'opérateur typeof peut vous aider à déterminer le type d'une variable. Pour plus d'informations et sur les cas particuliers, voir la page de la référence sur cet opérateur.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-8', 'Types')}}{{Spec2('ES5.1')}}
{{SpecName('ES2015', '#sec-ecmascript-data-types-and-values', 'ECMAScript Data Types and Values')}}{{Spec2('ES2015')}}Ajout des symboles ({{jsxref("Symbol")}}).
{{SpecName('ESDraft', '#sec-ecmascript-data-types-and-values', 'ECMAScript Data Types and Values')}}{{Spec2('ESDraft')}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/data_structures/index.md b/files/fr/web/javascript/data_structures/index.md new file mode 100644 index 0000000000..7390a819aa --- /dev/null +++ b/files/fr/web/javascript/data_structures/index.md @@ -0,0 +1,320 @@ +--- +title: Structures de données +slug: Web/JavaScript/Data_structures +tags: + - Débutant + - JavaScript + - Types +translation_of: Web/JavaScript/Data_structures +original_slug: Web/JavaScript/Structures_de_données +--- +
{{jsSidebar("More")}}
+ +

Les langages de programmation disposent de structures de données natives. Selon les langages, les structures mises à disposition peuvent être différentes. Dans cet article, on listera les structures de données natives en JavaScript. On détaillera leurs propriétés et les façons de les utiliser voire de les combiner. Dans certains cas, on comparera ces structures avec celles d'autres langages.

+ +

Un typage dynamique

+ +

JavaScript est un langage dont le typage est faible et dynamique. Cela signifie qu'il n'est pas nécessaire de déclarer le type d'une variable avant de l'utiliser. Le type de la variable sera automatiquement déterminé lorsque le programme sera exécuté. Cela signifie également que la même variable pourra avoir différents types au cours de son existence :

+ +
var toto = 42;       // toto est un nombre
+    toto = "machin"; // toto est une chaîne de caractères désormais
+    toto = true;     // et maintenant, toto est un booléen
+
+ +

Les types de données

+ +

Le dernier standard ECMAScript définit 8 types de données :

+ + + +

Les valeurs primitives

+ +

Tous les types, sauf les objets, définissent des valeurs immuables (qu'on ne peut modifier). Ainsi, contrairement au C, les chaînes de caractères sont immuables en JavaScript. Les valeurs immuables pour chacun de ces types sont appelées « valeurs primitives ».

+ +

Le type booléen

+ +

Un booléen représente le résultat d'une assertion logique et peut avoir deux valeurs : true (pour le vrai logique) et false (pour le faux logique) (voir {{jsxref("Boolean")}} pour plus de détails sur la représentation objet de ce type).

+ +

Le type nul

+ +

Le type nul ne possède qu'une valeur : null. Voir {{jsxref("null")}} et {{Glossary("Null")}} pour plus d'informations.

+ +

Le type indéfini

+ +

Une variable à laquelle on n'a pas affecté de valeur vaudra undefined. Voir {{jsxref("undefined")}} et {{Glossary("Undefined")}} pour plus d'informations.

+ +

Le type nombre

+ +

ECMAScript possède deux types numériques natifs : Number et BigInt (cf. ci-après)

+ +

Le type Number est géré pour représenter les nombres : les nombres flottants à précision double, représentés sur 64 bits, selon le format IEEE 754 (les nombres compris entre -(2^53 -1) et 2^53 -1). Il n'y a donc pas de type à part pour représenter les nombres entiers. En plus de sa capacité à représenter les nombres décimaux, le type nombre possède trois valeurs symboliques : +Infinity, -Infinity, et {{jsxref("NaN")}} (Not A Number en anglais, qui signifie « n'est pas un nombre »).

+ +

Afin de vérifier que des valeurs sont supérieures/inférieures à +/-Infinity, on peut utiliser les constantes {{jsxref("Number.MAX_VALUE")}} et {{jsxref("Number.MIN_VALUE")}}. À partir d'ECMAScript 6, on peut également vérifier si un nombre est/sera compris dans l'intervalle de représentation pour les nombres flottants à précision double en utilisant la méthode {{jsxref("Number.isSafeInteger()")}} ainsi que les valeurs {{jsxref("Number.MAX_SAFE_INTEGER")}} et {{jsxref("Number.MIN_SAFE_INTEGER")}}. En dehors de cet intervalle et pour JavaScript, on considère que les nombres ne sont plus représentés correctement. On manipule alors une approximation de la valeur sous forme d'un nombre à virgule flottante à précision double.

+ +

Le type nombre possède un seul entier pouvant être représenté de deux façons différentes : 0 qui peut être représenté par -0 et +0. ("0" étant un alias pour +0). En pratique, cela n'a généralement aucun impact et +0 === -0 vaut bien true. Malgré tout, on peut observer certaines différences quand on divise par zéro :

+ +
42 / +0
+// Infinity
+
+42 / -0
+// -Infinity
+
+ +

Dans la plupart des cas, un nombre représente sa propre valeur, malgré tout les opérateurs binaires peuvent être utilisés pour représenter plusieurs valeurs booléennes grâce à un seul nombre (on parle alors de masque de bits). Ceci est généralement une mauvaise pratique (lisibilité, maintenabilité) bien que ça puisse être utile lorsqu'on souhaite minimiser le nombre de bits qu'on utilise.

+ +

Le type BigInt

+ +

Le type {{jsxref("BigInt")}} permet de représenter des entiers avec une précision arbitraire. Avec ce type, on peut donc manipuler des entiers plus grands que ceux représentables avec Number. Pour créer un grand entier, on ajoutera un n après l'entier ou on appellera le constructeur {{jsxref("BigInt")}}.

+ +

La plus grande valeur représentable avec le type Number est accessible avec la constante {{jsxref("Number.MAX_VALUE")}}. Avec l'apparition de BigInt, on peut représenter et manipuler des entiers plus grands.

+ +
const x = 2n ** 53n;
+9007199254740992n;
+const y = x + 1n;
+9007199254740993n
+
+ +

À l'instar des nombres classiques, on peut utiliser les opérateurs +*, -, ** et %. Un grand entier ne sera pas strictement égal à un nombre mais on pourra avoir une égalité faible.

+ +

Un grand entier se comportera comme un nombre lorsqu'il est converti en booléen avec if, ||, &&, Boolean et !.

+ +

Il n'est pas possible d'utiliser des grands entiers et des nombres de façon interchangeable. Une exception {{jsxref("TypeError")}} sera déclenchée en cas d'incompatibilité.

+ +

Le type chaîne de caractères (String)

+ +

Ce type JavaScript est utilisé afin de représenter des données textuelles. C'est un ensemble d'« éléments » de valeurs entières non-signées représentées sur 16 bits. Chaque élément occupe une position au sein de cette chaîne de caractères. Le premier élément est situé à l'indice 0, le deuxième à l'indice 1 et ainsi de suite. La longueur d'une chaîne de caractères correspond au nombre d'éléments qu'elle contient.

+ +

À la différence des chaînes de caractères dans le langage C, les chaînes de caractères JavaScript sont immuables. Cela signifie qu'une fois qu'une chaîne est créée, il est impossible de la modifier. En revanche, il est toujours possible de créer une autre chaîne basée sur la première grâce à des opérations. Par exemple :

+ + + +

Attention à ne pas utiliser les chaînes pour tout et n'importe quoi !

+ +

Ça peut être tentant de vouloir utiliser des chaînes afin de représenter des données complexes. En revanche, les avantages de cette méthode ne sont que très superficiels :

+ + + +

En utilisant des conventions, il peut être possible de représenter n'importe quelle donnée sous forme d'une chaîne de caractères, en revanche cela n'est souvent pas la meilleure façon. (Par exemple, avec un séparateur, on pourrait émuler le comportement d'un tableau en « interdisant » que ce séparateur soit utilisé pour éléments, etc. on pourrait ensuite définir un caractère d'échappement, qui serait à son tour inutilisable dans les chaînes : toutes ces pseudo-conventions entraîneront de lourdes conséquences en termes de maintenance.)

+ +

En résumé, les chaînes doivent être utilisées pour les données textuelles. Pour des données plus complexes, utilisez une abstraction adéquate et analysez/parsez les chaînes que vous recevez d'autres API.

+ +

Le type symbole

+ +

Les symboles sont une nouveautés du langage, apportée par ECMAScript 6. Un symbole est une valeur primitive unique et immuable pouvant être utilisée comme clé pour propriété d'un objet (voir ci-après). Dans d'autres langages de programmation, les symboles sont appelés atomes. Pour plus de détails, voir les pages {{Glossary("Symbol","Symbole")}} et le constructeur {{jsxref("Symbol")}} JavaScript.

+ +

Les objets

+ +

En informatique, un objet est une valeur conservée en mémoire à laquelle on fait référence grâce à un {{Glossary("Identifier", "identifiant")}}.

+ +

Propriétés

+ +

En JavaScript, les objets peuvent être considérés comme des collections de propriétés. En utilisant un littéral objet, il est possible d'initialiser un ensemble limité de propriétés ; d'autres propriétés peuvent ensuite être ajoutées et/ou retirées. Les valeurs des propriétés peuvent être de n'importe quel type, y compris des objets. Cela permet de construire des structures de données complexes. Les propriétés sont identifiées grâce à une « clé ». Une clé peut être une chaîne de caractères ou un symbole.

+ +

Il existe deux types de propriétés qui ont certains attributs : des propriétés de données (data property) et des propriétés d'accesseur.

+ +

Propriétés de données

+ +

Elles associent une clé avec une valeur et possèdent les attributs suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attributs d'une propriété de données
AttributTypeDescriptionValeur par défaut
[[Value]]N'importe quelle valeur JavaScriptLa valeur obtenue lorsqu'on accède à la propriété.undefined
[[Writable]]BooléenS'il vaut false, la valeur de la propriété (l'attribut [[Value]]) ne peut être changé.false
[[Enumerable]]BooléenS'il vaut true, la propriété pourra être listée par une boucle for...in. Voir également l'article sur le caractère énumérable des propriétés.false
[[Configurable]]BooléenS'il vaut false, la propriété ne pourra pas être supprimée, elle ne pourra pas être changée en accesseur et les attributs autres que [[Value]] et [[Writable]] ne pourront pas être modifiés.false
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Attributes obsolètes (faisaient partie d'ECMAScript 3, renommés avec ECMAScript 5)
AttributTypeDescription
Read-onlyBooléenÉtat symétrique pour l'attribut ES5 [[Writable]].
DontEnumBooléenÉtat symétrique pour l'attribut ES5 [[Enumerable]].
DontDeleteBooléenÉtat symétrique pour l'attribut ES5 [[Configurable]].
+ +

Propriétés d'accesseur

+ +

Ces propriétés associent une clé avec une ou deux fonctions accesseur et mutateur qui permettent de récupérer ou d'enregistrer une valeur. Elles possèdent les attributs suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Attributs d'une propriété d'accesseur
AttributTypeDescriptionValeur par défaut
[[Get]]Un objet Function ou undefinedLa fonction qui est appelée sans argument afin de récupérer la valeur de la propriété quand on souhaite y accéder. Voir aussi la page sur get.undefined
[[Set]]Un objet Function ou undefinedLa fonction, appelée avec un argument qui contient la valeur qu'on souhaite affecter à la valeur et qui est exécutée à chaque fois qu'on souhaite modifier la valeur. Voir aussi la page sur set.undefined
[[Enumerable]]BooléenS'il vaut true, la propriété sera listée dans les boucles for...in.false
[[Configurable]]BooléenS'il vaut false, la propriété ne pourra pas être supprimée et ne pourra pas être transformée en une propriété de données.false
+ +
+

Note : Les attributs sont généralement utilisés par le moteur JavaScript plutôt qu'explicitement dans les scripts. Il est impossible d'y accéder directement (plus d'informations sur {{jsxref("Object.defineProperty()")}}. C'est pour cela que l'attribut est décrit entre double crochets (comme dans la spécification ECMAScript) plutôt qu'entre crochets simples qui pourraient laisser penser à une propriété « classique ».

+
+ +

Les objets « normaux » et les fonctions

+ +

Un objet JavaScript est un ensemble de correspondances entre des clés et des valeurs. Les clés sont représentées par des chaînes ou des symboles ({{jsxref("Symbol")}}). Les valeurs peuvent être de n'importe quel type. Grâce à cela, les objets peuvent, naturellement, être utilisés comme tables de hachage.

+ +

Les fonctions sont des objets classiques à la seule différence qu'on peut les appeler.

+ +

Les dates

+ +

Lorsqu'on souhaite représenter des dates, il est tout indiqué d'utiliser le type utilitaire natif Date de JavaScript.

+ +

Les collections indexées : les tableaux (Arrays) et les tableaux typés (Typed Arrays)

+ +

Les tableaux (ou Arrays en anglais) sont des objets natifs qui permettent d'organiser des valeurs numérotées et qui ont une relation particulière avec la propriété length. De plus, les tableaux héritent de Array.prototype qui permet de bénéficier de plusieurs méthodes pour manipuler les tableaux. Par exemple, indexOf qui permet de rechercher une valeur dans le tableau ou push qui permet d'ajouter un élément au tableau. Les tableaux sont donc indiqués quand on souhaite représenter des listes de valeurs ou d'objets.

+ +

Les tableaux typés (Typed Arrays en anglais) ont été ajoutés avec ECMAScript 6 et offrent une vue sous forme d'un tableau pour manipuler des tampons de données binaires. Le tableau qui suit illustre les types de données équivalents en C :

+ +

{{page("fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray", "Les_objets_TypedArray", "", 0, 3)}}

+ +

Les collections avec clés : Maps, Sets, WeakMaps, WeakSets

+ +

Ces structures de données utilisent des clés pour référencer des objets. Elles ont été introduites avec ECMAScript 6. {{jsxref("Set")}} et {{jsxref("WeakSet")}} représentent des ensembles d'objets, {{jsxref("Map")}} et {{jsxref("WeakMap")}} associent une valeur à un objet. Il est possible d'énumérer les valeurs contenues dans un objet Map mais pas dans un objet WeakMap. Les WeakMaps quant à eux permettent certaines optimisations dans la gestion de la mémoire et le travail du ramasse-miettes.

+ +

Il est possible d'implémenter les Maps et Sets grâce à ECMAScript 5. Cependant, comme les objets ne peuvent pas être comparés (avec une relation d'ordre par exemple), la complexité obtenue pour rechercher un élément serait nécessairement linéaire. Les implémentations natives (y compris celle des WeakMaps) permettent d'obtenir des performances logarithmiques voire constantes.

+ +

Généralement, si on voulait lier des données à un nœud DOM, on pouvait utiliser les attributs data-* ou définir les propriétés à un même l'objet. Malheureusement, cela rendait les données disponibles à n'importe quel script fonctionnant dans le même contexte. Les Maps et WeakMaps permettent de gérer plus simplement une liaison « privée » entre des données et un objet.

+ +

Les données structurées : JSON

+ +

JSON (JavaScript Object Notation) est un format d'échange de données léger, dérivé de JavaScript et utilisé par plusieurs langages de programmation. JSON permet ainsi de construire des structures de données universelles pouvant être échangées entre programmes. Pour plus d'informations, voir les pages {{Glossary("JSON")}} et {{jsxref("JSON")}}.

+ +

Les autres objets de la bibliothèque standard

+ +

JavaScript possède une bibliothèque standard d'objets natifs. Veuillez lire la référence pour en savoir plus sur ces objets.

+ +

Déterminer le type des objets grâce à l'opérateur typeof

+ +

L'opérateur typeof peut vous aider à déterminer le type d'une variable. Pour plus d'informations et sur les cas particuliers, voir la page de la référence sur cet opérateur.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-8', 'Types')}}{{Spec2('ES5.1')}}
{{SpecName('ES2015', '#sec-ecmascript-data-types-and-values', 'ECMAScript Data Types and Values')}}{{Spec2('ES2015')}}Ajout des symboles ({{jsxref("Symbol")}}).
{{SpecName('ESDraft', '#sec-ecmascript-data-types-and-values', 'ECMAScript Data Types and Values')}}{{Spec2('ESDraft')}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/enumerability_and_ownership_of_properties/index.html b/files/fr/web/javascript/enumerability_and_ownership_of_properties/index.html deleted file mode 100644 index a2a24711a8..0000000000 --- a/files/fr/web/javascript/enumerability_and_ownership_of_properties/index.html +++ /dev/null @@ -1,325 +0,0 @@ ---- -title: Rattachement et caractère énumérable des propriétés -slug: Web/JavaScript/Enumerability_and_ownership_of_properties -tags: - - Guide - - Intermédiaire - - JavaScript -translation_of: Web/JavaScript/Enumerability_and_ownership_of_properties -original_slug: Web/JavaScript/Caractère_énumérable_des_propriétés_et_rattachement ---- -
{{JsSidebar("More")}}
- -

Les propriétés dites « énumérables » sont celles pour lesquelles la caractéristique interne [[Enumerable]] vaut true. C'est le cas par défaut pour les propriétés qui sont créées grâce à une affectation simple ou grâce à un initialisateur de propriété. Les propriétés définies avec des méthodes analogues à {{jsxref("Object.defineProperty()")}} auront [[Enumerable]] à false). Les propriétés énumérables sont celles qui seront parcourues dans une boucle {{jsxref("Instructions/for...in","for..in")}} (sauf si le nom de la propriété est un {{jsxref("Symbol")}}).

- -

Le rattachement des propriétés est détérminé selon que la propriété est directement rattachée à l'objet et non à sa chaîne de prototypes. Il est également possible de récupérer l'ensemble des propriétés d'un objet. Dans le tableau suivant, on détaille les moyens possibles pour détecter, parcourir, énumérer, récupérer les propriétés d'un objet.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caractère énumérable et rattachement - méthodes natives pour détecter, récupérer et parcourir les propriétés
FonctionnalitéRattachement direct à l'objetRattachement direct à l'objet et sur la chaîne de prototypesUniquement sur la chaîne de prototypes
Détection - - - - - - - - - - - - - - - -
ÉnumérablesNon-énumérablesToutes
-

propertyIsEnumerable()

- -

hasOwnProperty()

-
hasOwnProperty() - en utilisant propertyIsEnumerable() afin d'exclure les propriétés énumérableshasOwnProperty()
-
- - - - - - - - - - - - - - - -
ÉnumerablesNon-énumérablesToutes
Cette fonctionnalité n'est pas disponible sans code supplémentaire.Cette fonctionnalité n'est pas disponible sans code supplémentaire.in
-
Cette fonctionnalité n'est pas disponible sans code supplémentaire.
Récupération - - - - - - - - - - - - - - - -
ÉnumérablesNon-énumérablesToutes
-

Object.keys()

- -

getOwnPropertyNames()

- -

getOwnPropertySymbols()

-
getOwnPropertyNames() getOwnPropertySymbols() en utilisant propertyIsEnumerable() afin d'exclure les propriétés énumérables -

getOwnPropertyNames()

- -

getOwnPropertySymbols()

-
-
Cette fonctionnalité n'est pas disponible sans code supplémentaire.Cette fonctionnalité n'est pas disponible sans code supplémentaire.
Parcours - - - - - - - - - - - - - - - -
ÉnumérablesNon-énumérablesToutes
-

Object.keys()

- -

getOwnPropertyNames()

- -

getOwnPropertySymbols()

-
getOwnPropertyNames() - getOwnPropertySymbols()en utilisant propertyIsEnumerable() afin d'exclure les propriétés énumérables -

getOwnPropertyNames()

- -

getOwnPropertySymbols()

-
-
- - - - - - - - - - - - - - - -
ÉnumerablesNon-énumérablesToutes
for..inCette fonctionnalité n'est pas disponible sans code supplémentaire.Cette fonctionnalité n'est pas disponible sans code supplémentaire.
-
Cette fonctionnalité n'est pas disponible sans code supplémentaire.
- -

Obtenir les propriétés selon leur caractère énumérable et selon leur rattachement

- -

Dans la plupart des cas, ce n'est pas l'algorithme le plus efficace mais il est présenté ici à des fins explicatives.

- - - -
var RecuperateurDePropriete = {
-    getOwnEnumerables: function (obj) {
-        return this._getPropertyNames(obj, true, false, this._enumerable);
-         // On pourrait également utiliser for..in qu'on filtre avec hasOwnProperty
-         // ou encore : 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);
-        // On peut également simplement utiliser : 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);
-        // On pourra aussi utiliser for..in sans filtre
-    },
-    getOwnAndPrototypeNonenumerables: function (obj) {
-        return this._getPropertyNames(obj, true, true, this._notEnumerable);
-    },
-    getOwnAndPrototypeEnumerablesAndNonenumerables: function (obj) {
-        return this._getPropertyNames(obj, true, true, this._enumerableAndNotEnumerable);
-    },
-    // Fonctions de rappels statiques
-    _enumerable : function (obj, prop) {
-        return obj.propertyIsEnumerable(prop);
-    },
-    _notEnumerable : function (obj, prop) {
-        return !obj.propertyIsEnumerable(prop);
-    },
-    _enumerableAndNotEnumerable : function (obj, prop) {
-        return true;
-    },
-    // Inspirée par https://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 && includePropCb(obj, prop)) {
-                        props.push(prop);
-                    }
-                });
-            }
-            if (!iteratePrototypeBool) {
-                break;
-            }
-            iterateSelfBool = true;
-        } while (obj = Object.getPrototypeOf(obj));
-
-        return props;
-    }
-};
- -

Tableau de détection

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
infor..inobj.hasOwnProperty()obj.propertyIsEnumerable()Object.keys()Object.getOwnPropertyNames()Object.getOwnPropertyDescriptors()Reflect.ownKeys()
Propriétés énumérablestruetruetruetruetruetruetruetrue
Propriétés non-énumérablestruefalsetruefalsefalsetruetruetrue
Propriétés dont les clés sont des symbolestruefalsetruefalsefalsefalsetruetrue
Propriétés héritées et énumérablestruetruefalsefalsefalsefalsefalsefalse
Propriétés héritées et non-énumérablestruefalsefalsefalsefalsefalsefalsefalse
Propriétés héritées dont les clés sont des symbolestruefalsefalsefalsefalsefalsefalsefalse
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/enumerability_and_ownership_of_properties/index.md b/files/fr/web/javascript/enumerability_and_ownership_of_properties/index.md new file mode 100644 index 0000000000..a2a24711a8 --- /dev/null +++ b/files/fr/web/javascript/enumerability_and_ownership_of_properties/index.md @@ -0,0 +1,325 @@ +--- +title: Rattachement et caractère énumérable des propriétés +slug: Web/JavaScript/Enumerability_and_ownership_of_properties +tags: + - Guide + - Intermédiaire + - JavaScript +translation_of: Web/JavaScript/Enumerability_and_ownership_of_properties +original_slug: Web/JavaScript/Caractère_énumérable_des_propriétés_et_rattachement +--- +
{{JsSidebar("More")}}
+ +

Les propriétés dites « énumérables » sont celles pour lesquelles la caractéristique interne [[Enumerable]] vaut true. C'est le cas par défaut pour les propriétés qui sont créées grâce à une affectation simple ou grâce à un initialisateur de propriété. Les propriétés définies avec des méthodes analogues à {{jsxref("Object.defineProperty()")}} auront [[Enumerable]] à false). Les propriétés énumérables sont celles qui seront parcourues dans une boucle {{jsxref("Instructions/for...in","for..in")}} (sauf si le nom de la propriété est un {{jsxref("Symbol")}}).

+ +

Le rattachement des propriétés est détérminé selon que la propriété est directement rattachée à l'objet et non à sa chaîne de prototypes. Il est également possible de récupérer l'ensemble des propriétés d'un objet. Dans le tableau suivant, on détaille les moyens possibles pour détecter, parcourir, énumérer, récupérer les propriétés d'un objet.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caractère énumérable et rattachement - méthodes natives pour détecter, récupérer et parcourir les propriétés
FonctionnalitéRattachement direct à l'objetRattachement direct à l'objet et sur la chaîne de prototypesUniquement sur la chaîne de prototypes
Détection + + + + + + + + + + + + + + + +
ÉnumérablesNon-énumérablesToutes
+

propertyIsEnumerable()

+ +

hasOwnProperty()

+
hasOwnProperty() - en utilisant propertyIsEnumerable() afin d'exclure les propriétés énumérableshasOwnProperty()
+
+ + + + + + + + + + + + + + + +
ÉnumerablesNon-énumérablesToutes
Cette fonctionnalité n'est pas disponible sans code supplémentaire.Cette fonctionnalité n'est pas disponible sans code supplémentaire.in
+
Cette fonctionnalité n'est pas disponible sans code supplémentaire.
Récupération + + + + + + + + + + + + + + + +
ÉnumérablesNon-énumérablesToutes
+

Object.keys()

+ +

getOwnPropertyNames()

+ +

getOwnPropertySymbols()

+
getOwnPropertyNames() getOwnPropertySymbols() en utilisant propertyIsEnumerable() afin d'exclure les propriétés énumérables +

getOwnPropertyNames()

+ +

getOwnPropertySymbols()

+
+
Cette fonctionnalité n'est pas disponible sans code supplémentaire.Cette fonctionnalité n'est pas disponible sans code supplémentaire.
Parcours + + + + + + + + + + + + + + + +
ÉnumérablesNon-énumérablesToutes
+

Object.keys()

+ +

getOwnPropertyNames()

+ +

getOwnPropertySymbols()

+
getOwnPropertyNames() - getOwnPropertySymbols()en utilisant propertyIsEnumerable() afin d'exclure les propriétés énumérables +

getOwnPropertyNames()

+ +

getOwnPropertySymbols()

+
+
+ + + + + + + + + + + + + + + +
ÉnumerablesNon-énumérablesToutes
for..inCette fonctionnalité n'est pas disponible sans code supplémentaire.Cette fonctionnalité n'est pas disponible sans code supplémentaire.
+
Cette fonctionnalité n'est pas disponible sans code supplémentaire.
+ +

Obtenir les propriétés selon leur caractère énumérable et selon leur rattachement

+ +

Dans la plupart des cas, ce n'est pas l'algorithme le plus efficace mais il est présenté ici à des fins explicatives.

+ + + +
var RecuperateurDePropriete = {
+    getOwnEnumerables: function (obj) {
+        return this._getPropertyNames(obj, true, false, this._enumerable);
+         // On pourrait également utiliser for..in qu'on filtre avec hasOwnProperty
+         // ou encore : 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);
+        // On peut également simplement utiliser : 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);
+        // On pourra aussi utiliser for..in sans filtre
+    },
+    getOwnAndPrototypeNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, true, true, this._notEnumerable);
+    },
+    getOwnAndPrototypeEnumerablesAndNonenumerables: function (obj) {
+        return this._getPropertyNames(obj, true, true, this._enumerableAndNotEnumerable);
+    },
+    // Fonctions de rappels statiques
+    _enumerable : function (obj, prop) {
+        return obj.propertyIsEnumerable(prop);
+    },
+    _notEnumerable : function (obj, prop) {
+        return !obj.propertyIsEnumerable(prop);
+    },
+    _enumerableAndNotEnumerable : function (obj, prop) {
+        return true;
+    },
+    // Inspirée par https://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 && includePropCb(obj, prop)) {
+                        props.push(prop);
+                    }
+                });
+            }
+            if (!iteratePrototypeBool) {
+                break;
+            }
+            iterateSelfBool = true;
+        } while (obj = Object.getPrototypeOf(obj));
+
+        return props;
+    }
+};
+ +

Tableau de détection

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
infor..inobj.hasOwnProperty()obj.propertyIsEnumerable()Object.keys()Object.getOwnPropertyNames()Object.getOwnPropertyDescriptors()Reflect.ownKeys()
Propriétés énumérablestruetruetruetruetruetruetruetrue
Propriétés non-énumérablestruefalsetruefalsefalsetruetruetrue
Propriétés dont les clés sont des symbolestruefalsetruefalsefalsefalsetruetrue
Propriétés héritées et énumérablestruetruefalsefalsefalsefalsefalsefalse
Propriétés héritées et non-énumérablestruefalsefalsefalsefalsefalsefalsefalse
Propriétés héritées dont les clés sont des symbolestruefalsefalsefalsefalsefalsefalsefalse
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/equality_comparisons_and_sameness/index.html b/files/fr/web/javascript/equality_comparisons_and_sameness/index.html deleted file mode 100644 index d61690d512..0000000000 --- a/files/fr/web/javascript/equality_comparisons_and_sameness/index.html +++ /dev/null @@ -1,461 +0,0 @@ ---- -title: Utiliser les différents tests d'égalité -slug: Web/JavaScript/Equality_comparisons_and_sameness -tags: - - Guide - - Intermédiaire - - JavaScript -translation_of: Web/JavaScript/Equality_comparisons_and_sameness -original_slug: Web/JavaScript/Les_différents_tests_d_égalité ---- -
{{jsSidebar("Intermediate")}}
- -

JavaScript fournit trois opérations permettant de comparer des valeurs :

- - - -

Ces trois opérations sont associées à quatre algorithmes d'égalité (depuis ES2015) :

- - - -

Selon la comparaison qu'on souhaite effectuer, on choisira une de ces opérations.

- -

En résumé :

- - - -

On notera que pour ces trois opérations, la comparaison s'effectue sur les valeurs des éléments qu'on compare, aucune de ces opérations ne permet de comparer la structure des paramètres. Pour des objets non primitifs, x et y qui ont la même structure mais qui sont des objets distincs, chacune des opérations présentées ci-avant sera évaluée à false.

- -

L'égalité stricte avec ===

- -

L'égalité stricte compare deux valeurs et teste leur égalité. Aucune des valeurs n'est convertie implicitement en une autre valeur avant que la comparaison soit effectuée. Si les valeurs sont typées différemment, elles sont considérées comme différentes. Si les valeurs sont de même type et ne sont pas des nombres, elles sont considérées égales si elles ont la même valeur. Si les deux valeurs sont des nombres, elles sont égales si elles ont la même valeur et que cette valeur n'est pas NaN ou si l'une vaut +0 et l'autre -0.

- -
var num = 0;
-var obj = new String("0");
-var str = "0";
-
-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
-
- -

Ce test d'égalité stricte est presque toujours la meilleure des opérations à considérer pour ces tests. Excepté pour les nombres, la sémantique utilisée est simple : une valeur est uniquement égale à elle-même. En ce qui concerne les nombres, il y a deux cas aux limites à considérer. Le premier cas concerne le nombre zéro positif ou négatif. Cela peut être utile dans la représentation de problèmes mathématiques mais ne constitue pas une différence pour de nombreuses situations : le test d'égalité stricte considère que ce sont les mêmes valeurs. Le second cas concerne la valeur « n'est pas un nombre », NaN (pour « not a number » en anglais) permettant de représenter certaines entités mathématiques : la somme des deux infinis (positif et négatif) par exemple. Le test d'égalité stricte considère que NaN est différent de toutes les valeurs, y compris lui-même. (N.B. : Le seul cas de figure pour lequel on a (x !== x) qui renvoie true est lorsque x vaut NaN.)

- -

L'égalité faible avec ==

- -

Le test d'égalité faible compare deux valeurs après les avoir converties en valeurs d'un même type. Une fois converties (la conversion peut s'effectuer pour l'une ou les deux valeurs), la comparaison finale est la même que celle effectuée par ===. L'égalité faible est symétrique : A == B aura toujours la même signification que B == A pour toute valeur de A et B.

- -

La comparaison d'égalité est effectuée comme suit pour des opérandes de différents types :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Opérande B
UndefinedNullNumberStringBooleanObject
Opérande AUndefinedtruetruefalsefalsefalsefalse
Nulltruetruefalsefalsefalsefalse
NumberfalsefalseA === BA === ToNumber(B)A === ToNumber(B)A == ToPrimitive(B)
StringfalsefalseToNumber(A) === BA === BToNumber(A) === ToNumber(B)A == ToPrimitive(B)
BooleanfalsefalseToNumber(A) === BToNumber(A) === ToNumber(B)A === Bfalse
ObjectfalsefalseToPrimitive(A) == BToPrimitive(A) == BToPrimitive(A) == ToNumber(B) -

A === B

-
- -

Dans le tableau ci-dessus, l'expression ToNumber(A) correspond à une tentative de convertir l'argument en un nombre avant la comparaison. Le résultat obtenu est équivalent à +A (l'opérateur unaire +). ToPrimitive(A) correspond à une tentative de convertir l'argument en une valeur primitive grâce à plusieurs méthodes comme A.toString et A.valueOf.

- -

Selon ECMAScript, au sens de l'égalité faible, tous les objets sont différents de undefined et de null. Cependant, la plupart des navigateurs autorisent, dans certains contextes, unensemble restreint d'objets (notamment l'objet document.all), à agir comme s'ils émulaient la valeur undefined. L'égalité faible est un de ces contextes. Pour tous les autres cas, un objet ne sera jamais approximativement égal à undefined ou à null.

- -
var num = 0;
-var obj = new String("0");
-var str = "0";
-
-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
-
-// Les deux assertions qui suivent sont fausses
-// sauf dans certains cas exceptionnels
-console.log(obj == null);
-console.log(obj == undefined);
-
- -

Certains développeurs considèrent que ce n'est jamais une bonne idée d'utiliser l'égalilté faible. Le résultat d'une comparaison utilisant l'égalité stricte est plus simple à appréhender et à prédire, de plus il n'y a aucune conversion implicite ce qui rend le test plus rapide.

- -

Égalité de valeurs

- -

L'égalité de valeurs répond à un dernier cas d'utilisation : savoir si deux valeurs sont fonctionnellement identiques pour tout contexte. (Ce cas d'utilisation est un exemple du principe de substitution de Liskov). On retrouve ce cas lorsqu'on essaie de changer une propriété immuable :

- -
// Ajouter la propriété immuable NEGATIVE_ZERO au constructor Number.
-Object.defineProperty(Number, "NEGATIVE_ZERO",
-                      { value: -0, writable: false, configurable: false, enumerable: false });
-
-function attemptMutation(v) {
-  Object.defineProperty(Number, "NEGATIVE_ZERO", { value: v });
-}
-
- -

Object.defineProperty lancera une exception pour tout changement de la propriété qui serait réellement un changement. Rien ne se passera si aucun changement n'est nécessaire. Ainsi, si v vaut -0, aucun changement n'est nécessaire et il n'y aura pas d'erreur. Mais si v vaut +0, Number.NEGATIVE_ZERO n'aurait plus la même valeur immuable. De façon interne à l'implémentation, la nouvelle valeur est comparée avec la valeur courante en utilisant une égalité de valeurs.

- -

L'égalité de valeurs peut être testée grâce à la méthode {{jsxref("Object.is")}}.

- -

Égalité de valeurs nulles

- -

On utilise la même égalité que l'égalité de valeur et on considère que +0 et -0 sont égaux.

- -

Égalité abstraite, égalité stricte et valeurs identiques : la spécification

- -

Selon ES5, la comparaison effectuée par == est décrite dans la section 11.9.3 sur l'algorithme d'égalité abstraite (Abstract Equality Algorithm). La comparaison donnée par === est décrite dans la section 11.9.6 sur l'algorithme d'égalité stricte (Strict Equality Algorithm). Ces documents sont en anglais mais sont tout à fait abordables, ne pas hésiter à les consulter (conseil : d'abord commencer par l'algorithme d'égalité stricte). ES5 décrit également, dans la section 9.12 sur l'algorithme SameValue, l'opération utilisée en interne par le moteur JavaScript. Cet algorithme est principalement basé sur l'algorithme d'égalité stricte : 11.9.6.4 et 9.12.4 diffèrent en ce qui concerne les nombres. ES6 (ECMAScript 2015) permet d'utiliser cet algorithme grâce à la méthode {{jsxref("Object.is")}}.

- -

Dans ces documents, on peut voir que l'algorithme d'égalité stricte est un sous-ensemble de l'algorithme d'égalité abstraite (exception faite de la vérification du type) car 11.9.6.2–7 correspond exactement à 11.9.3.1.a–f.

- -

Un modèle pour mieux comprendre ?

- -

Avant ES6 (ECMAScript 2015), il était courant de dire que l'égalité stricte avec le triple égal était une version « améliorée » de l'égalité faible (double égal) et vice versa. En effet, l'égalité faible ajoute une étape de conversion des types qui n'est pas fournie par l'égalité stricte (ce qui permet d'avoir 6 == "6"). On peut aussi dire que l'égalité stricte est une version améliorée de l'égalité simple car elle ajoute une fonctionnalité de vérification des types. Selon votre approche et votre problème, une de ces égalités se prêtera mieux à la résolution.

- -

Cependant, ce « modèle de pensées » ne peut pas être étendu avec l'arrivée d'{{jsxref("Object.is")}} avec ES6 (ECMAScript 2015). En effet Object.is() n'est pas plus « faible » que l'égalité faible ou plus « stricte » que l'égalité stricte et il n'est pas non plus quelque part entre les deux. Dans le tableau de comparaison ci-après, on voit que la différence provient avant tout de la façon dont {{jsxref("Object.is")}} gère {{jsxref("NaN")}}. On note ici que si Object.is(NaN, NaN) valait false, on pourrait dire qu'Object.is() est plus stricte que == ou === car elle distingue -0 et +0. Cependant, ce n'est pas le cas et on a bien Object.is(NaN,NaN) qui vaut true. C'est pour cette raison qu'il faut considérer {{jsxref("Object.is")}} selon ses caractéristiques spécifiques plutôt que comme une version plus faible ou plus stricte des autres opérateurs d'égalité.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comparaisons d'égalité
xy=====Object.isSameValueZero
undefinedundefinedtruetruetruetrue
nullnulltruetruetruetrue
truetruetruetruetruetrue
falsefalsetruetruetruetrue
'toto''toto'truetruetruetrue
00truetruetruetrue
+0-0truetruefalsetrue
+00truetruetruetrue
-00truetruefalsetrue
0falsetruefalsefalsefalse
""falsetruefalsefalsefalse
""0truefalsefalsefalse
'0'0truefalsefalsefalse
'17'17truefalsefalsefalse
[1, 2]'1,2'truefalsefalsefalse
new String('toto')'toto'truefalsefalsefalse
nullundefinedtruefalsefalsefalse
nullfalsefalsefalsefalsefalse
undefinedfalsefalsefalsefalsefalse
{ toto: 'truc' }{ toto: 'truc' }falsefalsefalsefalse
new String('toto')new String('toto')falsefalsefalsefalse
0nullfalsefalsefalsefalse
0NaNfalsefalsefalsefalse
'toto'NaNfalsefalsefalsefalse
NaNNaNfalsefalsetruetrue
- -

Quand utiliser {{jsxref("Object.is")}} et quand utiliser l'égalité stricte

- -

En plus de la façon dont {{jsxref("Object.is")}} traite NaN, la spécificité d'Object.is() réside dans sa façon de traiter les valeurs proches de zéro. Dans des cas d'utilisation où on a besoin d'effectuer de la méta-programmation, notamment pour imiter certaines caractéristiques de {{jsxref("Object.defineProperty")}}. Si le scénario d'utilisation ne nécessite pas ce comportement, il est conseillé d'utiliser ===. Même si on souhaite pouvoir comparer NaN avec lui-même et que ce test vaille true, il sera plus simple d'utiliser la méthode {{jsxref("isNaN")}} disponible avec les versions antérieures d'ECMAScript. En effet, cela évite d'avoir à traiter des cas plus complexes où il faudrait gérer les signes des zéros dans les différentes comparaisons.

- -

Voici une liste (non exhaustive) d'opérateurs et de méthodes natives qui peuvent entraîner l'apparition des valeurs -0 et +0 dans le code :

- -
-
- (négation unaire)
-
-

Si on prend l'opposé de 0, on aura, bien entendu,-0. Cependant, avec les expressions, cela peut faire que la valeur -0 se glisse dans les variables sans qu'on s'en rende compte. Par exemple :

-
let forceArrêt = obj.masse * -obj.vitesse
-

Si obj.vitesse vaut 0 (ou est évalué à 0), un -0 sera introduit, ce qui fera que forceArrêt pourra être négative.

-
-
{{jsxref("Math.atan2")}}, {{jsxref("Math.ceil")}}, {{jsxref("Math.pow")}}, {{jsxref("Math.round")}}
-
Ces méthodes peuvent introduire -0 dans une expression lors de leur évaluation, même si -0 ne faisait pas partie des paramètres. Par exemple, si on utilise Math.pow() pour élever {{jsxref("Infinity", "-Infinity")}} à une puissance négative, on obtiendra -0 pour une puissance impaire. Pour plus de détails, voir la documentation de chaque méthode.
-
{{jsxref("Math.floor")}}, {{jsxref("Math.max")}}, {{jsxref("Math.min")}}, {{jsxref("Math.sin")}}, {{jsxref("Math.sqrt")}}, {{jsxref("Math.tan")}}
-
Ces méthodes peuvent renvoyer -0 dans certains cas où -0 est passé en paramètre. Par exemple, Math.min(-0, +0) fournira -0. Pour plus de détails, voir la documentation de chaque méthode.
-
~, <<, >>
-
Chacun de ces opérateurs utilise l'algorithme ToInt32 interne au moteur JavaScript. Étant donné qu'il n'y a qu'une seule représentation pour 0 sur les entiers exprimés avec le type interne sur 32 bits, -0 ne sera pas invariant pour deux opérations symétriques : Object.is(~~(-0), -0) et Object.is(-0 << 2 >> 2, -0) renverront tous les deux false.
-
- -

Si on utilise {{jsxref("Object.is")}} et qu'on ne souhaite pas gérer les cas aux limites autour de zéro, cela peut avoir des effet indésirés. En revanche, si on souhaite effectivement comparer -0 et +0, c'est la méthode à adopter.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/equality_comparisons_and_sameness/index.md b/files/fr/web/javascript/equality_comparisons_and_sameness/index.md new file mode 100644 index 0000000000..d61690d512 --- /dev/null +++ b/files/fr/web/javascript/equality_comparisons_and_sameness/index.md @@ -0,0 +1,461 @@ +--- +title: Utiliser les différents tests d'égalité +slug: Web/JavaScript/Equality_comparisons_and_sameness +tags: + - Guide + - Intermédiaire + - JavaScript +translation_of: Web/JavaScript/Equality_comparisons_and_sameness +original_slug: Web/JavaScript/Les_différents_tests_d_égalité +--- +
{{jsSidebar("Intermediate")}}
+ +

JavaScript fournit trois opérations permettant de comparer des valeurs :

+ + + +

Ces trois opérations sont associées à quatre algorithmes d'égalité (depuis ES2015) :

+ + + +

Selon la comparaison qu'on souhaite effectuer, on choisira une de ces opérations.

+ +

En résumé :

+ + + +

On notera que pour ces trois opérations, la comparaison s'effectue sur les valeurs des éléments qu'on compare, aucune de ces opérations ne permet de comparer la structure des paramètres. Pour des objets non primitifs, x et y qui ont la même structure mais qui sont des objets distincs, chacune des opérations présentées ci-avant sera évaluée à false.

+ +

L'égalité stricte avec ===

+ +

L'égalité stricte compare deux valeurs et teste leur égalité. Aucune des valeurs n'est convertie implicitement en une autre valeur avant que la comparaison soit effectuée. Si les valeurs sont typées différemment, elles sont considérées comme différentes. Si les valeurs sont de même type et ne sont pas des nombres, elles sont considérées égales si elles ont la même valeur. Si les deux valeurs sont des nombres, elles sont égales si elles ont la même valeur et que cette valeur n'est pas NaN ou si l'une vaut +0 et l'autre -0.

+ +
var num = 0;
+var obj = new String("0");
+var str = "0";
+
+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
+
+ +

Ce test d'égalité stricte est presque toujours la meilleure des opérations à considérer pour ces tests. Excepté pour les nombres, la sémantique utilisée est simple : une valeur est uniquement égale à elle-même. En ce qui concerne les nombres, il y a deux cas aux limites à considérer. Le premier cas concerne le nombre zéro positif ou négatif. Cela peut être utile dans la représentation de problèmes mathématiques mais ne constitue pas une différence pour de nombreuses situations : le test d'égalité stricte considère que ce sont les mêmes valeurs. Le second cas concerne la valeur « n'est pas un nombre », NaN (pour « not a number » en anglais) permettant de représenter certaines entités mathématiques : la somme des deux infinis (positif et négatif) par exemple. Le test d'égalité stricte considère que NaN est différent de toutes les valeurs, y compris lui-même. (N.B. : Le seul cas de figure pour lequel on a (x !== x) qui renvoie true est lorsque x vaut NaN.)

+ +

L'égalité faible avec ==

+ +

Le test d'égalité faible compare deux valeurs après les avoir converties en valeurs d'un même type. Une fois converties (la conversion peut s'effectuer pour l'une ou les deux valeurs), la comparaison finale est la même que celle effectuée par ===. L'égalité faible est symétrique : A == B aura toujours la même signification que B == A pour toute valeur de A et B.

+ +

La comparaison d'égalité est effectuée comme suit pour des opérandes de différents types :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opérande B
UndefinedNullNumberStringBooleanObject
Opérande AUndefinedtruetruefalsefalsefalsefalse
Nulltruetruefalsefalsefalsefalse
NumberfalsefalseA === BA === ToNumber(B)A === ToNumber(B)A == ToPrimitive(B)
StringfalsefalseToNumber(A) === BA === BToNumber(A) === ToNumber(B)A == ToPrimitive(B)
BooleanfalsefalseToNumber(A) === BToNumber(A) === ToNumber(B)A === Bfalse
ObjectfalsefalseToPrimitive(A) == BToPrimitive(A) == BToPrimitive(A) == ToNumber(B) +

A === B

+
+ +

Dans le tableau ci-dessus, l'expression ToNumber(A) correspond à une tentative de convertir l'argument en un nombre avant la comparaison. Le résultat obtenu est équivalent à +A (l'opérateur unaire +). ToPrimitive(A) correspond à une tentative de convertir l'argument en une valeur primitive grâce à plusieurs méthodes comme A.toString et A.valueOf.

+ +

Selon ECMAScript, au sens de l'égalité faible, tous les objets sont différents de undefined et de null. Cependant, la plupart des navigateurs autorisent, dans certains contextes, unensemble restreint d'objets (notamment l'objet document.all), à agir comme s'ils émulaient la valeur undefined. L'égalité faible est un de ces contextes. Pour tous les autres cas, un objet ne sera jamais approximativement égal à undefined ou à null.

+ +
var num = 0;
+var obj = new String("0");
+var str = "0";
+
+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
+
+// Les deux assertions qui suivent sont fausses
+// sauf dans certains cas exceptionnels
+console.log(obj == null);
+console.log(obj == undefined);
+
+ +

Certains développeurs considèrent que ce n'est jamais une bonne idée d'utiliser l'égalilté faible. Le résultat d'une comparaison utilisant l'égalité stricte est plus simple à appréhender et à prédire, de plus il n'y a aucune conversion implicite ce qui rend le test plus rapide.

+ +

Égalité de valeurs

+ +

L'égalité de valeurs répond à un dernier cas d'utilisation : savoir si deux valeurs sont fonctionnellement identiques pour tout contexte. (Ce cas d'utilisation est un exemple du principe de substitution de Liskov). On retrouve ce cas lorsqu'on essaie de changer une propriété immuable :

+ +
// Ajouter la propriété immuable NEGATIVE_ZERO au constructor Number.
+Object.defineProperty(Number, "NEGATIVE_ZERO",
+                      { value: -0, writable: false, configurable: false, enumerable: false });
+
+function attemptMutation(v) {
+  Object.defineProperty(Number, "NEGATIVE_ZERO", { value: v });
+}
+
+ +

Object.defineProperty lancera une exception pour tout changement de la propriété qui serait réellement un changement. Rien ne se passera si aucun changement n'est nécessaire. Ainsi, si v vaut -0, aucun changement n'est nécessaire et il n'y aura pas d'erreur. Mais si v vaut +0, Number.NEGATIVE_ZERO n'aurait plus la même valeur immuable. De façon interne à l'implémentation, la nouvelle valeur est comparée avec la valeur courante en utilisant une égalité de valeurs.

+ +

L'égalité de valeurs peut être testée grâce à la méthode {{jsxref("Object.is")}}.

+ +

Égalité de valeurs nulles

+ +

On utilise la même égalité que l'égalité de valeur et on considère que +0 et -0 sont égaux.

+ +

Égalité abstraite, égalité stricte et valeurs identiques : la spécification

+ +

Selon ES5, la comparaison effectuée par == est décrite dans la section 11.9.3 sur l'algorithme d'égalité abstraite (Abstract Equality Algorithm). La comparaison donnée par === est décrite dans la section 11.9.6 sur l'algorithme d'égalité stricte (Strict Equality Algorithm). Ces documents sont en anglais mais sont tout à fait abordables, ne pas hésiter à les consulter (conseil : d'abord commencer par l'algorithme d'égalité stricte). ES5 décrit également, dans la section 9.12 sur l'algorithme SameValue, l'opération utilisée en interne par le moteur JavaScript. Cet algorithme est principalement basé sur l'algorithme d'égalité stricte : 11.9.6.4 et 9.12.4 diffèrent en ce qui concerne les nombres. ES6 (ECMAScript 2015) permet d'utiliser cet algorithme grâce à la méthode {{jsxref("Object.is")}}.

+ +

Dans ces documents, on peut voir que l'algorithme d'égalité stricte est un sous-ensemble de l'algorithme d'égalité abstraite (exception faite de la vérification du type) car 11.9.6.2–7 correspond exactement à 11.9.3.1.a–f.

+ +

Un modèle pour mieux comprendre ?

+ +

Avant ES6 (ECMAScript 2015), il était courant de dire que l'égalité stricte avec le triple égal était une version « améliorée » de l'égalité faible (double égal) et vice versa. En effet, l'égalité faible ajoute une étape de conversion des types qui n'est pas fournie par l'égalité stricte (ce qui permet d'avoir 6 == "6"). On peut aussi dire que l'égalité stricte est une version améliorée de l'égalité simple car elle ajoute une fonctionnalité de vérification des types. Selon votre approche et votre problème, une de ces égalités se prêtera mieux à la résolution.

+ +

Cependant, ce « modèle de pensées » ne peut pas être étendu avec l'arrivée d'{{jsxref("Object.is")}} avec ES6 (ECMAScript 2015). En effet Object.is() n'est pas plus « faible » que l'égalité faible ou plus « stricte » que l'égalité stricte et il n'est pas non plus quelque part entre les deux. Dans le tableau de comparaison ci-après, on voit que la différence provient avant tout de la façon dont {{jsxref("Object.is")}} gère {{jsxref("NaN")}}. On note ici que si Object.is(NaN, NaN) valait false, on pourrait dire qu'Object.is() est plus stricte que == ou === car elle distingue -0 et +0. Cependant, ce n'est pas le cas et on a bien Object.is(NaN,NaN) qui vaut true. C'est pour cette raison qu'il faut considérer {{jsxref("Object.is")}} selon ses caractéristiques spécifiques plutôt que comme une version plus faible ou plus stricte des autres opérateurs d'égalité.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comparaisons d'égalité
xy=====Object.isSameValueZero
undefinedundefinedtruetruetruetrue
nullnulltruetruetruetrue
truetruetruetruetruetrue
falsefalsetruetruetruetrue
'toto''toto'truetruetruetrue
00truetruetruetrue
+0-0truetruefalsetrue
+00truetruetruetrue
-00truetruefalsetrue
0falsetruefalsefalsefalse
""falsetruefalsefalsefalse
""0truefalsefalsefalse
'0'0truefalsefalsefalse
'17'17truefalsefalsefalse
[1, 2]'1,2'truefalsefalsefalse
new String('toto')'toto'truefalsefalsefalse
nullundefinedtruefalsefalsefalse
nullfalsefalsefalsefalsefalse
undefinedfalsefalsefalsefalsefalse
{ toto: 'truc' }{ toto: 'truc' }falsefalsefalsefalse
new String('toto')new String('toto')falsefalsefalsefalse
0nullfalsefalsefalsefalse
0NaNfalsefalsefalsefalse
'toto'NaNfalsefalsefalsefalse
NaNNaNfalsefalsetruetrue
+ +

Quand utiliser {{jsxref("Object.is")}} et quand utiliser l'égalité stricte

+ +

En plus de la façon dont {{jsxref("Object.is")}} traite NaN, la spécificité d'Object.is() réside dans sa façon de traiter les valeurs proches de zéro. Dans des cas d'utilisation où on a besoin d'effectuer de la méta-programmation, notamment pour imiter certaines caractéristiques de {{jsxref("Object.defineProperty")}}. Si le scénario d'utilisation ne nécessite pas ce comportement, il est conseillé d'utiliser ===. Même si on souhaite pouvoir comparer NaN avec lui-même et que ce test vaille true, il sera plus simple d'utiliser la méthode {{jsxref("isNaN")}} disponible avec les versions antérieures d'ECMAScript. En effet, cela évite d'avoir à traiter des cas plus complexes où il faudrait gérer les signes des zéros dans les différentes comparaisons.

+ +

Voici une liste (non exhaustive) d'opérateurs et de méthodes natives qui peuvent entraîner l'apparition des valeurs -0 et +0 dans le code :

+ +
+
- (négation unaire)
+
+

Si on prend l'opposé de 0, on aura, bien entendu,-0. Cependant, avec les expressions, cela peut faire que la valeur -0 se glisse dans les variables sans qu'on s'en rende compte. Par exemple :

+
let forceArrêt = obj.masse * -obj.vitesse
+

Si obj.vitesse vaut 0 (ou est évalué à 0), un -0 sera introduit, ce qui fera que forceArrêt pourra être négative.

+
+
{{jsxref("Math.atan2")}}, {{jsxref("Math.ceil")}}, {{jsxref("Math.pow")}}, {{jsxref("Math.round")}}
+
Ces méthodes peuvent introduire -0 dans une expression lors de leur évaluation, même si -0 ne faisait pas partie des paramètres. Par exemple, si on utilise Math.pow() pour élever {{jsxref("Infinity", "-Infinity")}} à une puissance négative, on obtiendra -0 pour une puissance impaire. Pour plus de détails, voir la documentation de chaque méthode.
+
{{jsxref("Math.floor")}}, {{jsxref("Math.max")}}, {{jsxref("Math.min")}}, {{jsxref("Math.sin")}}, {{jsxref("Math.sqrt")}}, {{jsxref("Math.tan")}}
+
Ces méthodes peuvent renvoyer -0 dans certains cas où -0 est passé en paramètre. Par exemple, Math.min(-0, +0) fournira -0. Pour plus de détails, voir la documentation de chaque méthode.
+
~, <<, >>
+
Chacun de ces opérateurs utilise l'algorithme ToInt32 interne au moteur JavaScript. Étant donné qu'il n'y a qu'une seule représentation pour 0 sur les entiers exprimés avec le type interne sur 32 bits, -0 ne sera pas invariant pour deux opérations symétriques : Object.is(~~(-0), -0) et Object.is(-0 << 2 >> 2, -0) renverront tous les deux false.
+
+ +

Si on utilise {{jsxref("Object.is")}} et qu'on ne souhaite pas gérer les cas aux limites autour de zéro, cela peut avoir des effet indésirés. En revanche, si on souhaite effectivement comparer -0 et +0, c'est la méthode à adopter.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/eventloop/index.html b/files/fr/web/javascript/eventloop/index.html deleted file mode 100644 index d349d9d056..0000000000 --- a/files/fr/web/javascript/eventloop/index.html +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: Gestion de la concurrence et boucle des événements -slug: Web/JavaScript/EventLoop -tags: - - Avancé - - Guide - - JavaScript -translation_of: Web/JavaScript/EventLoop -original_slug: Web/JavaScript/Concurrence_et_boucle_des_événements ---- -
{{jsSidebar("Advanced")}}
- -

JavaScript gère la concurrence grâce à une « boucle d'événements ». Ce modèle est différent de la gestion faite par des langages comme C ou Java.

- -

Notions liées à l'exécution

- -

Les sections qui suivent décrivent un modèle théorique. En réalité, les moteurs JavaScript implémentent et optimisent fortement la sémantique décrite ici.

- -

Représentation visuelle

- -

Stack, heap, queue

- -

La pile d'appels (stack)

- -

Les appels de fonction forment une pile de cadre (frames).

- -
function f(b){
-  var a = 12;
-  return a + b + 35;
-}
-
-function g(x){
-  var m = 4;
-  return f(m * x);
-}
-
-console.log(g(21)); // affichera 131
-
- -

Lors de l'appel à g, on crée un premier cadre contenant les arguments de g ainsi que les variables locales. Quand g appelle f, un deuxième cadre est créé et placé sur le premier et contient les arguments de f ainsi que les variables locales. Lorsque f a fini et renvoyé son résultat, le cadre correspondant (celui qui est sur le dessus) est retiré de la pile (il reste donc le cadre lié à l'appel de g). Quand g a fini grâce aux informations transmises, la pile devient vide.

- -

Le tas (heap)

- -

Les objets sont alloués en mémoire dans un tas qui désigne une zone de la mémoire sans structure particulière.

- -

La file (queue)

- -

Un environnement d'exécution JavaScript (runtime) contient une queue de messages à traiter. Chaque message est associé à une fonction. Lorsque la pile est vide ou a suffisamment d'espace, on retire un message de la queue et on le traite. Le traitement consiste à appeler la fonction associée au message (et donc à créer le cadre dans la pile d'appel). Le traitement d'un message est fini lorsque la pile d'appels redevient vide.

- -

La boucle d'événements

- -

La boucle d'événement tire principalement son nom de son implémentation. Celle-ci ressemble à :

- -
while (queue.attendreMessage()){
-  queue.traiterProchainMessage();
-}
- -

queue.attendreMessage est un fonction synchrone qui attend un message même s'il n'y en a aucun à traiter.

- -

Traiter de A à Z (run-to-completion)

- -

Chaque message sera traité complètement avant tout autre message. Cela permet de savoir que, lorsqu'une fonction s'exécute, on ne peut pas observer l'exécution d'un autre code qui prendrait le pas (modifiant les données de la fonction par exemple). Le modèle de thread utilisé par le langage C, par exemple, que la fonction puisse être interrompue à tout moment pour permettre à un autre thread d'exécuter un autre code.

- -

Ce modèle possède un désavantage : lorsqu'un message prend trop de temps à être traité, l'application ne peut plus gérer les interactions utilisateur comme les clics ou le défilement. Généralement, le navigateur affiche alors « Le script met trop de temps à répondre ». Une bonne pratique consiste à rendre le traîtement de message le plus court possible et à découper le message problématique en plusieurs messages.

- -

L'ajout de messages

- -

Dans les navigateurs web, des messages sont ajoutés à chaque fois qu'un événement se produit et qu'un gestionnaire d'événements y est attaché. S'il n'y a pas d'écouteur (listener) pour intercepter l'événement, il est perdu. Ainsi, si on clique un élément qui possède un gestionnaire d'événements pour les clics, un message sera ajouté (il en va de même avec les autres événements).

- -

La fonction setTimeout est appelée avec deux arguments : un message à la suite de la queue et la durée à attendre (optionnelle, par défaut elle vaut 0). La durée représente le temps minimal à attendre avant que le message soit placé dans la queue. S'il n'y a pas d'autre message dans la queue, le message sera traîté directement. En revanche, s'il y a d'autres messages auparavant, le message de setTimeout devra attendre la fin du traîtement des messages précédents déjà présents dans la queue. C'est pourquoi le deuxième argument de cette fonction indique une durée minimum et non une durée garantie.

- -
-

Attention : L'argument passé pour le délai à setTimeout ne correspond pas au temps exact. Cela correspond au délai minimum et non à un délai garanti. Par exemple setTimeout(maFonction(),100); indique uniquement que maFonction sera lancé au moins après 100 millisecondes.

-
- -

Voici un exemple qui illustre ce concept (setTimeout ne s'exécute pas immédiatement après la fin du timer) :

- -
const s = new Date().getSeconds();
-
-setTimeout(function() {
-  // prints
-  console.log("Exécuté après " + (new Date().getSeconds() - s) + " secondes.");
-}, 500);
-
-while(true) {
-  if(new Date().getSeconds() - s >= 2) {
-    console.log("Ouf, on a bouclé pendant 2 secondes");
-    break;
-  }
-}
-
- -

Zéro délai

- -

Un délai à zéro ne signifie pas que le callback sera déclenché après zéro milliseconde. Appeler setTimeout avec un délai de 0 (zéro) milliseconde n'éxécute pas le callback après l'interval donné.

- -

L'exécution dépend du nombre de taches en attente dans la queue. Dans l'exemple ci-dessous, le message 'ceci est juste un message' sera affiché dans la console avant que le message dans le callback soit traité, parce que le délai est le temps minimum requis par l'environnement d'exécution (runtime) pour traiter la demande (pas un temps garanti).

- -

Fondamentalement, setTimeout doit attendre la fin de tout le code pour les messages en file d'attente, même si vous avez spécifié une limite de temps particulière pour votre setTimeout.

- -
(function() {
-
-  console.log('ceci est le début');
-
-  setTimeout(function cb() {
-    console.log('Callback 1: ceci est un msg depuis le callback');
-  }); // has a default time value of 0
-
-  console.log('ceci est juste un message');
-
-  setTimeout(function cb1() {
-    console.log('Callback 2: ceci est un msg depuis le callback');
-  }, 0);
-
-  console.log('ceci est la fin');
-
-})();
-
-// "ceci est le début"
-// "ceci est juste un message"
-// "ceci est la fin"
-// "Callback 1: ceci est un msg depuis le callback"
-// "Callback 2: ceci est un msg depuis le callback"
- -

La communication entre plusieurs environnements d'exécution

- -

Un web worker ou une iframe d'origine multiple (cross origin) possède sa propre pile, son propre tas et sa propre queue de messages. Deux environnements d'exécution distincts peuvent uniquement communiquer via des messages envoyés par la méthode postMessage. Cette méthode permet d'ajouter un message à un autre environnement d'exécution si celui-ci « écoute » les événements message.

- -

Non bloquant

- -

Le modèle de la boucle d'événement possède une caractéristique intéressante : JavaScript, à  la différence d'autres langages, ne bloque jamais. La gestion des entrées-sorties (I/O) est généralement traitée par des événements et des callbacks. Ainsi, quand l'application attend le résultat d'une requête IndexedDB ou d'une requête XHR, il reste possible de traiter d'autres éléments comme les saisies utilisateur.

- -

Il existe certaines exceptions historiques comme alert ou des appels XHR synchrones. C'est une bonne pratique que de les éviter. Attention, certaines exceptions existent (mais relèvent généralement de bugs d'implémentation).

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉ tatCommentaires
{{SpecName('HTML WHATWG', 'webappapis.html#event-loops', 'Event loops')}}{{Spec2('HTML WHATWG')}}
Boucle d'évènements pour Node.jsStandard évolutif
diff --git a/files/fr/web/javascript/eventloop/index.md b/files/fr/web/javascript/eventloop/index.md new file mode 100644 index 0000000000..d349d9d056 --- /dev/null +++ b/files/fr/web/javascript/eventloop/index.md @@ -0,0 +1,155 @@ +--- +title: Gestion de la concurrence et boucle des événements +slug: Web/JavaScript/EventLoop +tags: + - Avancé + - Guide + - JavaScript +translation_of: Web/JavaScript/EventLoop +original_slug: Web/JavaScript/Concurrence_et_boucle_des_événements +--- +
{{jsSidebar("Advanced")}}
+ +

JavaScript gère la concurrence grâce à une « boucle d'événements ». Ce modèle est différent de la gestion faite par des langages comme C ou Java.

+ +

Notions liées à l'exécution

+ +

Les sections qui suivent décrivent un modèle théorique. En réalité, les moteurs JavaScript implémentent et optimisent fortement la sémantique décrite ici.

+ +

Représentation visuelle

+ +

Stack, heap, queue

+ +

La pile d'appels (stack)

+ +

Les appels de fonction forment une pile de cadre (frames).

+ +
function f(b){
+  var a = 12;
+  return a + b + 35;
+}
+
+function g(x){
+  var m = 4;
+  return f(m * x);
+}
+
+console.log(g(21)); // affichera 131
+
+ +

Lors de l'appel à g, on crée un premier cadre contenant les arguments de g ainsi que les variables locales. Quand g appelle f, un deuxième cadre est créé et placé sur le premier et contient les arguments de f ainsi que les variables locales. Lorsque f a fini et renvoyé son résultat, le cadre correspondant (celui qui est sur le dessus) est retiré de la pile (il reste donc le cadre lié à l'appel de g). Quand g a fini grâce aux informations transmises, la pile devient vide.

+ +

Le tas (heap)

+ +

Les objets sont alloués en mémoire dans un tas qui désigne une zone de la mémoire sans structure particulière.

+ +

La file (queue)

+ +

Un environnement d'exécution JavaScript (runtime) contient une queue de messages à traiter. Chaque message est associé à une fonction. Lorsque la pile est vide ou a suffisamment d'espace, on retire un message de la queue et on le traite. Le traitement consiste à appeler la fonction associée au message (et donc à créer le cadre dans la pile d'appel). Le traitement d'un message est fini lorsque la pile d'appels redevient vide.

+ +

La boucle d'événements

+ +

La boucle d'événement tire principalement son nom de son implémentation. Celle-ci ressemble à :

+ +
while (queue.attendreMessage()){
+  queue.traiterProchainMessage();
+}
+ +

queue.attendreMessage est un fonction synchrone qui attend un message même s'il n'y en a aucun à traiter.

+ +

Traiter de A à Z (run-to-completion)

+ +

Chaque message sera traité complètement avant tout autre message. Cela permet de savoir que, lorsqu'une fonction s'exécute, on ne peut pas observer l'exécution d'un autre code qui prendrait le pas (modifiant les données de la fonction par exemple). Le modèle de thread utilisé par le langage C, par exemple, que la fonction puisse être interrompue à tout moment pour permettre à un autre thread d'exécuter un autre code.

+ +

Ce modèle possède un désavantage : lorsqu'un message prend trop de temps à être traité, l'application ne peut plus gérer les interactions utilisateur comme les clics ou le défilement. Généralement, le navigateur affiche alors « Le script met trop de temps à répondre ». Une bonne pratique consiste à rendre le traîtement de message le plus court possible et à découper le message problématique en plusieurs messages.

+ +

L'ajout de messages

+ +

Dans les navigateurs web, des messages sont ajoutés à chaque fois qu'un événement se produit et qu'un gestionnaire d'événements y est attaché. S'il n'y a pas d'écouteur (listener) pour intercepter l'événement, il est perdu. Ainsi, si on clique un élément qui possède un gestionnaire d'événements pour les clics, un message sera ajouté (il en va de même avec les autres événements).

+ +

La fonction setTimeout est appelée avec deux arguments : un message à la suite de la queue et la durée à attendre (optionnelle, par défaut elle vaut 0). La durée représente le temps minimal à attendre avant que le message soit placé dans la queue. S'il n'y a pas d'autre message dans la queue, le message sera traîté directement. En revanche, s'il y a d'autres messages auparavant, le message de setTimeout devra attendre la fin du traîtement des messages précédents déjà présents dans la queue. C'est pourquoi le deuxième argument de cette fonction indique une durée minimum et non une durée garantie.

+ +
+

Attention : L'argument passé pour le délai à setTimeout ne correspond pas au temps exact. Cela correspond au délai minimum et non à un délai garanti. Par exemple setTimeout(maFonction(),100); indique uniquement que maFonction sera lancé au moins après 100 millisecondes.

+
+ +

Voici un exemple qui illustre ce concept (setTimeout ne s'exécute pas immédiatement après la fin du timer) :

+ +
const s = new Date().getSeconds();
+
+setTimeout(function() {
+  // prints
+  console.log("Exécuté après " + (new Date().getSeconds() - s) + " secondes.");
+}, 500);
+
+while(true) {
+  if(new Date().getSeconds() - s >= 2) {
+    console.log("Ouf, on a bouclé pendant 2 secondes");
+    break;
+  }
+}
+
+ +

Zéro délai

+ +

Un délai à zéro ne signifie pas que le callback sera déclenché après zéro milliseconde. Appeler setTimeout avec un délai de 0 (zéro) milliseconde n'éxécute pas le callback après l'interval donné.

+ +

L'exécution dépend du nombre de taches en attente dans la queue. Dans l'exemple ci-dessous, le message 'ceci est juste un message' sera affiché dans la console avant que le message dans le callback soit traité, parce que le délai est le temps minimum requis par l'environnement d'exécution (runtime) pour traiter la demande (pas un temps garanti).

+ +

Fondamentalement, setTimeout doit attendre la fin de tout le code pour les messages en file d'attente, même si vous avez spécifié une limite de temps particulière pour votre setTimeout.

+ +
(function() {
+
+  console.log('ceci est le début');
+
+  setTimeout(function cb() {
+    console.log('Callback 1: ceci est un msg depuis le callback');
+  }); // has a default time value of 0
+
+  console.log('ceci est juste un message');
+
+  setTimeout(function cb1() {
+    console.log('Callback 2: ceci est un msg depuis le callback');
+  }, 0);
+
+  console.log('ceci est la fin');
+
+})();
+
+// "ceci est le début"
+// "ceci est juste un message"
+// "ceci est la fin"
+// "Callback 1: ceci est un msg depuis le callback"
+// "Callback 2: ceci est un msg depuis le callback"
+ +

La communication entre plusieurs environnements d'exécution

+ +

Un web worker ou une iframe d'origine multiple (cross origin) possède sa propre pile, son propre tas et sa propre queue de messages. Deux environnements d'exécution distincts peuvent uniquement communiquer via des messages envoyés par la méthode postMessage. Cette méthode permet d'ajouter un message à un autre environnement d'exécution si celui-ci « écoute » les événements message.

+ +

Non bloquant

+ +

Le modèle de la boucle d'événement possède une caractéristique intéressante : JavaScript, à  la différence d'autres langages, ne bloque jamais. La gestion des entrées-sorties (I/O) est généralement traitée par des événements et des callbacks. Ainsi, quand l'application attend le résultat d'une requête IndexedDB ou d'une requête XHR, il reste possible de traiter d'autres éléments comme les saisies utilisateur.

+ +

Il existe certaines exceptions historiques comme alert ou des appels XHR synchrones. C'est une bonne pratique que de les éviter. Attention, certaines exceptions existent (mais relèvent généralement de bugs d'implémentation).

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉ tatCommentaires
{{SpecName('HTML WHATWG', 'webappapis.html#event-loops', 'Event loops')}}{{Spec2('HTML WHATWG')}}
Boucle d'évènements pour Node.jsStandard évolutif
diff --git a/files/fr/web/javascript/guide/control_flow_and_error_handling/index.html b/files/fr/web/javascript/guide/control_flow_and_error_handling/index.html deleted file mode 100644 index 59ec009395..0000000000 --- a/files/fr/web/javascript/guide/control_flow_and_error_handling/index.html +++ /dev/null @@ -1,430 +0,0 @@ ---- -title: Contrôle du flux d'instructions et gestion des erreurs -slug: Web/JavaScript/Guide/Control_flow_and_error_handling -tags: - - Beginner - - Decision making - - Error Handling - - Flow control - - Guide - - JavaScript - - Logic - - control - - l10n:priority - - statements -translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling -original_slug: Web/JavaScript/Guide/Contrôle_du_flux_Gestion_des_erreurs ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}
- -

JavaScript supporte nativement un ensemble d'instructions. Ces instructions permettent de définir les logiques des algorithmes, le flux des informations, etc. Ce chapitre fournit un aperçu sur le fonctionnement de ces différentes instructions JavaScript.

- -

Les Références de JavaScript contiennent plus de détails sur les différentes instructions décrites dans ce chapitre.

- -

Toute expression est une instruction, voir la page Expressions et opérateurs pour plus d'informations sur les expressions. En JavaScript, le point-virgule (;) est utilisé afin de séparer des instructions dans le code.

- -

Les blocs d'instruction

- -

L'instruction la plus simple est l'instruction de bloc qui permet de regrouper des instructions. Un bloc est délimité par une paire d'accolades :

- -
{
-   instruction_1;
-   instruction_2;
-   ⋮
-   instruction_n;
-}
- -

Exemple

- -

Les instructions de blocs sont souvent utilisées avec les instructions conditionnelles et itératives telles que if, for, while.

- -
while (x < 10) {
-  x++;
-}
- -

Ici, { x++; } représente le bloc.

- -
-

Note : En JavaScript, avant ECMAScript 2015 (aussi appelé ES6), les blocs n'introduisaient pas de nouvelles portées. Les variables introduites dans le bloc avec l'instruction var font partie de la portée de la fonction englobante ou du script. Les effets de leur définition persistent en dehors du bloc. Les blocs seuls utilisés avec var (et non let) pourront laisser penser que ce bloc se comportera comme en C ou en Java. Par exemple :

- -
var x = 1;
-{
-  var x = 2;
-}
-console.log(x); // affichera 2
- -

Cella affichera 2 car l'instruction var x contenue dans le bloc fait partie de la même portée que l'instruction var x écrite avant le bloc. En C ou en Java, le code équivalent à cet exemple aurait produit 1.

- -

Cela a évolué avec ECMAScript 2015 (ES6). Les instructions letet const permettent de déclarer des variables dont la portée est celle du bloc courant. Voir les pages des références let et const.

-
- -

Les instructions conditionnelles

- -

Une instruction conditionnelle est un ensemble de commandes qui s'exécutent si une condition donnée est vérifiée. JavaScript possède deux instructions conditionnelles : if...else et switch.

- -

Instruction if...else

- -

On utilise l'instruction if lorsqu'on souhaite exécuter une instruction si une condition logique est vérifiée (vraie). La clause else est optionnelle et permet de préciser les instructions à exécuter si la condition logique n'est pas vérifiée (l'assertion est fausse). Voici un exemple qui illustre l'utilisation de l'instruction if :

- -
if (condition) {
-  instruction_1;
-} else {
-  instruction_2;
-}
- -

condition peut correspondre à n'importe quelle expression qui est évaluée à true (vrai) ou false (faux). Voir la page sur les booléens pour plus d'informations sur les évaluations qui fournissent les valeurs true ou false. Si la condition vaut true, instruction_1 est exécutée, sinon instruction_2 sera exécutée. instruction_1 et instruction_2 peuvent correspondre à n'importe quelle instruction, y compris d'autres instructions if.

- -

Si on doit tester différentes conditions les unes à la suite des autres, il est possible d'utiliser else if pour lier les différents tests. On l'utilise de la façon suivante :

- -
if (condition_1) {
-  instruction_1;
-} else if (condition_2) {
-  instruction_2;
-} else if (condition_n) {
-  instruction_n;
-} else {
-  dernière_instruction;
-}
- -

Afin d'exécuter plusieurs instructions, on peut les regrouper grâce aux blocs ({ ... }) vus précédemment. C'est une bonne pratique que de les utiliser, surtout si on imbrique plusieurs instructions if les unes dans les autres:

- -

Meilleure pratique

- -

En général, il est bon de toujours utiliser des instructions de type bloc —surtout lorsqu'on imbrique des instructions if :

- -
if (condition) {
-  instruction_1_exécutée_si_condition_vraie;
-  instruction_2_exécutée_si_condition_vraie;
-} else {
-  instruction_3_exécutée_si_condition_fausse;
-  instruction_4_exécutée_si_condition_fausse;
-}
- -

Attention à ne pas utiliser des instructions d'affectation dans les expressions conditionnelles. On peut, en effet, très facilement confondre l'affectation et le test d'égalité en lisant le code.

- -

Voici un exemple de ce qu'il ne faut pas faire :

- -
if (x = y) {
-  /* exécuter des instructions */
-}
- -

Ici, on ne teste pas si x vaut y, on affecte la valeur de y à x ! Si vous devez à tout prix utiliser une affectation dans une expression conditionnelle, une bonne pratique sera d'ajouter des parenthèses en plus autour de l'affectation. Par exemple :

- -
if ((x = y)) {
-  /* exécuter des instructions */
-}
-
- -

Valeurs équivalentes à false dans un contexte booléen (falsy values)

- -

Les valeurs suivantes sont évaluées à false (également connues sous le nom de valeurs Falsy) :

- - - -

Les autres valeurs, y compris les objets, seront équivalents à true.

- -
-

Attention : Ne pas confondre les valeurs booléennes « primitives » true et false avec les valeurs créées grâce à un objet Boolean.

-

Par exemple, on aura :

- -
var b = new Boolean(false);
-  if (b) // cette condition est bien vérifiée !
-  if (b === true) // cette condition n'est pas vérifiée !
-
- -

Exemple

- -

Dans l'exemple qui suit, la fonction checkData renvoie true si une chaîne de caractères mesure trois caractères. Sinon, elle affiche une alerte et renvoie false.

- -
function checkData(maChaîne) {
-  if (maChaîne.length == 3) {
-    return true;
-  } else {
-    alert("Veuillez saisir trois caractères. " +
-      maChaîne + " n'est pas valide.");
-    return false;
-  }
-}
- -

L'instruction switch

- -

L'instruction switch permet à un programme d'évaluer une expression et d'effectuer des instructions en fonction des différents cas de figures correspondants aux différentes valeurs. Si un cas correspond au résultat de l'évaluation, le programme exécute l'instruction associée.

- -

Voici un exemple utilisant une instruction switch :

- -
switch (expression) {
-  case label_1:
-    instructions_1
-    [break;]
-  case label_2:
-    instructions_2
-    [break;]
-  ...
-  default:
-    instructions_par_defaut
-    [break;]
-}
-
- -

JavaScript évalue l'instruction de commutation ci-dessus comme suit :

- - - -

L'instruction break

- -

L'instruction optionnelle break, éventuellement contenue pour chaque clause case, permet de ne pas exécuter les instructions pour les cas suivants. Si break n'est pas utilisé, le programme continuera son exécution avec les autres instructions contenues dans l'instruction switch.

- -
Exemple
- -

Dans l'exemple suivant, si fruit vaut "Banane", le programme exécutera les instructions associées. Quand break est rencontré, le programme passe aux instructions décrites après switch. Ici, si break n'était pas présent, les instructions pour le cas "Cerise" auraient également été exécutées.

- -
switch (fruit) {
-  case "Orange":
-    console.log("Les oranges sont à 60 centimes le kilo.");
-    break;
-  case "Pomme":
-    console.log("Les pommes sont à 32 centimes le kilo.");
-    break;
-  case "Banane":
-    console.log("Les bananes sont à 48 centimes le kilo.");
-    break;
-  case "Cerise":
-    console.log("Les cerises sont à 3€ le kilo.");
-    break;
-  case "Mangue":
-    console.log("Les mangues sont à 50 centimes le kilo.");
-    break;
-  default:
-    console.log("Désolé, nous n'avons pas de " + fruittype + ".");
-}
-console.log("Souhaitez-vous autre chose ?");
- -

Les instructions pour gérer les exceptions

- -

Il est possible de lever des exceptions avec l'instruction throw et de les gérer (les intercepter) avec des instructions try...catch.

- - - -

Les types d'exception

- -

En JavaScript, n'importe quel objet peut être signalé comme une exception. Cependant, afin de respecter certaines conventions et de bénéficier de certaines informations, on pourra utiliser les types destinés à cet effet :

- - - -

L'instruction throw

- -

L'instruction throw est utilisée afin de signaler une exception. Lorsqu'on signale une exception, on définit une expression qui contient la valeur à renvoyer pour l'exception :

- -
throw expression;
- -

Il est possible d'utiliser n'importe quelle expression, sans restriction de type. Le fragment de code qui suit illustre les différentes possibilités :

- -
throw "Erreur2";  //type String
-throw 42;         //type Number
-throw true;       //type Boolean
-throw {toString: function () { return "je suis un objet !"; } };
-
- -
-

Note : Vous pouvez spécifier un objet lorsque vous lancez une exception. Vous pouvez alors faire référence aux propriétés de l'objet dans le bloc catch.

-
- -
// On crée le constructeur pour cet objet
-function ExceptionUtilisateur(message) {
-  this.message = message;
-  this.name = "ExceptionUtilisateur";
-}
-
-// On surcharge la méthode toString pour afficher
-// un message plus explicite (par exemple dans la console)
-ExceptionUtilisateur.prototype.toString = function() {
-  return this.name + ': "' + this.message + '"';
-}
-
-// On crée une instance pour ce type d'objet
-// et on renvoie une exception avec cette instance
-throw new ExceptionUtilisateur("La valeur fournie est trop élevée.");
- -

L'instruction try...catch

- -

L'instruction try...catch permet de définir un bloc d'instructions qu'on essaye (try en anglais) d'exécuter, ainsi qu'une ou plusieurs instructions à utiliser en cas d'erreur lorsqu'une exception se produit. Si une exception est signalée, l'instruction try...catch permettra de l' « attraper » (catch en anglais) et de définir ce qui se passe dans ce cas.

- -

L'instruction try...catch se compose d'un bloc try qui contient une ou plusieurs instructions et blocs catch qui contiennent les instructions à exécuter lorsqu'une exception se produit dans le bloc try.

- -

Autrement dit, dans la plupart des cas pour le programme, on veut que les instructions du bloc try se déroulent normalement et en cas de problème, on passe le contrôle au bloc catch. Si une instruction contenue dans le bloc try renvoie une exception, le contrôle sera immédiatement transféré au bloc catch. Si aucune exception n'est signalée au sein du bloc try, le bloc catch ne sera pas utilisé. Cette instruction peut comporter un bloc finally qui s'exécute après les blocs try et catch mais avant les instructions suivant l'instruction try...catch.

- -

Dans l'exemple qui suit, on utilise une instruction try...catch. On définit une fonction qui prend un nombre et renvoie le nom du mois correspondant à ce nombre. Si la valeur fournie n'est pas comprise entre 1 et 12, on signale une exception avec la valeur "NuméroMoisInvalide". Lorsque cette exception est gérée dans le bloc catch, la variable nomMois recevra la valeur "inconnu".

- -
function getNomMois(numMois) {
-  numMois = numMois - 1; // On décale de 1 car les indices du tableaux commencent à 0
-  var mois = ["Janvier", "Février", "Mars", "Avril" ,"Mai", "Juin", "Juillet",
-              "Août", "Septembre", "Octobre", "Novembre", "Décembre"];
-  if (mois[numMois] != null) {
-    return mois[numMois];
-  } else {
-    throw "NuméroMoisInvalide";  // Ici on utilise l'instruction throw
-  }
-}
-
-try { // les instructions à essayer si tout se passe bien
-  nomMois = getNomMois(maVarMois); // La fonction peut renvoyer une exception
-} catch (e) {
-  nomMois = "inconnu";
-  gestionErreurLog(e); // on gère l'erreur avec une fonction
-}
- -

Le bloc catch

- -

Un bloc catch peut être utilisé afin de gérer les exceptions pouvant être générées par les instructions du bloc try.

- -
catch (ident) {
-  statements
-}
- -

Le bloc catch définit un identifiant (ident dans le fragment de code précédent) qui contiendra la valeur passée par l'instruction throw. Cet identifiant peut être utilisé afin de récupérer des informations sur l'exception qui a été signalée.

- -

JavaScript crée cet identifiant lorsque le contrôle passe au bloc catch. L'identifiant ne « vit » qu'à l'intérieur du bloc catch et une fois que l'exécution du bloc catch est terminée, l'identifiant n'est plus disponible.

- -

Dans l'exemple suivant, le code renvoie une exception. Lorsque celle-ci est signalée, le contrôle passe au bloc catch.

- -
try {
-  throw "monException"; // on génère une exception
-} catch (e) {
-  // les instructions utilisées pour gérer les exceptions
-  enregistrerErreurs(e); // on passe l'objet représentant l'exception à une fonction utilisée pour gérer les erreurs
-}
- -
-

Note : Quand on souhaite afficher des erreurs dans la console, on privilégiera console.error() plutôt que console.log(). En effet, cette première méthode est plus adaptée et indiquera plus d'informations.

-
- -

Le bloc finally

- -

Le bloc finally contient les instructions à exécuter après les blocs try et catch mais avant l'instruction suivant le try...catch...finally.

- -

Le bloc finally est exécuté dans tous les cas, qu'une exception ait été levée ou non. Si une exception est signalée et qu'il n'y a pas de bloc catch pour la gérer, les instructions du bloc finally seront tout de même exécutées.

- -

Le bloc finally peut être utilisé afin de finir proprement l'exécution malgré une exception. On peut, par exemple, devoir libérer une ressource, ou fermer un flux, etc.

- -

Dans l'exemple suivant, on écrit dans un fichier, si une exception se produit lors de l'écriture, on utilisera le bloc finally afin de bien fermer le flux vers le fichier avant la fin du script.

- -
ouvrirFichier();
-try {
-  écrireFichier(données); // Une erreur peut se produire
-} catch(e) {
-  gérerException(e); // On gère le cas où on a une exception
-} finally {
-  fermerFichier(); // On n'oublie jamais de fermer le flux.
-}
-
- -

Si le bloc finally renvoie une valeur, cette valeur sera considérée comme la valeur de retour pour tout l'ensemble try-catch-finally, quelles que soient les instructions return éventuellement utilisées dans les blocs try et catch :

- -
function f() {
-  try {
-    console.log(0);
-    throw "bug";
-  } catch(e) {
-    console.log(1);
-    return true; // Cette instruction est bloquée jusqu'à la fin du bloc finally
-    console.log(2); // Ne pourra jamais être exécuté
-  } finally {
-    console.log(3);
-    return false; // On surcharge l'instruction "return" précédente
-    console.log(4); // Ne pourra jamais être exécuté
-  }
-  // "return false" est exécuté
-
-  console.log(5); // Ne pourra jamais être exécuté
-}
-f(); // affiche 0, 1, 3 puis renvoie false
-
- -

Lorsqu'on surcharge les valeurs de retour avec le bloc finally, cela s'applique également aux exceptions qui sont levées (ou retransmises) au sein du bloc catch :

- -
function f() {
-  try {
-    throw "problème";
-  } catch(e) {
-    console.log('"problème" interne intercepté');
-    throw e; // cette instruction est mise en attente
-             // tant que le bloc finally n'est pas fini
-  } finally {
-    return false; // surcharge le "throw" précédent
-  }
-  // "return false" est exécuté à ce moment
-}
-
-try {
-  f();
-} catch(e) {
-  // ce bloc n'est jamais utilisé car le throw
-  // utilisé dans le bloc catch a été surchargé
-  // par l'instruction return de finally
-  console.log('"problème" externe intercepté');
-}
-
-// Sortie
-// "problème" interne attrapé
- -

Imbriquer des instructions try...catch

- -

Il est possible d'imbriquer une ou plusieurs instructions try...catch.

- -

Si un bloc try interne n'a pas de bloc catch correspondant :

- -
    -
  1. il doit contenir un bloc finally, et
  2. -
  3. le bloc try...catch de l'instruction catch englobante est vérifié pour une correspondance.
  4. -
- -

Pour plus d'informations, voir nested try-blocks sur la page de référence try...catch.

- -

Utiliser les objets d'erreur

- -

En fonction du type d'erreur qui est créée, on pourra utiliser les propriétés name et message afin d'obtenir plus d'informations.

- -

Généralement on a name qui fournit le type d'erreur rencontrée (ex : DOMException ou Error). La propriété message, quant à elle fournit un message descriptif de l'erreur (qu'on utilisera généralement lorsqu'on voudra convertir/afficher le texte correspondant à une erreur).

- -

Si vous construisez des erreurs, vous pouvez utiliser le constructeur Error afin de disposer de ces propriétés.

- -

Ainsi, on pourra avoir :

- -
function causerErreurs() {
-  if (toutEstSourceDErreurs()) {
-    throw (new Error('mon message'));
-  } else {
-    générerUneAutreErreur();
-  }
-}
-....
-try {
-  causerErreurs();
-} catch (e) {
-  console.error(e.name);// affiche 'Error'
-  console.error(e.message); // affiche 'mon message' ou un message d'erreur JavaScript
-}
- -
{{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}
diff --git a/files/fr/web/javascript/guide/control_flow_and_error_handling/index.md b/files/fr/web/javascript/guide/control_flow_and_error_handling/index.md new file mode 100644 index 0000000000..59ec009395 --- /dev/null +++ b/files/fr/web/javascript/guide/control_flow_and_error_handling/index.md @@ -0,0 +1,430 @@ +--- +title: Contrôle du flux d'instructions et gestion des erreurs +slug: Web/JavaScript/Guide/Control_flow_and_error_handling +tags: + - Beginner + - Decision making + - Error Handling + - Flow control + - Guide + - JavaScript + - Logic + - control + - l10n:priority + - statements +translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling +original_slug: Web/JavaScript/Guide/Contrôle_du_flux_Gestion_des_erreurs +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}
+ +

JavaScript supporte nativement un ensemble d'instructions. Ces instructions permettent de définir les logiques des algorithmes, le flux des informations, etc. Ce chapitre fournit un aperçu sur le fonctionnement de ces différentes instructions JavaScript.

+ +

Les Références de JavaScript contiennent plus de détails sur les différentes instructions décrites dans ce chapitre.

+ +

Toute expression est une instruction, voir la page Expressions et opérateurs pour plus d'informations sur les expressions. En JavaScript, le point-virgule (;) est utilisé afin de séparer des instructions dans le code.

+ +

Les blocs d'instruction

+ +

L'instruction la plus simple est l'instruction de bloc qui permet de regrouper des instructions. Un bloc est délimité par une paire d'accolades :

+ +
{
+   instruction_1;
+   instruction_2;
+   ⋮
+   instruction_n;
+}
+ +

Exemple

+ +

Les instructions de blocs sont souvent utilisées avec les instructions conditionnelles et itératives telles que if, for, while.

+ +
while (x < 10) {
+  x++;
+}
+ +

Ici, { x++; } représente le bloc.

+ +
+

Note : En JavaScript, avant ECMAScript 2015 (aussi appelé ES6), les blocs n'introduisaient pas de nouvelles portées. Les variables introduites dans le bloc avec l'instruction var font partie de la portée de la fonction englobante ou du script. Les effets de leur définition persistent en dehors du bloc. Les blocs seuls utilisés avec var (et non let) pourront laisser penser que ce bloc se comportera comme en C ou en Java. Par exemple :

+ +
var x = 1;
+{
+  var x = 2;
+}
+console.log(x); // affichera 2
+ +

Cella affichera 2 car l'instruction var x contenue dans le bloc fait partie de la même portée que l'instruction var x écrite avant le bloc. En C ou en Java, le code équivalent à cet exemple aurait produit 1.

+ +

Cela a évolué avec ECMAScript 2015 (ES6). Les instructions letet const permettent de déclarer des variables dont la portée est celle du bloc courant. Voir les pages des références let et const.

+
+ +

Les instructions conditionnelles

+ +

Une instruction conditionnelle est un ensemble de commandes qui s'exécutent si une condition donnée est vérifiée. JavaScript possède deux instructions conditionnelles : if...else et switch.

+ +

Instruction if...else

+ +

On utilise l'instruction if lorsqu'on souhaite exécuter une instruction si une condition logique est vérifiée (vraie). La clause else est optionnelle et permet de préciser les instructions à exécuter si la condition logique n'est pas vérifiée (l'assertion est fausse). Voici un exemple qui illustre l'utilisation de l'instruction if :

+ +
if (condition) {
+  instruction_1;
+} else {
+  instruction_2;
+}
+ +

condition peut correspondre à n'importe quelle expression qui est évaluée à true (vrai) ou false (faux). Voir la page sur les booléens pour plus d'informations sur les évaluations qui fournissent les valeurs true ou false. Si la condition vaut true, instruction_1 est exécutée, sinon instruction_2 sera exécutée. instruction_1 et instruction_2 peuvent correspondre à n'importe quelle instruction, y compris d'autres instructions if.

+ +

Si on doit tester différentes conditions les unes à la suite des autres, il est possible d'utiliser else if pour lier les différents tests. On l'utilise de la façon suivante :

+ +
if (condition_1) {
+  instruction_1;
+} else if (condition_2) {
+  instruction_2;
+} else if (condition_n) {
+  instruction_n;
+} else {
+  dernière_instruction;
+}
+ +

Afin d'exécuter plusieurs instructions, on peut les regrouper grâce aux blocs ({ ... }) vus précédemment. C'est une bonne pratique que de les utiliser, surtout si on imbrique plusieurs instructions if les unes dans les autres:

+ +

Meilleure pratique

+ +

En général, il est bon de toujours utiliser des instructions de type bloc —surtout lorsqu'on imbrique des instructions if :

+ +
if (condition) {
+  instruction_1_exécutée_si_condition_vraie;
+  instruction_2_exécutée_si_condition_vraie;
+} else {
+  instruction_3_exécutée_si_condition_fausse;
+  instruction_4_exécutée_si_condition_fausse;
+}
+ +

Attention à ne pas utiliser des instructions d'affectation dans les expressions conditionnelles. On peut, en effet, très facilement confondre l'affectation et le test d'égalité en lisant le code.

+ +

Voici un exemple de ce qu'il ne faut pas faire :

+ +
if (x = y) {
+  /* exécuter des instructions */
+}
+ +

Ici, on ne teste pas si x vaut y, on affecte la valeur de y à x ! Si vous devez à tout prix utiliser une affectation dans une expression conditionnelle, une bonne pratique sera d'ajouter des parenthèses en plus autour de l'affectation. Par exemple :

+ +
if ((x = y)) {
+  /* exécuter des instructions */
+}
+
+ +

Valeurs équivalentes à false dans un contexte booléen (falsy values)

+ +

Les valeurs suivantes sont évaluées à false (également connues sous le nom de valeurs Falsy) :

+ + + +

Les autres valeurs, y compris les objets, seront équivalents à true.

+ +
+

Attention : Ne pas confondre les valeurs booléennes « primitives » true et false avec les valeurs créées grâce à un objet Boolean.

+

Par exemple, on aura :

+ +
var b = new Boolean(false);
+  if (b) // cette condition est bien vérifiée !
+  if (b === true) // cette condition n'est pas vérifiée !
+
+ +

Exemple

+ +

Dans l'exemple qui suit, la fonction checkData renvoie true si une chaîne de caractères mesure trois caractères. Sinon, elle affiche une alerte et renvoie false.

+ +
function checkData(maChaîne) {
+  if (maChaîne.length == 3) {
+    return true;
+  } else {
+    alert("Veuillez saisir trois caractères. " +
+      maChaîne + " n'est pas valide.");
+    return false;
+  }
+}
+ +

L'instruction switch

+ +

L'instruction switch permet à un programme d'évaluer une expression et d'effectuer des instructions en fonction des différents cas de figures correspondants aux différentes valeurs. Si un cas correspond au résultat de l'évaluation, le programme exécute l'instruction associée.

+ +

Voici un exemple utilisant une instruction switch :

+ +
switch (expression) {
+  case label_1:
+    instructions_1
+    [break;]
+  case label_2:
+    instructions_2
+    [break;]
+  ...
+  default:
+    instructions_par_defaut
+    [break;]
+}
+
+ +

JavaScript évalue l'instruction de commutation ci-dessus comme suit :

+ + + +

L'instruction break

+ +

L'instruction optionnelle break, éventuellement contenue pour chaque clause case, permet de ne pas exécuter les instructions pour les cas suivants. Si break n'est pas utilisé, le programme continuera son exécution avec les autres instructions contenues dans l'instruction switch.

+ +
Exemple
+ +

Dans l'exemple suivant, si fruit vaut "Banane", le programme exécutera les instructions associées. Quand break est rencontré, le programme passe aux instructions décrites après switch. Ici, si break n'était pas présent, les instructions pour le cas "Cerise" auraient également été exécutées.

+ +
switch (fruit) {
+  case "Orange":
+    console.log("Les oranges sont à 60 centimes le kilo.");
+    break;
+  case "Pomme":
+    console.log("Les pommes sont à 32 centimes le kilo.");
+    break;
+  case "Banane":
+    console.log("Les bananes sont à 48 centimes le kilo.");
+    break;
+  case "Cerise":
+    console.log("Les cerises sont à 3€ le kilo.");
+    break;
+  case "Mangue":
+    console.log("Les mangues sont à 50 centimes le kilo.");
+    break;
+  default:
+    console.log("Désolé, nous n'avons pas de " + fruittype + ".");
+}
+console.log("Souhaitez-vous autre chose ?");
+ +

Les instructions pour gérer les exceptions

+ +

Il est possible de lever des exceptions avec l'instruction throw et de les gérer (les intercepter) avec des instructions try...catch.

+ + + +

Les types d'exception

+ +

En JavaScript, n'importe quel objet peut être signalé comme une exception. Cependant, afin de respecter certaines conventions et de bénéficier de certaines informations, on pourra utiliser les types destinés à cet effet :

+ + + +

L'instruction throw

+ +

L'instruction throw est utilisée afin de signaler une exception. Lorsqu'on signale une exception, on définit une expression qui contient la valeur à renvoyer pour l'exception :

+ +
throw expression;
+ +

Il est possible d'utiliser n'importe quelle expression, sans restriction de type. Le fragment de code qui suit illustre les différentes possibilités :

+ +
throw "Erreur2";  //type String
+throw 42;         //type Number
+throw true;       //type Boolean
+throw {toString: function () { return "je suis un objet !"; } };
+
+ +
+

Note : Vous pouvez spécifier un objet lorsque vous lancez une exception. Vous pouvez alors faire référence aux propriétés de l'objet dans le bloc catch.

+
+ +
// On crée le constructeur pour cet objet
+function ExceptionUtilisateur(message) {
+  this.message = message;
+  this.name = "ExceptionUtilisateur";
+}
+
+// On surcharge la méthode toString pour afficher
+// un message plus explicite (par exemple dans la console)
+ExceptionUtilisateur.prototype.toString = function() {
+  return this.name + ': "' + this.message + '"';
+}
+
+// On crée une instance pour ce type d'objet
+// et on renvoie une exception avec cette instance
+throw new ExceptionUtilisateur("La valeur fournie est trop élevée.");
+ +

L'instruction try...catch

+ +

L'instruction try...catch permet de définir un bloc d'instructions qu'on essaye (try en anglais) d'exécuter, ainsi qu'une ou plusieurs instructions à utiliser en cas d'erreur lorsqu'une exception se produit. Si une exception est signalée, l'instruction try...catch permettra de l' « attraper » (catch en anglais) et de définir ce qui se passe dans ce cas.

+ +

L'instruction try...catch se compose d'un bloc try qui contient une ou plusieurs instructions et blocs catch qui contiennent les instructions à exécuter lorsqu'une exception se produit dans le bloc try.

+ +

Autrement dit, dans la plupart des cas pour le programme, on veut que les instructions du bloc try se déroulent normalement et en cas de problème, on passe le contrôle au bloc catch. Si une instruction contenue dans le bloc try renvoie une exception, le contrôle sera immédiatement transféré au bloc catch. Si aucune exception n'est signalée au sein du bloc try, le bloc catch ne sera pas utilisé. Cette instruction peut comporter un bloc finally qui s'exécute après les blocs try et catch mais avant les instructions suivant l'instruction try...catch.

+ +

Dans l'exemple qui suit, on utilise une instruction try...catch. On définit une fonction qui prend un nombre et renvoie le nom du mois correspondant à ce nombre. Si la valeur fournie n'est pas comprise entre 1 et 12, on signale une exception avec la valeur "NuméroMoisInvalide". Lorsque cette exception est gérée dans le bloc catch, la variable nomMois recevra la valeur "inconnu".

+ +
function getNomMois(numMois) {
+  numMois = numMois - 1; // On décale de 1 car les indices du tableaux commencent à 0
+  var mois = ["Janvier", "Février", "Mars", "Avril" ,"Mai", "Juin", "Juillet",
+              "Août", "Septembre", "Octobre", "Novembre", "Décembre"];
+  if (mois[numMois] != null) {
+    return mois[numMois];
+  } else {
+    throw "NuméroMoisInvalide";  // Ici on utilise l'instruction throw
+  }
+}
+
+try { // les instructions à essayer si tout se passe bien
+  nomMois = getNomMois(maVarMois); // La fonction peut renvoyer une exception
+} catch (e) {
+  nomMois = "inconnu";
+  gestionErreurLog(e); // on gère l'erreur avec une fonction
+}
+ +

Le bloc catch

+ +

Un bloc catch peut être utilisé afin de gérer les exceptions pouvant être générées par les instructions du bloc try.

+ +
catch (ident) {
+  statements
+}
+ +

Le bloc catch définit un identifiant (ident dans le fragment de code précédent) qui contiendra la valeur passée par l'instruction throw. Cet identifiant peut être utilisé afin de récupérer des informations sur l'exception qui a été signalée.

+ +

JavaScript crée cet identifiant lorsque le contrôle passe au bloc catch. L'identifiant ne « vit » qu'à l'intérieur du bloc catch et une fois que l'exécution du bloc catch est terminée, l'identifiant n'est plus disponible.

+ +

Dans l'exemple suivant, le code renvoie une exception. Lorsque celle-ci est signalée, le contrôle passe au bloc catch.

+ +
try {
+  throw "monException"; // on génère une exception
+} catch (e) {
+  // les instructions utilisées pour gérer les exceptions
+  enregistrerErreurs(e); // on passe l'objet représentant l'exception à une fonction utilisée pour gérer les erreurs
+}
+ +
+

Note : Quand on souhaite afficher des erreurs dans la console, on privilégiera console.error() plutôt que console.log(). En effet, cette première méthode est plus adaptée et indiquera plus d'informations.

+
+ +

Le bloc finally

+ +

Le bloc finally contient les instructions à exécuter après les blocs try et catch mais avant l'instruction suivant le try...catch...finally.

+ +

Le bloc finally est exécuté dans tous les cas, qu'une exception ait été levée ou non. Si une exception est signalée et qu'il n'y a pas de bloc catch pour la gérer, les instructions du bloc finally seront tout de même exécutées.

+ +

Le bloc finally peut être utilisé afin de finir proprement l'exécution malgré une exception. On peut, par exemple, devoir libérer une ressource, ou fermer un flux, etc.

+ +

Dans l'exemple suivant, on écrit dans un fichier, si une exception se produit lors de l'écriture, on utilisera le bloc finally afin de bien fermer le flux vers le fichier avant la fin du script.

+ +
ouvrirFichier();
+try {
+  écrireFichier(données); // Une erreur peut se produire
+} catch(e) {
+  gérerException(e); // On gère le cas où on a une exception
+} finally {
+  fermerFichier(); // On n'oublie jamais de fermer le flux.
+}
+
+ +

Si le bloc finally renvoie une valeur, cette valeur sera considérée comme la valeur de retour pour tout l'ensemble try-catch-finally, quelles que soient les instructions return éventuellement utilisées dans les blocs try et catch :

+ +
function f() {
+  try {
+    console.log(0);
+    throw "bug";
+  } catch(e) {
+    console.log(1);
+    return true; // Cette instruction est bloquée jusqu'à la fin du bloc finally
+    console.log(2); // Ne pourra jamais être exécuté
+  } finally {
+    console.log(3);
+    return false; // On surcharge l'instruction "return" précédente
+    console.log(4); // Ne pourra jamais être exécuté
+  }
+  // "return false" est exécuté
+
+  console.log(5); // Ne pourra jamais être exécuté
+}
+f(); // affiche 0, 1, 3 puis renvoie false
+
+ +

Lorsqu'on surcharge les valeurs de retour avec le bloc finally, cela s'applique également aux exceptions qui sont levées (ou retransmises) au sein du bloc catch :

+ +
function f() {
+  try {
+    throw "problème";
+  } catch(e) {
+    console.log('"problème" interne intercepté');
+    throw e; // cette instruction est mise en attente
+             // tant que le bloc finally n'est pas fini
+  } finally {
+    return false; // surcharge le "throw" précédent
+  }
+  // "return false" est exécuté à ce moment
+}
+
+try {
+  f();
+} catch(e) {
+  // ce bloc n'est jamais utilisé car le throw
+  // utilisé dans le bloc catch a été surchargé
+  // par l'instruction return de finally
+  console.log('"problème" externe intercepté');
+}
+
+// Sortie
+// "problème" interne attrapé
+ +

Imbriquer des instructions try...catch

+ +

Il est possible d'imbriquer une ou plusieurs instructions try...catch.

+ +

Si un bloc try interne n'a pas de bloc catch correspondant :

+ +
    +
  1. il doit contenir un bloc finally, et
  2. +
  3. le bloc try...catch de l'instruction catch englobante est vérifié pour une correspondance.
  4. +
+ +

Pour plus d'informations, voir nested try-blocks sur la page de référence try...catch.

+ +

Utiliser les objets d'erreur

+ +

En fonction du type d'erreur qui est créée, on pourra utiliser les propriétés name et message afin d'obtenir plus d'informations.

+ +

Généralement on a name qui fournit le type d'erreur rencontrée (ex : DOMException ou Error). La propriété message, quant à elle fournit un message descriptif de l'erreur (qu'on utilisera généralement lorsqu'on voudra convertir/afficher le texte correspondant à une erreur).

+ +

Si vous construisez des erreurs, vous pouvez utiliser le constructeur Error afin de disposer de ces propriétés.

+ +

Ainsi, on pourra avoir :

+ +
function causerErreurs() {
+  if (toutEstSourceDErreurs()) {
+    throw (new Error('mon message'));
+  } else {
+    générerUneAutreErreur();
+  }
+}
+....
+try {
+  causerErreurs();
+} catch (e) {
+  console.error(e.name);// affiche 'Error'
+  console.error(e.message); // affiche 'mon message' ou un message d'erreur JavaScript
+}
+ +
{{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}
diff --git a/files/fr/web/javascript/guide/details_of_the_object_model/index.html b/files/fr/web/javascript/guide/details_of_the_object_model/index.html deleted file mode 100644 index 8cf9bf50ff..0000000000 --- a/files/fr/web/javascript/guide/details_of_the_object_model/index.html +++ /dev/null @@ -1,685 +0,0 @@ ---- -title: Le modèle objet JavaScript en détails -slug: Web/JavaScript/Guide/Details_of_the_Object_Model -tags: - - Guide - - Intermediate - - JavaScript - - Object -translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model -original_slug: Web/JavaScript/Guide/Le_modèle_objet_JavaScript_en_détails ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Using_promises")}}
- -

JavaScript est un langage orienté objet basé sur des prototypes, plutôt que sur des classes. En raison de cette base différente, il peut être moins évident de comprendre comment JavaScript vous permet de créer des hiérarchies d'objets et d'avoir un héritage des propriétés et de leurs valeurs. Ce chapitre tente de clarifier la situation.

- -

Ce chapitre part du principe que vous avez déjà une certaine connaissance de JavaScript et que vous avez utilisé des fonctions JavaScript pour créer des objets simples.

- -

Langages basés sur des classes ou des prototypes

- -

Les langages orientés objets, basés sur des classes, tels que Java et C++, sont fondés sur le concept de deux entités distinctes : les classes et les instances.

- - - -

Un langage basé sur des prototypes, tel que JavaScript, ne fait pas cette distinction : il a des objets. Un langage basé sur des prototypes possède la notion d'un objet prototypique, un objet utilisé comme modèle à partir duquel on peut obtenir les propriétés initiales d'un nouvel objet. Tout objet peut spécifier ses propres propriétés, soit lors de sa création, soit au moment de l'exécution. En outre, tout objet peut être associé en tant que prototype d'un autre objet, permettant au second objet de partager les propriétés du premier.

- -

La définition d'une classe

- -

Dans les langages basés sur les classes, vous définissez une classe en utilisant une définition de classe distincte. Dans cette définition, vous pouvez spécifier des méthodes spéciales, appelées constructeur (et écrites « constructor »), pour créer des instances de la classe. Une méthode constructrice peut spécifier des valeurs initiales pour les propriétés de l'instance et effectuer d'autres traitements appropriés au moment de la création. Vous utilisez l'opérateur new en association avec la méthode constructrice pour créer des instances de la classe.

- -

JavaScript suit un modèle similaire, mais ne dispose pas d'une définition de classe distincte de celle du constructeur. Au lieu de cela, vous définissez une fonction de construction pour créer des objets avec un ensemble initial particulier de propriétés et de valeurs. Toute fonction JavaScript peut être utilisée comme constructeur. Vous utilisez l'opérateur new avec une fonction « constructor » pour créer un nouvel objet.

- -
-

Note : ECMAScript 2015 introduit une déclaration de classe :

- -
-

Les classes JavaScript, introduites dans ECMAScript 2015, sont principalement un enrichissement syntaxique de l'héritage basé sur les prototypes existant dans JavaScript. La syntaxe des classes n'introduit pas un nouveau modèle d'héritage orienté objet dans JavaScript.

-
-
- -

Classes enfants et héritage

- -

Dans un langage basé sur les classes, vous créez une hiérarchie de classes par le biais des définitions de classes. Dans une définition de classe, vous pouvez spécifier que la nouvelle classe est une classe enfant d'une classe déjà existante. La classe enfant hérite de toutes les propriétés de la classe parente et peut en plus ajouter de nouvelles propriétés ou modifier celles héritées. Par exemple, supposons que la classe Employee ne comprend que les propriétés name (« nom ») et dept (« département »), et que Manager est une classe enfant de Employee qui ajoute la propriété reports (« rapports »). Dans ce cas, une instance de la classe Manager aurait les trois propriétés : name, dept, et reports.

- -

JavaScript met en œuvre l'héritage en vous permettant d'associer un objet prototypique à n'importe quelle fonction de construction. Ainsi, vous pouvez créer exactement l'exemple EmployeeManager, mais vous utilisez une terminologie légèrement différente. D'abord, vous définissez la fonction du constructeur Employee, en spécifiant les propriétés name et dept. Ensuite, vous définissez la fonction du constructeur Manager, en appelant le constructeur Employee et en spécifiant la propriété reports. Enfin, vous attribuez un nouvel objet dérivé de Employee.prototype comme prototype pour la fonction du constructeur Manager. Ensuite, lorsque vous créez un nouveau Manager, il hérite des propriétés name et dept de l'objet Employee.

- -

Ajouter ou retirer des propriétés

- -

Dans les langages basés sur les classes, vous créez généralement une classe au moment de la compilation, puis vous instanciez, des instances de la classe, soit au moment de la compilation, soit au moment de l'exécution. Vous ne pouvez pas modifier le nombre ou le type de propriétés d'une classe après avoir défini cette dernière. En JavaScript, cependant, au moment de l'exécution, vous pouvez ajouter ou supprimer des propriétés de tout objet. Si vous ajoutez une propriété à un objet qui est utilisé comme prototype pour un ensemble d'objets, les objets dont il est le prototype obtiennent également la nouvelle propriété.

- -

Résumé des différences

- -

Le tableau suivant donne un bref résumé de certaines de ces différences. Le reste de ce chapitre décrit les détails de l'utilisation des constructeurs et prototypes JavaScript pour créer une hiérarchie d'objets et les compare à la façon dont vous le feriez en Java.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Comparaison des systèmes d'objets basés sur des classes (Java) et des prototypes (JavaScript)
CatégorieBasé sur les classes (Java)Basé sur des prototypes (JavaScript)
Classe et instanceLa classe et l'instance sont des entités distinctes.Tous les objets peuvent hériter d'un autre objet.
DéfinitionDéfinir une classe avec une définition de classe ; instancier une classe avec des méthodes de construction.Définir et créer un ensemble d'objets avec des fonctions de construction.
Création d'un nouvel objetCréer un objet unique avec l'opérateur new.Pareil.
Construction de la hiérarchie des objetsConstruire une hiérarchie d'objets en utilisant des définitions de classes pour définir des classes enfants à partir de classes existantes.Construire une hiérarchie d'objets en assignant un objet comme prototype associé à une fonction de construction.
Modèle d'héritageHériter des propriétés en suivant la chaîne de classes.Hériter des propriétés en suivant la chaîne des prototypes.
Extension des propriétésLa définition de la classe spécifie toutes les propriétés de toutes les instances d'une classe. Impossible d'ajouter des propriétés dynamiquement au moment de l'exécution.La fonction ou le prototype du constructeur spécifie un ensemble initial de propriétés. On peut ajouter ou supprimer dynamiquement des propriétés à des objets individuels ou à l'ensemble des objets.
- -

L'exemple de l'employé

- -

Le reste de ce chapitre utilise la hiérarchie des employés présentée dans la figure suivante.

- -

- -

Cela montre une hiérarchie d'objets avec les objets suivants :

- - - -

La création de la hiérarchie

- -

Il existe plusieurs façons de définir des fonctions constructrices appropriées pour mettre en œuvre la hiérarchie des employés. La façon dont vous choisissez de les définir dépend en grande partie de ce que vous voulez être en mesure de faire dans votre application.

- -

Cette section montre comment utiliser des définitions très simples (et comparativement peu flexibles) pour démontrer comment faire fonctionner l'héritage. Dans ces définitions, vous ne pouvez spécifier aucune valeur de propriété lorsque vous créez un objet. L'objet nouvellement créé reçoit les valeurs par défaut, que vous pouvez modifier ultérieurement.

- -

Dans une application réelle, vous définiriez probablement des constructeurs qui vous permettent de fournir des valeurs de propriété au moment de la création de l'objet (voir Des constructeurs plus flexibles pour plus d'informations). Pour l'instant, ces définitions simples démontrent comment l'héritage se produit.

- -

Les définitions suivantes en Java et en JavaScript de Employee sont similaires. La seule différence est que vous devez spécifier le type de chaque propriété en Java mais pas en JavaScript (ceci est dû au fait que Java est un langage fortement typé (en anglais) alors que JavaScript est un langage faiblement typé).

- -

JavaScript (l'utilisation de cette option peut provoquer une erreur pour les exemples suivants)

- -
class Employee {
-  constructor() {
-    this.name = '';
-    this.dept = 'général';
-  }
-}
- -

JavaScript ** (utilisez plutôt ceci)

- -
function Employee() {
-    this.name = '';
-    this.dept = 'général';
-}
- -

Java

- -
public class Employee {
-   public String name = "";
-   public String dept = "général";
-}
- -

Les définitions de Manager et de WorkerBee montrent la différence dans la façon de spécifier l'objet immédiatement supérieur dans la chaîne d'héritage. En JavaScript, vous ajoutez une instance prototypique comme valeur de la propriété prototype de la fonction du constructeur, puis vous surchargez le prototype.constructor de la fonction du constructeur. Vous pouvez le faire à tout moment après avoir défini le constructeur. En Java, vous spécifiez la superclasse dans la définition de la classe. Vous ne pouvez pas modifier la superclasse en dehors de la définition de la classe.

- -

JavaScript

- -
function Manager() {
-  Employee.call(this); // On étend l'objet parent
-  this.reports = []; // On définit une propriété unique à Manager
-}
-Manager.prototype = Object.create(Employee.prototype); // On définit le constructeur dans prototype
-Manager.prototype.constructor = Manager; // On surchage le constructeur
-
-function WorkerBee() {
-  Employee.call(this); // On étend l'objet parent
-  this.projects = []; // On définit une propriété unique à WorkerBee
-}
-WorkerBee.prototype = Object.create(Employee.prototype); // On définit le constructeur dans prototype
-WorkerBee.prototype.constructor = WorkerBee; // On surchage le constructeur
-
- -

Java

- -
// La classe Manager étend la classe parente Employee
-public class Manager extends Employee {
-   public Employee[] reports = new Employee[0]; // On définit une propriété unique à Manager
-}
-
-// La classe WorkerBee étend la classe parente Employee
-public class WorkerBee extends Employee {
-   public String[] projects = new String[0]; // On définit une propriété unique à WorkerBee
-}
-
- -

Les définitions Engineer et SalesPerson créent des objets qui descendent de WorkerBee et donc de Employee. Un objet de ces types possède les propriétés de tous les objets situés au-dessus de lui dans la hiérarchie. En outre, ces définitions remplacent la valeur héritée de la propriété dept par de nouvelles valeurs spécifiques à ces objets.

- -

JavaScript

- -
function SalesPerson() {
-   WorkerBee.call(this); // On étend l'objet WorkerBee
-   this.dept = 'ventes'; // On réécrit la valeur de « dept »
-   this.quota = 100; // On ajoute une propriété unique à SalesPerson
-}
-SalesPerson.prototype = Object.create(WorkerBee.prototype);
-SalesPerson.prototype.constructor = SalesPerson;
-
-function Engineer() {
-   WorkerBee.call(this); // On étend l'objet WorkerBee
-   this.dept = 'ingénierie'; // On réécrit la valeur de « dept »
-   this.machine = ''; // On ajoute une propriété unique à Engineer
-}
-Engineer.prototype = Object.create(WorkerBee.prototype);
-Engineer.prototype.constructor = Engineer;
- -

Java

- -
// La classe a pour classe parente WorkerBee
-public class SalesPerson extends WorkerBee {
-   public String dept = "ventes"; // On réécrit la valeur de « dept »
-   public double quota = 100.0; // On ajoute une propriété unique à SalesPerson
-}
-
-// La classe a pour classe parente WorkerBee
-public class Engineer extends WorkerBee {
-   public String dept = "ingénierie"; // On réécrit la valeur de « dept »
-   public String machine = ""; // On ajoute une propriété unique à Engineer
-}
- -

À l'aide de ces définitions, vous pouvez créer des instances de ces objets qui obtiennent les valeurs par défaut de leurs propriétés. La figure suivante illustre l'utilisation de ces définitions JavaScript pour créer de nouveaux objets et montre les valeurs des propriétés de ces nouveaux objets.

- -
-

Note : Le terme instance a une signification technique spécifique dans les langages basés sur les classes. Dans ces langages, une instance est une instanciation individuelle d'une classe et est fondamentalement différente d'une classe. En JavaScript, « instance » n'a pas cette signification technique car JavaScript ne fait pas cette différence entre classes et instances. Toutefois, en parlant de JavaScript, le terme « instance » peut être utilisé de manière informelle pour désigner un objet créé à l'aide d'une fonction de construction particulière. Ainsi, dans cet exemple, vous pourriez dire de manière informelle que jane est une instance de Engineer. De même, bien que les termes parent (« Parent »), child (« Enfant »), ancestor (« Ancêtre ») et descendant (« Descendant ») n'aient pas de signification formelle en JavaScript ; vous pouvez les utiliser de manière informelle pour vous référer à des objets supérieurs ou inférieurs dans la chaîne des prototypes.

-
- -

Création d'objets avec des définitions simples

- -

Hiérarchie des objets

- -

La hiérarchie suivante est créée à l'aide du code situé ci-dessous.

- -

- -

Objets individuels = Jim, Sally, Mark, Fred, Jane, etc.
« Instances » créées à partir du constructeur

- -
let jim = new Employee;
-// Les parenthèses peuvent être omises si
-// le constructeur ne prend pas d'arguments.
-// jim.name correspond à ''
-// jim.dept correspond à 'général'.
-
-let sally = new Manager;
-// sally.name correspond à ''
-// sally.dept correspond à 'général'
-// sally.reports correspond à []
-
-let mark = new WorkerBee;
-// mark.name correspond à ''
-// mark.dept correspond à 'général'
-// mark.projects correspond à []
-
-let fred = new SalesPerson;
-// fred.name correspond à ''
-// fred.dept correspond à 'ventes'
-// fred.projects correspond à []
-// fred.quota correspond à 100
-
-let jane = new Engineer;
-// jane.name correspond à ''
-// jane.dept correspond à 'ingénierie'
-// jane.projects correspond à []
-// jane.machine correspond à ''
-
- -

Les propriétés d'un objet

- -

Cette section explique comment les objets héritent des propriétés d'autres objets dans la chaîne des prototypes et ce qui se passe lorsque vous ajoutez une propriété au moment de l'exécution.

- -

L'héritage de propriétés

- -

Supposons que vous créez l'objet mark comme un WorkerBee avec l'instruction suivante :

- -
let mark = new WorkerBee;
- -

Lorsque JavaScript voit l'opérateur new, il crée un nouvel objet générique et définit implicitement la valeur de la propriété interne [[Prototype]] à la valeur de WorkerBee.prototype et passe ce nouvel objet comme valeur du mot-clé this à la fonction du constructeur WorkerBee. La propriété interne [[Prototype]] détermine la chaîne de prototypes utilisée pour retourner les valeurs des propriétés. Une fois ces propriétés définies, JavaScript renvoie le nouvel objet et l'instruction d'affectation définit la variable mark à cet objet.

- -

Ce processus ne met pas explicitement des valeurs dans l'objet mark (valeurs locales) pour les propriétés que mark hérite de la chaîne de prototypes. Lorsque vous demandez la valeur d'une propriété, JavaScript vérifie d'abord si la valeur existe dans cet objet. Si c'est le cas, cette valeur est retournée. Si la valeur n'existe pas localement, JavaScript vérifie la chaîne des prototypes (en utilisant la propriété interne [[Prototype]]). Si un objet de la chaîne des prototypes possède une valeur pour la propriété, cette valeur est renvoyée. Si aucune propriété de ce type n'est trouvée, JavaScript indique que l'objet ne possède pas la propriété. Ainsi, l'objet mark possède les propriétés et valeurs suivantes :

- -
mark.name = '';
-mark.dept = 'général';
-mark.projects = [];
- -

L'objet mark se voit attribuer des valeurs locales pour les propriétés name et dept par le constructeur Employee. Une valeur locale lui est attribuée pour la propriété projects par le constructeur WorkerBee. On obtient ainsi l'héritage des propriétés et de leurs valeurs en JavaScript. Certaines subtilités de ce processus sont abordées dans L'héritage des propriétés, revisité.

- -

Comme ces constructeurs ne vous permettent pas de fournir des valeurs spécifiques à une instance, ces informations sont génériques. Les valeurs des propriétés sont celles par défaut partagées par tous les nouveaux objets créés à partir de WorkerBee. Vous pouvez, bien sûr, modifier les valeurs de n'importe laquelle de ces propriétés. Ainsi, vous pourriez donner des informations spécifiques pour mark comme suit :

- -
mark.name = 'Mark Eting';
-mark.dept = 'admin';
-mark.projects = ['navigateur'];
- -

L'ajout de propriétés

- -

En JavaScript, vous pouvez ajouter des propriétés à tout objet au moment de l'exécution. Vous n'êtes pas contraint d'utiliser uniquement les propriétés fournies par la fonction du constructeur. Pour ajouter une propriété spécifique à un seul objet, vous attribuez une valeur à l'objet, comme suit :

- -
mark.bonus = 3000;
- -

Maintenant, l'objet mark possède une propriété bonus, mais aucun autre objet WorkerBee ne possède cette propriété.

- -

Si vous ajoutez une nouvelle propriété à un objet qui est utilisé comme prototype pour une fonction du constructeur, vous ajoutez cette propriété à tous les objets qui héritent des propriétés du prototype. Par exemple, vous pouvez ajouter une propriété specialty à tous les employés avec l'instruction suivante :

- -
Employee.prototype.specialty = 'aucune';
- -

Dès que JavaScript exécute cette instruction, l'objet mark possède également la propriété specialty avec la valeur "aucune". La figure suivante montre l'effet de l'ajout de cette propriété au prototype Employee, puis de sa surcharge pour le prototype Engineer.

- -

Ajout de propriétés

- -

Des constructeurs plus flexibles

- -

Les fonctions correctrices présentées jusqu'à présent ne vous permettent pas de spécifier les valeurs des propriétés lorsque vous créez une instance. Comme avec Java, vous pouvez fournir des arguments aux constructeurs pour initialiser les valeurs des propriétés des instances. La figure suivante montre une façon de le faire.

- -

Spécifier des propriétés dans un constructeur, prise 1

- -

Les paires d'exemples suivantes montrent les définitions Java et JavaScript de ces objets.

- -
// JavaScript
-function Employee(name, dept) {
-  this.name = name || ''; // L'argument donné OU la valeur par défaut
-  this.dept = dept || 'général'; // L'argument donné OU la valeur par défaut
-}
- -
// Java
-public class Employee {
-  public String name;
-  public String dept;
-  // On assigne les valeurs par défaut aux propriétés
-  public Employee () {
-    this("", "général");
-  }
-  // On assigne une valeur donnée et une par défaut aux propriétés
-  public Employee (String name) {
-    this(name, "général");
-  }
-  // On assigne les deux arguments donnés aux propriétés
-  public Employee (String name, String dept) {
-    this.name = name;
-    this.dept = dept;
-  }
-}
- -
// JavaScript
-function WorkerBee(projs) {
-  this.projects = projs || []; // L'argument donné OU la valeur par défaut
-}
-WorkerBee.prototype = new Employee;
- -
// Java
-public class WorkerBee extends Employee {
-   public String[] projects;
-   // On assigne une valeur par défaut à la propriété
-   public WorkerBee () {
-      this(new String[0]);
-   }
-   // On assigne l'argument donné à la propriété
-   public WorkerBee (String[] projs) {
-      projects = projs;
-   }
-}
- -
// JavaScript
-function Engineer(mach) {
-  this.dept = 'engineering'; // On réécrit la valeur de « dept »
-  this.machine = mach || ''; // L'argument donné OU la valeur par défaut
-}
-Engineer.prototype = new WorkerBee;
- -
// Java
-public class Engineer extends WorkerBee {
-   public String machine;
-   public Engineer () {
-      dept = "engineering"; // On réécrit la valeur de « dept »
-      machine = ""; // On assigne une valeur par défaut à la propriété
-   }
-   public Engineer (String mach) {
-      dept = "engineering"; // On réécrit la valeur de « dept »
-      machine = mach; // On assigne l'argument donné à la propriété
-   }
-}
- -

Ces définitions JavaScript utilisent un idiome spécial pour définir les valeurs par défaut :

- -
this.nom = nom || "";
- -

L'opérateur logique OU de JavaScript (||) évalue son premier argument. Si cet argument se transforme en vrai, l'opérateur le retourne. Sinon, l'opérateur renvoie la valeur du deuxième argument. Par conséquent, cette ligne de code teste pour voir si name a une valeur utile pour la propriété name. Si c'est le cas, elle définit this.name à cette valeur. Sinon, elle définit this.name à la chaîne de caractères vide. Ce chapitre utilise cet idiome par souci de concision ; cependant, il peut être déroutant au premier abord.

- -
-

Note : Cela peut ne pas fonctionner comme prévu si la fonction du constructeur est appelée avec des arguments qui se convertissent en false (comme 0 (zéro) et la chaîne vide ("")). Dans ce cas, la valeur par défaut sera choisie.

-
- -

Avec ces définitions, lorsque vous créez une instance d'un objet, vous pouvez spécifier des valeurs pour les propriétés définies localement. Vous pouvez utiliser l'instruction suivante pour créer un nouvel Engineer :

- -
let jane = new Engineer('belau');
- -

Les propriétés de Jane sont maintenant :

- -
jane.name == '';
-jane.dept == 'engineering';
-jane.projects == [];
-jane.machine == 'belau';
- -

Remarquez qu'avec ces définitions, vous ne pouvez pas spécifier une valeur initiale pour une propriété héritée telle que name. Si vous voulez spécifier une valeur initiale pour les propriétés héritées en JavaScript, vous devez ajouter du code supplémentaire à la fonction du constructeur.

- -

Jusqu'à présent, la fonction du constructeur a créé un objet générique, puis a spécifié les propriétés et valeurs locales du nouvel objet. Vous pouvez demander au constructeur d'ajouter d'autres propriétés en appelant directement la fonction du constructeur d'un objet situé plus haut dans la chaîne des prototypes. La figure suivante montre ces nouvelles définitions.

- -

Spécifier des propriétés dans un constructeur, prise 2

- -

Examinons l'une de ces définitions en détails. Voici la nouvelle définition pour le constructeur Engineer :

- -
function Engineer(name, projs, mach) {
-  this.base = WorkerBee;
-  this.base(name, 'ingénierie', projs);
-  this.machine = mach || '';
-}
- -

Supposons que vous créez un nouvel objet Engineer comme suit :

- -
let jane = new Engineer('Jane Dupont', ['navigateur', 'javascript'], 'belau');
-
- -

JavaScript suit les étapes suivantes :

- -
    -
  1. L'opérateur new crée un objet générique et définit sa propriété __proto__ à Engineer.prototype.
  2. -
  3. L'opérateur new transmet le nouvel objet au constructeur Engineer comme valeur du mot clé this.
  4. -
  5. Le constructeur crée une nouvelle propriété appelée base pour cet objet et affecte la valeur du constructeur WorkerBee à la propriété base. Cela fait du constructeur WorkerBee une méthode de l'objet Engineer. Le nom de la propriété base n'est pas spécial. Vous pouvez utiliser n'importe quel nom de propriété légal ; base est évocateur de son but.
  6. -
  7. Le constructeur appelle la méthode base, en passant comme arguments deux des arguments passés au constructeur ("Jane Dupont" et ["navigateur", "javascript"]) et également la chaîne "ingénierie". L'utilisation explicite de "ingénierie" dans le constructeur indique que tous les objets Engineer ont la même valeur pour la propriété dept héritée, et cette valeur remplace la valeur héritée de Employee.
  8. -
  9. Parce que base est une méthode de Engineer, dans l'appel à base, JavaScript lie le mot-clé this à l'objet créé à l'étape 1. Ainsi, la fonction WorkerBee transmet à son tour les arguments "Jane Dupont" et "ingénierie" à la fonction du constructeur Employee. Au retour de la fonction du constructeur Employee, la fonction WorkerBee utilise l'argument restant pour définir la propriété projects.
  10. -
  11. Au retour de la méthode base, le constructeur Engineer initialise la propriété machine de l'objet à "belau".
  12. -
  13. Au retour du constructeur, JavaScript affecte le nouvel objet à la variable jane.
  14. -
- -

Vous pourriez penser que, ayant appelé le constructeur WorkerBee à partir de l'intérieur du constructeur Engineer, vous avez mis en place l'héritage de manière appropriée pour les objets Engineer. Ce n'est pas le cas. L'appel du constructeur WorkerBee garantit qu'un objet Engineer commence avec les propriétés spécifiées dans toutes les fonctions des constructeurs qui sont appelées. Cependant, si vous ajoutez ultérieurement des propriétés aux prototypes Employee ou WorkerBee, ces propriétés ne sont pas héritées par l'objet Engineer. Par exemple, supposons que vous ayez les déclarations suivantes :

- -
function Engineer(name, projs, mach) {
-  this.base = WorkerBee;
-  this.base(name, 'ingénierie', projs);
-  this.machine = mach || '';
-}
-
-let jane = new Engineer('Jane Dupont', ['navigateur', 'javascript'], 'belau');
-Employee.prototype.specialty = 'aucune';
- -

L'objet jane n'hérite pas de la propriété specialty. Vous devez encore configurer explicitement le prototype pour assurer un héritage dynamique. Supposons plutôt que vous ayez ces déclarations :

- -
function Engineer(name, projs, mach) {
-  this.base = WorkerBee;
-  this.base(name, 'ingénierie', projs);
-  this.machine = mach || '';
-}
-
-Engineer.prototype = new WorkerBee;
-let jane = new Engineer('Jane Dupont', ['navigateur', 'javascript'], 'belau');
-Employee.prototype.specialty = 'aucune';
- -

Maintenant la valeur de la propriété jane de l'objet specialty est « aucune ».

- -

Une autre façon d'hériter est d'utiliser les méthodes call() / apply(). Les méthodes ci-dessous sont équivalentes :

- -
function Engineer(name, projs, mach) {
-  this.base = WorkerBee;
-  this.base(name, 'ingénierie', projs);
-  this.machine = mach || '';
-}
- -
function Engineer(name, projs, mach) {
-  WorkerBee.call(this, name, 'ingénierie', projs);
-  this.machine = mach || '';
-}
- -

L'utilisation de la méthode JavaScript call() rend une implémentation plus propre car base n'est plus nécessaire.

- -

L'héritage des propriétés, revisité

- -

Les sections précédentes ont décrit comment les constructeurs et prototypes JavaScript fournissent des hiérarchies et de l'héritage. Cette section aborde certaines subtilités qui n'étaient pas nécessairement apparentes dans les discussions précédentes.

- -

Valeurs locales et valeurs héritées

- -

Lorsque vous accédez à une propriété d'objet, JavaScript effectue les étapes suivantes, comme décrit précédemment dans ce chapitre :

- -
    -
  1. Vérifiez si la valeur existe localement. Si c'est le cas, elle est retournée.
  2. -
  3. S'il n'y a pas de valeur locale, vérifiez la chaîne de prototypes (en utilisant la propriété __proto__).
  4. -
  5. Si un objet de la chaîne de prototypes possède une valeur pour la propriété spécifiée, renvoyer cette valeur.
  6. -
  7. Si aucune propriété de ce type n'est trouvée, l'objet ne possède pas cette propriété.
  8. -
- -

Le résultat de ces étapes dépend de la façon dont vous définissez les choses en cours de route. L'exemple original avait ces définitions :

- -
function Employee() {
-  this.name = '';
-  this.dept = 'général';
-}
-
-function WorkerBee() {
-  this.projects = [];
-}
-WorkerBee.prototype = new Employee;
- -

Avec ces définitions, supposons que vous créez amy comme une instance de WorkerBee avec l'instruction suivante :

- -
let amy = new WorkerBee;
- -

L'objet amy possède une propriété locale, projects. Les valeurs des propriétés name et dept ne sont pas locales à amy et héritent donc dans la propriété amy de l'objet __proto__. Ainsi, amy possède ces valeurs de propriétés :

- -
amy.name == '';
-amy.dept == 'général';
-amy.projects == [];
- -

Supposons maintenant que vous modifiez la valeur de la propriété name dans le prototype associé à Employee :

- -
Employee.prototype.name = 'Inconnu·e';
- -

À première vue, on pourrait s'attendre à ce que cette nouvelle valeur se propage vers le bas à toutes les instances de Employee. Cependant, ce n'est pas le cas.

- -

Lorsque vous créez n'importe quelle instance de l'objet Employee, cette instance obtient une valeur locale pour la propriété name (la chaîne de caractères vide). Cela signifie que lorsque vous définissez le prototype de WorkerBee en créant un nouvel objet Employee, WorkerBee.prototype a une valeur locale pour la propriété name. Par conséquent, lorsque JavaScript recherche la propriété name de l'objet amy (une instance de WorkerBee), JavaScript trouve la valeur locale de cette propriété dans WorkerBee.prototype. Il ne cherche donc pas plus haut dans la chaîne jusqu'à Employee.prototype.

- -

Si vous souhaitez modifier la valeur d'une propriété d'un objet au moment de l'exécution et que la nouvelle valeur soit héritée par tous les descendants de l'objet, vous ne pouvez pas définir la propriété dans la fonction du constructeur de l'objet. Vous devez plutôt l'ajouter au prototype associé au constructeur. Par exemple, supposons que vous remplaciez le code précédent par le suivant :

- -
function Employee() {
-  this.dept = 'général'; // Notez que this.name (une variable locale) n'apparaît pas ici
-}
-Employee.prototype.name = ''; // Un seul exemplaire
-
-function WorkerBee() {
-  this.projects = [];
-}
-WorkerBee.prototype = new Employee;
-
-let amy = new WorkerBee;
-
-Employee.prototype.name = 'Inconnu·e';
- -

Dans ce cas, la propriété name de amy devient « Inconnu·e ».

- -

Comme le montrent ces exemples, si vous souhaitez définir des valeurs par défaut pour les propriétés d'un objet et que vous voulez pouvoir modifier ces valeurs au moment de l'exécution, vous devez définir les propriétés dans le prototype du constructeur, et non dans la fonction du constructeur elle-même.

- -

Déterminer les relations entre les instances

- -

La recherche de propriétés en JavaScript s'effectue dans les propriétés propres d'un objet et, si le nom de la propriété n'est pas trouvé, elle s'effectue dans la propriété spéciale de l'objet __proto__. Cette opération se poursuit de manière récursive ; le processus est appelé « recherche dans la chaîne des prototypes ».

- -

La propriété spéciale __proto__ est définie lorsqu'un objet est construit ; elle prend la valeur de la propriété prototype du constructeur. Ainsi, l'expression new Riri() crée un objet avec __proto__ == Riri.prototype. Par conséquent, les modifications apportées aux propriétés de Riri.prototype modifient la recherche de propriétés pour tous les objets qui ont été créés par new Riri().

- -

Chaque objet a une propriété __proto__ (sauf Object) ; chaque fonction a une propriété prototype. Les objets peuvent donc être liés par « héritage de prototype » à d'autres objets. Vous pouvez tester l'héritage en comparant le __proto__ d'un objet avec l'objet prototype d'une fonction. JavaScript fournit un raccourci : l'opérateur instanceof teste un objet par rapport à une fonction et renvoie vrai si l'objet hérite du prototype de la fonction. Par exemple,

- -
let f = new Riri();
-let isTrue = (f instanceof Riri);
- -

Pour un exemple plus détaillé, supposons que vous ayez le même ensemble de définitions que celui présenté dans Héritage des propriétés. Créez un objet Engineer comme suit :

- -
let chris = new Engineer('Chris Anthème', ['jsd'], 'fiji');
- -

Avec cet objet, les affirmations suivantes sont toutes vraies :

- -
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;
- -

Compte tenu de cela, vous pourriez écrire une fonction instanceOf comme suit :

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

Note : L'implémentation ci-dessus vérifie le type de l'objet par rapport à « xml » afin de contourner une bizarrerie de la façon dont les objets XML sont représentés dans les versions récentes de JavaScript. Voir bug 634150 si vous voulez connaître les détails.

-
- -

En utilisant la fonction instanceOf définie ci-dessus, ces expressions sont vraies :

- -
instanceOf(chris, Engineer)
-instanceOf(chris, WorkerBee)
-instanceOf(chris, Employee)
-instanceOf(chris, Object)
- -

Mais l'expression suivante est fausse :

- -
instanceOf(chris, SalesPerson)
- -

Les informations globales dans les constructeurs

- -

Lorsque vous créez des constructeurs, vous devez faire attention si vous définissez des informations globales dans le constructeur. Par exemple, supposons que vous souhaitez qu'un identifiant unique soit automatiquement attribué à chaque nouvel employé. Vous pourriez utiliser la définition suivante pour Employee :

- -
let idCounter = 1; // On définit un compteur d'identifiant
-
-function Employee(name, dept) {
-  this.name = name || '';
-  this.dept = dept || 'général';
-  this.id = idCounter++; // On assigne la valeur et on incrémente le compteur
-}
- -

Avec cette définition, lorsque vous créez un nouvel Employee, le constructeur lui attribue l'ID suivant dans la séquence, puis incrémente le compteur d'ID global. Ainsi, si votre déclaration est la suivante, victoria.id vaut 1 et harry.id vaut 2 :

- -
let victoria = new Employee('Victoria Lamar', 'pubs');
-let harry = new Employee('Harry Stocrate', 'ventes');
- -

À première vue, cela semble correct. Cependant, idCounter est incrémenté à chaque fois qu'un objet Employee est créé, pour quelque raison que ce soit. Si vous créez toute la hiérarchie Employee présentée dans ce chapitre, le constructeur Employee est appelé chaque fois que vous mettez en place un prototype. Supposons que vous ayez le code suivant :

- -
let idCounter = 1;
-
-function Employee(name, dept) {
-  this.name = name || '';
-  this.dept = dept || 'général';
-  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;
-
-let mac = new Engineer('Mac Fly');
- -

Supposons en outre que les définitions omises ici possèdent la propriété base et appellent le constructeur situé au-dessus d'elles dans la chaîne des prototypes. Dans ce cas, au moment où l'objet mac est créé, mac.id est 5.

- -

Selon l'application, il peut être important ou non que le compteur ait été incrémenté ces fois supplémentaires. Si vous vous souciez de la valeur exacte de ce compteur, une solution possible consiste à utiliser plutôt le constructeur suivant :

- -
function Employee(name, dept) {
-  this.name = name || '';
-  this.dept = dept || 'general';
-  // Ceci est une écriture raccourcie de l'opérateur if
-  // Si « name » est défini, alors on assigne et on incrémente
-  if (name) {
-    this.id = idCounter++;
-  }
-}
-
- -

Lorsque vous créez une instance de Employee pour l'utiliser comme prototype, vous ne fournissez pas d'arguments au constructeur. En utilisant cette définition du constructeur, lorsque vous ne fournissez pas d'arguments, le constructeur n'attribue pas de valeur à l'id et ne met pas à jour le compteur. Par conséquent, pour qu'un Employee obtienne un id, vous devez spécifier un nom pour l'employé. Dans cet exemple, mac.id serait 1.

- -

Vous pouvez également créer une copie de l'objet prototype de l'employé pour l'affecter à WorkerBee :

- -
WorkerBee.prototype = Object.create(Employee.prototype);
-// au lieu de WorkerBee.prototype = new Employee
- -

Pas d'héritage multiple

- -

Certains langages orientés objets permettent l'héritage multiple. C'est-à-dire qu'un objet peut hériter des propriétés et des valeurs d'objets parents non apparentés. JavaScript ne prend pas en charge l'héritage multiple.

- -

L'héritage des valeurs des propriétés se produit au moment de l'exécution, lorsque JavaScript recherche une valeur dans la chaîne de prototypes d'un objet. Comme un objet n'a qu'un seul prototype associé, JavaScript ne peut pas hériter dynamiquement de plus d'une chaîne de prototypes.

- -

En JavaScript, vous pouvez faire en sorte qu'une fonction de construction appelle plusieurs autres fonctions de construction en son sein. Cela donne l'illusion d'un héritage multiple. Par exemple, considérez les déclarations suivantes :

- -
function Hobbyist(hobby) {
-  this.hobby = hobby || 'plongée';
-}
-
-function Engineer(name, projs, mach, hobby) {
-  this.base1 = WorkerBee;
-  this.base1(name, 'ingénierie', projs);
-  this.base2 = Hobbyist;
-  this.base2(hobby);
-  this.machine = mach || '';
-}
-Engineer.prototype = new WorkerBee;
-
-let dennis = new Engineer('Dennis Ah', ['collaborateur'], 'hugo');
-
- -

Supposons en outre que la définition de WorkerBee soit celle utilisée précédemment dans ce chapitre. Dans ce cas, l'objet dennis possède ces propriétés :

- -
dennis.name == 'Dennis Ah';
-dennis.dept == 'ingénierie';
-dennis.projects == ['collaborateur'];
-dennis.machine == 'hugo';
-dennis.hobby == 'plongée';
- -

Donc dennis obtient bien la propriété hobby du constructeur Hobbyist. Cependant, supposons que vous ajoutez ensuite une propriété au prototype du constructeur Hobbyist :

- -
Hobbyist.prototype.equipment = ['masque', 'palmes', 'régulateur', 'bcd'];
- -

L'objet dennis n'héritera pas de cette nouvelle propriété.

- -
{{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Using_promises")}}
diff --git a/files/fr/web/javascript/guide/details_of_the_object_model/index.md b/files/fr/web/javascript/guide/details_of_the_object_model/index.md new file mode 100644 index 0000000000..8cf9bf50ff --- /dev/null +++ b/files/fr/web/javascript/guide/details_of_the_object_model/index.md @@ -0,0 +1,685 @@ +--- +title: Le modèle objet JavaScript en détails +slug: Web/JavaScript/Guide/Details_of_the_Object_Model +tags: + - Guide + - Intermediate + - JavaScript + - Object +translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model +original_slug: Web/JavaScript/Guide/Le_modèle_objet_JavaScript_en_détails +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Using_promises")}}
+ +

JavaScript est un langage orienté objet basé sur des prototypes, plutôt que sur des classes. En raison de cette base différente, il peut être moins évident de comprendre comment JavaScript vous permet de créer des hiérarchies d'objets et d'avoir un héritage des propriétés et de leurs valeurs. Ce chapitre tente de clarifier la situation.

+ +

Ce chapitre part du principe que vous avez déjà une certaine connaissance de JavaScript et que vous avez utilisé des fonctions JavaScript pour créer des objets simples.

+ +

Langages basés sur des classes ou des prototypes

+ +

Les langages orientés objets, basés sur des classes, tels que Java et C++, sont fondés sur le concept de deux entités distinctes : les classes et les instances.

+ + + +

Un langage basé sur des prototypes, tel que JavaScript, ne fait pas cette distinction : il a des objets. Un langage basé sur des prototypes possède la notion d'un objet prototypique, un objet utilisé comme modèle à partir duquel on peut obtenir les propriétés initiales d'un nouvel objet. Tout objet peut spécifier ses propres propriétés, soit lors de sa création, soit au moment de l'exécution. En outre, tout objet peut être associé en tant que prototype d'un autre objet, permettant au second objet de partager les propriétés du premier.

+ +

La définition d'une classe

+ +

Dans les langages basés sur les classes, vous définissez une classe en utilisant une définition de classe distincte. Dans cette définition, vous pouvez spécifier des méthodes spéciales, appelées constructeur (et écrites « constructor »), pour créer des instances de la classe. Une méthode constructrice peut spécifier des valeurs initiales pour les propriétés de l'instance et effectuer d'autres traitements appropriés au moment de la création. Vous utilisez l'opérateur new en association avec la méthode constructrice pour créer des instances de la classe.

+ +

JavaScript suit un modèle similaire, mais ne dispose pas d'une définition de classe distincte de celle du constructeur. Au lieu de cela, vous définissez une fonction de construction pour créer des objets avec un ensemble initial particulier de propriétés et de valeurs. Toute fonction JavaScript peut être utilisée comme constructeur. Vous utilisez l'opérateur new avec une fonction « constructor » pour créer un nouvel objet.

+ +
+

Note : ECMAScript 2015 introduit une déclaration de classe :

+ +
+

Les classes JavaScript, introduites dans ECMAScript 2015, sont principalement un enrichissement syntaxique de l'héritage basé sur les prototypes existant dans JavaScript. La syntaxe des classes n'introduit pas un nouveau modèle d'héritage orienté objet dans JavaScript.

+
+
+ +

Classes enfants et héritage

+ +

Dans un langage basé sur les classes, vous créez une hiérarchie de classes par le biais des définitions de classes. Dans une définition de classe, vous pouvez spécifier que la nouvelle classe est une classe enfant d'une classe déjà existante. La classe enfant hérite de toutes les propriétés de la classe parente et peut en plus ajouter de nouvelles propriétés ou modifier celles héritées. Par exemple, supposons que la classe Employee ne comprend que les propriétés name (« nom ») et dept (« département »), et que Manager est une classe enfant de Employee qui ajoute la propriété reports (« rapports »). Dans ce cas, une instance de la classe Manager aurait les trois propriétés : name, dept, et reports.

+ +

JavaScript met en œuvre l'héritage en vous permettant d'associer un objet prototypique à n'importe quelle fonction de construction. Ainsi, vous pouvez créer exactement l'exemple EmployeeManager, mais vous utilisez une terminologie légèrement différente. D'abord, vous définissez la fonction du constructeur Employee, en spécifiant les propriétés name et dept. Ensuite, vous définissez la fonction du constructeur Manager, en appelant le constructeur Employee et en spécifiant la propriété reports. Enfin, vous attribuez un nouvel objet dérivé de Employee.prototype comme prototype pour la fonction du constructeur Manager. Ensuite, lorsque vous créez un nouveau Manager, il hérite des propriétés name et dept de l'objet Employee.

+ +

Ajouter ou retirer des propriétés

+ +

Dans les langages basés sur les classes, vous créez généralement une classe au moment de la compilation, puis vous instanciez, des instances de la classe, soit au moment de la compilation, soit au moment de l'exécution. Vous ne pouvez pas modifier le nombre ou le type de propriétés d'une classe après avoir défini cette dernière. En JavaScript, cependant, au moment de l'exécution, vous pouvez ajouter ou supprimer des propriétés de tout objet. Si vous ajoutez une propriété à un objet qui est utilisé comme prototype pour un ensemble d'objets, les objets dont il est le prototype obtiennent également la nouvelle propriété.

+ +

Résumé des différences

+ +

Le tableau suivant donne un bref résumé de certaines de ces différences. Le reste de ce chapitre décrit les détails de l'utilisation des constructeurs et prototypes JavaScript pour créer une hiérarchie d'objets et les compare à la façon dont vous le feriez en Java.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comparaison des systèmes d'objets basés sur des classes (Java) et des prototypes (JavaScript)
CatégorieBasé sur les classes (Java)Basé sur des prototypes (JavaScript)
Classe et instanceLa classe et l'instance sont des entités distinctes.Tous les objets peuvent hériter d'un autre objet.
DéfinitionDéfinir une classe avec une définition de classe ; instancier une classe avec des méthodes de construction.Définir et créer un ensemble d'objets avec des fonctions de construction.
Création d'un nouvel objetCréer un objet unique avec l'opérateur new.Pareil.
Construction de la hiérarchie des objetsConstruire une hiérarchie d'objets en utilisant des définitions de classes pour définir des classes enfants à partir de classes existantes.Construire une hiérarchie d'objets en assignant un objet comme prototype associé à une fonction de construction.
Modèle d'héritageHériter des propriétés en suivant la chaîne de classes.Hériter des propriétés en suivant la chaîne des prototypes.
Extension des propriétésLa définition de la classe spécifie toutes les propriétés de toutes les instances d'une classe. Impossible d'ajouter des propriétés dynamiquement au moment de l'exécution.La fonction ou le prototype du constructeur spécifie un ensemble initial de propriétés. On peut ajouter ou supprimer dynamiquement des propriétés à des objets individuels ou à l'ensemble des objets.
+ +

L'exemple de l'employé

+ +

Le reste de ce chapitre utilise la hiérarchie des employés présentée dans la figure suivante.

+ +

+ +

Cela montre une hiérarchie d'objets avec les objets suivants :

+ + + +

La création de la hiérarchie

+ +

Il existe plusieurs façons de définir des fonctions constructrices appropriées pour mettre en œuvre la hiérarchie des employés. La façon dont vous choisissez de les définir dépend en grande partie de ce que vous voulez être en mesure de faire dans votre application.

+ +

Cette section montre comment utiliser des définitions très simples (et comparativement peu flexibles) pour démontrer comment faire fonctionner l'héritage. Dans ces définitions, vous ne pouvez spécifier aucune valeur de propriété lorsque vous créez un objet. L'objet nouvellement créé reçoit les valeurs par défaut, que vous pouvez modifier ultérieurement.

+ +

Dans une application réelle, vous définiriez probablement des constructeurs qui vous permettent de fournir des valeurs de propriété au moment de la création de l'objet (voir Des constructeurs plus flexibles pour plus d'informations). Pour l'instant, ces définitions simples démontrent comment l'héritage se produit.

+ +

Les définitions suivantes en Java et en JavaScript de Employee sont similaires. La seule différence est que vous devez spécifier le type de chaque propriété en Java mais pas en JavaScript (ceci est dû au fait que Java est un langage fortement typé (en anglais) alors que JavaScript est un langage faiblement typé).

+ +

JavaScript (l'utilisation de cette option peut provoquer une erreur pour les exemples suivants)

+ +
class Employee {
+  constructor() {
+    this.name = '';
+    this.dept = 'général';
+  }
+}
+ +

JavaScript ** (utilisez plutôt ceci)

+ +
function Employee() {
+    this.name = '';
+    this.dept = 'général';
+}
+ +

Java

+ +
public class Employee {
+   public String name = "";
+   public String dept = "général";
+}
+ +

Les définitions de Manager et de WorkerBee montrent la différence dans la façon de spécifier l'objet immédiatement supérieur dans la chaîne d'héritage. En JavaScript, vous ajoutez une instance prototypique comme valeur de la propriété prototype de la fonction du constructeur, puis vous surchargez le prototype.constructor de la fonction du constructeur. Vous pouvez le faire à tout moment après avoir défini le constructeur. En Java, vous spécifiez la superclasse dans la définition de la classe. Vous ne pouvez pas modifier la superclasse en dehors de la définition de la classe.

+ +

JavaScript

+ +
function Manager() {
+  Employee.call(this); // On étend l'objet parent
+  this.reports = []; // On définit une propriété unique à Manager
+}
+Manager.prototype = Object.create(Employee.prototype); // On définit le constructeur dans prototype
+Manager.prototype.constructor = Manager; // On surchage le constructeur
+
+function WorkerBee() {
+  Employee.call(this); // On étend l'objet parent
+  this.projects = []; // On définit une propriété unique à WorkerBee
+}
+WorkerBee.prototype = Object.create(Employee.prototype); // On définit le constructeur dans prototype
+WorkerBee.prototype.constructor = WorkerBee; // On surchage le constructeur
+
+ +

Java

+ +
// La classe Manager étend la classe parente Employee
+public class Manager extends Employee {
+   public Employee[] reports = new Employee[0]; // On définit une propriété unique à Manager
+}
+
+// La classe WorkerBee étend la classe parente Employee
+public class WorkerBee extends Employee {
+   public String[] projects = new String[0]; // On définit une propriété unique à WorkerBee
+}
+
+ +

Les définitions Engineer et SalesPerson créent des objets qui descendent de WorkerBee et donc de Employee. Un objet de ces types possède les propriétés de tous les objets situés au-dessus de lui dans la hiérarchie. En outre, ces définitions remplacent la valeur héritée de la propriété dept par de nouvelles valeurs spécifiques à ces objets.

+ +

JavaScript

+ +
function SalesPerson() {
+   WorkerBee.call(this); // On étend l'objet WorkerBee
+   this.dept = 'ventes'; // On réécrit la valeur de « dept »
+   this.quota = 100; // On ajoute une propriété unique à SalesPerson
+}
+SalesPerson.prototype = Object.create(WorkerBee.prototype);
+SalesPerson.prototype.constructor = SalesPerson;
+
+function Engineer() {
+   WorkerBee.call(this); // On étend l'objet WorkerBee
+   this.dept = 'ingénierie'; // On réécrit la valeur de « dept »
+   this.machine = ''; // On ajoute une propriété unique à Engineer
+}
+Engineer.prototype = Object.create(WorkerBee.prototype);
+Engineer.prototype.constructor = Engineer;
+ +

Java

+ +
// La classe a pour classe parente WorkerBee
+public class SalesPerson extends WorkerBee {
+   public String dept = "ventes"; // On réécrit la valeur de « dept »
+   public double quota = 100.0; // On ajoute une propriété unique à SalesPerson
+}
+
+// La classe a pour classe parente WorkerBee
+public class Engineer extends WorkerBee {
+   public String dept = "ingénierie"; // On réécrit la valeur de « dept »
+   public String machine = ""; // On ajoute une propriété unique à Engineer
+}
+ +

À l'aide de ces définitions, vous pouvez créer des instances de ces objets qui obtiennent les valeurs par défaut de leurs propriétés. La figure suivante illustre l'utilisation de ces définitions JavaScript pour créer de nouveaux objets et montre les valeurs des propriétés de ces nouveaux objets.

+ +
+

Note : Le terme instance a une signification technique spécifique dans les langages basés sur les classes. Dans ces langages, une instance est une instanciation individuelle d'une classe et est fondamentalement différente d'une classe. En JavaScript, « instance » n'a pas cette signification technique car JavaScript ne fait pas cette différence entre classes et instances. Toutefois, en parlant de JavaScript, le terme « instance » peut être utilisé de manière informelle pour désigner un objet créé à l'aide d'une fonction de construction particulière. Ainsi, dans cet exemple, vous pourriez dire de manière informelle que jane est une instance de Engineer. De même, bien que les termes parent (« Parent »), child (« Enfant »), ancestor (« Ancêtre ») et descendant (« Descendant ») n'aient pas de signification formelle en JavaScript ; vous pouvez les utiliser de manière informelle pour vous référer à des objets supérieurs ou inférieurs dans la chaîne des prototypes.

+
+ +

Création d'objets avec des définitions simples

+ +

Hiérarchie des objets

+ +

La hiérarchie suivante est créée à l'aide du code situé ci-dessous.

+ +

+ +

Objets individuels = Jim, Sally, Mark, Fred, Jane, etc.
« Instances » créées à partir du constructeur

+ +
let jim = new Employee;
+// Les parenthèses peuvent être omises si
+// le constructeur ne prend pas d'arguments.
+// jim.name correspond à ''
+// jim.dept correspond à 'général'.
+
+let sally = new Manager;
+// sally.name correspond à ''
+// sally.dept correspond à 'général'
+// sally.reports correspond à []
+
+let mark = new WorkerBee;
+// mark.name correspond à ''
+// mark.dept correspond à 'général'
+// mark.projects correspond à []
+
+let fred = new SalesPerson;
+// fred.name correspond à ''
+// fred.dept correspond à 'ventes'
+// fred.projects correspond à []
+// fred.quota correspond à 100
+
+let jane = new Engineer;
+// jane.name correspond à ''
+// jane.dept correspond à 'ingénierie'
+// jane.projects correspond à []
+// jane.machine correspond à ''
+
+ +

Les propriétés d'un objet

+ +

Cette section explique comment les objets héritent des propriétés d'autres objets dans la chaîne des prototypes et ce qui se passe lorsque vous ajoutez une propriété au moment de l'exécution.

+ +

L'héritage de propriétés

+ +

Supposons que vous créez l'objet mark comme un WorkerBee avec l'instruction suivante :

+ +
let mark = new WorkerBee;
+ +

Lorsque JavaScript voit l'opérateur new, il crée un nouvel objet générique et définit implicitement la valeur de la propriété interne [[Prototype]] à la valeur de WorkerBee.prototype et passe ce nouvel objet comme valeur du mot-clé this à la fonction du constructeur WorkerBee. La propriété interne [[Prototype]] détermine la chaîne de prototypes utilisée pour retourner les valeurs des propriétés. Une fois ces propriétés définies, JavaScript renvoie le nouvel objet et l'instruction d'affectation définit la variable mark à cet objet.

+ +

Ce processus ne met pas explicitement des valeurs dans l'objet mark (valeurs locales) pour les propriétés que mark hérite de la chaîne de prototypes. Lorsque vous demandez la valeur d'une propriété, JavaScript vérifie d'abord si la valeur existe dans cet objet. Si c'est le cas, cette valeur est retournée. Si la valeur n'existe pas localement, JavaScript vérifie la chaîne des prototypes (en utilisant la propriété interne [[Prototype]]). Si un objet de la chaîne des prototypes possède une valeur pour la propriété, cette valeur est renvoyée. Si aucune propriété de ce type n'est trouvée, JavaScript indique que l'objet ne possède pas la propriété. Ainsi, l'objet mark possède les propriétés et valeurs suivantes :

+ +
mark.name = '';
+mark.dept = 'général';
+mark.projects = [];
+ +

L'objet mark se voit attribuer des valeurs locales pour les propriétés name et dept par le constructeur Employee. Une valeur locale lui est attribuée pour la propriété projects par le constructeur WorkerBee. On obtient ainsi l'héritage des propriétés et de leurs valeurs en JavaScript. Certaines subtilités de ce processus sont abordées dans L'héritage des propriétés, revisité.

+ +

Comme ces constructeurs ne vous permettent pas de fournir des valeurs spécifiques à une instance, ces informations sont génériques. Les valeurs des propriétés sont celles par défaut partagées par tous les nouveaux objets créés à partir de WorkerBee. Vous pouvez, bien sûr, modifier les valeurs de n'importe laquelle de ces propriétés. Ainsi, vous pourriez donner des informations spécifiques pour mark comme suit :

+ +
mark.name = 'Mark Eting';
+mark.dept = 'admin';
+mark.projects = ['navigateur'];
+ +

L'ajout de propriétés

+ +

En JavaScript, vous pouvez ajouter des propriétés à tout objet au moment de l'exécution. Vous n'êtes pas contraint d'utiliser uniquement les propriétés fournies par la fonction du constructeur. Pour ajouter une propriété spécifique à un seul objet, vous attribuez une valeur à l'objet, comme suit :

+ +
mark.bonus = 3000;
+ +

Maintenant, l'objet mark possède une propriété bonus, mais aucun autre objet WorkerBee ne possède cette propriété.

+ +

Si vous ajoutez une nouvelle propriété à un objet qui est utilisé comme prototype pour une fonction du constructeur, vous ajoutez cette propriété à tous les objets qui héritent des propriétés du prototype. Par exemple, vous pouvez ajouter une propriété specialty à tous les employés avec l'instruction suivante :

+ +
Employee.prototype.specialty = 'aucune';
+ +

Dès que JavaScript exécute cette instruction, l'objet mark possède également la propriété specialty avec la valeur "aucune". La figure suivante montre l'effet de l'ajout de cette propriété au prototype Employee, puis de sa surcharge pour le prototype Engineer.

+ +

Ajout de propriétés

+ +

Des constructeurs plus flexibles

+ +

Les fonctions correctrices présentées jusqu'à présent ne vous permettent pas de spécifier les valeurs des propriétés lorsque vous créez une instance. Comme avec Java, vous pouvez fournir des arguments aux constructeurs pour initialiser les valeurs des propriétés des instances. La figure suivante montre une façon de le faire.

+ +

Spécifier des propriétés dans un constructeur, prise 1

+ +

Les paires d'exemples suivantes montrent les définitions Java et JavaScript de ces objets.

+ +
// JavaScript
+function Employee(name, dept) {
+  this.name = name || ''; // L'argument donné OU la valeur par défaut
+  this.dept = dept || 'général'; // L'argument donné OU la valeur par défaut
+}
+ +
// Java
+public class Employee {
+  public String name;
+  public String dept;
+  // On assigne les valeurs par défaut aux propriétés
+  public Employee () {
+    this("", "général");
+  }
+  // On assigne une valeur donnée et une par défaut aux propriétés
+  public Employee (String name) {
+    this(name, "général");
+  }
+  // On assigne les deux arguments donnés aux propriétés
+  public Employee (String name, String dept) {
+    this.name = name;
+    this.dept = dept;
+  }
+}
+ +
// JavaScript
+function WorkerBee(projs) {
+  this.projects = projs || []; // L'argument donné OU la valeur par défaut
+}
+WorkerBee.prototype = new Employee;
+ +
// Java
+public class WorkerBee extends Employee {
+   public String[] projects;
+   // On assigne une valeur par défaut à la propriété
+   public WorkerBee () {
+      this(new String[0]);
+   }
+   // On assigne l'argument donné à la propriété
+   public WorkerBee (String[] projs) {
+      projects = projs;
+   }
+}
+ +
// JavaScript
+function Engineer(mach) {
+  this.dept = 'engineering'; // On réécrit la valeur de « dept »
+  this.machine = mach || ''; // L'argument donné OU la valeur par défaut
+}
+Engineer.prototype = new WorkerBee;
+ +
// Java
+public class Engineer extends WorkerBee {
+   public String machine;
+   public Engineer () {
+      dept = "engineering"; // On réécrit la valeur de « dept »
+      machine = ""; // On assigne une valeur par défaut à la propriété
+   }
+   public Engineer (String mach) {
+      dept = "engineering"; // On réécrit la valeur de « dept »
+      machine = mach; // On assigne l'argument donné à la propriété
+   }
+}
+ +

Ces définitions JavaScript utilisent un idiome spécial pour définir les valeurs par défaut :

+ +
this.nom = nom || "";
+ +

L'opérateur logique OU de JavaScript (||) évalue son premier argument. Si cet argument se transforme en vrai, l'opérateur le retourne. Sinon, l'opérateur renvoie la valeur du deuxième argument. Par conséquent, cette ligne de code teste pour voir si name a une valeur utile pour la propriété name. Si c'est le cas, elle définit this.name à cette valeur. Sinon, elle définit this.name à la chaîne de caractères vide. Ce chapitre utilise cet idiome par souci de concision ; cependant, il peut être déroutant au premier abord.

+ +
+

Note : Cela peut ne pas fonctionner comme prévu si la fonction du constructeur est appelée avec des arguments qui se convertissent en false (comme 0 (zéro) et la chaîne vide ("")). Dans ce cas, la valeur par défaut sera choisie.

+
+ +

Avec ces définitions, lorsque vous créez une instance d'un objet, vous pouvez spécifier des valeurs pour les propriétés définies localement. Vous pouvez utiliser l'instruction suivante pour créer un nouvel Engineer :

+ +
let jane = new Engineer('belau');
+ +

Les propriétés de Jane sont maintenant :

+ +
jane.name == '';
+jane.dept == 'engineering';
+jane.projects == [];
+jane.machine == 'belau';
+ +

Remarquez qu'avec ces définitions, vous ne pouvez pas spécifier une valeur initiale pour une propriété héritée telle que name. Si vous voulez spécifier une valeur initiale pour les propriétés héritées en JavaScript, vous devez ajouter du code supplémentaire à la fonction du constructeur.

+ +

Jusqu'à présent, la fonction du constructeur a créé un objet générique, puis a spécifié les propriétés et valeurs locales du nouvel objet. Vous pouvez demander au constructeur d'ajouter d'autres propriétés en appelant directement la fonction du constructeur d'un objet situé plus haut dans la chaîne des prototypes. La figure suivante montre ces nouvelles définitions.

+ +

Spécifier des propriétés dans un constructeur, prise 2

+ +

Examinons l'une de ces définitions en détails. Voici la nouvelle définition pour le constructeur Engineer :

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'ingénierie', projs);
+  this.machine = mach || '';
+}
+ +

Supposons que vous créez un nouvel objet Engineer comme suit :

+ +
let jane = new Engineer('Jane Dupont', ['navigateur', 'javascript'], 'belau');
+
+ +

JavaScript suit les étapes suivantes :

+ +
    +
  1. L'opérateur new crée un objet générique et définit sa propriété __proto__ à Engineer.prototype.
  2. +
  3. L'opérateur new transmet le nouvel objet au constructeur Engineer comme valeur du mot clé this.
  4. +
  5. Le constructeur crée une nouvelle propriété appelée base pour cet objet et affecte la valeur du constructeur WorkerBee à la propriété base. Cela fait du constructeur WorkerBee une méthode de l'objet Engineer. Le nom de la propriété base n'est pas spécial. Vous pouvez utiliser n'importe quel nom de propriété légal ; base est évocateur de son but.
  6. +
  7. Le constructeur appelle la méthode base, en passant comme arguments deux des arguments passés au constructeur ("Jane Dupont" et ["navigateur", "javascript"]) et également la chaîne "ingénierie". L'utilisation explicite de "ingénierie" dans le constructeur indique que tous les objets Engineer ont la même valeur pour la propriété dept héritée, et cette valeur remplace la valeur héritée de Employee.
  8. +
  9. Parce que base est une méthode de Engineer, dans l'appel à base, JavaScript lie le mot-clé this à l'objet créé à l'étape 1. Ainsi, la fonction WorkerBee transmet à son tour les arguments "Jane Dupont" et "ingénierie" à la fonction du constructeur Employee. Au retour de la fonction du constructeur Employee, la fonction WorkerBee utilise l'argument restant pour définir la propriété projects.
  10. +
  11. Au retour de la méthode base, le constructeur Engineer initialise la propriété machine de l'objet à "belau".
  12. +
  13. Au retour du constructeur, JavaScript affecte le nouvel objet à la variable jane.
  14. +
+ +

Vous pourriez penser que, ayant appelé le constructeur WorkerBee à partir de l'intérieur du constructeur Engineer, vous avez mis en place l'héritage de manière appropriée pour les objets Engineer. Ce n'est pas le cas. L'appel du constructeur WorkerBee garantit qu'un objet Engineer commence avec les propriétés spécifiées dans toutes les fonctions des constructeurs qui sont appelées. Cependant, si vous ajoutez ultérieurement des propriétés aux prototypes Employee ou WorkerBee, ces propriétés ne sont pas héritées par l'objet Engineer. Par exemple, supposons que vous ayez les déclarations suivantes :

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'ingénierie', projs);
+  this.machine = mach || '';
+}
+
+let jane = new Engineer('Jane Dupont', ['navigateur', 'javascript'], 'belau');
+Employee.prototype.specialty = 'aucune';
+ +

L'objet jane n'hérite pas de la propriété specialty. Vous devez encore configurer explicitement le prototype pour assurer un héritage dynamique. Supposons plutôt que vous ayez ces déclarations :

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'ingénierie', projs);
+  this.machine = mach || '';
+}
+
+Engineer.prototype = new WorkerBee;
+let jane = new Engineer('Jane Dupont', ['navigateur', 'javascript'], 'belau');
+Employee.prototype.specialty = 'aucune';
+ +

Maintenant la valeur de la propriété jane de l'objet specialty est « aucune ».

+ +

Une autre façon d'hériter est d'utiliser les méthodes call() / apply(). Les méthodes ci-dessous sont équivalentes :

+ +
function Engineer(name, projs, mach) {
+  this.base = WorkerBee;
+  this.base(name, 'ingénierie', projs);
+  this.machine = mach || '';
+}
+ +
function Engineer(name, projs, mach) {
+  WorkerBee.call(this, name, 'ingénierie', projs);
+  this.machine = mach || '';
+}
+ +

L'utilisation de la méthode JavaScript call() rend une implémentation plus propre car base n'est plus nécessaire.

+ +

L'héritage des propriétés, revisité

+ +

Les sections précédentes ont décrit comment les constructeurs et prototypes JavaScript fournissent des hiérarchies et de l'héritage. Cette section aborde certaines subtilités qui n'étaient pas nécessairement apparentes dans les discussions précédentes.

+ +

Valeurs locales et valeurs héritées

+ +

Lorsque vous accédez à une propriété d'objet, JavaScript effectue les étapes suivantes, comme décrit précédemment dans ce chapitre :

+ +
    +
  1. Vérifiez si la valeur existe localement. Si c'est le cas, elle est retournée.
  2. +
  3. S'il n'y a pas de valeur locale, vérifiez la chaîne de prototypes (en utilisant la propriété __proto__).
  4. +
  5. Si un objet de la chaîne de prototypes possède une valeur pour la propriété spécifiée, renvoyer cette valeur.
  6. +
  7. Si aucune propriété de ce type n'est trouvée, l'objet ne possède pas cette propriété.
  8. +
+ +

Le résultat de ces étapes dépend de la façon dont vous définissez les choses en cours de route. L'exemple original avait ces définitions :

+ +
function Employee() {
+  this.name = '';
+  this.dept = 'général';
+}
+
+function WorkerBee() {
+  this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+ +

Avec ces définitions, supposons que vous créez amy comme une instance de WorkerBee avec l'instruction suivante :

+ +
let amy = new WorkerBee;
+ +

L'objet amy possède une propriété locale, projects. Les valeurs des propriétés name et dept ne sont pas locales à amy et héritent donc dans la propriété amy de l'objet __proto__. Ainsi, amy possède ces valeurs de propriétés :

+ +
amy.name == '';
+amy.dept == 'général';
+amy.projects == [];
+ +

Supposons maintenant que vous modifiez la valeur de la propriété name dans le prototype associé à Employee :

+ +
Employee.prototype.name = 'Inconnu·e';
+ +

À première vue, on pourrait s'attendre à ce que cette nouvelle valeur se propage vers le bas à toutes les instances de Employee. Cependant, ce n'est pas le cas.

+ +

Lorsque vous créez n'importe quelle instance de l'objet Employee, cette instance obtient une valeur locale pour la propriété name (la chaîne de caractères vide). Cela signifie que lorsque vous définissez le prototype de WorkerBee en créant un nouvel objet Employee, WorkerBee.prototype a une valeur locale pour la propriété name. Par conséquent, lorsque JavaScript recherche la propriété name de l'objet amy (une instance de WorkerBee), JavaScript trouve la valeur locale de cette propriété dans WorkerBee.prototype. Il ne cherche donc pas plus haut dans la chaîne jusqu'à Employee.prototype.

+ +

Si vous souhaitez modifier la valeur d'une propriété d'un objet au moment de l'exécution et que la nouvelle valeur soit héritée par tous les descendants de l'objet, vous ne pouvez pas définir la propriété dans la fonction du constructeur de l'objet. Vous devez plutôt l'ajouter au prototype associé au constructeur. Par exemple, supposons que vous remplaciez le code précédent par le suivant :

+ +
function Employee() {
+  this.dept = 'général'; // Notez que this.name (une variable locale) n'apparaît pas ici
+}
+Employee.prototype.name = ''; // Un seul exemplaire
+
+function WorkerBee() {
+  this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+
+let amy = new WorkerBee;
+
+Employee.prototype.name = 'Inconnu·e';
+ +

Dans ce cas, la propriété name de amy devient « Inconnu·e ».

+ +

Comme le montrent ces exemples, si vous souhaitez définir des valeurs par défaut pour les propriétés d'un objet et que vous voulez pouvoir modifier ces valeurs au moment de l'exécution, vous devez définir les propriétés dans le prototype du constructeur, et non dans la fonction du constructeur elle-même.

+ +

Déterminer les relations entre les instances

+ +

La recherche de propriétés en JavaScript s'effectue dans les propriétés propres d'un objet et, si le nom de la propriété n'est pas trouvé, elle s'effectue dans la propriété spéciale de l'objet __proto__. Cette opération se poursuit de manière récursive ; le processus est appelé « recherche dans la chaîne des prototypes ».

+ +

La propriété spéciale __proto__ est définie lorsqu'un objet est construit ; elle prend la valeur de la propriété prototype du constructeur. Ainsi, l'expression new Riri() crée un objet avec __proto__ == Riri.prototype. Par conséquent, les modifications apportées aux propriétés de Riri.prototype modifient la recherche de propriétés pour tous les objets qui ont été créés par new Riri().

+ +

Chaque objet a une propriété __proto__ (sauf Object) ; chaque fonction a une propriété prototype. Les objets peuvent donc être liés par « héritage de prototype » à d'autres objets. Vous pouvez tester l'héritage en comparant le __proto__ d'un objet avec l'objet prototype d'une fonction. JavaScript fournit un raccourci : l'opérateur instanceof teste un objet par rapport à une fonction et renvoie vrai si l'objet hérite du prototype de la fonction. Par exemple,

+ +
let f = new Riri();
+let isTrue = (f instanceof Riri);
+ +

Pour un exemple plus détaillé, supposons que vous ayez le même ensemble de définitions que celui présenté dans Héritage des propriétés. Créez un objet Engineer comme suit :

+ +
let chris = new Engineer('Chris Anthème', ['jsd'], 'fiji');
+ +

Avec cet objet, les affirmations suivantes sont toutes vraies :

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

Compte tenu de cela, vous pourriez écrire une fonction instanceOf comme suit :

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

Note : L'implémentation ci-dessus vérifie le type de l'objet par rapport à « xml » afin de contourner une bizarrerie de la façon dont les objets XML sont représentés dans les versions récentes de JavaScript. Voir bug 634150 si vous voulez connaître les détails.

+
+ +

En utilisant la fonction instanceOf définie ci-dessus, ces expressions sont vraies :

+ +
instanceOf(chris, Engineer)
+instanceOf(chris, WorkerBee)
+instanceOf(chris, Employee)
+instanceOf(chris, Object)
+ +

Mais l'expression suivante est fausse :

+ +
instanceOf(chris, SalesPerson)
+ +

Les informations globales dans les constructeurs

+ +

Lorsque vous créez des constructeurs, vous devez faire attention si vous définissez des informations globales dans le constructeur. Par exemple, supposons que vous souhaitez qu'un identifiant unique soit automatiquement attribué à chaque nouvel employé. Vous pourriez utiliser la définition suivante pour Employee :

+ +
let idCounter = 1; // On définit un compteur d'identifiant
+
+function Employee(name, dept) {
+  this.name = name || '';
+  this.dept = dept || 'général';
+  this.id = idCounter++; // On assigne la valeur et on incrémente le compteur
+}
+ +

Avec cette définition, lorsque vous créez un nouvel Employee, le constructeur lui attribue l'ID suivant dans la séquence, puis incrémente le compteur d'ID global. Ainsi, si votre déclaration est la suivante, victoria.id vaut 1 et harry.id vaut 2 :

+ +
let victoria = new Employee('Victoria Lamar', 'pubs');
+let harry = new Employee('Harry Stocrate', 'ventes');
+ +

À première vue, cela semble correct. Cependant, idCounter est incrémenté à chaque fois qu'un objet Employee est créé, pour quelque raison que ce soit. Si vous créez toute la hiérarchie Employee présentée dans ce chapitre, le constructeur Employee est appelé chaque fois que vous mettez en place un prototype. Supposons que vous ayez le code suivant :

+ +
let idCounter = 1;
+
+function Employee(name, dept) {
+  this.name = name || '';
+  this.dept = dept || 'général';
+  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;
+
+let mac = new Engineer('Mac Fly');
+ +

Supposons en outre que les définitions omises ici possèdent la propriété base et appellent le constructeur situé au-dessus d'elles dans la chaîne des prototypes. Dans ce cas, au moment où l'objet mac est créé, mac.id est 5.

+ +

Selon l'application, il peut être important ou non que le compteur ait été incrémenté ces fois supplémentaires. Si vous vous souciez de la valeur exacte de ce compteur, une solution possible consiste à utiliser plutôt le constructeur suivant :

+ +
function Employee(name, dept) {
+  this.name = name || '';
+  this.dept = dept || 'general';
+  // Ceci est une écriture raccourcie de l'opérateur if
+  // Si « name » est défini, alors on assigne et on incrémente
+  if (name) {
+    this.id = idCounter++;
+  }
+}
+
+ +

Lorsque vous créez une instance de Employee pour l'utiliser comme prototype, vous ne fournissez pas d'arguments au constructeur. En utilisant cette définition du constructeur, lorsque vous ne fournissez pas d'arguments, le constructeur n'attribue pas de valeur à l'id et ne met pas à jour le compteur. Par conséquent, pour qu'un Employee obtienne un id, vous devez spécifier un nom pour l'employé. Dans cet exemple, mac.id serait 1.

+ +

Vous pouvez également créer une copie de l'objet prototype de l'employé pour l'affecter à WorkerBee :

+ +
WorkerBee.prototype = Object.create(Employee.prototype);
+// au lieu de WorkerBee.prototype = new Employee
+ +

Pas d'héritage multiple

+ +

Certains langages orientés objets permettent l'héritage multiple. C'est-à-dire qu'un objet peut hériter des propriétés et des valeurs d'objets parents non apparentés. JavaScript ne prend pas en charge l'héritage multiple.

+ +

L'héritage des valeurs des propriétés se produit au moment de l'exécution, lorsque JavaScript recherche une valeur dans la chaîne de prototypes d'un objet. Comme un objet n'a qu'un seul prototype associé, JavaScript ne peut pas hériter dynamiquement de plus d'une chaîne de prototypes.

+ +

En JavaScript, vous pouvez faire en sorte qu'une fonction de construction appelle plusieurs autres fonctions de construction en son sein. Cela donne l'illusion d'un héritage multiple. Par exemple, considérez les déclarations suivantes :

+ +
function Hobbyist(hobby) {
+  this.hobby = hobby || 'plongée';
+}
+
+function Engineer(name, projs, mach, hobby) {
+  this.base1 = WorkerBee;
+  this.base1(name, 'ingénierie', projs);
+  this.base2 = Hobbyist;
+  this.base2(hobby);
+  this.machine = mach || '';
+}
+Engineer.prototype = new WorkerBee;
+
+let dennis = new Engineer('Dennis Ah', ['collaborateur'], 'hugo');
+
+ +

Supposons en outre que la définition de WorkerBee soit celle utilisée précédemment dans ce chapitre. Dans ce cas, l'objet dennis possède ces propriétés :

+ +
dennis.name == 'Dennis Ah';
+dennis.dept == 'ingénierie';
+dennis.projects == ['collaborateur'];
+dennis.machine == 'hugo';
+dennis.hobby == 'plongée';
+ +

Donc dennis obtient bien la propriété hobby du constructeur Hobbyist. Cependant, supposons que vous ajoutez ensuite une propriété au prototype du constructeur Hobbyist :

+ +
Hobbyist.prototype.equipment = ['masque', 'palmes', 'régulateur', 'bcd'];
+ +

L'objet dennis n'héritera pas de cette nouvelle propriété.

+ +
{{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Using_promises")}}
diff --git a/files/fr/web/javascript/guide/expressions_and_operators/index.html b/files/fr/web/javascript/guide/expressions_and_operators/index.html deleted file mode 100644 index d9837ef8e4..0000000000 --- a/files/fr/web/javascript/guide/expressions_and_operators/index.html +++ /dev/null @@ -1,935 +0,0 @@ ---- -title: Expressions et opérateurs -slug: Web/JavaScript/Guide/Expressions_and_Operators -tags: - - Débutant - - Expressions - - Guide - - JavaScript - - Operators -translation_of: Web/JavaScript/Guide/Expressions_and_Operators -original_slug: Web/JavaScript/Guide/Expressions_et_Opérateurs ---- -

{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Fonctions", "Web/JavaScript/Guide/Nombres_et_dates")}}

- -

Ce chapitre décrit les expressions et les opérateurs en JavaScript, il inclut des notions sur les opérateurs d'affectation, de comparaison, les opérateurs arithmétiques, binaires, logiques, ceux qui s'appliquent sur les chaînes de caractères ainsi que les opérateurs spéciaux.

- -

Une liste complète et détaillée des opérateurs JavaScript est disponible dans la référence JavaScript.

- -

Opérateurs

- -

JavaScript possède différents types d'opérateurs. Cette section décrit les opérateurs et certaines informations sur les priorités entre opérateurs.

- - - -

JavaScript utilise des opérateurs binaires et unaires, ainsi qu'un opérateur ternaire spécial (l'opérateur conditionnel). Un opérateur binaire utilise deux opérandes, un précédant l'opérateur et un lui succédant :

- -
opérande1 opérateur opérande2
-
- -

Par exemple : « 3+4 » ou « x*y ».

- -

Un opérateur unaire ne nécessite qu'un opérande, avant ou après l'opérateur :

- -
opérateur opérande
- -

ou

- -
opérande opérateur
- -

Comme « x++ » ou « ++x ».

- -

Opérateurs d'affectation

- -

Un opérateur d'affectation assigne une valeur à son opérande gauche, valeur basée sur celle de l'opérande droit. L'opérateur d'affectation simple est le signe égal (=), il assigne la valeur de l'opérande droit à l'opérande gauche. Autrement dit, avec « x = y » on affecte la valeur y à x.

- -

D'autres opérateurs d'affectation sont des raccourcis correspondant à certaines opérations composées, ils sont énumérés dans le tableau qui suit :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Opérateurs d'affectation
NomOpérateur composéSignification
Affectationx = yx = y
Affectation après additionx += yx = x + y
Affectation après soustractionx -= yx = x - y
Affectation après multiplicationx *= yx = x * y
Affectation après divisionx /= yx = x / y
Affectation du restex %= yx = x % y
Affectation après exponentiation{{experimental_inline}}x **=yx = x ** y
Affectation après décalage à gauchex <<= yx = x << y
Affectation après décalage à droitex >>= yx = x >> y
Affectation après décalage à droite non signéx >>>= yx = x >>> y
Affectation après ET binairex &= yx = x & y
Affectation après OU exclusif binairex ^= yx = x ^ y
Affectation après OU binairex |= yx = x | y
- -

Décomposition

- -

Lors d'affectations plus complexes, on peut utiliser l'affectation par décomposition. C'est une expression qui permet d'extraire des données depuis des tableaux ou des objets avec une syntaxe symétrique de littéraux de tableaux ou d'objets pour affecter des variables.

- -
var toto = ["un", "deux", "trois"];
-
-// sans décomposition
-var un = toto[0];
-var deux = toto[1];
-var trois = toto[2];
-
-// avec la décomposition
-var [un, deux, trois] = toto;
- -

Opérateurs de comparaison

- -

Un opérateur de comparaison compare ses deux opérandes et renvoie un valeur booléenne correspondant au résultat de la comparaison (vraie ou fausse). Les opérandes peuvent être des nombres, des chaînes de caractères, des booléens ou des objets. Les chaînes de caractères sont comparées selon l'ordre lexicographique usuel en utilisant les valeurs Unicode. Dans la plupart des cas, si les deux opérandes ne sont pas du même type, JavaScript tentera de les convertir vers un type approprié. Cette méthode aboutira souvent à une comparaison numérique. Les seules exceptions à cette conversion implicite sont les opérateurs === et !== , qui testent des égalités et inégalités strictes. Ces opérateurs n'effectuent pas de conversion de type. Le tableau qui suit décrit les opérateurs de comparaisons relativement à ce fragment de code :

- -
var var1 = 3;
-var var2 = 4;
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Opérateurs de comparaison
OpérateurDescriptionExemples qui renvoient true
Égalité (==)Renvoie true si les opérandes sont égaux après conversion en valeurs de mêmes types.3 == var1 -

"3" == var1

- 3 == '3'
Inégalité (!=)Renvoie true si les opérandes sont différents.var1 != 4
- var2 != "3"
Égalité stricte (===)Renvoie true si les opérandes sont égaux et de même type. Voir {{jsxref("Object.is","Object.is()")}} et égalité de type en JavaScript.3 === var1
Inégalité stricte (!==)Renvoie true si les opérandes ne sont pas égaux ou s'ils ne sont pas de même type.var1 !== "3"
- 3 !== '3'
Supériorité stricte (>)Renvoie true si l'opérande gauche est supérieur (strictement) à l'opérande droit.var2 > var1
- "12" > 2
Supériorité ou égalité (>=)Renvoie true si l'opérande gauche est supérieur ou égal à l'opérande droit.var2 >= var1
- var1 >= 3
Infériorité stricte (<)Renvoie true si l'opérande gauche est inférieur (strictement) à l'opérande droit.var1 < var2
- "2" < "12"
Infériorité ou égalité (<=)Renvoie true si l'opérande gauche est inférieur ou égal à l'opérande droit.var1 <= var2
- var2 <= 5
- -
-

Note : => n'est pas un opérateur. Il s'agit de la notation utilisée pour les fonctions fléchées.

-
- -

Opérateurs arithmétiques

- -

Les opérateurs arithmétiques ont pour opérandes des valeurs numériques (des littéraux ou des variables) et renvoient une valeur numérique. Les opérateurs arithmétiques standards sont l'addition (+), la soustraction (-), la multiplication (*), et la division (/). Ces opérateurs fonctionnent comme pour la plupart des langages de programmation lorsqu'ils sont utilisés avec des nombres décimaux (on notera que la division par zéro a pour résultat {{jsxref("Infinity")}}). Ainsi :

- -
1 / 2; // 0.5
-1 / 2 == 1.0 / 2.0; // true
-
- -

En plus des opérations arithmétiques standards (+,-,*,/), JavaScript fournit également d'autres opérateurs arithmétiques, listés dans le tableau qui suit :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Opérateurs arithmétiques
OpérateurDescriptionExemple
Reste (%)
-  
Opérateur binaire. Renvoie le reste entier de la division entre les deux opérandes.12 % 5 renvoie 2.
Incrément (++)Opérateur unaire. Ajoute un à son opérande. S'il est utilisé en préfixe (++x), il renvoie la valeur de l'opérande après avoir ajouté un, s'il est utilisé comme opérateur de suffixe (x++), il renvoie la valeur de l'opérande avant d'ajouter un.Si x vaut 3, ++x incrémente x à 4 et renvoie 4, x++ renvoie 3 et seulement ensuite ajoute un à x.
Décrément (--)Opérateur unaire. Il soustrait un à son opérande. Il fonctionne de manière analogue à l'opérateur d'incrément.Si x vaut 3, --x décrémente x à 2 puis renvoie2, x-- renvoie 3 puis décrémente la valeur de x.
Négation unaire (-)Opérateur unaire. Renvoie la valeur opposée de l'opérande.Si x vaut 3, alors -x renvoie -3.
Plus unaire (+)Opérateur unaire. Si l'opérande n'est pas un nombre, il tente de le convertir en une valeur numérique. -

+"3" renvoie 3.

- -

+true renvoie 1.

-
Opérateur d'exponentiation (**) (puissance) {{experimental_inline}}Calcule un nombre (base) élevé à une puissance donnée (soit base^puissance) -

2 ** 3 renvoie 8

- -

10 ** -1 renvoie 0.1

-
- -

Opérateurs binaires

- -

Les opérateurs binaires voient leurs opérandes comme des ensembles de 32 bits (des zéros et des uns), et non pas comme des nombres décimaux, octaux ou hexadécimaux. Ainsi, le nombre décimal neuf aura une représentation binaire de 1001. Les opérateurs binaires effectuent des opérations sur des représentations binaires mais renvoies des valeurs numériques JavaScript standards.

- -

Le tableau qui suit résume les opérateurs binaires JavaScript :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Opérateurs binaires
OpérateurUtilisationDescription
AND (ET) binairea & bRenvoie un 1 à chaque position binaire pour laquelle les bits des deux opérandes sont à 1.
OR (OU) binairea | bRenvoie un zéro à chaque position binaire pour laquelle les bits des deux opérandes sont à 0.
XOR (OU exclusif) binairea ^ bRenvoie un zéro à chaque position binaire pour laquelle les bits sont les mêmes (et un 1 pour chacun des bits qui est différent).
NOT (NON) binaire~ aInverse les bits de l'opérande.
Décalage binaire à gauchea << bDécale la représentation binaire de b bits sur la gauche et complète avec des zéros à droite.
Décalage binaire à droitea >> bDécale la représentation binaire de b bits sur la droite en ignorant les bits perdus.
Décalage binaire à droite en complétant avec des zérosa >>> bDécale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche.
- -

Opérateurs binaires logiques

- -

Les opérateurs binaires logiques fonctionnent de cette façon :

- - - -

Le chiffre neuf est par exemple représenté comme 1001, et le nombre quinze comme 1111. Ainsi, quand les opérateurs binaires sont appliqués sur ces valeurs, on a les résultats qui suivent :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Exemples utilisant les opérateurs binaires
ExpressionRésultatDescription binaire
15 & 991111 & 1001 = 1001
15 | 9151111 | 1001 = 1111
15 ^ 961111 ^ 1001 = 0110
~15-16~00000000...00001111 = 11111111...11110000
~9-10~00000000...00001001 = 11111111...11110110
- -

Il faut remarquer que tous les bits sont échangés lorsque l'opérateur binaire NOT est utilisé. Il est donc utile de savoir que les valeurs dont le bit le plus fort (le plus à gauche) vaut 1 sont des nombres négatifs (représentation en complément à deux). L'évaluation de ~x aura le même résultat que l'évaluation de -x - 1.

- -

Opérateurs binaires de décalage

- -

Les opérateurs binaires de décalage utilisent deux opérandes : le premier indiquant la quantité à décaler et le second indiquant de combien de bits on décale le premier opérande. La direction du décalage est spécifiée grâce à l'opérateur.

- -

Les opérateurs binaires de décalage convertissent leurs opérandes en entiers sur 32 bits et renvoient un résultat dont le type est le même que l'opérande gauche.

- -

Les opérateurs de décalage sont énumérés dans le tableau qui suit.

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Opérateurs binaires de décalage
OpérateurDescriptionExemple
Décalage à gauche (<<)Cet opérateur décale le premier opérande d'un nombre de bits donné sur la gauche. Les bits en trop sont ignorés et des bits à zéro sont introduits à droite.9<<2 renvoie 36, car 1001, décalé de 2 bits à gauche, devient  100100, dont la représentation en base 10 est  36.
Décalage à droite avec propagation du signe (>>)Cet opérateur décale le premier opérande d'un nombre de bits donné sur la droite. Les bits en trop sont ignorés et des bits correspondants au bit de signe sont introduits à gauche.9>>2 renvoie 2, car 1001, décalé de 2 bits à droite, devient 10 représentant 2. De même  -9>>2 renvoie -3, car le signe est préservé.
Décalage à droite avec zéros (>>>)Cet opérateur décale le premier opérande d'un nombre de bits donné sur la droite. Les bits en trop sont ignorés et des bits à 0 sont introduits à gauche.19>>>2 renvoie 4, car 10011, décalé de 2 bits, devient 100 qui représente 4. Pour les nombres positifs, cet opérateur et l'opérateur précédent renvoient les mêmes résultats.
- -

Opérateurs logiques

- -

Les opérateurs logiques sont généralement utilisés avec des valeurs booléennes. Dans ce cas, il renvoient une valeur booléenne. Les opérateurs && et || renvoient en fait une valeurs d'un des opérandes et si ces opérateurs sont utilisés avec des valeurs non-booléennées, ils pourront renvoyer une valeur non-booléenne. Les opérateurs logiques sont décrits dans le tableau qui suit.

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Opérateurs logiques
OpérateurUsageDescription
ET logique (&&)expr1 && expr2Renvoie expr1 s'il peut être converti à false, sinon renvoie expr2. Dans le cas où on utilise des opérandes booléens, && renvoie true si les deux opérandes valent true, false sinon.
OU logique (||)expr1 || expr2Renvoie expr1 s'il peut être converti à true, sinon renvoie expr2. Dans le cas où on utilise des opérandes booléens, || renvoie true si l'un des opérandes vaut true, si les deux valent false, il renvoie false.
NON logique (!)!exprRenvoie false si son unique opérande peut être converti en true, sinon il renvoie true.
- -

Les exemples d'expressions qui peuvent être converties à false sont celles qui sont évaluées à null, 0, NaN, la chaîne de caractères vide (""), ou undefined.

- -

Le code qui suit montre des exemples de l'utilisation de l'opérateur logique ET (&&).

- -
var a1 =   true && true;     // t && t renvoie true
-var a2 =   true && false;    // t && f renvoie false
-var a3 =  false && true;     // f && t renvoie false
-var a4 =  false && (3 == 4); // f && f renvoie false
-var a5 = "Chat" && "Chien";  // t && t renvoie Chien
-var a6 =  false && "Chat";   // f && t renvoie false
-var a7 = "Chat" && false;    // t && f renvoie false
-
- -

Les exemples suivants montrent l'utilisation de l'opérateur logique OU (||).

- -
var o1 =   true || true;     // t || t renvoie true
-var o2 =  false || true;     // f || t renvoie true
-var o3 =   true || false;    // t || f renvoie true
-var o4 =  false || (3 == 4); // f || f renvoie false
-var o5 = "Chat" || "Chien";  // t || t renvoie Chat
-var o6 =  false || "Chat";   // f || t renvoie Chat
-var o7 = "Chat" || false;    // t || f renvoie Chat
-
- -

Les exemples suivants montrent l'utilisation de l'opérateur logique NON (!).

- -
var n1 = !true;   // !t renvoie false
-var n2 = !false;  // !f renvoie true
-var n3 = !"Chat"; // !t renvoie false
-
- -

Evaluation rapide

- -

Les expressions logiques sont évaluées de gauche à droite. Cette évaluation utilise des tests pour savoir s'il est possible d'utiliser des « raccourcis » correspondant aux règles suivantes :

- - - -

Les règles logiques garantissent la validité de ces évaluations, il faut noter que le second opérande n'est pas du tout évalué, empêchant ainsi les effets de bords cachés, liés à cette évaluation.

- -

Opérateurs de chaînes de caractères

- -

En plus des opérateurs de comparaisons qui peuvent être utilisés sur des chaînes de caractères, il existe l'opérateur de concaténation (+) permettant de concaténer deux chaînes de caractères. Le résultat de cette opération est la fusion des deux opérandes en une même chaîne de caractères. Ainsi :

- -
console.log("ma " + "chaîne"); // affichera "ma chaîne" dans la console
- -

L'opérateur court += peut également être utilisé pour concaténer des chaînes. Par exemple :

- -
var maChaîne = "alpha";
-maChaîne += "bet"; // l'expression sera évaluée en "alphabet"
-                   // et cette valeur sera affectée à maChaîne
- -

Opérateur conditionnel ternaire

- -

L'opérateur conditionnel est le seul opérateur JavaScript qui utilise trois opérandes. L'expression utilisant l'opérateur peut prendre une valeur parmi deux selon une condition donnée. Cet opérateur s'utilise avec la syntaxe suivante :

- -
condition ? val1 : val2
-
- -

Si condition vaut true, l'opérateur vaudra val1. Sinon il vaudra val2. Il est possible d'utiliser l'opérateur conditionnel aux mêmes endroits qu'un opérateur standard.

- -

On peut par exemple avoir :

- -
var statut = (âge >= 18) ? "adulte" : "mineur";
-
- -

Cette instruction assigne la valeur "adulte" à la variable status si la variable âge est supérieure ou égale à 18. Sinon, on lui affecte la valeur "mineur".

- -

La virgule comme opérateur

- -

L'opérateur virgule (,) évalue ses deux opérandes et renvoie la valeur du second opérande. Cet opérateur est principalement utilisé dans les boucles for pour permettre à plusieurs variables d'être modifiées à chaque itération de la boucle.

- -

Ainsi, si on a un tableau à 2 dimensions avec 10 lignes et colonnes, on peut utiliser la virgule comme opérateur pour incrémenter deux variables à la fois. Le code qui suit imprime les valeurs contenues sur la diagonale du tableau :

- -
var x = [0,1,2,3,4,5,6,7,8,9]
-var a = [x, x, x, x, x];
-
-for (var i = 0, j = 9; i <= j; i++, j--)
-  console.log("a[" + i + "][" + j + "]= " + a[i][j]);
-
- -

Opérateurs unaires

- -

delete

- -

L'opérateur delete supprime un objet, une propriété d'un objet ou un élément d'un tableau à partir de sa position dans le tableau. La syntaxe de cet opérateur est la suivante :

- -
delete monObjet;
-delete monObjet.propriété;
-delete monObjet[index];
-delete propriété; // uniquement valide au sein d'une instruction with
-
- -

où on a monObjet qui est le nom de l'objet, propriété qui est une propriété existante et index un entier indiquant la position d'un élément dans un tableau.

- -

La quatrième instruction n'est valide qu'au sein d'une instruction with et permet de supprimer une propriété d'un objet.

- -

Il est possible d'utiliser l'opérateur delete pour supprimer les variables déclarées implicitement mais pas celles déclarées avec var. Si l'opérateur fonctionne correctement, il change la propriété ou l'élément vers la valeur undefined. L'opérateur delete renvoie true si l'opération de suppression est possible, false sinon.

- -
x = 42;
-var y = 43;
-monobj = new Number();
-monobj.h = 4;    // création de la propriété h
-delete x;        // renvoie true (suppression possible si déclaration implicite)
-delete y;        // renvoie false (suppression impossible si déclaration avec var si la variable n'est pas une propriété)
-delete Math.PI;  // renvoie false (suppression impossible pour les propriétés pré-définies)
-delete monobj.h; // renvoie true (suppression possible des propriétés définies par l'utilisateur)
-delete monobj;   // renvoie true (suppression possible si déclaration implicite)
-
- -
Suppression d'éléments d'un tableau
- -

Lorsqu'on supprime un élément d'un tableau, la longueur du tableau n'est pas modifiée. Ainsi, si on supprime a[3], a[4] restera a[4] (même position et valeur) alors que a[3] sera undefined.

- -

Lorsque l'opérateur delete supprime un élément d'un tableau, cet élément n'appartient plus au tableau. Dans l'exemple qui suit, arbres[3] est supprimé mais il est toujours accessible et renvoie undefined.

- -
var arbres = new Array("sequoia", "laurier", "cèdre", "chêne", "érable");
-delete arbres[3];
-if (3 in arbres) {
-  // Ceci ne sera pas exécuté
-}
-
- -

Pour qu'un élément continue à exister mais qu'il vaille undefined, on utilisera le mot-clé undefined plutôt que l'opérateur delete. Dans l'exemple qui suit, arbres[3] est modifié pour valoir undefined et l'élément du tableau continue à exister :

- -
var arbres = new Array("sequoia", "laurier", "cèdre", "chêne", "érable");
-arbres[3] = undefined;
-if (3 in arbres) {
-  // Ceci sera exécuté
-}
-
- -

typeof

- -

L'opérateur typeof peut être utilisé de deux façons distinctes :

- -
    -
  1. -
    typeof opérande
    -
  2. -
  3. -
    typeof (opérande)
    -
    -
  4. -
- -

L'opérateur typeof renvoie une chaîne de caractères indiquant le type de l'opérande (qui n'est pas évalué). opérande correspond à la chaîne de caractère, la variable, le mot-clé ou l'objet dont on souhaite renvoyer le type. L'utilisation des parenthèses est facultative.

- -

Soient les définitions de variables suivantes :

- -
var maFonction = new Function("5 + 2");
-var forme = "round";
-var taille = 1;
-var toto = ["Pomme", "Poire", "Orange"];
-var jour = new Date();
-
- -

L'opérateur typeof renverra les résultats suivants :

- -
typeof maFonction; // renvoie "function"
-typeof forme;      // renvoie "string"
-typeof taille;     // renvoie "number"
-typeof toto;       // renvoie "object"
-typeof jour;       // renvoie "object"
-typeof inexistant; // renvoie "undefined"
-
- -

En ce qui concerne les mots-clés true et null, l'opérateur typeof renvoie les résultats suivants :

- -
typeof true; // renvoie "boolean"
-typeof null; // renvoie "object"
-
- -

Pour une chaîne de caractères ou un nombre, typeof renvoie les résultats suivants :

- -
typeof 62;            // renvoie "number"
-typeof 'Hello world'; // renvoie "string"
-
- -

L'opérateur typeof, lorsqu'il est utilisé avec des propriétés, renvoie le type de valeur contenue dans la propriété :

- -
typeof document.lastModified; // renvoie "string"
-typeof window.length;         // renvoie "number"
-typeof Math.LN2;              // renvoie "number"
-
- -

Pour les méthodes et les fonctions, l'opérateur typeof renvoie les résultats suivants :

- -
typeof blur;        // renvoie "function"
-typeof eval;        // renvoie "function"
-typeof parseInt;    // renvoie "function"
-typeof shape.split; // renvoie "function"
-
- -

Pour les objets pré-définis, l'opérateur typeof fonctionne ainsi :

- -
typeof Date;     // renvoie "function"
-typeof Function; // renvoie "function"
-typeof Math;     // renvoie "object"
-typeof Option;   // renvoie "function"
-typeof String;   // renvoie "function"
-
- -

void

- -

L'opérateur void peut être utilisé de deux façons :

- -
    -
  1. -
    void (expression)
    -
    -
  2. -
  3. -
    void expression
    -
    -
  4. -
- -

L'opérateur void indique qu'une expression doit être évaluée sans retourner de valeur. expression étant une expression JavaScript à évaluer. Les parenthèses sont facultatives mais les utiliser permet d'avoir une meilleur lisibilité du code.

- -

L'opérateur void peut être utilisé pour spécifier une expression comme un lien hypertexte, l'expression est évaluée mais n'est pas chargée à la place du document actuel.

- -

Le fragment de code  qui suit crée un lien hypertexte qui ne fait rien lorsque l'utilisateur clique dessus. Lorsqu'on clique sur le lien, void(0) est évalué à undefined, n'ayant aucun effet.

- -
<A HREF="javascript:void(0)">Cliquer ici pour ne rien faire</A>
-
- -

Le code suivant crée un lien hypertexte qui envoie un formulaire lorsque l'utilisateur clique dessus.

- -
<A HREF="javascript:void(document.form.submit())">
-Cliquer ici pour envoyer</A>
- -

Opérateurs relationnels

- -

Un opérateur relationnel compare ses opérandes et renvoie une valeur booléenne selon que le résultat de la comparaison est vrai ou faux.

- -

in

- -

L'opérateur in renvoie true si la propriété indiquée fait partie de l'objet donné. Cet opérateur s'utilise avec la syntaxe suivante :

- -
nomOuNumeroPropriete in monObjet
-
- -

avec nomOuNumeroPropriete qui est une chaîne de caractères, une expression numérique ou un symbole correspondant au nom d'une propriété ou un indice de tableau, monObjet est le nom d'un objet.

- -

Les exemples qui suivent utilisent cet opérateur in.

- -
// Tableaux
-var arbres = new Array("sequoia", "laurier", "cèdre", "chêne", "érable");
-0 in arbres;         // renvoie true
-3 in arbres;         // renvoie true
-6 in arbres;         // renvoie false
-"laurier" in arbres; // renvoie false (l'opérateur se base sur l'indice et pas
-                     // sur la valeur)
-"length" in arbres;  // renvoie true (length est une propriété d'un objet Array)
-
-// Objets pré-définis
-"PI" in Math;         // renvoie true
-var myString = new String("coral");
-"length" in myString; // renvoie true
-
-// Objets définis par l'utilisateur
-var maVoiture = {fabricant: "Honda", modèle: "Accord", year: 1998};
-"fabricant" in maVoiture; // renvoie true
-"modèle" in maVoiture;    // renvoie true
-
- -

instanceof

- -

L'opérateur instanceof renvoie true si l'objet donné est du type spécifié. Cet opérateur s'utilise avec la syntaxe suivante :

- -
nomObjet instanceof typeObjet
-
- -

avec nomObjet qui est le nom de l'objet dont on souhaite comparer le type à typeObjet, typeObjet étant un type d'objet tel que {{jsxref("Date")}} ou {{jsxref("Array")}}.

- -

instanceof peut être utilisé pour confirmer le type d'un objet pendant l'exécution. Ainsi, on peut gérer les exceptions en prévoyant différents cas pour différents types d'exception éventuellement levées.

- -

Dans l'exemple qui suit, le code utilise l'opérateur instanceof afin de déterminer si jour est un objet Date. C'est le cas, les instructions contenues dans le bloc après l'instruction if sont donc exécutées.

- -
var jour = new Date(2007, 01, 22);
-if (jour instanceof Date) {
-  // instructions à exécuter
-}
-
- -

Précédence des opérateurs

- -

La précédence des opérateurs indique l'ordre dans lequel ils sont appliqués lors de l'évaluation d'une expression. L'utilisation de parenthèses permet de surcharger la relation de précédence.

- -

Le tableau qui suit décrit les précédences des opérateurs, dans l'ordre décroissant.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Précédence des opérateurs
Type d'opérateurOpérateurs individuels
membre. []
appel/création d'instance() new
négation/incrémentation! ~ - + ++ -- typeof void delete
multiplication/division* / %
addition/soustraction+ -
décalage binaire<< >> >>>
relationnel< <= > >= in instanceof
égalité== != === !==
ET binaire&
OU exclusif binaire^
OU binaire|
ET logique&&
OU logique||
conditionnel?:
assignation= += -= *= /= %= <<= >>= >>>= &= ^= |=
virgule,
- -

Une version plus détaillée de cette table peut être trouvée dans la référence JavaScript.

- -

Expressions

- -

Un expression correspond à une unité de code valide qui est résolue en une valeur.

- -

D'un point de vue syntaxique, toute expression valide se résout en une valeur. D'un point de vue conceptuel cependant, il y a deux types d'expressions : celles avec des effets de bord (qui, par exemple, affectent une valeur à une variable) et celles qui, d'une certaine façon, sont évaluées et sont résolues en une valeur.

- -

L'expression x = 7 affecte une valeur (premier type). Dans celle-ci, on utilise l'opérateur = pour affecter la valeur 7 à la variable x. L'expression elle-même est évaluée à 7.

- -

Le code 3 + 4 correspond au second type d'expression. On utilise ici l'opérateur + pour ajouter trois à quatre sans affecter le résultat (7) à une variable.

- -

Les expressions JavaScript peuvent être rangées selon différentes catégories :

- - - -

Expressions primaires

- -

Ces expressions correspondent aux mots-clés et aux expressions générales en JavaScript.

- -

this

- -

Le mot-clé this permet de faire référence à l'objet courant. En général, on l'utilise au sein d'une méthode pour faire référence à l'objet qui a utilisé la méthode. Il s'utilise de cette façon :

- -
this["nomPropriété"]
-this.nomPropriété
- -

Soit une fonction qui valide un objet si sa propriété value est comprise entre deux valeurs :

- -
function valide(obj, valMin, valMax){
-  if ((obj.value < valMin) || (obj.value > valMax))
-    console.log("Valeur incorrecte !");
-}
-
- -

Il est possible d'appeler valide pour chaque gestionnaire d'événement onChange des éléments du formulaire, et d'utiliser le mot-clé this pour passer l'élément même en argument :

- -
<p>Entrez un nombre entre 18 et 99 :</p>
-<input type="text" nom="age" size=3 onChange="valide(this, 18, 99);">
-
- -

Opérateur de groupement

- -

L'opérateur de groupement ( ) permet de contrôler la précédence de l'évaluation dans les expressions. On peut ainsi forcer l'évaluation d'une addition avant l'évaluation d'une multiplication ou d'une division.

- -
var a = 1;
-var b = 2;
-var c = 3;
-
-// précédence par défaut
-a + b * c;   // 7
-// ce qui correspond à :
-a + (b * c); // 7
-
-// on peut utiliser l'opérateur
-// pour effectuer l'addition en premier
-(a + b) * c;   // 9
-
-// ce qui équivaut à :
-a * c + b * c; // 9
-
- -

Expressions vers la gauche

- -

Les valeurs à gauches de ces expressions sont la cible d'une affectation.

- -

new

- -

L'opérateur new permet de créer une instance d'un objet défini par l'utilisateur ou d'un objet dont le type est un des types d'objets natifs. Cet opérateur utilise la syntaxe suivante :

- -
var nomObjet = new typeObjet([param1, param2, ..., paramN]);
-
- -

super

- -

Le mot-clé super est utilisé afin d'appeler des fonctions disponibles sur un objet parent. Il peut notamment être utilisé avec les classes pour appeler le constructeur parent.

- -
super([arguments]); // invoque le constructeur parent
-super.functionParent([arguments]);
-
- -

Opérateur de décomposition

- -

L'opérateur de décomposition permet de développer une expression là où plusieurs argument (pour les appels de fonction) ou plusieurs éléments (pour les littéraux de tableaux) sont attendus.

- -

Par exemple, si on a tableau et qu'on souhaite créer un nouveau tableau qui contient l'ancien, on peut soit utiliser une combinaison des méthodes push, splice, concat, soit utiliser la syntaxe de décomposition qui s'avère plus concise :

- -
var parts = ['shoulders', 'knees'];
-var lyrics = ['head', ...parts, 'and', 'toes'];
- -

L'opérateur de décomposition fonctionne de façon semblable avec les appels de fonction :

- -
function f(x, y, z) { }
-var args = [0, 1, 2];
-f(...args);
- -

{{PreviousNext("Web/JavaScript/Guide/Fonctions", "Web/JavaScript/Guide/Nombres_et_dates")}}

diff --git a/files/fr/web/javascript/guide/expressions_and_operators/index.md b/files/fr/web/javascript/guide/expressions_and_operators/index.md new file mode 100644 index 0000000000..d9837ef8e4 --- /dev/null +++ b/files/fr/web/javascript/guide/expressions_and_operators/index.md @@ -0,0 +1,935 @@ +--- +title: Expressions et opérateurs +slug: Web/JavaScript/Guide/Expressions_and_Operators +tags: + - Débutant + - Expressions + - Guide + - JavaScript + - Operators +translation_of: Web/JavaScript/Guide/Expressions_and_Operators +original_slug: Web/JavaScript/Guide/Expressions_et_Opérateurs +--- +

{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Fonctions", "Web/JavaScript/Guide/Nombres_et_dates")}}

+ +

Ce chapitre décrit les expressions et les opérateurs en JavaScript, il inclut des notions sur les opérateurs d'affectation, de comparaison, les opérateurs arithmétiques, binaires, logiques, ceux qui s'appliquent sur les chaînes de caractères ainsi que les opérateurs spéciaux.

+ +

Une liste complète et détaillée des opérateurs JavaScript est disponible dans la référence JavaScript.

+ +

Opérateurs

+ +

JavaScript possède différents types d'opérateurs. Cette section décrit les opérateurs et certaines informations sur les priorités entre opérateurs.

+ + + +

JavaScript utilise des opérateurs binaires et unaires, ainsi qu'un opérateur ternaire spécial (l'opérateur conditionnel). Un opérateur binaire utilise deux opérandes, un précédant l'opérateur et un lui succédant :

+ +
opérande1 opérateur opérande2
+
+ +

Par exemple : « 3+4 » ou « x*y ».

+ +

Un opérateur unaire ne nécessite qu'un opérande, avant ou après l'opérateur :

+ +
opérateur opérande
+ +

ou

+ +
opérande opérateur
+ +

Comme « x++ » ou « ++x ».

+ +

Opérateurs d'affectation

+ +

Un opérateur d'affectation assigne une valeur à son opérande gauche, valeur basée sur celle de l'opérande droit. L'opérateur d'affectation simple est le signe égal (=), il assigne la valeur de l'opérande droit à l'opérande gauche. Autrement dit, avec « x = y » on affecte la valeur y à x.

+ +

D'autres opérateurs d'affectation sont des raccourcis correspondant à certaines opérations composées, ils sont énumérés dans le tableau qui suit :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opérateurs d'affectation
NomOpérateur composéSignification
Affectationx = yx = y
Affectation après additionx += yx = x + y
Affectation après soustractionx -= yx = x - y
Affectation après multiplicationx *= yx = x * y
Affectation après divisionx /= yx = x / y
Affectation du restex %= yx = x % y
Affectation après exponentiation{{experimental_inline}}x **=yx = x ** y
Affectation après décalage à gauchex <<= yx = x << y
Affectation après décalage à droitex >>= yx = x >> y
Affectation après décalage à droite non signéx >>>= yx = x >>> y
Affectation après ET binairex &= yx = x & y
Affectation après OU exclusif binairex ^= yx = x ^ y
Affectation après OU binairex |= yx = x | y
+ +

Décomposition

+ +

Lors d'affectations plus complexes, on peut utiliser l'affectation par décomposition. C'est une expression qui permet d'extraire des données depuis des tableaux ou des objets avec une syntaxe symétrique de littéraux de tableaux ou d'objets pour affecter des variables.

+ +
var toto = ["un", "deux", "trois"];
+
+// sans décomposition
+var un = toto[0];
+var deux = toto[1];
+var trois = toto[2];
+
+// avec la décomposition
+var [un, deux, trois] = toto;
+ +

Opérateurs de comparaison

+ +

Un opérateur de comparaison compare ses deux opérandes et renvoie un valeur booléenne correspondant au résultat de la comparaison (vraie ou fausse). Les opérandes peuvent être des nombres, des chaînes de caractères, des booléens ou des objets. Les chaînes de caractères sont comparées selon l'ordre lexicographique usuel en utilisant les valeurs Unicode. Dans la plupart des cas, si les deux opérandes ne sont pas du même type, JavaScript tentera de les convertir vers un type approprié. Cette méthode aboutira souvent à une comparaison numérique. Les seules exceptions à cette conversion implicite sont les opérateurs === et !== , qui testent des égalités et inégalités strictes. Ces opérateurs n'effectuent pas de conversion de type. Le tableau qui suit décrit les opérateurs de comparaisons relativement à ce fragment de code :

+ +
var var1 = 3;
+var var2 = 4;
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opérateurs de comparaison
OpérateurDescriptionExemples qui renvoient true
Égalité (==)Renvoie true si les opérandes sont égaux après conversion en valeurs de mêmes types.3 == var1 +

"3" == var1

+ 3 == '3'
Inégalité (!=)Renvoie true si les opérandes sont différents.var1 != 4
+ var2 != "3"
Égalité stricte (===)Renvoie true si les opérandes sont égaux et de même type. Voir {{jsxref("Object.is","Object.is()")}} et égalité de type en JavaScript.3 === var1
Inégalité stricte (!==)Renvoie true si les opérandes ne sont pas égaux ou s'ils ne sont pas de même type.var1 !== "3"
+ 3 !== '3'
Supériorité stricte (>)Renvoie true si l'opérande gauche est supérieur (strictement) à l'opérande droit.var2 > var1
+ "12" > 2
Supériorité ou égalité (>=)Renvoie true si l'opérande gauche est supérieur ou égal à l'opérande droit.var2 >= var1
+ var1 >= 3
Infériorité stricte (<)Renvoie true si l'opérande gauche est inférieur (strictement) à l'opérande droit.var1 < var2
+ "2" < "12"
Infériorité ou égalité (<=)Renvoie true si l'opérande gauche est inférieur ou égal à l'opérande droit.var1 <= var2
+ var2 <= 5
+ +
+

Note : => n'est pas un opérateur. Il s'agit de la notation utilisée pour les fonctions fléchées.

+
+ +

Opérateurs arithmétiques

+ +

Les opérateurs arithmétiques ont pour opérandes des valeurs numériques (des littéraux ou des variables) et renvoient une valeur numérique. Les opérateurs arithmétiques standards sont l'addition (+), la soustraction (-), la multiplication (*), et la division (/). Ces opérateurs fonctionnent comme pour la plupart des langages de programmation lorsqu'ils sont utilisés avec des nombres décimaux (on notera que la division par zéro a pour résultat {{jsxref("Infinity")}}). Ainsi :

+ +
1 / 2; // 0.5
+1 / 2 == 1.0 / 2.0; // true
+
+ +

En plus des opérations arithmétiques standards (+,-,*,/), JavaScript fournit également d'autres opérateurs arithmétiques, listés dans le tableau qui suit :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opérateurs arithmétiques
OpérateurDescriptionExemple
Reste (%)
+  
Opérateur binaire. Renvoie le reste entier de la division entre les deux opérandes.12 % 5 renvoie 2.
Incrément (++)Opérateur unaire. Ajoute un à son opérande. S'il est utilisé en préfixe (++x), il renvoie la valeur de l'opérande après avoir ajouté un, s'il est utilisé comme opérateur de suffixe (x++), il renvoie la valeur de l'opérande avant d'ajouter un.Si x vaut 3, ++x incrémente x à 4 et renvoie 4, x++ renvoie 3 et seulement ensuite ajoute un à x.
Décrément (--)Opérateur unaire. Il soustrait un à son opérande. Il fonctionne de manière analogue à l'opérateur d'incrément.Si x vaut 3, --x décrémente x à 2 puis renvoie2, x-- renvoie 3 puis décrémente la valeur de x.
Négation unaire (-)Opérateur unaire. Renvoie la valeur opposée de l'opérande.Si x vaut 3, alors -x renvoie -3.
Plus unaire (+)Opérateur unaire. Si l'opérande n'est pas un nombre, il tente de le convertir en une valeur numérique. +

+"3" renvoie 3.

+ +

+true renvoie 1.

+
Opérateur d'exponentiation (**) (puissance) {{experimental_inline}}Calcule un nombre (base) élevé à une puissance donnée (soit base^puissance) +

2 ** 3 renvoie 8

+ +

10 ** -1 renvoie 0.1

+
+ +

Opérateurs binaires

+ +

Les opérateurs binaires voient leurs opérandes comme des ensembles de 32 bits (des zéros et des uns), et non pas comme des nombres décimaux, octaux ou hexadécimaux. Ainsi, le nombre décimal neuf aura une représentation binaire de 1001. Les opérateurs binaires effectuent des opérations sur des représentations binaires mais renvoies des valeurs numériques JavaScript standards.

+ +

Le tableau qui suit résume les opérateurs binaires JavaScript :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opérateurs binaires
OpérateurUtilisationDescription
AND (ET) binairea & bRenvoie un 1 à chaque position binaire pour laquelle les bits des deux opérandes sont à 1.
OR (OU) binairea | bRenvoie un zéro à chaque position binaire pour laquelle les bits des deux opérandes sont à 0.
XOR (OU exclusif) binairea ^ bRenvoie un zéro à chaque position binaire pour laquelle les bits sont les mêmes (et un 1 pour chacun des bits qui est différent).
NOT (NON) binaire~ aInverse les bits de l'opérande.
Décalage binaire à gauchea << bDécale la représentation binaire de b bits sur la gauche et complète avec des zéros à droite.
Décalage binaire à droitea >> bDécale la représentation binaire de b bits sur la droite en ignorant les bits perdus.
Décalage binaire à droite en complétant avec des zérosa >>> bDécale la représentation binaire de b bits sur la droite en ignorant les bits perdus et ajoute des zéros sur la gauche.
+ +

Opérateurs binaires logiques

+ +

Les opérateurs binaires logiques fonctionnent de cette façon :

+ + + +

Le chiffre neuf est par exemple représenté comme 1001, et le nombre quinze comme 1111. Ainsi, quand les opérateurs binaires sont appliqués sur ces valeurs, on a les résultats qui suivent :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Exemples utilisant les opérateurs binaires
ExpressionRésultatDescription binaire
15 & 991111 & 1001 = 1001
15 | 9151111 | 1001 = 1111
15 ^ 961111 ^ 1001 = 0110
~15-16~00000000...00001111 = 11111111...11110000
~9-10~00000000...00001001 = 11111111...11110110
+ +

Il faut remarquer que tous les bits sont échangés lorsque l'opérateur binaire NOT est utilisé. Il est donc utile de savoir que les valeurs dont le bit le plus fort (le plus à gauche) vaut 1 sont des nombres négatifs (représentation en complément à deux). L'évaluation de ~x aura le même résultat que l'évaluation de -x - 1.

+ +

Opérateurs binaires de décalage

+ +

Les opérateurs binaires de décalage utilisent deux opérandes : le premier indiquant la quantité à décaler et le second indiquant de combien de bits on décale le premier opérande. La direction du décalage est spécifiée grâce à l'opérateur.

+ +

Les opérateurs binaires de décalage convertissent leurs opérandes en entiers sur 32 bits et renvoient un résultat dont le type est le même que l'opérande gauche.

+ +

Les opérateurs de décalage sont énumérés dans le tableau qui suit.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opérateurs binaires de décalage
OpérateurDescriptionExemple
Décalage à gauche (<<)Cet opérateur décale le premier opérande d'un nombre de bits donné sur la gauche. Les bits en trop sont ignorés et des bits à zéro sont introduits à droite.9<<2 renvoie 36, car 1001, décalé de 2 bits à gauche, devient  100100, dont la représentation en base 10 est  36.
Décalage à droite avec propagation du signe (>>)Cet opérateur décale le premier opérande d'un nombre de bits donné sur la droite. Les bits en trop sont ignorés et des bits correspondants au bit de signe sont introduits à gauche.9>>2 renvoie 2, car 1001, décalé de 2 bits à droite, devient 10 représentant 2. De même  -9>>2 renvoie -3, car le signe est préservé.
Décalage à droite avec zéros (>>>)Cet opérateur décale le premier opérande d'un nombre de bits donné sur la droite. Les bits en trop sont ignorés et des bits à 0 sont introduits à gauche.19>>>2 renvoie 4, car 10011, décalé de 2 bits, devient 100 qui représente 4. Pour les nombres positifs, cet opérateur et l'opérateur précédent renvoient les mêmes résultats.
+ +

Opérateurs logiques

+ +

Les opérateurs logiques sont généralement utilisés avec des valeurs booléennes. Dans ce cas, il renvoient une valeur booléenne. Les opérateurs && et || renvoient en fait une valeurs d'un des opérandes et si ces opérateurs sont utilisés avec des valeurs non-booléennées, ils pourront renvoyer une valeur non-booléenne. Les opérateurs logiques sont décrits dans le tableau qui suit.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Opérateurs logiques
OpérateurUsageDescription
ET logique (&&)expr1 && expr2Renvoie expr1 s'il peut être converti à false, sinon renvoie expr2. Dans le cas où on utilise des opérandes booléens, && renvoie true si les deux opérandes valent true, false sinon.
OU logique (||)expr1 || expr2Renvoie expr1 s'il peut être converti à true, sinon renvoie expr2. Dans le cas où on utilise des opérandes booléens, || renvoie true si l'un des opérandes vaut true, si les deux valent false, il renvoie false.
NON logique (!)!exprRenvoie false si son unique opérande peut être converti en true, sinon il renvoie true.
+ +

Les exemples d'expressions qui peuvent être converties à false sont celles qui sont évaluées à null, 0, NaN, la chaîne de caractères vide (""), ou undefined.

+ +

Le code qui suit montre des exemples de l'utilisation de l'opérateur logique ET (&&).

+ +
var a1 =   true && true;     // t && t renvoie true
+var a2 =   true && false;    // t && f renvoie false
+var a3 =  false && true;     // f && t renvoie false
+var a4 =  false && (3 == 4); // f && f renvoie false
+var a5 = "Chat" && "Chien";  // t && t renvoie Chien
+var a6 =  false && "Chat";   // f && t renvoie false
+var a7 = "Chat" && false;    // t && f renvoie false
+
+ +

Les exemples suivants montrent l'utilisation de l'opérateur logique OU (||).

+ +
var o1 =   true || true;     // t || t renvoie true
+var o2 =  false || true;     // f || t renvoie true
+var o3 =   true || false;    // t || f renvoie true
+var o4 =  false || (3 == 4); // f || f renvoie false
+var o5 = "Chat" || "Chien";  // t || t renvoie Chat
+var o6 =  false || "Chat";   // f || t renvoie Chat
+var o7 = "Chat" || false;    // t || f renvoie Chat
+
+ +

Les exemples suivants montrent l'utilisation de l'opérateur logique NON (!).

+ +
var n1 = !true;   // !t renvoie false
+var n2 = !false;  // !f renvoie true
+var n3 = !"Chat"; // !t renvoie false
+
+ +

Evaluation rapide

+ +

Les expressions logiques sont évaluées de gauche à droite. Cette évaluation utilise des tests pour savoir s'il est possible d'utiliser des « raccourcis » correspondant aux règles suivantes :

+ + + +

Les règles logiques garantissent la validité de ces évaluations, il faut noter que le second opérande n'est pas du tout évalué, empêchant ainsi les effets de bords cachés, liés à cette évaluation.

+ +

Opérateurs de chaînes de caractères

+ +

En plus des opérateurs de comparaisons qui peuvent être utilisés sur des chaînes de caractères, il existe l'opérateur de concaténation (+) permettant de concaténer deux chaînes de caractères. Le résultat de cette opération est la fusion des deux opérandes en une même chaîne de caractères. Ainsi :

+ +
console.log("ma " + "chaîne"); // affichera "ma chaîne" dans la console
+ +

L'opérateur court += peut également être utilisé pour concaténer des chaînes. Par exemple :

+ +
var maChaîne = "alpha";
+maChaîne += "bet"; // l'expression sera évaluée en "alphabet"
+                   // et cette valeur sera affectée à maChaîne
+ +

Opérateur conditionnel ternaire

+ +

L'opérateur conditionnel est le seul opérateur JavaScript qui utilise trois opérandes. L'expression utilisant l'opérateur peut prendre une valeur parmi deux selon une condition donnée. Cet opérateur s'utilise avec la syntaxe suivante :

+ +
condition ? val1 : val2
+
+ +

Si condition vaut true, l'opérateur vaudra val1. Sinon il vaudra val2. Il est possible d'utiliser l'opérateur conditionnel aux mêmes endroits qu'un opérateur standard.

+ +

On peut par exemple avoir :

+ +
var statut = (âge >= 18) ? "adulte" : "mineur";
+
+ +

Cette instruction assigne la valeur "adulte" à la variable status si la variable âge est supérieure ou égale à 18. Sinon, on lui affecte la valeur "mineur".

+ +

La virgule comme opérateur

+ +

L'opérateur virgule (,) évalue ses deux opérandes et renvoie la valeur du second opérande. Cet opérateur est principalement utilisé dans les boucles for pour permettre à plusieurs variables d'être modifiées à chaque itération de la boucle.

+ +

Ainsi, si on a un tableau à 2 dimensions avec 10 lignes et colonnes, on peut utiliser la virgule comme opérateur pour incrémenter deux variables à la fois. Le code qui suit imprime les valeurs contenues sur la diagonale du tableau :

+ +
var x = [0,1,2,3,4,5,6,7,8,9]
+var a = [x, x, x, x, x];
+
+for (var i = 0, j = 9; i <= j; i++, j--)
+  console.log("a[" + i + "][" + j + "]= " + a[i][j]);
+
+ +

Opérateurs unaires

+ +

delete

+ +

L'opérateur delete supprime un objet, une propriété d'un objet ou un élément d'un tableau à partir de sa position dans le tableau. La syntaxe de cet opérateur est la suivante :

+ +
delete monObjet;
+delete monObjet.propriété;
+delete monObjet[index];
+delete propriété; // uniquement valide au sein d'une instruction with
+
+ +

où on a monObjet qui est le nom de l'objet, propriété qui est une propriété existante et index un entier indiquant la position d'un élément dans un tableau.

+ +

La quatrième instruction n'est valide qu'au sein d'une instruction with et permet de supprimer une propriété d'un objet.

+ +

Il est possible d'utiliser l'opérateur delete pour supprimer les variables déclarées implicitement mais pas celles déclarées avec var. Si l'opérateur fonctionne correctement, il change la propriété ou l'élément vers la valeur undefined. L'opérateur delete renvoie true si l'opération de suppression est possible, false sinon.

+ +
x = 42;
+var y = 43;
+monobj = new Number();
+monobj.h = 4;    // création de la propriété h
+delete x;        // renvoie true (suppression possible si déclaration implicite)
+delete y;        // renvoie false (suppression impossible si déclaration avec var si la variable n'est pas une propriété)
+delete Math.PI;  // renvoie false (suppression impossible pour les propriétés pré-définies)
+delete monobj.h; // renvoie true (suppression possible des propriétés définies par l'utilisateur)
+delete monobj;   // renvoie true (suppression possible si déclaration implicite)
+
+ +
Suppression d'éléments d'un tableau
+ +

Lorsqu'on supprime un élément d'un tableau, la longueur du tableau n'est pas modifiée. Ainsi, si on supprime a[3], a[4] restera a[4] (même position et valeur) alors que a[3] sera undefined.

+ +

Lorsque l'opérateur delete supprime un élément d'un tableau, cet élément n'appartient plus au tableau. Dans l'exemple qui suit, arbres[3] est supprimé mais il est toujours accessible et renvoie undefined.

+ +
var arbres = new Array("sequoia", "laurier", "cèdre", "chêne", "érable");
+delete arbres[3];
+if (3 in arbres) {
+  // Ceci ne sera pas exécuté
+}
+
+ +

Pour qu'un élément continue à exister mais qu'il vaille undefined, on utilisera le mot-clé undefined plutôt que l'opérateur delete. Dans l'exemple qui suit, arbres[3] est modifié pour valoir undefined et l'élément du tableau continue à exister :

+ +
var arbres = new Array("sequoia", "laurier", "cèdre", "chêne", "érable");
+arbres[3] = undefined;
+if (3 in arbres) {
+  // Ceci sera exécuté
+}
+
+ +

typeof

+ +

L'opérateur typeof peut être utilisé de deux façons distinctes :

+ +
    +
  1. +
    typeof opérande
    +
  2. +
  3. +
    typeof (opérande)
    +
    +
  4. +
+ +

L'opérateur typeof renvoie une chaîne de caractères indiquant le type de l'opérande (qui n'est pas évalué). opérande correspond à la chaîne de caractère, la variable, le mot-clé ou l'objet dont on souhaite renvoyer le type. L'utilisation des parenthèses est facultative.

+ +

Soient les définitions de variables suivantes :

+ +
var maFonction = new Function("5 + 2");
+var forme = "round";
+var taille = 1;
+var toto = ["Pomme", "Poire", "Orange"];
+var jour = new Date();
+
+ +

L'opérateur typeof renverra les résultats suivants :

+ +
typeof maFonction; // renvoie "function"
+typeof forme;      // renvoie "string"
+typeof taille;     // renvoie "number"
+typeof toto;       // renvoie "object"
+typeof jour;       // renvoie "object"
+typeof inexistant; // renvoie "undefined"
+
+ +

En ce qui concerne les mots-clés true et null, l'opérateur typeof renvoie les résultats suivants :

+ +
typeof true; // renvoie "boolean"
+typeof null; // renvoie "object"
+
+ +

Pour une chaîne de caractères ou un nombre, typeof renvoie les résultats suivants :

+ +
typeof 62;            // renvoie "number"
+typeof 'Hello world'; // renvoie "string"
+
+ +

L'opérateur typeof, lorsqu'il est utilisé avec des propriétés, renvoie le type de valeur contenue dans la propriété :

+ +
typeof document.lastModified; // renvoie "string"
+typeof window.length;         // renvoie "number"
+typeof Math.LN2;              // renvoie "number"
+
+ +

Pour les méthodes et les fonctions, l'opérateur typeof renvoie les résultats suivants :

+ +
typeof blur;        // renvoie "function"
+typeof eval;        // renvoie "function"
+typeof parseInt;    // renvoie "function"
+typeof shape.split; // renvoie "function"
+
+ +

Pour les objets pré-définis, l'opérateur typeof fonctionne ainsi :

+ +
typeof Date;     // renvoie "function"
+typeof Function; // renvoie "function"
+typeof Math;     // renvoie "object"
+typeof Option;   // renvoie "function"
+typeof String;   // renvoie "function"
+
+ +

void

+ +

L'opérateur void peut être utilisé de deux façons :

+ +
    +
  1. +
    void (expression)
    +
    +
  2. +
  3. +
    void expression
    +
    +
  4. +
+ +

L'opérateur void indique qu'une expression doit être évaluée sans retourner de valeur. expression étant une expression JavaScript à évaluer. Les parenthèses sont facultatives mais les utiliser permet d'avoir une meilleur lisibilité du code.

+ +

L'opérateur void peut être utilisé pour spécifier une expression comme un lien hypertexte, l'expression est évaluée mais n'est pas chargée à la place du document actuel.

+ +

Le fragment de code  qui suit crée un lien hypertexte qui ne fait rien lorsque l'utilisateur clique dessus. Lorsqu'on clique sur le lien, void(0) est évalué à undefined, n'ayant aucun effet.

+ +
<A HREF="javascript:void(0)">Cliquer ici pour ne rien faire</A>
+
+ +

Le code suivant crée un lien hypertexte qui envoie un formulaire lorsque l'utilisateur clique dessus.

+ +
<A HREF="javascript:void(document.form.submit())">
+Cliquer ici pour envoyer</A>
+ +

Opérateurs relationnels

+ +

Un opérateur relationnel compare ses opérandes et renvoie une valeur booléenne selon que le résultat de la comparaison est vrai ou faux.

+ +

in

+ +

L'opérateur in renvoie true si la propriété indiquée fait partie de l'objet donné. Cet opérateur s'utilise avec la syntaxe suivante :

+ +
nomOuNumeroPropriete in monObjet
+
+ +

avec nomOuNumeroPropriete qui est une chaîne de caractères, une expression numérique ou un symbole correspondant au nom d'une propriété ou un indice de tableau, monObjet est le nom d'un objet.

+ +

Les exemples qui suivent utilisent cet opérateur in.

+ +
// Tableaux
+var arbres = new Array("sequoia", "laurier", "cèdre", "chêne", "érable");
+0 in arbres;         // renvoie true
+3 in arbres;         // renvoie true
+6 in arbres;         // renvoie false
+"laurier" in arbres; // renvoie false (l'opérateur se base sur l'indice et pas
+                     // sur la valeur)
+"length" in arbres;  // renvoie true (length est une propriété d'un objet Array)
+
+// Objets pré-définis
+"PI" in Math;         // renvoie true
+var myString = new String("coral");
+"length" in myString; // renvoie true
+
+// Objets définis par l'utilisateur
+var maVoiture = {fabricant: "Honda", modèle: "Accord", year: 1998};
+"fabricant" in maVoiture; // renvoie true
+"modèle" in maVoiture;    // renvoie true
+
+ +

instanceof

+ +

L'opérateur instanceof renvoie true si l'objet donné est du type spécifié. Cet opérateur s'utilise avec la syntaxe suivante :

+ +
nomObjet instanceof typeObjet
+
+ +

avec nomObjet qui est le nom de l'objet dont on souhaite comparer le type à typeObjet, typeObjet étant un type d'objet tel que {{jsxref("Date")}} ou {{jsxref("Array")}}.

+ +

instanceof peut être utilisé pour confirmer le type d'un objet pendant l'exécution. Ainsi, on peut gérer les exceptions en prévoyant différents cas pour différents types d'exception éventuellement levées.

+ +

Dans l'exemple qui suit, le code utilise l'opérateur instanceof afin de déterminer si jour est un objet Date. C'est le cas, les instructions contenues dans le bloc après l'instruction if sont donc exécutées.

+ +
var jour = new Date(2007, 01, 22);
+if (jour instanceof Date) {
+  // instructions à exécuter
+}
+
+ +

Précédence des opérateurs

+ +

La précédence des opérateurs indique l'ordre dans lequel ils sont appliqués lors de l'évaluation d'une expression. L'utilisation de parenthèses permet de surcharger la relation de précédence.

+ +

Le tableau qui suit décrit les précédences des opérateurs, dans l'ordre décroissant.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Précédence des opérateurs
Type d'opérateurOpérateurs individuels
membre. []
appel/création d'instance() new
négation/incrémentation! ~ - + ++ -- typeof void delete
multiplication/division* / %
addition/soustraction+ -
décalage binaire<< >> >>>
relationnel< <= > >= in instanceof
égalité== != === !==
ET binaire&
OU exclusif binaire^
OU binaire|
ET logique&&
OU logique||
conditionnel?:
assignation= += -= *= /= %= <<= >>= >>>= &= ^= |=
virgule,
+ +

Une version plus détaillée de cette table peut être trouvée dans la référence JavaScript.

+ +

Expressions

+ +

Un expression correspond à une unité de code valide qui est résolue en une valeur.

+ +

D'un point de vue syntaxique, toute expression valide se résout en une valeur. D'un point de vue conceptuel cependant, il y a deux types d'expressions : celles avec des effets de bord (qui, par exemple, affectent une valeur à une variable) et celles qui, d'une certaine façon, sont évaluées et sont résolues en une valeur.

+ +

L'expression x = 7 affecte une valeur (premier type). Dans celle-ci, on utilise l'opérateur = pour affecter la valeur 7 à la variable x. L'expression elle-même est évaluée à 7.

+ +

Le code 3 + 4 correspond au second type d'expression. On utilise ici l'opérateur + pour ajouter trois à quatre sans affecter le résultat (7) à une variable.

+ +

Les expressions JavaScript peuvent être rangées selon différentes catégories :

+ + + +

Expressions primaires

+ +

Ces expressions correspondent aux mots-clés et aux expressions générales en JavaScript.

+ +

this

+ +

Le mot-clé this permet de faire référence à l'objet courant. En général, on l'utilise au sein d'une méthode pour faire référence à l'objet qui a utilisé la méthode. Il s'utilise de cette façon :

+ +
this["nomPropriété"]
+this.nomPropriété
+ +

Soit une fonction qui valide un objet si sa propriété value est comprise entre deux valeurs :

+ +
function valide(obj, valMin, valMax){
+  if ((obj.value < valMin) || (obj.value > valMax))
+    console.log("Valeur incorrecte !");
+}
+
+ +

Il est possible d'appeler valide pour chaque gestionnaire d'événement onChange des éléments du formulaire, et d'utiliser le mot-clé this pour passer l'élément même en argument :

+ +
<p>Entrez un nombre entre 18 et 99 :</p>
+<input type="text" nom="age" size=3 onChange="valide(this, 18, 99);">
+
+ +

Opérateur de groupement

+ +

L'opérateur de groupement ( ) permet de contrôler la précédence de l'évaluation dans les expressions. On peut ainsi forcer l'évaluation d'une addition avant l'évaluation d'une multiplication ou d'une division.

+ +
var a = 1;
+var b = 2;
+var c = 3;
+
+// précédence par défaut
+a + b * c;   // 7
+// ce qui correspond à :
+a + (b * c); // 7
+
+// on peut utiliser l'opérateur
+// pour effectuer l'addition en premier
+(a + b) * c;   // 9
+
+// ce qui équivaut à :
+a * c + b * c; // 9
+
+ +

Expressions vers la gauche

+ +

Les valeurs à gauches de ces expressions sont la cible d'une affectation.

+ +

new

+ +

L'opérateur new permet de créer une instance d'un objet défini par l'utilisateur ou d'un objet dont le type est un des types d'objets natifs. Cet opérateur utilise la syntaxe suivante :

+ +
var nomObjet = new typeObjet([param1, param2, ..., paramN]);
+
+ +

super

+ +

Le mot-clé super est utilisé afin d'appeler des fonctions disponibles sur un objet parent. Il peut notamment être utilisé avec les classes pour appeler le constructeur parent.

+ +
super([arguments]); // invoque le constructeur parent
+super.functionParent([arguments]);
+
+ +

Opérateur de décomposition

+ +

L'opérateur de décomposition permet de développer une expression là où plusieurs argument (pour les appels de fonction) ou plusieurs éléments (pour les littéraux de tableaux) sont attendus.

+ +

Par exemple, si on a tableau et qu'on souhaite créer un nouveau tableau qui contient l'ancien, on peut soit utiliser une combinaison des méthodes push, splice, concat, soit utiliser la syntaxe de décomposition qui s'avère plus concise :

+ +
var parts = ['shoulders', 'knees'];
+var lyrics = ['head', ...parts, 'and', 'toes'];
+ +

L'opérateur de décomposition fonctionne de façon semblable avec les appels de fonction :

+ +
function f(x, y, z) { }
+var args = [0, 1, 2];
+f(...args);
+ +

{{PreviousNext("Web/JavaScript/Guide/Fonctions", "Web/JavaScript/Guide/Nombres_et_dates")}}

diff --git a/files/fr/web/javascript/guide/functions/index.html b/files/fr/web/javascript/guide/functions/index.html deleted file mode 100644 index 972c9f6286..0000000000 --- a/files/fr/web/javascript/guide/functions/index.html +++ /dev/null @@ -1,671 +0,0 @@ ---- -title: Fonctions -slug: Web/JavaScript/Guide/Functions -tags: - - Débutant - - Functions - - Guide - - JavaScript -translation_of: Web/JavaScript/Guide/Functions -original_slug: Web/JavaScript/Guide/Fonctions ---- -

{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Boucles_et_it%C3%A9ration", "Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs")}}

- -

Les fonctions font partie des briques fondamentales de JavaScript. Une fonction est une procédure JavaScript, un ensemble d'instructions effectuant une tâche ou calculant une valeur. Afin d'utiliser une fonction, il est nécessaire de l'avoir auparavant définie au sein de la portée dans laquelle on souhaite l'appeler.

- -

On pourra également lire le chapitre de la référence JavaScript sur les fonctions pour étudier plus en détails ce concept

- -

Définir des fonctions

- -

Les déclarations de fonctions

- -

Une définition de fonction (aussi appelée déclaration de fonction ou instruction de fonction) est construite avec le mot-clé function, suivi par :

- - - -

Le code suivant, par exemple, définit une fonction intitulée carré :

- -
function carré(nombre) {
-  return nombre * nombre;
-}
-
- -

La fonction carré prend un seul argument, appelé nombre. La fonction est composée d'une seule instruction qui renvoie l'argument de la fonction (nombre) multiplié par lui-même. L'instruction return spécifie la valeur qui est renvoyée par la fonction.

- -
return nombre * nombre;
-
- -

Les paramètres primitifs (comme les nombres) sont passés à la fonction par valeur. La valeur est passée à la fonction mais si cette dernière change la valeur du paramètre, cela n'aura pas d'impact au niveau global ou au niveau de ce qui a appelé la fonction.

- -

Si l'argument passé à la fonction est un objet (une valeur non-primitive, comme un objet {{jsxref("Array")}} ou un objet défini par l'utilisateur), et que la fonction change les propriétés de cet objet, ces changements seront visibles en dehors de la fonction. Par exemple :

- -
function maFonction(monObjet) {
-  monObjet.fabricant = "Toyota";
-}
-
-var mavoiture = {fabricant: "Honda", modèle: "Accord", année: 1998};
-var x, y;
-
-x = mavoiture.fabricant;     // x aura la valeur "Honda"
-
-maFonction(mavoiture);
-y = mavoiture.fabricant; // y aura la valeur "Toyota"
-                         // (la propriété fabricant a été modifiée par la fonction)
-
- -
-

Note : Affecter un nouvel objet au paramètre n'aura pas d'effet en dehors de la fonction car cela revient à changer la valeur du paramètre plutôt que la valeur d'une des propriétés de l'objet. Par exemple :

-
- -
function maFonction(monObjet) {
-  monObjet = {fabricant: "Ford", modèle: "Focus", année: 2006};
-}
-
-var mavoiture = {fabricant: "Honda", modèle: "Accord", année: 1998};
-var x, y;
-
-x = mavoiture.fabricant;     // x reçoit la valeur "Honda"
-
-maFonction(mavoiture);
-y = mavoiture.fabricant;     // y reçoit la valeur "Honda"
-
- -

Dans le premier exemple, l'objet mavoiture était passé à la fonction maFonction qui le modifiait. Dans le second exemple, la fonction n'a pas modifié l'objet qui avait été passé en argument, elle a créé une nouvelle variable locale, possédant le même nom que l'objet global passé en argument : il n'y a donc pas de modifications sur cet objet global.

- -

Les expressions de fonction

- -

Syntaxiquement, la déclaration de fonction utilisée ci-dessus est une instruction. On peut également créer une fonction grâce à une expression de fonction. De telles fonctions peuvent être anonymes (ne pas avoir de nom correspondant). La fonction carré aurait pu être définie de la façon suivante :

- -
var carré = function (nombre) { return nombre * nombre };
-var x = carré(4); //x reçoit la valeur 16
- -

Cependant, un nom peut être utilisé dans une expression de fonction, ce afin de l'utiliser dans la fonction (récursivité) ou afin de l'identifier dans les appels tracés par un éventuel débogueur :

- -
var factorielle = function fac(n) { return n < 2 ? 1 : n * fac(n - 1) };
-
-console.log(factorielle(3));
-
- -

Les expressions de fonction sont pratiques lorsqu'il s'agit de passer une fonction comme argument d'une autre fonction. Dans l'exemple qui suit, la fonction map est définie et appelée avec une fonction anonyme comme premier argument :

- -
function map(f, a) {
-  var resultat = []; // Créer un nouveau tableau Array
-  for (var i = 0; i != a.length; i++)
-    resultat[i] = f(a[i]);
-  return resultat;
-}
-
- -

Le code suivant applique la fonction cube sur chacun des éléments du tableau :

- -
var cube = function(x) { return x * x * x}; // Une expression de fonction
-map(cube, [0, 1, 2, 5, 10]);
-
- -

Le résultat de la dernière instruction est le tableau [0, 1, 8, 125, 1000].

- -

En JavaScript, une fonction peut être définie selon une condition. Le fragment de code qui suit définit une fonction seulement si num vaut 0 :

- -
var maFonction;
-if (num === 0){
-  maFonction = function(monObjet) {
-    monObjet.fabricant = "Toyota"
-  }
-}
- -

Une autre façon de définir des fonctions est d'utiliser le constructeur de l'objet {{jsxref("Function")}} afin de créer des fonctions à partir d'une chaîne lors de l'exécution, de la même façon que {{jsxref("Objets_globaux/eval", "eval()")}}.

- -

Une méthode est une fonction étant une propriété d'un objet. Vous trouverez plus de détails sur ces éléments dans le chapitre suivant du guide : Utiliser les objets.

- -

Appeler des fonctions

- -

La seule définition d'une fonction ne permet pas d'exécuter la fonction. Cela permet de lui donner un nom et de définir ce qui doit être fait lorsque la fonction est appelée. Appeler la fonction permet d'effectuer les actions des instructions avec les paramètres indiqués. Par exemple, si on définit la fonction carré, on peut l'appeler de la façon suivante :

- -
carré(5);
-
- -

Cette instruction appellera la fonction avec un argument valant 5. La fonction exécute ses instructions et renvoie la valeur 25.

- -

Les fonctions doivent appartenir à la portée dans laquelle elles sont appelées. En revanche, la déclaration d'une fonction peut être faite après l'appel :

- -
console.log(carré(5));
-/* ... */
-function carré(n) { return n*n }
-
- -

La portée d'une fonction est la fonction dans laquelle elle est déclarée ou le programme entier si elle est déclarée au niveau le plus haut.

- -
-

Note : Cela ne fonctionne que si la définition de la fonction utilise la syntaxe précédente (function nomFonction(){}). Le code ci-dessous ne fonctionnera pas :

-
- -
console.log(carré); // La fonction carré est remontée/hoisted mais vaut undefined
-console.log(carré(5)); // TypeError: carré is not a function
-var carré = function (n) {
-  return n * n;
-}
-
-// Et avec let...
-
-console.log(carré2); // ReferenceError: carré2 is not defined
-console.log(carré2(5)); // TypeError: carré2 is not a function
-
-let carré2 = function (n) {
-  return n * n;
-}
-
- -

Les arguments d'une fonction ne sont pas limités aux chaînes de caractères et aux nombres. Il est possible de passer des objets. La fonction show_props (définie dans le chapitre sur l'utilisation des objets) est un exemple de fonction utilisant un argument qui est un objet.

- -

Une fonction peut être récursive, c'est-à-dire qu'elle peut s'appeler elle-même. Voici la fonction qui calcule récursivement la factorielle d'un nombre :

- -
function factorielle(n){
-  if ((n === 0) || (n === 1))
-    return 1;
-  else
-    return (n * factorielle(n - 1));
-}
-
- -

On peut ensuite calculer les factorielles des nombres 1 à 5 :

- -
var a, b, c, d, e;
-a = factorielle(1); // a reçoit la valeur 1
-b = factorielle(2); // b reçoit la valeur 2
-c = factorielle(3); // c reçoit la valeur 6
-d = factorielle(4); // d reçoit la valeur 24
-e = factorielle(5); // e reçoit la valeur 120
-
- -

Il existe d'autres façons d'appeler des fonctions. Il existe souvent des cas où une fonction doit être appelée dynamiquement, où le nombre d'arguments peut varier, où le contexte de l'appel d'une fonction doit être créé en fonction d'un objet déterminé lors de l'exécution. Les fonctions sont des objets, en tant que tels, elles possèdent des méthodes (voir la page sur l'objet {{jsxref("Function")}}). L'une d'entre elles, {{jsxref("Function.apply","apply()")}} peut être utilisée pour réaliser le dernier cas de figure (exécution d'une fonction avec un objet déterminé à l'exécution).

- -

Portée d'une fonction

- -

On ne peut pas accéder aux variables définies dans une fonction en dehors de cette fonction : ces variables n'existent que dans la portée de la fonction. En revanche, une fonction peut accéder aux différentes variables et fonctions qui appartiennent à la portée dans laquelle elle est définie. Une fonction définie dans une autre fonction peut également accéder à toutes les variables de la fonction « parente » et à toute autre variable accessible depuis la fonction « parente ».

- -
// Les variables suivantes sont globales
-var num1 = 20,
-    num2 = 3,
-    nom = "Licorne";
-
-// Cette fonction est définie dans la portée globale
-function multiplier() {
-  return num1 * num2;
-}
-
-multiplier(); // Renvoie 60
-
-// Un exemple de fonction imbriquée
-function getScore () {
-  var num1 = 2,
-      num2 = 3;
-
-  function ajoute() {
-    return nom + " a marqué " + (num1 + num2);
-  }
-
-  return ajoute();
-}
-
-getScore(); // Renvoie "Licorne a marqué 5"
-
- -

Portée et pile de fonctions

- -

La récursivité

- -

Une fonction peut faire référence à elle-même et s'appeler elle-même. Il existe trois moyens pour qu'une fonction fasse référence à elle-même :

- -
    -
  1. Le nom de la fonction
  2. -
  3. arguments.callee
  4. -
  5. Une variable de la portée qui fait référence à la fonction
  6. -
- -

Par exemple, avec la définition de fonction suivante :

- -
var toto = function truc() {
-   // les instructions de la fonction
-};
- -

Dans le corps de la fonction, ces trois éléments seront équivalents :

- -
    -
  1. truc()
  2. -
  3. arguments.callee()
  4. -
  5. toto()
  6. -
- -

Une fonction qui s'appelle elle-même est appelée une fonction récursive. Sous certains aspects, une récursion est semblable à une boucle : toutes les deux exécutent le même code plusieurs fois et toutes les deux requièrent une condition d'arrêt (pour éviter une boucle ou une récursion infinie). Par exemple, ce fragment de code utilisant une boucle :

- -
var x = 0;
-while (x < 10) { // "x < 10" représente la condition d'arrêt
-  // faire quelque chose
-  x++;
-}
- -

pourra être converti en une fonction récursive de la façon suivante :

- -
function boucle(x) {
-  if (x >= 10) // "x >= 10" représente la condition d'arrêt (équivalent à "!(x < 10)")
-    return;
-  // faire quelque chose
-  boucle(x + 1); // l'appel récursif
-}
-boucle(0);
- -

Malgré cela, certains algorithmes ne peuvent pas être convertis en boucles itératives. Ainsi, récupérer l'ensemble des nœuds d'un arbre (le DOM par exemple) se fait plus simplement en utilisant la récursivité :

- -
function parcourirArbre(noeud) {
-  if (noeud === null) //
-    return;
-  // faire quelque chose avec le noeud
-  for (var i = 0; i < noeud.childNodes.length; i++) {
-    parcourirArbre(noeud.childNodes[i]);
-  }
-}
- -

Contrairement à l'exemple précédent avec la fonction boucle, ici, chaque appel récursif entraîne lui-même plusieurs appels (et non un seul).

- -

Théoriquement, il est possible de convertir tout algorithme récursif en un algorithme non récursif (avec des boucles par exemple). Généralement, la logique obtenue est plus complexe et nécessite l'utilisation d'une pile. La récursivité utilise également une pile, la pile de fonction.

- -

Ce type de « comportement » peut-être observé avec l'exemple suivant :

- -
function toto(i) {
-  if (i < 0)
-    return;
-  console.log('début : ' + i);
-  toto(i - 1);
-  console.log('fin : ' + i);
-}
-toto(3);
- -

qui affichera :

- -
début : 3
-début : 2
-début : 1
-début : 0
-fin : 0
-fin : 1
-fin : 2
-fin : 3
- -

Fonctions imbriquées et fermetures

- -

Il est possible d'imbriquer une fonction dans une autre fonction. La portée de la fonction fille (celle qui est imbriquée) n'est pas contenue dans la portée de la fonction parente. En revanche, la fonction fille bénéficie bien des informations de la fonction parente grâce à sa portée. On a ce qu'on appelle une fermeture (closure en anglais). Une fermeture est une expression (généralement une fonction) qui accède à des variables libres ainsi qu'à un environnement qui lie ces variables (ce qui « ferme » l'expression).

- -

Une fonction imbriquée étant une fermeture, cela signifie qu'une fonction imbriquée peut en quelque sorte hériter des arguments et des variables de la fonction parente.

- -

En résumé :

- - - - - -
-

Note : Sur les fermetures, voir également l'article à ce sujet.

-
- -

L'exemple qui suit illustre l'imbrication de fonctions :

- -
function ajouteCarrés(a, b) {
-  function carré(x) {
-    return x * x;
-  }
-  return carré(a) + carré(b);
-}
-a = ajouteCarrés(2,3); // renvoie 13
-b = ajouteCarrés(3,4); // renvoie 25
-c = ajouteCarrés(4,5); // renvoie 41
- -

La fonction interne étant une fermeture, on peut appeler la fonction parente afin de définir les arguments pour la fonction englobante et ceux de la fonction fille :

- -
function parente(x) {
-  function fille(y) {
-    return x + y;
-  }
-  return fille;
-}
-fn_fille = parente(3); // Fournit une fonction qui ajoute 3 à ce qu'on lui donnera
-résultat = fn_fille(5); // renvoie 8
-
-résultat1 = parente(3)(5); // renvoie 8
- -

Préservation des variables

- -

Dans l'exemple précédent, x a été « préservé » lorsque la fonction fille a été renvoyée. Une fermeture conserve les arguments et les variables de chaque portée qu'elle référence. Chaque appel à la fonction parente pouvant fournir un contexte différents selon les arguments, cela entraînera la création d'une nouvelle fermeture. La mémoire associée ne pourra être libérée que lorsque la fonction fille ne sera plus accessible.

- -

Ce mode de fonctionnement n'est pas différent de celui des références vers les objets. Cependant, il est souvent plus compliqué à détecter car les références ne sont pas définies explicitement dans le code et car il n'est pas possible de les inspecter.

- -

Imbriquer plusieurs fonctions

- -

Il est possible d'imbriquer des fonctions sur plus de deux niveaux, par exemple, on peut avoir une fonction A qui contient une fonction B qui contient une fonction C. Les fonctions B et C sont des fermetures et B peut accéder à la portée de A, C peut accéder à la portée de B. Ainsi, C accède à la portée de B qui lui accède à la portée de A, C accède donc à la portée de A (transitivité). Les fermetures peuvent donc contenir plusieurs portées, c'est ce qu'on appelle le chaînage de portées.

- -

Par exemple :

- -
function A(x) {
-  function B(y) {
-    function C(z) {
-      console.log(x + y + z);
-    }
-    C(3);
-  }
-  B(2);
-}
-A(1); // affichera 6 (1 + 2 + 3)
- -

Dans cet exemple C accède au y de B et au x de A. Ceci est rendu possible car :

- -
    -
  1. B est une fermeture qui contient A, autrement dit B peut accéder aux arguments et aux variables de A.
  2. -
  3. C est une fermeture qui contient B.
  4. -
  5. La fermeture de B contient A donc la fermeture de C contient A, C peut ainsi accéder aux arguments et aux variables de B et A. On dit que C chaîne les portées de B et de A (dans cet ordre).
  6. -
- -

La réciproque n'est pas vraie. A ne peut pas accéder à C, car A ne peut pas accéder aux arguments ou aux variables de B, or C est une variable de B. De cette façon, C reste privée en dehors de B.

- -

Conflits de nommage

- -

Lorsque deux arguments ou variables des portées d'une fermeture ont le même nom, il y a un conflit de noms. Dans ces cas, ce sera la portée la plus imbriquée qui prendra la priorité sur le nom, la portée la plus « externe » aura la priorité la plus faible pour les noms de variables. Du point de vue de la chaîne des portées, la première portée sur la chaîne est la portée la plus imbriquée et la dernière est la portée située le plus à l'extérieur :

- -
function externe() {
-  var x = 10;
-  function interne(x) {
-    return x;
-  }
-  return interne;
-}
-résultat = externe()(20); // renvoie 20 et pas 10
- -

Le conflit se produit à l'instruction return x entre le paramètre x de la fonction interne et la variable x de la fonction externe. La chaîne de portée est ici {interne, externe, objet global}. Ainsi, le paramètre x de interne a la priorité sur la variable x de la fonction externe, le résultat obtenu est donc 20 et non 10.

- -

Fermetures (closures)

- -

Les fermetures sont l'une des fonctionnalités les plus intéressantes de JavaScript. Comme on l'a vu précédemment, JavaScript permet d'imbriquer des fonctions et la fonction interne aura accès aux variables et paramètres de la fonction parente. À l'inverse, la fonction parente ne pourra pas accéder aux variables liées à la fonction interne. Cela fournit une certaine sécurité pour les variables de la fonction interne. De plus, si la fonction interne peut exister plus longtemps que la fonction parente, les variables et fonctions de la fonction parente pourront exister au travers de la fonction interne. On crée une fermeture lorsque la fonction interne est disponible en dehors de la fonction parente.

- -
var animal = function(nom) {   // La fonction externe utilise un paramètre "nom"
-  var getNom = function () {
-    return nom;                // La fonction interne accède à la variable "nom" de la fonction externe
-  }
-  return getNom;               // Renvoie la fonction interne pour la rendre disponible en dehors de la portée de la fonction parente
-}
-
-monAnimal = animal("Licorne");
-
-monAnimal();                   // Renvoie "Licorne"
- -

Bien entendu, dans la pratique, les cas peuvent être plus complexes. On peut renvoyer un objet qui contient des méthodes manipulant les variables internes de la fonction parente.

- -
var créerAnimal  = function (nom) {
-  var sexe;
-
-  return {
-    setNom: function(nouveauNom) {
-      nom = nouveauNom;
-    },
-
-    getNom: function () {
-      return nom;
-    },
-
-    getSexe: function () {
-      return sexe;
-    },
-
-    setSexe: function(nouveauSexe) {
-      if (typeof nouveauSexe == "string" && (nouveauSexe.toLowerCase() == "mâle" || nouveauSexe.toLowerCase() == "femelle")) {
-        sexe = nouveauSexe;
-      }
-    }
-  }
-}
-
-var animal = créerAnimal("Licorne");
-animal.getNom();        // Licorne
-
-animal.setNom("Bobby");
-animal.setSexe("mâle");
-animal.getSexe();       // mâle
-animal.getNom();        // Bobby
- -

Dans le code précédent, la variable nom est de la fonction externe est accessible depuis les fonctions internes. Il est impossible d'accéder aux variables internes en dehors des fonctions internes. Les variables internes agissent comme des coffres-forts pour les fonctions internes. Elles permettent d'avoir un accès persistent et encapsulé aux données internes. Pour les fonctions, il n'est pas nécessaire de les affecter à une variable ou même de les nommer.

- -
var getCode = (function (){
-  var codeAPI = "0]Eal(eh&2";    // Un code qu'on ne souhaite pas diffuser ni modifier
-
-  return function () {
-    return codeAPI;
-  };
-})();
-
-getCode();    // Renvoie la valeur du code
- -

Il y a malgré tout quelques pièges auxquels il faut faire attention lorsqu'on utilise les fermetures. Si une fonction imbriquée définit une variable avec le même nom que le nom d'une variable de la portée externe, il n'y aura plus aucun moyen d'accéder à la variable.

- -
var créerAnimal = function(nom) {  // La fonction externe définit une variable appelée "nom"
-  return {
-    setNom: function(nom) {    // La fonction imbriquée définit une variable appelée "nom"
-      nom = nom;               // ??? comment accéder à la variable "nom" définie par la fonction externe
-    }
-  }
-}
- -

L'opérateur this doit être traité avec précaution dans les fermetures. Attention, this fait référence au contexte où la fonction est appelée et non à l'endroit où il est défini.

- -

Utiliser l'objet arguments

- -

Les arguments d'une fonction sont maintenus dans un objet semblable à un tableau. Dans une fonction, il est possible d'utiliser les arguments passés à la fonction de la façon suivante :

- -
arguments[i]
- -

i représente l'index ordinal de l'argument (le premier argument ayant un indice à 0). On accède donc au premier argument avec arguments[0]. Le nombre total d'arguments est fourni grâce à arguments.length.

- -

En utilisant l'objet arguments, il est possible de recenser les arguments supplémentaires fournis à la fonction si jamais il y a plus d'arguments fournis que requis. Cet objet est souvent utile si on ne connaît pas le nombre d'arguments passés à la fonction. La propriété arguments.length permet de déterminer le nombre d'arguments réellement passés à la fonction. On peut donc ensuite accéder aux différents arguments en parcourant l'objet arguments.

- -

Par exemple, on peut construire une fonction qui concatène plusieurs chaînes. Le seul argument formellement défini sera la chaîne utilisée pour concaténer les différentes chaînes. On peut définir la fonction de la façon suivante :

- -
function monConcat(séparateur) {
-   var result = ""; // on initialise la liste
-   var i;
-   // on parcourt les arguments
-   for (i = 1; i < arguments.length; i++) {
-      result += arguments[i] + séparateur;
-   }
-   return result;
-}
- -

On peut passer autant d'arguments que nécessaire à cette fonction. Ils seront tous concaténés dans une chaîne finale. Ainsi, on aura :

- -
// renverra "rouge, orange, bleu, "
-monConcat(", ", "red", "orange", "blue");
-
-// renverra "éléphant; girafe; lion; singe; "
-monConcat("; ", "éléphant", "girafe", "lion", "singe");
-
-// renverra "sauge. basilic. origan. poivre. échalotte. "
-monConcat(". ", "sauge", "basilic", "origan", "poivre", "échalotte");
- -
-

Note : arguments est une variable « semblable » à un tableau. Mais ce n'est pas un tableau au sens strict. En effet, il possède un index numéroté ainsi qu'une propriété length. En revanche, il ne possède pas les méthodes classiques de manipulation des tableaux (Array).

-
- -

Voir la page sur l'objet {{jsxref("Function")}} dans la référence JavaScript pour plus d'informations.

- -

Paramètres des fonctions

- -

À partir d'ECMAScript 2015, deux sortes de paramètres sont introduites : les paramètres par défaut et les paramètres du reste.

- -

Les paramètres par défaut

- -

En JavaScript, par défaut, les paramètres des fonctions vaudront undefined. Il peut toutefois être utile de définir une valeur par défaut différente. Les paramètres par défaut permettent de répondre à ce besoin.

- -

Avant ECMAScript 2015, la stratégie pour manipuler des valeurs par défaut adaptées était de tester si la valeur du paramètre était indéfinie puis de lui affecter la valeur souhaitée si c'était le cas. Par exemple, dans le code qui suit, on ne fournit pas de valeur pour b dans l'appel, la valeur sera undefined lors de l'évaluation de a*b et l'appel à multiplier aurait renvoyé NaN. Pour éviter ça, la deuxième ligne définit une valeur par défaut au cas où b n'est pas renseigné :

- -
function multiplier(a, b) {
-  b = typeof b !== 'undefined' ?  b : 1;
-
-  return a*b;
-}
-
-multiplier(5); // 5
-
- -

Si on peut utiliser les paramètres par défaut, il n'est plus nécessaire de faire l'opération à l'intérieur du corps de la fonction, il suffit de déclarer que la valeur par défaut pour b est 1 dans la signature de la fonction :

- -
function multiplier(a, b = 1) {
-  return a*b;
-}
-
-multiplier(5); // 5
- -

Pour plus de détails, voir la page sur les paramètres par défaut dans la référence.

- -

Les paramètres du reste

- -

La syntaxe des paramètres du reste permet de représenter un nombre indéfini d'arguments contenus dans un tableau. Dans l'exemple suivant, on utilise les paramètres du reste pour collecter les arguments à partir du deuxième et jusqu'au dernier. Ces arguments sont multipliés par le premier. Dans cet exemple, on utilise une fonction fléchée, concept qui est présenté et illustré dans la section qui suit.

- -
function multiplier(facteur, ...lesArgs) {
-  return lesArgs.map(x => facteur * x);
-}
-
-var arr = multiplier(2, 1, 2, 3);
-console.log(arr); // [2, 4, 6]
- -

Fonctions fléchées

- -

Une expression de fonction fléchée permet d'utiliser une syntaxe plus concise que les expressions de fonctions classiques. Une telle fonction ne possède alors pas de valeur propre pour thisargumentssuper ou new.target. Les fonctions fléchées sont nécessairement anonymes.

- -

Les fonctions fléchées ont été introduites pour deux raisons principales : une syntaxe plus courte et l'absence de this rattaché à la fonction. Voir aussi ce billet sur tech.mozfr.org sur les fonctions fléchées.

- -

 

- -

 

- -

Concision de la syntaxe

- -

Dans certaines constructions fonctionnelles, on peut apprécier une syntaxe courte. Par exemple, si on compare les deux dernières lignes de ce fragment de code :

- -
var a = [
-  "Hydrogen",
-  "Helium",
-  "Lithium",
-  "Beryl­lium"
-];
-
-var a2 = a.map(function(s){ return s.length });
-console.log(a2); // affiche [8, 6, 7, 9]
-var a3 = a.map( s => s.length );
-console.log(a3); // affiche [8, 6, 7, 9]
- -

Pas de this distinct

- -

Avant les fonctions fléchées, chaque nouvelle fonction définissait sa propre valeur this (un nouvel objet dans le cas d'un constructeur, undefined lors des appels en mode strict, l'objet courant dans le cas d'une méthode, etc.). Cela pouvait poser quelques problèmes avec un style de programmation orienté objet.

- -
function Personne() {
-  // Le constructeur Personne() utilise `this` comme lui-même.
-  this.âge = 0;
-
-  setInterval(function grandir() {
-    // En mode non-strict, la fonction grandir() définit `this`
-    // avec l'objet global, qui est donc différent du `this`
-    // défini par le constructeur Person().
-    this.âge++;
-  }, 1000);
-}
-
-var p = new Personne();
- -

Avec ECMAScript 3/5, ce problème fut résolu avec l'affectation de la valeur de this dans une variable a variable that could be closed over.

- -
function Personne() {
-  var self = this; // Certains utilisent `that`, d'autres `self`.
-                   // On utilisera l'un des deux et on pas
-                   // l'autre pour être cohérent.
-  self.âge = 0;
-
-  setInterval(function grandir() {
-    // La fonction callback fait référence à la variable `self`
-    // qui est bien la valeur attendue liée à l'objet.
-    self.âge++;
-  }, 1000);
-}
- -

On aurait aussi pu créer une fonction liée afin que la « bonne » valeur de this soit passée à la fonction grandir().

- -

Les fonctions fléchées capturent la valeur de this dans le contexte englobant et cela permet de manipuler la valeur pertinente ici :

- -
function Personne(){
-  this.âge = 0;
-
-  setInterval(() => {
-    this.âge++; // this fait référence à l'objet personne
-  }, 1000);
-}
-
-var p = new Personne();
- -

Fonctions prédéfinies

- -

JavaScript possède plusieurs fonctions natives, disponibles au plus haut niveau :

- -
-
{{jsxref("Objets_globaux/eval","eval()")}}
-
-

La fonction eval() permet d'évaluer du code JavaScript contenu dans une chaîne de caractères.

-
-
{{jsxref("Objets_globaux/uneval","uneval()")}} {{non-standard_inline}}
-
-

La fonction uneval() crée une représentation sous la forme d'une chaîne de caractères pour le code source d'un objet.

-
-
{{jsxref("Objets_globaux/isFinite","isFinite()")}}
-
-

La fonction isFinite() détermine si la valeur passée est un nombre fini. Si nécessaire, le paramètre sera converti en un nombre.

-
-
{{jsxref("Objets_globaux/isNaN","isNaN()")}}
-
-

La fonction isNaN() détermine si une valeur est {{jsxref("NaN")}} ou non. Note : On pourra également utiliser {{jsxref("Number.isNaN()")}} défini avec ECMAScript 6 ou utiliser typeof afin de déterminer si la valeur est Not-A-Number.

-
-
{{jsxref("Objets_globaux/parseFloat","parseFloat()")}}
-
-

La fonction parseFloat() convertit une chaîne de caractères en un nombre flottant.

-
-
{{jsxref("Objets_globaux/parseInt","parseInt()")}}
-
-

La fonction parseInt() convertit une chaîne de caractères et renvoie un entier dans la base donnée.

-
-
{{jsxref("Objets_globaux/decodeURI","decodeURI()")}}
-
-

La fonction decodeURI() décode un Uniform Resource Identifier (URI) créé par {{jsxref("Objets_globaux/encodeURI","encodeURI()")}} ou une méthode similaire.

-
-
{{jsxref("Objets_globaux/decodeURIComponent","decodeURIComponent()")}}
-
-

La fonction decodeURIComponent() décode un composant d'un Uniform Resource Identifier (URI) créé par {{jsxref("Objets_globaux/encodeURIComponent","encodeURIComponent")}} ou une méthode similaire.

-
-
{{jsxref("Objets_globaux/encodeURI","encodeURI()")}}
-
-

La fonction encodeURI() encode un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par un, deux, trois voire quatre séquences d'échappement représentant l'encodage UTF-8 du caractères (quatre séquences seront utilisées uniquement lorsque le caractère est composé d'une paire de deux demi-codets).

-
-
{{jsxref("Objets_globaux/encodeURIComponent","encodeURIComponent()")}}
-
-

La fonction encodeURIComponent() encode un composant d'un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par un, deux, trois voire quatre séquences d'échappement représentant l'encodage UTF-8 du caractères (quatre séquences seront utilisées uniquement lorsque le caractère est composé d'une paire de deux demi-codets).

-
-
{{jsxref("Objets_globaux/escape","escape()")}} {{deprecated_inline}}
-
-

La fonction dépréciée escape() calcule une nouvelle chaîne de caractères pour laquelle certains caractères ont été remplacés par leur séquence d'échappement hexadécimale. Les fonctions {{jsxref("Objets_globaux/encodeURI","encodeURI()")}} ou {{jsxref("Objets_globaux/encodeURIComponent","encodeURIComponent()")}} doivent être utilisées à la place.

-
-
{{jsxref("Objets_globaux/unescape","unescape()")}} {{deprecated_inline}}
-
-

La fonction dépréciée unescape() calcule une nouvelle chaîne de caractères pour laquelle les séquences d'échappement hexadécimales sont remplacées par les caractères qu'elles représentent. Les séquences d'échappement introduites peuvent provenir d'une fonction telle que {{jsxref("Objets_globaux/escape","escape()")}}. unescape est dépréciée et doit être remplacée par {{jsxref("Objets_globaux/decodeURI","decodeURI()")}} ou {{jsxref("Objets_globaux/decodeURIComponent","decodeURIComponent()")}}.

-
-
- -

{{PreviousNext("Web/JavaScript/Guide/Boucles_et_it%C3%A9ration", "Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs")}}

diff --git a/files/fr/web/javascript/guide/functions/index.md b/files/fr/web/javascript/guide/functions/index.md new file mode 100644 index 0000000000..972c9f6286 --- /dev/null +++ b/files/fr/web/javascript/guide/functions/index.md @@ -0,0 +1,671 @@ +--- +title: Fonctions +slug: Web/JavaScript/Guide/Functions +tags: + - Débutant + - Functions + - Guide + - JavaScript +translation_of: Web/JavaScript/Guide/Functions +original_slug: Web/JavaScript/Guide/Fonctions +--- +

{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Boucles_et_it%C3%A9ration", "Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs")}}

+ +

Les fonctions font partie des briques fondamentales de JavaScript. Une fonction est une procédure JavaScript, un ensemble d'instructions effectuant une tâche ou calculant une valeur. Afin d'utiliser une fonction, il est nécessaire de l'avoir auparavant définie au sein de la portée dans laquelle on souhaite l'appeler.

+ +

On pourra également lire le chapitre de la référence JavaScript sur les fonctions pour étudier plus en détails ce concept

+ +

Définir des fonctions

+ +

Les déclarations de fonctions

+ +

Une définition de fonction (aussi appelée déclaration de fonction ou instruction de fonction) est construite avec le mot-clé function, suivi par :

+ + + +

Le code suivant, par exemple, définit une fonction intitulée carré :

+ +
function carré(nombre) {
+  return nombre * nombre;
+}
+
+ +

La fonction carré prend un seul argument, appelé nombre. La fonction est composée d'une seule instruction qui renvoie l'argument de la fonction (nombre) multiplié par lui-même. L'instruction return spécifie la valeur qui est renvoyée par la fonction.

+ +
return nombre * nombre;
+
+ +

Les paramètres primitifs (comme les nombres) sont passés à la fonction par valeur. La valeur est passée à la fonction mais si cette dernière change la valeur du paramètre, cela n'aura pas d'impact au niveau global ou au niveau de ce qui a appelé la fonction.

+ +

Si l'argument passé à la fonction est un objet (une valeur non-primitive, comme un objet {{jsxref("Array")}} ou un objet défini par l'utilisateur), et que la fonction change les propriétés de cet objet, ces changements seront visibles en dehors de la fonction. Par exemple :

+ +
function maFonction(monObjet) {
+  monObjet.fabricant = "Toyota";
+}
+
+var mavoiture = {fabricant: "Honda", modèle: "Accord", année: 1998};
+var x, y;
+
+x = mavoiture.fabricant;     // x aura la valeur "Honda"
+
+maFonction(mavoiture);
+y = mavoiture.fabricant; // y aura la valeur "Toyota"
+                         // (la propriété fabricant a été modifiée par la fonction)
+
+ +
+

Note : Affecter un nouvel objet au paramètre n'aura pas d'effet en dehors de la fonction car cela revient à changer la valeur du paramètre plutôt que la valeur d'une des propriétés de l'objet. Par exemple :

+
+ +
function maFonction(monObjet) {
+  monObjet = {fabricant: "Ford", modèle: "Focus", année: 2006};
+}
+
+var mavoiture = {fabricant: "Honda", modèle: "Accord", année: 1998};
+var x, y;
+
+x = mavoiture.fabricant;     // x reçoit la valeur "Honda"
+
+maFonction(mavoiture);
+y = mavoiture.fabricant;     // y reçoit la valeur "Honda"
+
+ +

Dans le premier exemple, l'objet mavoiture était passé à la fonction maFonction qui le modifiait. Dans le second exemple, la fonction n'a pas modifié l'objet qui avait été passé en argument, elle a créé une nouvelle variable locale, possédant le même nom que l'objet global passé en argument : il n'y a donc pas de modifications sur cet objet global.

+ +

Les expressions de fonction

+ +

Syntaxiquement, la déclaration de fonction utilisée ci-dessus est une instruction. On peut également créer une fonction grâce à une expression de fonction. De telles fonctions peuvent être anonymes (ne pas avoir de nom correspondant). La fonction carré aurait pu être définie de la façon suivante :

+ +
var carré = function (nombre) { return nombre * nombre };
+var x = carré(4); //x reçoit la valeur 16
+ +

Cependant, un nom peut être utilisé dans une expression de fonction, ce afin de l'utiliser dans la fonction (récursivité) ou afin de l'identifier dans les appels tracés par un éventuel débogueur :

+ +
var factorielle = function fac(n) { return n < 2 ? 1 : n * fac(n - 1) };
+
+console.log(factorielle(3));
+
+ +

Les expressions de fonction sont pratiques lorsqu'il s'agit de passer une fonction comme argument d'une autre fonction. Dans l'exemple qui suit, la fonction map est définie et appelée avec une fonction anonyme comme premier argument :

+ +
function map(f, a) {
+  var resultat = []; // Créer un nouveau tableau Array
+  for (var i = 0; i != a.length; i++)
+    resultat[i] = f(a[i]);
+  return resultat;
+}
+
+ +

Le code suivant applique la fonction cube sur chacun des éléments du tableau :

+ +
var cube = function(x) { return x * x * x}; // Une expression de fonction
+map(cube, [0, 1, 2, 5, 10]);
+
+ +

Le résultat de la dernière instruction est le tableau [0, 1, 8, 125, 1000].

+ +

En JavaScript, une fonction peut être définie selon une condition. Le fragment de code qui suit définit une fonction seulement si num vaut 0 :

+ +
var maFonction;
+if (num === 0){
+  maFonction = function(monObjet) {
+    monObjet.fabricant = "Toyota"
+  }
+}
+ +

Une autre façon de définir des fonctions est d'utiliser le constructeur de l'objet {{jsxref("Function")}} afin de créer des fonctions à partir d'une chaîne lors de l'exécution, de la même façon que {{jsxref("Objets_globaux/eval", "eval()")}}.

+ +

Une méthode est une fonction étant une propriété d'un objet. Vous trouverez plus de détails sur ces éléments dans le chapitre suivant du guide : Utiliser les objets.

+ +

Appeler des fonctions

+ +

La seule définition d'une fonction ne permet pas d'exécuter la fonction. Cela permet de lui donner un nom et de définir ce qui doit être fait lorsque la fonction est appelée. Appeler la fonction permet d'effectuer les actions des instructions avec les paramètres indiqués. Par exemple, si on définit la fonction carré, on peut l'appeler de la façon suivante :

+ +
carré(5);
+
+ +

Cette instruction appellera la fonction avec un argument valant 5. La fonction exécute ses instructions et renvoie la valeur 25.

+ +

Les fonctions doivent appartenir à la portée dans laquelle elles sont appelées. En revanche, la déclaration d'une fonction peut être faite après l'appel :

+ +
console.log(carré(5));
+/* ... */
+function carré(n) { return n*n }
+
+ +

La portée d'une fonction est la fonction dans laquelle elle est déclarée ou le programme entier si elle est déclarée au niveau le plus haut.

+ +
+

Note : Cela ne fonctionne que si la définition de la fonction utilise la syntaxe précédente (function nomFonction(){}). Le code ci-dessous ne fonctionnera pas :

+
+ +
console.log(carré); // La fonction carré est remontée/hoisted mais vaut undefined
+console.log(carré(5)); // TypeError: carré is not a function
+var carré = function (n) {
+  return n * n;
+}
+
+// Et avec let...
+
+console.log(carré2); // ReferenceError: carré2 is not defined
+console.log(carré2(5)); // TypeError: carré2 is not a function
+
+let carré2 = function (n) {
+  return n * n;
+}
+
+ +

Les arguments d'une fonction ne sont pas limités aux chaînes de caractères et aux nombres. Il est possible de passer des objets. La fonction show_props (définie dans le chapitre sur l'utilisation des objets) est un exemple de fonction utilisant un argument qui est un objet.

+ +

Une fonction peut être récursive, c'est-à-dire qu'elle peut s'appeler elle-même. Voici la fonction qui calcule récursivement la factorielle d'un nombre :

+ +
function factorielle(n){
+  if ((n === 0) || (n === 1))
+    return 1;
+  else
+    return (n * factorielle(n - 1));
+}
+
+ +

On peut ensuite calculer les factorielles des nombres 1 à 5 :

+ +
var a, b, c, d, e;
+a = factorielle(1); // a reçoit la valeur 1
+b = factorielle(2); // b reçoit la valeur 2
+c = factorielle(3); // c reçoit la valeur 6
+d = factorielle(4); // d reçoit la valeur 24
+e = factorielle(5); // e reçoit la valeur 120
+
+ +

Il existe d'autres façons d'appeler des fonctions. Il existe souvent des cas où une fonction doit être appelée dynamiquement, où le nombre d'arguments peut varier, où le contexte de l'appel d'une fonction doit être créé en fonction d'un objet déterminé lors de l'exécution. Les fonctions sont des objets, en tant que tels, elles possèdent des méthodes (voir la page sur l'objet {{jsxref("Function")}}). L'une d'entre elles, {{jsxref("Function.apply","apply()")}} peut être utilisée pour réaliser le dernier cas de figure (exécution d'une fonction avec un objet déterminé à l'exécution).

+ +

Portée d'une fonction

+ +

On ne peut pas accéder aux variables définies dans une fonction en dehors de cette fonction : ces variables n'existent que dans la portée de la fonction. En revanche, une fonction peut accéder aux différentes variables et fonctions qui appartiennent à la portée dans laquelle elle est définie. Une fonction définie dans une autre fonction peut également accéder à toutes les variables de la fonction « parente » et à toute autre variable accessible depuis la fonction « parente ».

+ +
// Les variables suivantes sont globales
+var num1 = 20,
+    num2 = 3,
+    nom = "Licorne";
+
+// Cette fonction est définie dans la portée globale
+function multiplier() {
+  return num1 * num2;
+}
+
+multiplier(); // Renvoie 60
+
+// Un exemple de fonction imbriquée
+function getScore () {
+  var num1 = 2,
+      num2 = 3;
+
+  function ajoute() {
+    return nom + " a marqué " + (num1 + num2);
+  }
+
+  return ajoute();
+}
+
+getScore(); // Renvoie "Licorne a marqué 5"
+
+ +

Portée et pile de fonctions

+ +

La récursivité

+ +

Une fonction peut faire référence à elle-même et s'appeler elle-même. Il existe trois moyens pour qu'une fonction fasse référence à elle-même :

+ +
    +
  1. Le nom de la fonction
  2. +
  3. arguments.callee
  4. +
  5. Une variable de la portée qui fait référence à la fonction
  6. +
+ +

Par exemple, avec la définition de fonction suivante :

+ +
var toto = function truc() {
+   // les instructions de la fonction
+};
+ +

Dans le corps de la fonction, ces trois éléments seront équivalents :

+ +
    +
  1. truc()
  2. +
  3. arguments.callee()
  4. +
  5. toto()
  6. +
+ +

Une fonction qui s'appelle elle-même est appelée une fonction récursive. Sous certains aspects, une récursion est semblable à une boucle : toutes les deux exécutent le même code plusieurs fois et toutes les deux requièrent une condition d'arrêt (pour éviter une boucle ou une récursion infinie). Par exemple, ce fragment de code utilisant une boucle :

+ +
var x = 0;
+while (x < 10) { // "x < 10" représente la condition d'arrêt
+  // faire quelque chose
+  x++;
+}
+ +

pourra être converti en une fonction récursive de la façon suivante :

+ +
function boucle(x) {
+  if (x >= 10) // "x >= 10" représente la condition d'arrêt (équivalent à "!(x < 10)")
+    return;
+  // faire quelque chose
+  boucle(x + 1); // l'appel récursif
+}
+boucle(0);
+ +

Malgré cela, certains algorithmes ne peuvent pas être convertis en boucles itératives. Ainsi, récupérer l'ensemble des nœuds d'un arbre (le DOM par exemple) se fait plus simplement en utilisant la récursivité :

+ +
function parcourirArbre(noeud) {
+  if (noeud === null) //
+    return;
+  // faire quelque chose avec le noeud
+  for (var i = 0; i < noeud.childNodes.length; i++) {
+    parcourirArbre(noeud.childNodes[i]);
+  }
+}
+ +

Contrairement à l'exemple précédent avec la fonction boucle, ici, chaque appel récursif entraîne lui-même plusieurs appels (et non un seul).

+ +

Théoriquement, il est possible de convertir tout algorithme récursif en un algorithme non récursif (avec des boucles par exemple). Généralement, la logique obtenue est plus complexe et nécessite l'utilisation d'une pile. La récursivité utilise également une pile, la pile de fonction.

+ +

Ce type de « comportement » peut-être observé avec l'exemple suivant :

+ +
function toto(i) {
+  if (i < 0)
+    return;
+  console.log('début : ' + i);
+  toto(i - 1);
+  console.log('fin : ' + i);
+}
+toto(3);
+ +

qui affichera :

+ +
début : 3
+début : 2
+début : 1
+début : 0
+fin : 0
+fin : 1
+fin : 2
+fin : 3
+ +

Fonctions imbriquées et fermetures

+ +

Il est possible d'imbriquer une fonction dans une autre fonction. La portée de la fonction fille (celle qui est imbriquée) n'est pas contenue dans la portée de la fonction parente. En revanche, la fonction fille bénéficie bien des informations de la fonction parente grâce à sa portée. On a ce qu'on appelle une fermeture (closure en anglais). Une fermeture est une expression (généralement une fonction) qui accède à des variables libres ainsi qu'à un environnement qui lie ces variables (ce qui « ferme » l'expression).

+ +

Une fonction imbriquée étant une fermeture, cela signifie qu'une fonction imbriquée peut en quelque sorte hériter des arguments et des variables de la fonction parente.

+ +

En résumé :

+ + + + + +
+

Note : Sur les fermetures, voir également l'article à ce sujet.

+
+ +

L'exemple qui suit illustre l'imbrication de fonctions :

+ +
function ajouteCarrés(a, b) {
+  function carré(x) {
+    return x * x;
+  }
+  return carré(a) + carré(b);
+}
+a = ajouteCarrés(2,3); // renvoie 13
+b = ajouteCarrés(3,4); // renvoie 25
+c = ajouteCarrés(4,5); // renvoie 41
+ +

La fonction interne étant une fermeture, on peut appeler la fonction parente afin de définir les arguments pour la fonction englobante et ceux de la fonction fille :

+ +
function parente(x) {
+  function fille(y) {
+    return x + y;
+  }
+  return fille;
+}
+fn_fille = parente(3); // Fournit une fonction qui ajoute 3 à ce qu'on lui donnera
+résultat = fn_fille(5); // renvoie 8
+
+résultat1 = parente(3)(5); // renvoie 8
+ +

Préservation des variables

+ +

Dans l'exemple précédent, x a été « préservé » lorsque la fonction fille a été renvoyée. Une fermeture conserve les arguments et les variables de chaque portée qu'elle référence. Chaque appel à la fonction parente pouvant fournir un contexte différents selon les arguments, cela entraînera la création d'une nouvelle fermeture. La mémoire associée ne pourra être libérée que lorsque la fonction fille ne sera plus accessible.

+ +

Ce mode de fonctionnement n'est pas différent de celui des références vers les objets. Cependant, il est souvent plus compliqué à détecter car les références ne sont pas définies explicitement dans le code et car il n'est pas possible de les inspecter.

+ +

Imbriquer plusieurs fonctions

+ +

Il est possible d'imbriquer des fonctions sur plus de deux niveaux, par exemple, on peut avoir une fonction A qui contient une fonction B qui contient une fonction C. Les fonctions B et C sont des fermetures et B peut accéder à la portée de A, C peut accéder à la portée de B. Ainsi, C accède à la portée de B qui lui accède à la portée de A, C accède donc à la portée de A (transitivité). Les fermetures peuvent donc contenir plusieurs portées, c'est ce qu'on appelle le chaînage de portées.

+ +

Par exemple :

+ +
function A(x) {
+  function B(y) {
+    function C(z) {
+      console.log(x + y + z);
+    }
+    C(3);
+  }
+  B(2);
+}
+A(1); // affichera 6 (1 + 2 + 3)
+ +

Dans cet exemple C accède au y de B et au x de A. Ceci est rendu possible car :

+ +
    +
  1. B est une fermeture qui contient A, autrement dit B peut accéder aux arguments et aux variables de A.
  2. +
  3. C est une fermeture qui contient B.
  4. +
  5. La fermeture de B contient A donc la fermeture de C contient A, C peut ainsi accéder aux arguments et aux variables de B et A. On dit que C chaîne les portées de B et de A (dans cet ordre).
  6. +
+ +

La réciproque n'est pas vraie. A ne peut pas accéder à C, car A ne peut pas accéder aux arguments ou aux variables de B, or C est une variable de B. De cette façon, C reste privée en dehors de B.

+ +

Conflits de nommage

+ +

Lorsque deux arguments ou variables des portées d'une fermeture ont le même nom, il y a un conflit de noms. Dans ces cas, ce sera la portée la plus imbriquée qui prendra la priorité sur le nom, la portée la plus « externe » aura la priorité la plus faible pour les noms de variables. Du point de vue de la chaîne des portées, la première portée sur la chaîne est la portée la plus imbriquée et la dernière est la portée située le plus à l'extérieur :

+ +
function externe() {
+  var x = 10;
+  function interne(x) {
+    return x;
+  }
+  return interne;
+}
+résultat = externe()(20); // renvoie 20 et pas 10
+ +

Le conflit se produit à l'instruction return x entre le paramètre x de la fonction interne et la variable x de la fonction externe. La chaîne de portée est ici {interne, externe, objet global}. Ainsi, le paramètre x de interne a la priorité sur la variable x de la fonction externe, le résultat obtenu est donc 20 et non 10.

+ +

Fermetures (closures)

+ +

Les fermetures sont l'une des fonctionnalités les plus intéressantes de JavaScript. Comme on l'a vu précédemment, JavaScript permet d'imbriquer des fonctions et la fonction interne aura accès aux variables et paramètres de la fonction parente. À l'inverse, la fonction parente ne pourra pas accéder aux variables liées à la fonction interne. Cela fournit une certaine sécurité pour les variables de la fonction interne. De plus, si la fonction interne peut exister plus longtemps que la fonction parente, les variables et fonctions de la fonction parente pourront exister au travers de la fonction interne. On crée une fermeture lorsque la fonction interne est disponible en dehors de la fonction parente.

+ +
var animal = function(nom) {   // La fonction externe utilise un paramètre "nom"
+  var getNom = function () {
+    return nom;                // La fonction interne accède à la variable "nom" de la fonction externe
+  }
+  return getNom;               // Renvoie la fonction interne pour la rendre disponible en dehors de la portée de la fonction parente
+}
+
+monAnimal = animal("Licorne");
+
+monAnimal();                   // Renvoie "Licorne"
+ +

Bien entendu, dans la pratique, les cas peuvent être plus complexes. On peut renvoyer un objet qui contient des méthodes manipulant les variables internes de la fonction parente.

+ +
var créerAnimal  = function (nom) {
+  var sexe;
+
+  return {
+    setNom: function(nouveauNom) {
+      nom = nouveauNom;
+    },
+
+    getNom: function () {
+      return nom;
+    },
+
+    getSexe: function () {
+      return sexe;
+    },
+
+    setSexe: function(nouveauSexe) {
+      if (typeof nouveauSexe == "string" && (nouveauSexe.toLowerCase() == "mâle" || nouveauSexe.toLowerCase() == "femelle")) {
+        sexe = nouveauSexe;
+      }
+    }
+  }
+}
+
+var animal = créerAnimal("Licorne");
+animal.getNom();        // Licorne
+
+animal.setNom("Bobby");
+animal.setSexe("mâle");
+animal.getSexe();       // mâle
+animal.getNom();        // Bobby
+ +

Dans le code précédent, la variable nom est de la fonction externe est accessible depuis les fonctions internes. Il est impossible d'accéder aux variables internes en dehors des fonctions internes. Les variables internes agissent comme des coffres-forts pour les fonctions internes. Elles permettent d'avoir un accès persistent et encapsulé aux données internes. Pour les fonctions, il n'est pas nécessaire de les affecter à une variable ou même de les nommer.

+ +
var getCode = (function (){
+  var codeAPI = "0]Eal(eh&2";    // Un code qu'on ne souhaite pas diffuser ni modifier
+
+  return function () {
+    return codeAPI;
+  };
+})();
+
+getCode();    // Renvoie la valeur du code
+ +

Il y a malgré tout quelques pièges auxquels il faut faire attention lorsqu'on utilise les fermetures. Si une fonction imbriquée définit une variable avec le même nom que le nom d'une variable de la portée externe, il n'y aura plus aucun moyen d'accéder à la variable.

+ +
var créerAnimal = function(nom) {  // La fonction externe définit une variable appelée "nom"
+  return {
+    setNom: function(nom) {    // La fonction imbriquée définit une variable appelée "nom"
+      nom = nom;               // ??? comment accéder à la variable "nom" définie par la fonction externe
+    }
+  }
+}
+ +

L'opérateur this doit être traité avec précaution dans les fermetures. Attention, this fait référence au contexte où la fonction est appelée et non à l'endroit où il est défini.

+ +

Utiliser l'objet arguments

+ +

Les arguments d'une fonction sont maintenus dans un objet semblable à un tableau. Dans une fonction, il est possible d'utiliser les arguments passés à la fonction de la façon suivante :

+ +
arguments[i]
+ +

i représente l'index ordinal de l'argument (le premier argument ayant un indice à 0). On accède donc au premier argument avec arguments[0]. Le nombre total d'arguments est fourni grâce à arguments.length.

+ +

En utilisant l'objet arguments, il est possible de recenser les arguments supplémentaires fournis à la fonction si jamais il y a plus d'arguments fournis que requis. Cet objet est souvent utile si on ne connaît pas le nombre d'arguments passés à la fonction. La propriété arguments.length permet de déterminer le nombre d'arguments réellement passés à la fonction. On peut donc ensuite accéder aux différents arguments en parcourant l'objet arguments.

+ +

Par exemple, on peut construire une fonction qui concatène plusieurs chaînes. Le seul argument formellement défini sera la chaîne utilisée pour concaténer les différentes chaînes. On peut définir la fonction de la façon suivante :

+ +
function monConcat(séparateur) {
+   var result = ""; // on initialise la liste
+   var i;
+   // on parcourt les arguments
+   for (i = 1; i < arguments.length; i++) {
+      result += arguments[i] + séparateur;
+   }
+   return result;
+}
+ +

On peut passer autant d'arguments que nécessaire à cette fonction. Ils seront tous concaténés dans une chaîne finale. Ainsi, on aura :

+ +
// renverra "rouge, orange, bleu, "
+monConcat(", ", "red", "orange", "blue");
+
+// renverra "éléphant; girafe; lion; singe; "
+monConcat("; ", "éléphant", "girafe", "lion", "singe");
+
+// renverra "sauge. basilic. origan. poivre. échalotte. "
+monConcat(". ", "sauge", "basilic", "origan", "poivre", "échalotte");
+ +
+

Note : arguments est une variable « semblable » à un tableau. Mais ce n'est pas un tableau au sens strict. En effet, il possède un index numéroté ainsi qu'une propriété length. En revanche, il ne possède pas les méthodes classiques de manipulation des tableaux (Array).

+
+ +

Voir la page sur l'objet {{jsxref("Function")}} dans la référence JavaScript pour plus d'informations.

+ +

Paramètres des fonctions

+ +

À partir d'ECMAScript 2015, deux sortes de paramètres sont introduites : les paramètres par défaut et les paramètres du reste.

+ +

Les paramètres par défaut

+ +

En JavaScript, par défaut, les paramètres des fonctions vaudront undefined. Il peut toutefois être utile de définir une valeur par défaut différente. Les paramètres par défaut permettent de répondre à ce besoin.

+ +

Avant ECMAScript 2015, la stratégie pour manipuler des valeurs par défaut adaptées était de tester si la valeur du paramètre était indéfinie puis de lui affecter la valeur souhaitée si c'était le cas. Par exemple, dans le code qui suit, on ne fournit pas de valeur pour b dans l'appel, la valeur sera undefined lors de l'évaluation de a*b et l'appel à multiplier aurait renvoyé NaN. Pour éviter ça, la deuxième ligne définit une valeur par défaut au cas où b n'est pas renseigné :

+ +
function multiplier(a, b) {
+  b = typeof b !== 'undefined' ?  b : 1;
+
+  return a*b;
+}
+
+multiplier(5); // 5
+
+ +

Si on peut utiliser les paramètres par défaut, il n'est plus nécessaire de faire l'opération à l'intérieur du corps de la fonction, il suffit de déclarer que la valeur par défaut pour b est 1 dans la signature de la fonction :

+ +
function multiplier(a, b = 1) {
+  return a*b;
+}
+
+multiplier(5); // 5
+ +

Pour plus de détails, voir la page sur les paramètres par défaut dans la référence.

+ +

Les paramètres du reste

+ +

La syntaxe des paramètres du reste permet de représenter un nombre indéfini d'arguments contenus dans un tableau. Dans l'exemple suivant, on utilise les paramètres du reste pour collecter les arguments à partir du deuxième et jusqu'au dernier. Ces arguments sont multipliés par le premier. Dans cet exemple, on utilise une fonction fléchée, concept qui est présenté et illustré dans la section qui suit.

+ +
function multiplier(facteur, ...lesArgs) {
+  return lesArgs.map(x => facteur * x);
+}
+
+var arr = multiplier(2, 1, 2, 3);
+console.log(arr); // [2, 4, 6]
+ +

Fonctions fléchées

+ +

Une expression de fonction fléchée permet d'utiliser une syntaxe plus concise que les expressions de fonctions classiques. Une telle fonction ne possède alors pas de valeur propre pour thisargumentssuper ou new.target. Les fonctions fléchées sont nécessairement anonymes.

+ +

Les fonctions fléchées ont été introduites pour deux raisons principales : une syntaxe plus courte et l'absence de this rattaché à la fonction. Voir aussi ce billet sur tech.mozfr.org sur les fonctions fléchées.

+ +

 

+ +

 

+ +

Concision de la syntaxe

+ +

Dans certaines constructions fonctionnelles, on peut apprécier une syntaxe courte. Par exemple, si on compare les deux dernières lignes de ce fragment de code :

+ +
var a = [
+  "Hydrogen",
+  "Helium",
+  "Lithium",
+  "Beryl­lium"
+];
+
+var a2 = a.map(function(s){ return s.length });
+console.log(a2); // affiche [8, 6, 7, 9]
+var a3 = a.map( s => s.length );
+console.log(a3); // affiche [8, 6, 7, 9]
+ +

Pas de this distinct

+ +

Avant les fonctions fléchées, chaque nouvelle fonction définissait sa propre valeur this (un nouvel objet dans le cas d'un constructeur, undefined lors des appels en mode strict, l'objet courant dans le cas d'une méthode, etc.). Cela pouvait poser quelques problèmes avec un style de programmation orienté objet.

+ +
function Personne() {
+  // Le constructeur Personne() utilise `this` comme lui-même.
+  this.âge = 0;
+
+  setInterval(function grandir() {
+    // En mode non-strict, la fonction grandir() définit `this`
+    // avec l'objet global, qui est donc différent du `this`
+    // défini par le constructeur Person().
+    this.âge++;
+  }, 1000);
+}
+
+var p = new Personne();
+ +

Avec ECMAScript 3/5, ce problème fut résolu avec l'affectation de la valeur de this dans une variable a variable that could be closed over.

+ +
function Personne() {
+  var self = this; // Certains utilisent `that`, d'autres `self`.
+                   // On utilisera l'un des deux et on pas
+                   // l'autre pour être cohérent.
+  self.âge = 0;
+
+  setInterval(function grandir() {
+    // La fonction callback fait référence à la variable `self`
+    // qui est bien la valeur attendue liée à l'objet.
+    self.âge++;
+  }, 1000);
+}
+ +

On aurait aussi pu créer une fonction liée afin que la « bonne » valeur de this soit passée à la fonction grandir().

+ +

Les fonctions fléchées capturent la valeur de this dans le contexte englobant et cela permet de manipuler la valeur pertinente ici :

+ +
function Personne(){
+  this.âge = 0;
+
+  setInterval(() => {
+    this.âge++; // this fait référence à l'objet personne
+  }, 1000);
+}
+
+var p = new Personne();
+ +

Fonctions prédéfinies

+ +

JavaScript possède plusieurs fonctions natives, disponibles au plus haut niveau :

+ +
+
{{jsxref("Objets_globaux/eval","eval()")}}
+
+

La fonction eval() permet d'évaluer du code JavaScript contenu dans une chaîne de caractères.

+
+
{{jsxref("Objets_globaux/uneval","uneval()")}} {{non-standard_inline}}
+
+

La fonction uneval() crée une représentation sous la forme d'une chaîne de caractères pour le code source d'un objet.

+
+
{{jsxref("Objets_globaux/isFinite","isFinite()")}}
+
+

La fonction isFinite() détermine si la valeur passée est un nombre fini. Si nécessaire, le paramètre sera converti en un nombre.

+
+
{{jsxref("Objets_globaux/isNaN","isNaN()")}}
+
+

La fonction isNaN() détermine si une valeur est {{jsxref("NaN")}} ou non. Note : On pourra également utiliser {{jsxref("Number.isNaN()")}} défini avec ECMAScript 6 ou utiliser typeof afin de déterminer si la valeur est Not-A-Number.

+
+
{{jsxref("Objets_globaux/parseFloat","parseFloat()")}}
+
+

La fonction parseFloat() convertit une chaîne de caractères en un nombre flottant.

+
+
{{jsxref("Objets_globaux/parseInt","parseInt()")}}
+
+

La fonction parseInt() convertit une chaîne de caractères et renvoie un entier dans la base donnée.

+
+
{{jsxref("Objets_globaux/decodeURI","decodeURI()")}}
+
+

La fonction decodeURI() décode un Uniform Resource Identifier (URI) créé par {{jsxref("Objets_globaux/encodeURI","encodeURI()")}} ou une méthode similaire.

+
+
{{jsxref("Objets_globaux/decodeURIComponent","decodeURIComponent()")}}
+
+

La fonction decodeURIComponent() décode un composant d'un Uniform Resource Identifier (URI) créé par {{jsxref("Objets_globaux/encodeURIComponent","encodeURIComponent")}} ou une méthode similaire.

+
+
{{jsxref("Objets_globaux/encodeURI","encodeURI()")}}
+
+

La fonction encodeURI() encode un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par un, deux, trois voire quatre séquences d'échappement représentant l'encodage UTF-8 du caractères (quatre séquences seront utilisées uniquement lorsque le caractère est composé d'une paire de deux demi-codets).

+
+
{{jsxref("Objets_globaux/encodeURIComponent","encodeURIComponent()")}}
+
+

La fonction encodeURIComponent() encode un composant d'un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par un, deux, trois voire quatre séquences d'échappement représentant l'encodage UTF-8 du caractères (quatre séquences seront utilisées uniquement lorsque le caractère est composé d'une paire de deux demi-codets).

+
+
{{jsxref("Objets_globaux/escape","escape()")}} {{deprecated_inline}}
+
+

La fonction dépréciée escape() calcule une nouvelle chaîne de caractères pour laquelle certains caractères ont été remplacés par leur séquence d'échappement hexadécimale. Les fonctions {{jsxref("Objets_globaux/encodeURI","encodeURI()")}} ou {{jsxref("Objets_globaux/encodeURIComponent","encodeURIComponent()")}} doivent être utilisées à la place.

+
+
{{jsxref("Objets_globaux/unescape","unescape()")}} {{deprecated_inline}}
+
+

La fonction dépréciée unescape() calcule une nouvelle chaîne de caractères pour laquelle les séquences d'échappement hexadécimales sont remplacées par les caractères qu'elles représentent. Les séquences d'échappement introduites peuvent provenir d'une fonction telle que {{jsxref("Objets_globaux/escape","escape()")}}. unescape est dépréciée et doit être remplacée par {{jsxref("Objets_globaux/decodeURI","decodeURI()")}} ou {{jsxref("Objets_globaux/decodeURIComponent","decodeURIComponent()")}}.

+
+
+ +

{{PreviousNext("Web/JavaScript/Guide/Boucles_et_it%C3%A9ration", "Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs")}}

diff --git a/files/fr/web/javascript/guide/grammar_and_types/index.html b/files/fr/web/javascript/guide/grammar_and_types/index.html deleted file mode 100644 index ce13618846..0000000000 --- a/files/fr/web/javascript/guide/grammar_and_types/index.html +++ /dev/null @@ -1,710 +0,0 @@ ---- -title: Types et grammaire -slug: Web/JavaScript/Guide/Grammar_and_types -tags: - - Guide - - JavaScript -translation_of: Web/JavaScript/Guide/Grammar_and_types -original_slug: Web/JavaScript/Guide/Types_et_grammaire ---- -
 {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Contrôle_du_flux_Gestion_des_erreurs")}}
- -

Ce chapitre décrit les bases de la grammaire et des types de données JavaScript.

- -

Les bases du langage

- -

JavaScript emprunte la plupart des éléments de sa syntaxe à Java, C et C++ mais sa syntaxe est également influencée par Awk, Perl et Python.

- -

JavaScript est sensible à la casse et utilise l'ensemble de caractères Unicode. On pourrait donc tout à fait utiliser le mot früh comme nom de variable :

- -
var früh = "toto";
-typeof Früh; // undefined car JavaScript est sensible à la casse
-
- -

En JavaScript, les instructions sont appelées ({{Glossary("Statement", "statements")}}) et sont séparées par des points-virgules.

- -

Il n'est pas nécessaire d'inclure un point-virgule si l'on écrit une instruction sur une nouvelle ligne. Mais si vous voulez écrire plus d'une déclaration sur une seule ligne, alors elles doivent être séparées par un point-virgule. Ceci étant dit, la bonne pratique est d'inclure un point-virgule après chaque instruction. Les espaces, les tabulations et les caractères de nouvelles lignes sont considérés comme des blancs. Il existe aussi un ensemble de règles pour ajouter automatiquement des points-virgules à la fin des instructions (ASI pour Automatic Semicolon Insertion). Cependant, il est conseillé de toujours ajouter des points-virgules à la fin des instructions afin d'éviter des effets de bord néfastes.

- -

Le texte d'un code source JavaScript est analysé de gauche à droite et est converti en une série d'unités lexicales, de caractères de contrôle, de fins de lignes, de commentaires et de blancs. ECMAScript définit également certains mots-clés et littéraux. Pour plus d'informations, voir la page sur la grammaire lexicale de JavaScript dans la référence JavaScript.

- -

Commentaires

- -

La syntaxe utilisée pour les commentaires est la même que celle utilisée par le C++ et d'autres langages :

- -
// un commentaire sur une ligne
-
-/* un commentaire plus
-   long sur plusieurs lignes
- */
-
-/* Par contre on ne peut pas /* imbriquer des commentaires */ SyntaxError */
-
- -
-

Note : Vous pourrez également rencontrer une troisième forme de commentaires au début de certains fichiers JavaScript comme #!/usr/bin/env node. Ce type de commentaire indique le chemin d'un interpréteur JavaScript spécifique pour exécuter le script. Pour plus de détails, voir la page sur les commentaires d'environnement.

-
- -

Déclarations

- -

Il existe trois types de déclarations de variable en JavaScript.

- -
-
{{jsxref("Instructions/var", "var")}}
-
On déclare une variable, éventuellement en initialisant sa valeur.
-
{{jsxref("Instructions/let", "let")}}
-
On déclare une variable dont la portée est celle du bloc courant, éventuellement en initialisant sa valeur.
-
{{jsxref("Instructions/const", "const")}}
-
On déclare une constante nommée, dont la portée est celle du bloc courant, accessible en lecture seule.
-
- -

Variables

- -

Les variables sont utilisées comme des noms symboliques désignant les valeurs utilisées dans l'application. Les noms des variables sont appelés identifiants. Ces identifiants doivent respecter certaines règles.

- -

Un identifiant JavaScript doit commencer par une lettre, un tiret bas (_) ou un symbole dollar ($). Les caractères qui suivent peuvent être des chiffres (0 à 9).
-À noter : puisque Javascript est sensible aux majuscules et minuscules: les lettres peuvent comprendre les caractères de « A » à « Z » (en majuscule) mais aussi les caractères  de « a » à « z » (en minuscule).

- -

On peut aussi utiliser la plupart lettres Unicode ou ISO 8859-1 (comme å et ü, pour plus de détails, voir ce billet de blog, en anglais) au sein des identifiants. Il est également possible d'utiliser les \uXXXX séquences d'échappement Unicode comme caractères dans les identifiants.

- -

Voici des exemples d'identifiants valides : Nombre_touches, temp99, $credit, et _nom.

- -

Déclaration de variables

- -

Il est possible de déclarer des variables de plusieurs façons :

- - - -

Il est également possible d'affecter une valeur à une variable sans utiliser de mot-clé (ex. x = 42). Cela créera une variable globale non-déclarée. Cette forme génèrera également un avertissement avec le mode strict. Attention, les variables globales non-déclarées peuvent mener à des comportements inattendus et sont considérées comme une mauvaise pratique.

- -

Évaluation de variables

- -

Une variable déclarée grâce à l'instruction var ou let sans valeur initiale définie vaudra {{jsxref("undefined")}}.

- -

Tenter d'accéder à une variable qui n'a pas été déclarée ou tenter d'accéder à un identifiant déclaré avec let avant son initialisation provoquera l'envoi d'une exception {{jsxref("ReferenceError")}}.

- -
var a;
-console.log("La valeur de a est " + a); // La valeur de a est undefined
-
-console.log("La valeur de b est " + b); // La valeur de b est undefined
-var b; // La déclaration de la variable est "remontée" (voir la section ci-après)
-
-console.log("La valeur de x est " + x); // signale une exception ReferenceError
-let x;
-let y;
-console.log("La valeur de y est " + y); // La valeur de y est undefined
-
- -

Il est possible d'utiliser undefined pour déterminer si une variable possède une valeur. Dans l'exemple qui suit, la condition de l'instruction if sera validée car la variable n'a pas été initialisée (elle a simplement été déclarée) :

- -
var input;
-if (input === undefined){
-  faireCeci();
-} else {
-  faireCela();
-}
-
- -

La valeur undefined se comporte comme le booléen false lorsqu'elle est utilisée dans un contexte booléen. Ainsi, le fragment de code qui suit exécutera la fonction maFonction puisque le premier élément de monTableau n'est pas défini :

- -
var monTableau = new Array();
-if (!monTableau[0]){
-  maFunction();
-}
-
- -

La valeur undefined est convertie en {{jsxref("NaN")}} (pour Not a Number : « n'est pas un nombre ») lorsqu'elle est utilisée dans un contexte numérique.

- -
var a;
-a + 2; // NaN
- -

Une variable valant null sera toujours considérée comme 0 dans un contexte numérique et comme false dans un contexte booléen. Par exemple, on aura :

- -
var n = null;
-console.log(n * 32); // Le log affichera 0
- -

Les portées de variables

- -

Lorsqu'une variable est déclarée avec var en dehors des fonctions, elle est appelée variable globale car elle est disponible pour tout le code contenu dans le document. Lorsqu'une variable est déclarée dans une fonction, elle est appelée variable locale car elle n'est disponible qu'au sein de cette fonction.

- -

Avant ECMAScript 2015 (ES6), JavaScript ne définissait pas de portée pour une instruction de bloc ; les éléments du bloc seront locaux pour le code qui contient le bloc (que ce soit une fonction ou le contexte global). Ainsi, l'exemple qui suit affichera 5 car la portée de x est la fonction (ou le contexte global) dans lequel x est déclaré, pas le bloc (correspondant à l'instruction if dans ce cas) :

- -
if (true) {
-  var x = 5;
-}
-console.log(x); // x vaut 5
-
- -

La déclaration {{jsxref("Instructions/let","let")}}, introduite avec ECMAScript 2015, ajoute un nouveau comportement :

- -
if (true) {
-  let y = 5;
-}
-console.log(y); // ReferenceError: y is not defined
-
- -

Remontée de variables (hoisting)

- -

Une autre chose peut paraître étrange en JavaScript : il est possible, sans recevoir d'exception, de faire référence à une variable qui est déclarée plus tard. Ce concept est appelé « remontée » (hoisting en anglais) car, d'une certaine façon, les variables sont remontées en haut de la fonction ou de l'instruction. En revanche, les variables qui n'ont pas encore été initialisées renverront la valeur undefined. Ainsi, même si on déclare une variable et qu'on l'initialise après l'avoir utilisée ou y avoir fait référence, la valeur utilisée « la plus haute » sera toujours undefined.

- -
/**
- * Exemple 1
- */
-console.log(x === undefined); // donne "true"
-var x = 3;
-
-/**
- * Exemple 2
- */
-// renverra undefined
-var maVar = "ma valeur";
-
-(function () {
-  console.log(maVar); // undefined
-  var maVar = "valeur locale";
-})();
-
- -

Les exemples précédents peuvent être reformulés plus explicitement ainsi :

- -
/**
- * Exemple 1
- */
-var x;
-console.log(x === undefined); // donne "true"
-x = 3;
-
-/**
- * Exemple 2
- */
-var maVar = "ma valeur";
-
-(function () {
-  var maVar;
-  console.log(maVar); // undefined
-  maVar = "valeur locale";
-})();
-
- -

C'est pourquoi il est conseillé de placer les instructions var dès que possible dans le code. De plus, cette bonne pratique aide à rendre le code plus lisible.

- -

Avec ECMAScript 2015, let (const) remontera la variable en haut du bloc mais ne l'initialisera pas. Aussi, si on fait référence à la variable dans le bloc avant la déclaration, on obtient une {{jsxref("ReferenceError")}} car la variable est dans une « zone morte temporelle ». entre le début du bloc et le traitement de la déclaration

- -
function faire_quelquechose() {
-  console.log(toto); // ReferenceError
-  let toto = 2;
-}
- -

Remontée de fonctions

- -

En ce qui concerne les fonctions, seules les déclarations de fonctions sont remontées. Pour les expressions de fonctions, il n'y a pas de telle remontée car la variable associée n'a pas encore été affectée avec la valeur finale (comme vu avant) :

- -
/* Déclaration de fonction */
-toto();  // "truc"
-function toto(){
-  console.log("truc");
-}
-
-/* Expression de fonction */
-machin();      // erreur TypeError : machin n'est pas une fonction
-var machin = function() {
-  console.log("titi");
-}
-
- -

Les variables globales

- -

Les variables globales sont en réalité des propriétés de l'objet global. Dans les pages web, l'objet global est {{domxref("window")}}, et on peut donc accéder ou modifier la valeur de variables globales en utilisant la syntaxe suivante : window.variable .

- -

Ainsi, il est possible d'accéder à des variables déclarées dans une fenêtre ou dans un cadre depuis une autre fenêtre ou depuis un autre cadre (frame) en spécifiant son nom. Si, par exemple, une variable appelée numTéléphone est déclarée dans un document FRAMESET, il est possible d'y faire référence, depuis un cadre fils, avec la syntaxe parent.numTéléphone.

- -

Constantes

- -

Il est possible de créer des constantes en lecture seule en utilisant le mot-clé {{jsxref("Instructions/const","const")}}. La syntaxe d'un identifiant pour une constante est la même que pour les variables (elle doit débuter avec une lettre, un tiret du bas, un symbole dollar et peut contenir des caractères numériques, alphabétiques et des tirets bas voire des caractères Unicode).

- -
const préfixe = '212';
-
- -

Une constante ne peut pas changer de valeur grâce à une affectation ou être re-déclarée pendant l'exécution du script.

- -

Les règles de portée des constantes sont les mêmes que pour les variables, à l'exception du mot-clé const qui est obligatoire. S'il est oublié, l'identifiant sera considéré comme celui d'une variable.

- -

Il est impossible de déclarer une constante avec le même nom qu'une autre variable ou fonction dans la même portée.

- -
// Renverra une erreur
-function f() {};
-const f = 5;
-
-// Renverra également une erreur
-function f() {
-  const g = 5;
-  var g;
-
-  //instructions
-}
-
- -

Cependant, les propriétés des objets qui sont affectés comme constantes ne sont pas protégées, on pourra ainsi exécuter sans problème le code suivant :

- -
const MON_OBJET = {"clé": "valeur"};
-MON_OBJET.clé = "autreValeur";
- -

De même, le contenu d'un tableau peut être modifié sans alerte :

- -
const MON_TABLEAU = ["HTML", "CSS"];
-MON_TABLEAU.push("JavaScript");
-console.log(MON_TABLEAU); // ["HTML", "CSS", "JavaScript"]
-
- -

Structures de données et types

- -

Types de données

- -

La dernière version du standard ECMAScript définit sept types de données :

- - - -

Bien que cette description couvre peu de types de données, ceux-ci vous permettent d'implémenter une grande variété de fonctions au sein de vos applications. Les objets et les fonctions sont parmi les briques fondamentales du langage. On peut considérer, à première vue, les objets comme des conteneurs de valeurs et de fonctions pour une application.

- -

Conversion de types de données

- -

JavaScript est un langage à typage dynamique. Cela signifie qu'il n'est pas nécessaire de spécifier le type de données d'une variable lors de sa déclaration. Les types de données sont convertis automatiquement durant l'exécution du script. Ainsi, il est possible de définir une variable de cette façon :

- -
-
var réponse = 42;
-
-
- -

Et plus tard, d'affecter une chaîne de caractères à cette même variable :

- -
-
réponse = "Merci pour le dîner...";
-
-
- -

JavaScript utilisant un typage dynamique, cette dernière instruction ne renverra pas d'erreur.

- -

Lorsque des expressions impliquent des chaînes de caractères et des valeurs numériques ainsi que l'opérateur +, JavaScript convertit les nombres en chaînes de caractères :

- -
x = "La réponse est " + 42; // "La réponse est 42"
-y = 42 + " est la réponse"; // "42 est la réponse"
-
- -

Avec des instructions impliquant d'autres opérateurs, JavaScript ne convertit pas nécessairement les valeurs numériques en chaînes de caractères. Ainsi, on aura :

- -
"37" - 7; // 30
-"37" + 7; // "377"
-
- -

Conversion de chaînes de caractères en nombres

- -

Si un nombre est représenté en mémoire par une chaîne de caractères, il y a des méthodes pour effectuer la bonne conversion :

- - - -

parseInt renverra uniquement des nombres entiers, étant ainsi inappropriée pour la manipulation de nombre décimaux. Une bonne pratique pour cette fonction est de toujours inclure l'argument qui indique dans quelle base numérique le résultat doit être renvoyé (base 2, base 10...).

- -
parseInt("101", 2); // 5
- -

L'opérateur + unaire

- -

Une autre méthode pour récupérer un nombre à partir d'une chaîne de caractères consiste à utiliser l'opérateur +.

- -
"1.1" + "1.1" = "1.11.1"
-+"1.1" = 1.1 // fonctionne seulement avec le + unaire
-
- -

Littéraux

- -

Les littéraux sont utilisés pour représenter des valeurs en JavaScript. Ce sont des valeurs fixes, pas des variables, qui sont fournies littéralement au script. Cette section décrit les différents types de littéraux :

- - - -

Les littéraux de tableaux

- -

Un littéral de tableau est une liste de zéro ou plusieurs expressions, dont chacune représente l'élément d'un tableau, encadrées par des crochets ([]). Lorsqu'un tableau est créé à partir d'un littéral, il est initialisé avec les valeurs spécifiées qui sont ses éléments, sa longueur correspondant au nombre d'arguments donnés.

- -

L'exemple suivant crée ainsi le tableau cafés avec trois éléments et une taille égale à 3 :

- -
var cafés = ["Brésilien", "Colombien", "Kona"];
-
- -
-

Note : Un littéral de tableau est du type d'un initialisateur d'objets. Voir l'utilisation d'initialisateurs d'objets.

-
- -

Si un tableau est créé en utilisant un littéral dans un script du plus haut niveau, JavaScript interprète le tableau chaque fois qu'il évalue l'expression contenant le littéral. De plus, un littéral utilisé dans une fonction est créé chaque fois que la fonction est appelée.

- -

Les littéraux de tableaux sont également des objets Array. Voir la page sur l'objet Array pour plus de détails.

- -

Les virgules supplémentaires

- -

Il n'est pas nécessaire de définir tous les éléments dans un littéral de tableau. Si vous utilisez deux virgules, l'une à la suite de l'autre, le tableau utilisera la valeur undefined pour les éléments non définis. L'exemple qui suit utilise le tableau poisson :

- -
var poisson = ["Clown", , "Chat"];
-
- -

Ce tableau possède deux éléments ayant une valeur et un élément vide (poisson[0] vaut "Clown", poisson[1] vaut undefined, et poisson[2] vaut "Chat").

- -

Si une virgule est ajoutée à la fin de la liste des éléments, elle est ignorée. Dans le prochain exemple, la longueur du tableau est égale à 3. Il n'y a pas d'élément maListe[3]. Les autres virgules indiquent un nouvel élément.

- -
-

Note : Avec d'anciennes versions de navigateurs, les virgules de fin peuvent causer des erreurs, il est fortement conseillé de les retirer.

-
- -
var maListe = ['maison', , 'école', ];
-
- -

Dans l'exemple qui suit, la longueur du tableau est égale à 4 et maListe[0] et maListe[2] sont manquants.

- -
var maListe = [ , 'maison', , 'école'];
-
- -

Dans l'exemple qui suit, la longueur du tableau est égale à 4 et maListe[1] et maListe[3] sont manquants.

- -
var maListe = ['maison', , 'école', , ];
-
- -

Comprendre le fonctionnement des virgules supplémentaires est important. Cependant, lorsque vous écrivez du code, veillez, dès que c'est possible, à déclarer les éléments manquants avec undefined : cela améliorera la lisibilité de votre code et il sera ainsi plus facile à maintenir.

- -

Les littéraux booléens

- -

Le type booléen possède deux valeurs littérales : true et false.

- -

Il ne faut pas confondre les valeurs true et false du type primitif booléen et les valeurs true et false de l'objet Boolean. L'objet Boolean permet de créer un objet autour du type de donnée booléen. Voir la page sur l'objet Boolean pour plus d'informations.

- -

Les littéraux numériques

- -

Les nombres {{jsxref("Number")}} et les grands entiers {{jsxref("BigInt")}} peuvent être exprimés en notation décimale (base 10), hexadécimale (base 16), octale (base 8) et binaire (base 2).

- - - -

Voici des exemples pour ces littéraux :

- -
0, 117, -345, 123456789123456789n (notation décimale, base 10)
-015, 0001, -077, 0o7777777777777n (notation octale, base 8)
-0x1123, 0x00111, -0xF1A7, 0x123456789ABCDEFn (notation hexadécimale, base 16)
-0b11, 0B0011, -0b11, 0b11101001010101010101n (notation binaire, base 2)
-
- -

Pour plus d'informations, voir les littéraux numériques dans la grammaire lexicale de JavaScript.

- -

Les littéraux de nombres décimaux

- -

Un littéral de nombre décimal peut être composé de ces différentes parties :

- - - -

L'exposant est la partie du nombre décimal commençant par un « e » ou un « E », suivie d'un entier pouvant être signé (précédé d'un « + » ou d'un « - »). Un littéral de nombre décimal doit comporter au moins un chiffre et soit un point (séparateur décimal) soit un « e » ou un « E ».

- -

Des exemples sont : 3.1415, -3.1E12, .1e12, et 2E-12.

- -

On peut raccourcir cette syntaxe en :

- -
[(+|-)][chiffres].[chiffres][(E|e)[(+|-)]chiffres]
-
- -

Par exemple :

- -
3.14
-2345.789
-.3333333333333333333
-
- -

Les littéraux d'objets

- -

Un littéral d'objet - ou 'objet littéral' - est une liste de zéro ou plusieurs propriétés définies par des paires de noms/valeurs. Ces paires sont délimitées par des accolades ({}). N'utilisez pas un tel littéral en début d'instruction. En effet, l'accolade ouvrante sera mal interprétée (début de bloc) et causera une erreur ou un comportement incohérent.

- -

L'exemple qui suit montre l'utilisation d'un littéral d'objet. Le premier élément de l'objet voiture définit une propriété maVoiture, le deuxième élément : la propriété getVoiture invoque une fonction (carTypes("Honda")), le troisième élément, la propriété special utilise une variable existante (soldes).

- -
var soldes = "Toyota";
-
-function carTypes(nom) {
-  return (nom === "Honda") ?
-    nom :
-    "Désolé, nous ne vendons pas de " + nom + "." ;
-}
-
-var voiture = { maVoiture: "Saturn", getVoiture: carTypes("Honda"), spécial: soldes };
-
-console.log(voiture.maVoiture);   // Saturn
-console.log(voiture.getVoiture);  // Honda
-console.log(voiture.spécial); // Toyota
-
- -

Il est également possible d'utiliser un littéral numérique ou un littéral de chaîne de caractères pour désigner le nom d'une propriété ou pour imbriquer un objet dans un autre. L'exemple qui suit illustre cette possibilité :

- -
var voiture = { plusieursVoitures: {a: "Saab", b: "Jeep"}, 7: "Mazda" };
-
-console.log(voiture.plusieursVoitures.b); // Jeep
-console.log(voiture[7]); // Mazda
-
- -

Les noms des propriétés d'objets peuvent être n'importe quelle chaîne de caractères, y compris la chaîne vide. Si le nom de la propriété n'est pas un identifiant valide, il faudra qu'il soit placé entre guillemets. Les noms de propriétés qui ne sont pas des identifiants valides ne peuvent pas être utilisés pour accéder à la valeur en utilisant la notation pointée (objet.propriété). En revanche, il est possible d'y accéder avec la notation utilisant les crochets ("[]") comme pour les tableaux.

- -
var nomsBizarres = {
-  "": "Chaîne vide",
-  "!": "Bang !"
-}
-console.log(nomsBizarres."");   // SyntaxError: Unexpected string
-console.log(nomsBizarres[""]);  // Chaîne vide
-console.log(nomsBizarres.!);    // SyntaxError: Unexpected token !
-console.log(nomsBizarres["!"]); // Bang !
-
-
- -

Augmentation des littéraux d'objets avec ES2015/ES6

- -

Avec ES2015, les littéraux d'objets permettent de définir le prototype lors de la construction de l'objet, permettent d'utiliser les affectations en notation raccourcie : toto: toto, de définir des méthodes, d'appeler les méthodes de l'objet parent avec super et d'utiliser des noms de propriétés calculées.

- -
var obj = {
-    // __proto__
-    __proto__: lePrototypeDeLObjet,
-    // Notation raccourcie pour ‘handler: handler’
-    handler,
-    // Méthodes
-    toString() {
-     // Appelle les méthodes de l'objet parent
-     return "d " + super.toString();
-    },
-    // Noms de propriétés calculés dynamiquement
-    [ 'prop_' + (() => 42)() ]: 42
-};
- -

Attention :

- -
var toto = {a: "alpha", 2: "deux"};
-console.log(toto.a);    // alpha
-console.log(toto[2]);   // deux
-//console.log(toto.2);  // Erreur: parenthèse ) manquante après la liste d'argument
-//console.log(toto[a]); // Erreur: a n'est pas défini
-console.log(toto["a"]); // alpha
-console.log(toto["2"]); // deux
-
- -

Les littéraux d'expressions rationnelles

- -

Un littéral d'expression rationnelle est un motif encadré par deux barres obliques. Par exemple :

- -
var re = /ab+c/;
- -

Les littéraux de chaînes de caractères

- -

Un littéral de chaîne de caractères consiste en zéro ou plusieurs caractères encadrés par des guillemets droits doubles (") ou des guillemets droits simples ('). Une chaîne de caractères doit être encadrée par des symboles du même type (guillemets droits doubles ou guillemets droits simples) :

- - - -

Il est possible d'utiliser les méthodes de String sur un tel littéral. JavaScript convertira automatiquement le littéral en un objet String, appellera la méthode puis détruira l'objet String. On peut également utiliser la propriété String.length sur un littéral de chaîne de caractère :

- -
console.log("j'ai mangé une pomme".length)
-// Affichera le nombre de caractères (y compris les blancs).
-// Dans ce cas, 20.
-
- -

Il est préférable d'utiliser des littéraux de chaînes de caractères s'il n'est pas spécifiquement nécessaire d'utiliser un objet String. Voir la page sur l'objet String pour plus de détails sur les objets String.

- -

Avec ECMAScript 2015, on peut également utiliser des littéraux sous forme de gabarits (templates) en utilisant le caractère accent grave (`) comme séparateur. Les gabarits de chaînes de caractères sont semblables aux fonctionnalités d'interpolation existantes en Python, Perl, etc. Ces gabarits permettent d'utiliser des balises afin d'adapter la construction de chaînes.

- -
// Littéral simple pour une chaîne
-`Un saut de ligne '\n' en JavaScript.`
-
-// On peut écrire une chaîne sur plusieurs
-// lignes
-`Dans les gabarits, on peut écrire
-  sur plusieurs lignes. `
-
-// Interpolation de chaîne
-var nom = "Robert", jour = "aujourd'hui";
-`Bonjour ${nom}, comment allez-vous ${jour} ?`
-
-// On peut construire un préfixe HTTP
-// afin de construire plus facilement
-// des requêtes via des substitutions
-POST`http://toto.org/truc?a=${a}&b=${b}
-     Content-Type: application/json
-     X-Credentials: ${credentials}
-     { "toto": ${toto},
-       "truc": ${truc}}`(myOnReadyStateChangeHandler);
- -

Utilisation des caractères spéciaux

- -

En plus des caractères « classiques », il est possible d'insérer des caractères spéciaux dans les chaînes de caractères. Voici un exemple :

- -
"une ligne \n une autre ligne"
-
- -

Voici un tableau listant les caractères spéciaux qu'il est possible d'utiliser dans les chaînes de caractères JavaScript :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caractères spéciaux en JavaScript
CaractèreSignification
\0Octet null
\bRetour arrière
\fSaut de page
\nNouvelle ligne
\rRetour chariot
\tTabulation
\vTabulation verticale
\'Apostrophe ou guillemet droit simple
\"Guillemet droit double
\\Barre oblique inversée
\XXXLe caractère dont l'encodage Latin-1 est spécifié grâce à, au plus, 3 chiffres octaux XXX entre 0 et 377. \251, par exemple représente le caractère copyright.
\xXXLe caractère dont l'encodage Latin-1 est spécifié par deux chiffres hexadécimaux entre 00 et FF. Ainsi, \xA9 correspond à la séquence hexadécimale pour le caractère copyright.
\uXXXXLe caractère Unicode spécifié par quatre chiffres hexadécimaux XXXX. Ainsi, \u00A9 correspondra à la séquence Unicode du symbole copyright. Voir {{anch("Unicode escape sequences")}}.
\u{XXXXX}Échappement de codes Unicode. Par exemple, \u{2F804} est équivalent à la combinaison d'échappements « simples » \uD87E\uDC04.
- -

Les caractères d'échappement

- -

Pour les caractères qui ne font pas partie du tableau précédent, les barres obliques inversées (backslash) les précédant sont ignorées. Cependant, cet usage est obsolète et devrait être évité.

- -

En précédant d'une barre oblique inversée les guillemets droits doubles, on échappe ces caractères. Voici un exemple :

- -
var citation = "Il lit \"Bug Jargal\" de V. Hugo.";
-console.log(citation);
-
- -

Le résultat serait alors

- -
Il lit "Bug Jargal" de V. Hugo.
- -

Pour inclure une barre oblique inversée dans une chaîne de caractères, il faut aussi l'échapper. Par exemple, pour stocker le chemin c:\temp dans une chaîne de caractères, on utilisera le code suivant :

- -
var chemin = "c:\\temp";
-
- -

Il est également possible d'échapper des sauts de lignes de la même façon. La barre oblique inversée et le saut de ligne seront alors ignorés dans la valeur de la chaîne de caractères.

- -
var str = "cette chaîne \
-est cassée \
-sur plusieurs \
-lignes."
-console.log(str);   // cette chaîne est cassée sur plusieurs lignes.
-
- -

Avant ECMAScript 2015 (ES6), JavaScript ne disposait pas d'une syntaxe permettant de traiter les chaînes de caractères comme des contenus de fichier, il est possible d'ajouter un caractère de saut de ligne échappé et un saut de ligne en fin de ligne en utilisant cette façon :

- -
var poème =
-"Les roses sont rouges,\n\
-Les violettes sont bleues.\n\
-Le miel est sucré,\n\
-Et moi je suis."
-
- -

Grâce à ES6, on peut utiliser des littéraux de gabarits qui offrent de nouvelles fonctionnalités dont une qui permet d'avoir des chaînes de caractères écrites sur plusieurs lignes :

- -
var poème =
-`Les roses sont rouges,
-Les violettes sont bleues,
-Le miel est sucré,
-Et moi je suis.`
- -

En savoir plus

- -

Ce chapitre est centré sur les bases de la syntaxe, les déclarations et les types utilisés en JavaScript. Pour en savoir plus sur les différents composants du langage, voir les chapitres suivants du guide:

- - - -

Dans le chapitre suivant, on abordera les structures conditionnelles, permettant de diriger le flux d'instructions et la gestion des erreurs.

- -

{{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Contrôle_du_flux_Gestion_des_erreurs")}}

diff --git a/files/fr/web/javascript/guide/grammar_and_types/index.md b/files/fr/web/javascript/guide/grammar_and_types/index.md new file mode 100644 index 0000000000..ce13618846 --- /dev/null +++ b/files/fr/web/javascript/guide/grammar_and_types/index.md @@ -0,0 +1,710 @@ +--- +title: Types et grammaire +slug: Web/JavaScript/Guide/Grammar_and_types +tags: + - Guide + - JavaScript +translation_of: Web/JavaScript/Guide/Grammar_and_types +original_slug: Web/JavaScript/Guide/Types_et_grammaire +--- +
 {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Contrôle_du_flux_Gestion_des_erreurs")}}
+ +

Ce chapitre décrit les bases de la grammaire et des types de données JavaScript.

+ +

Les bases du langage

+ +

JavaScript emprunte la plupart des éléments de sa syntaxe à Java, C et C++ mais sa syntaxe est également influencée par Awk, Perl et Python.

+ +

JavaScript est sensible à la casse et utilise l'ensemble de caractères Unicode. On pourrait donc tout à fait utiliser le mot früh comme nom de variable :

+ +
var früh = "toto";
+typeof Früh; // undefined car JavaScript est sensible à la casse
+
+ +

En JavaScript, les instructions sont appelées ({{Glossary("Statement", "statements")}}) et sont séparées par des points-virgules.

+ +

Il n'est pas nécessaire d'inclure un point-virgule si l'on écrit une instruction sur une nouvelle ligne. Mais si vous voulez écrire plus d'une déclaration sur une seule ligne, alors elles doivent être séparées par un point-virgule. Ceci étant dit, la bonne pratique est d'inclure un point-virgule après chaque instruction. Les espaces, les tabulations et les caractères de nouvelles lignes sont considérés comme des blancs. Il existe aussi un ensemble de règles pour ajouter automatiquement des points-virgules à la fin des instructions (ASI pour Automatic Semicolon Insertion). Cependant, il est conseillé de toujours ajouter des points-virgules à la fin des instructions afin d'éviter des effets de bord néfastes.

+ +

Le texte d'un code source JavaScript est analysé de gauche à droite et est converti en une série d'unités lexicales, de caractères de contrôle, de fins de lignes, de commentaires et de blancs. ECMAScript définit également certains mots-clés et littéraux. Pour plus d'informations, voir la page sur la grammaire lexicale de JavaScript dans la référence JavaScript.

+ +

Commentaires

+ +

La syntaxe utilisée pour les commentaires est la même que celle utilisée par le C++ et d'autres langages :

+ +
// un commentaire sur une ligne
+
+/* un commentaire plus
+   long sur plusieurs lignes
+ */
+
+/* Par contre on ne peut pas /* imbriquer des commentaires */ SyntaxError */
+
+ +
+

Note : Vous pourrez également rencontrer une troisième forme de commentaires au début de certains fichiers JavaScript comme #!/usr/bin/env node. Ce type de commentaire indique le chemin d'un interpréteur JavaScript spécifique pour exécuter le script. Pour plus de détails, voir la page sur les commentaires d'environnement.

+
+ +

Déclarations

+ +

Il existe trois types de déclarations de variable en JavaScript.

+ +
+
{{jsxref("Instructions/var", "var")}}
+
On déclare une variable, éventuellement en initialisant sa valeur.
+
{{jsxref("Instructions/let", "let")}}
+
On déclare une variable dont la portée est celle du bloc courant, éventuellement en initialisant sa valeur.
+
{{jsxref("Instructions/const", "const")}}
+
On déclare une constante nommée, dont la portée est celle du bloc courant, accessible en lecture seule.
+
+ +

Variables

+ +

Les variables sont utilisées comme des noms symboliques désignant les valeurs utilisées dans l'application. Les noms des variables sont appelés identifiants. Ces identifiants doivent respecter certaines règles.

+ +

Un identifiant JavaScript doit commencer par une lettre, un tiret bas (_) ou un symbole dollar ($). Les caractères qui suivent peuvent être des chiffres (0 à 9).
+À noter : puisque Javascript est sensible aux majuscules et minuscules: les lettres peuvent comprendre les caractères de « A » à « Z » (en majuscule) mais aussi les caractères  de « a » à « z » (en minuscule).

+ +

On peut aussi utiliser la plupart lettres Unicode ou ISO 8859-1 (comme å et ü, pour plus de détails, voir ce billet de blog, en anglais) au sein des identifiants. Il est également possible d'utiliser les \uXXXX séquences d'échappement Unicode comme caractères dans les identifiants.

+ +

Voici des exemples d'identifiants valides : Nombre_touches, temp99, $credit, et _nom.

+ +

Déclaration de variables

+ +

Il est possible de déclarer des variables de plusieurs façons :

+ + + +

Il est également possible d'affecter une valeur à une variable sans utiliser de mot-clé (ex. x = 42). Cela créera une variable globale non-déclarée. Cette forme génèrera également un avertissement avec le mode strict. Attention, les variables globales non-déclarées peuvent mener à des comportements inattendus et sont considérées comme une mauvaise pratique.

+ +

Évaluation de variables

+ +

Une variable déclarée grâce à l'instruction var ou let sans valeur initiale définie vaudra {{jsxref("undefined")}}.

+ +

Tenter d'accéder à une variable qui n'a pas été déclarée ou tenter d'accéder à un identifiant déclaré avec let avant son initialisation provoquera l'envoi d'une exception {{jsxref("ReferenceError")}}.

+ +
var a;
+console.log("La valeur de a est " + a); // La valeur de a est undefined
+
+console.log("La valeur de b est " + b); // La valeur de b est undefined
+var b; // La déclaration de la variable est "remontée" (voir la section ci-après)
+
+console.log("La valeur de x est " + x); // signale une exception ReferenceError
+let x;
+let y;
+console.log("La valeur de y est " + y); // La valeur de y est undefined
+
+ +

Il est possible d'utiliser undefined pour déterminer si une variable possède une valeur. Dans l'exemple qui suit, la condition de l'instruction if sera validée car la variable n'a pas été initialisée (elle a simplement été déclarée) :

+ +
var input;
+if (input === undefined){
+  faireCeci();
+} else {
+  faireCela();
+}
+
+ +

La valeur undefined se comporte comme le booléen false lorsqu'elle est utilisée dans un contexte booléen. Ainsi, le fragment de code qui suit exécutera la fonction maFonction puisque le premier élément de monTableau n'est pas défini :

+ +
var monTableau = new Array();
+if (!monTableau[0]){
+  maFunction();
+}
+
+ +

La valeur undefined est convertie en {{jsxref("NaN")}} (pour Not a Number : « n'est pas un nombre ») lorsqu'elle est utilisée dans un contexte numérique.

+ +
var a;
+a + 2; // NaN
+ +

Une variable valant null sera toujours considérée comme 0 dans un contexte numérique et comme false dans un contexte booléen. Par exemple, on aura :

+ +
var n = null;
+console.log(n * 32); // Le log affichera 0
+ +

Les portées de variables

+ +

Lorsqu'une variable est déclarée avec var en dehors des fonctions, elle est appelée variable globale car elle est disponible pour tout le code contenu dans le document. Lorsqu'une variable est déclarée dans une fonction, elle est appelée variable locale car elle n'est disponible qu'au sein de cette fonction.

+ +

Avant ECMAScript 2015 (ES6), JavaScript ne définissait pas de portée pour une instruction de bloc ; les éléments du bloc seront locaux pour le code qui contient le bloc (que ce soit une fonction ou le contexte global). Ainsi, l'exemple qui suit affichera 5 car la portée de x est la fonction (ou le contexte global) dans lequel x est déclaré, pas le bloc (correspondant à l'instruction if dans ce cas) :

+ +
if (true) {
+  var x = 5;
+}
+console.log(x); // x vaut 5
+
+ +

La déclaration {{jsxref("Instructions/let","let")}}, introduite avec ECMAScript 2015, ajoute un nouveau comportement :

+ +
if (true) {
+  let y = 5;
+}
+console.log(y); // ReferenceError: y is not defined
+
+ +

Remontée de variables (hoisting)

+ +

Une autre chose peut paraître étrange en JavaScript : il est possible, sans recevoir d'exception, de faire référence à une variable qui est déclarée plus tard. Ce concept est appelé « remontée » (hoisting en anglais) car, d'une certaine façon, les variables sont remontées en haut de la fonction ou de l'instruction. En revanche, les variables qui n'ont pas encore été initialisées renverront la valeur undefined. Ainsi, même si on déclare une variable et qu'on l'initialise après l'avoir utilisée ou y avoir fait référence, la valeur utilisée « la plus haute » sera toujours undefined.

+ +
/**
+ * Exemple 1
+ */
+console.log(x === undefined); // donne "true"
+var x = 3;
+
+/**
+ * Exemple 2
+ */
+// renverra undefined
+var maVar = "ma valeur";
+
+(function () {
+  console.log(maVar); // undefined
+  var maVar = "valeur locale";
+})();
+
+ +

Les exemples précédents peuvent être reformulés plus explicitement ainsi :

+ +
/**
+ * Exemple 1
+ */
+var x;
+console.log(x === undefined); // donne "true"
+x = 3;
+
+/**
+ * Exemple 2
+ */
+var maVar = "ma valeur";
+
+(function () {
+  var maVar;
+  console.log(maVar); // undefined
+  maVar = "valeur locale";
+})();
+
+ +

C'est pourquoi il est conseillé de placer les instructions var dès que possible dans le code. De plus, cette bonne pratique aide à rendre le code plus lisible.

+ +

Avec ECMAScript 2015, let (const) remontera la variable en haut du bloc mais ne l'initialisera pas. Aussi, si on fait référence à la variable dans le bloc avant la déclaration, on obtient une {{jsxref("ReferenceError")}} car la variable est dans une « zone morte temporelle ». entre le début du bloc et le traitement de la déclaration

+ +
function faire_quelquechose() {
+  console.log(toto); // ReferenceError
+  let toto = 2;
+}
+ +

Remontée de fonctions

+ +

En ce qui concerne les fonctions, seules les déclarations de fonctions sont remontées. Pour les expressions de fonctions, il n'y a pas de telle remontée car la variable associée n'a pas encore été affectée avec la valeur finale (comme vu avant) :

+ +
/* Déclaration de fonction */
+toto();  // "truc"
+function toto(){
+  console.log("truc");
+}
+
+/* Expression de fonction */
+machin();      // erreur TypeError : machin n'est pas une fonction
+var machin = function() {
+  console.log("titi");
+}
+
+ +

Les variables globales

+ +

Les variables globales sont en réalité des propriétés de l'objet global. Dans les pages web, l'objet global est {{domxref("window")}}, et on peut donc accéder ou modifier la valeur de variables globales en utilisant la syntaxe suivante : window.variable .

+ +

Ainsi, il est possible d'accéder à des variables déclarées dans une fenêtre ou dans un cadre depuis une autre fenêtre ou depuis un autre cadre (frame) en spécifiant son nom. Si, par exemple, une variable appelée numTéléphone est déclarée dans un document FRAMESET, il est possible d'y faire référence, depuis un cadre fils, avec la syntaxe parent.numTéléphone.

+ +

Constantes

+ +

Il est possible de créer des constantes en lecture seule en utilisant le mot-clé {{jsxref("Instructions/const","const")}}. La syntaxe d'un identifiant pour une constante est la même que pour les variables (elle doit débuter avec une lettre, un tiret du bas, un symbole dollar et peut contenir des caractères numériques, alphabétiques et des tirets bas voire des caractères Unicode).

+ +
const préfixe = '212';
+
+ +

Une constante ne peut pas changer de valeur grâce à une affectation ou être re-déclarée pendant l'exécution du script.

+ +

Les règles de portée des constantes sont les mêmes que pour les variables, à l'exception du mot-clé const qui est obligatoire. S'il est oublié, l'identifiant sera considéré comme celui d'une variable.

+ +

Il est impossible de déclarer une constante avec le même nom qu'une autre variable ou fonction dans la même portée.

+ +
// Renverra une erreur
+function f() {};
+const f = 5;
+
+// Renverra également une erreur
+function f() {
+  const g = 5;
+  var g;
+
+  //instructions
+}
+
+ +

Cependant, les propriétés des objets qui sont affectés comme constantes ne sont pas protégées, on pourra ainsi exécuter sans problème le code suivant :

+ +
const MON_OBJET = {"clé": "valeur"};
+MON_OBJET.clé = "autreValeur";
+ +

De même, le contenu d'un tableau peut être modifié sans alerte :

+ +
const MON_TABLEAU = ["HTML", "CSS"];
+MON_TABLEAU.push("JavaScript");
+console.log(MON_TABLEAU); // ["HTML", "CSS", "JavaScript"]
+
+ +

Structures de données et types

+ +

Types de données

+ +

La dernière version du standard ECMAScript définit sept types de données :

+ + + +

Bien que cette description couvre peu de types de données, ceux-ci vous permettent d'implémenter une grande variété de fonctions au sein de vos applications. Les objets et les fonctions sont parmi les briques fondamentales du langage. On peut considérer, à première vue, les objets comme des conteneurs de valeurs et de fonctions pour une application.

+ +

Conversion de types de données

+ +

JavaScript est un langage à typage dynamique. Cela signifie qu'il n'est pas nécessaire de spécifier le type de données d'une variable lors de sa déclaration. Les types de données sont convertis automatiquement durant l'exécution du script. Ainsi, il est possible de définir une variable de cette façon :

+ +
+
var réponse = 42;
+
+
+ +

Et plus tard, d'affecter une chaîne de caractères à cette même variable :

+ +
+
réponse = "Merci pour le dîner...";
+
+
+ +

JavaScript utilisant un typage dynamique, cette dernière instruction ne renverra pas d'erreur.

+ +

Lorsque des expressions impliquent des chaînes de caractères et des valeurs numériques ainsi que l'opérateur +, JavaScript convertit les nombres en chaînes de caractères :

+ +
x = "La réponse est " + 42; // "La réponse est 42"
+y = 42 + " est la réponse"; // "42 est la réponse"
+
+ +

Avec des instructions impliquant d'autres opérateurs, JavaScript ne convertit pas nécessairement les valeurs numériques en chaînes de caractères. Ainsi, on aura :

+ +
"37" - 7; // 30
+"37" + 7; // "377"
+
+ +

Conversion de chaînes de caractères en nombres

+ +

Si un nombre est représenté en mémoire par une chaîne de caractères, il y a des méthodes pour effectuer la bonne conversion :

+ + + +

parseInt renverra uniquement des nombres entiers, étant ainsi inappropriée pour la manipulation de nombre décimaux. Une bonne pratique pour cette fonction est de toujours inclure l'argument qui indique dans quelle base numérique le résultat doit être renvoyé (base 2, base 10...).

+ +
parseInt("101", 2); // 5
+ +

L'opérateur + unaire

+ +

Une autre méthode pour récupérer un nombre à partir d'une chaîne de caractères consiste à utiliser l'opérateur +.

+ +
"1.1" + "1.1" = "1.11.1"
++"1.1" = 1.1 // fonctionne seulement avec le + unaire
+
+ +

Littéraux

+ +

Les littéraux sont utilisés pour représenter des valeurs en JavaScript. Ce sont des valeurs fixes, pas des variables, qui sont fournies littéralement au script. Cette section décrit les différents types de littéraux :

+ + + +

Les littéraux de tableaux

+ +

Un littéral de tableau est une liste de zéro ou plusieurs expressions, dont chacune représente l'élément d'un tableau, encadrées par des crochets ([]). Lorsqu'un tableau est créé à partir d'un littéral, il est initialisé avec les valeurs spécifiées qui sont ses éléments, sa longueur correspondant au nombre d'arguments donnés.

+ +

L'exemple suivant crée ainsi le tableau cafés avec trois éléments et une taille égale à 3 :

+ +
var cafés = ["Brésilien", "Colombien", "Kona"];
+
+ +
+

Note : Un littéral de tableau est du type d'un initialisateur d'objets. Voir l'utilisation d'initialisateurs d'objets.

+
+ +

Si un tableau est créé en utilisant un littéral dans un script du plus haut niveau, JavaScript interprète le tableau chaque fois qu'il évalue l'expression contenant le littéral. De plus, un littéral utilisé dans une fonction est créé chaque fois que la fonction est appelée.

+ +

Les littéraux de tableaux sont également des objets Array. Voir la page sur l'objet Array pour plus de détails.

+ +

Les virgules supplémentaires

+ +

Il n'est pas nécessaire de définir tous les éléments dans un littéral de tableau. Si vous utilisez deux virgules, l'une à la suite de l'autre, le tableau utilisera la valeur undefined pour les éléments non définis. L'exemple qui suit utilise le tableau poisson :

+ +
var poisson = ["Clown", , "Chat"];
+
+ +

Ce tableau possède deux éléments ayant une valeur et un élément vide (poisson[0] vaut "Clown", poisson[1] vaut undefined, et poisson[2] vaut "Chat").

+ +

Si une virgule est ajoutée à la fin de la liste des éléments, elle est ignorée. Dans le prochain exemple, la longueur du tableau est égale à 3. Il n'y a pas d'élément maListe[3]. Les autres virgules indiquent un nouvel élément.

+ +
+

Note : Avec d'anciennes versions de navigateurs, les virgules de fin peuvent causer des erreurs, il est fortement conseillé de les retirer.

+
+ +
var maListe = ['maison', , 'école', ];
+
+ +

Dans l'exemple qui suit, la longueur du tableau est égale à 4 et maListe[0] et maListe[2] sont manquants.

+ +
var maListe = [ , 'maison', , 'école'];
+
+ +

Dans l'exemple qui suit, la longueur du tableau est égale à 4 et maListe[1] et maListe[3] sont manquants.

+ +
var maListe = ['maison', , 'école', , ];
+
+ +

Comprendre le fonctionnement des virgules supplémentaires est important. Cependant, lorsque vous écrivez du code, veillez, dès que c'est possible, à déclarer les éléments manquants avec undefined : cela améliorera la lisibilité de votre code et il sera ainsi plus facile à maintenir.

+ +

Les littéraux booléens

+ +

Le type booléen possède deux valeurs littérales : true et false.

+ +

Il ne faut pas confondre les valeurs true et false du type primitif booléen et les valeurs true et false de l'objet Boolean. L'objet Boolean permet de créer un objet autour du type de donnée booléen. Voir la page sur l'objet Boolean pour plus d'informations.

+ +

Les littéraux numériques

+ +

Les nombres {{jsxref("Number")}} et les grands entiers {{jsxref("BigInt")}} peuvent être exprimés en notation décimale (base 10), hexadécimale (base 16), octale (base 8) et binaire (base 2).

+ + + +

Voici des exemples pour ces littéraux :

+ +
0, 117, -345, 123456789123456789n (notation décimale, base 10)
+015, 0001, -077, 0o7777777777777n (notation octale, base 8)
+0x1123, 0x00111, -0xF1A7, 0x123456789ABCDEFn (notation hexadécimale, base 16)
+0b11, 0B0011, -0b11, 0b11101001010101010101n (notation binaire, base 2)
+
+ +

Pour plus d'informations, voir les littéraux numériques dans la grammaire lexicale de JavaScript.

+ +

Les littéraux de nombres décimaux

+ +

Un littéral de nombre décimal peut être composé de ces différentes parties :

+ + + +

L'exposant est la partie du nombre décimal commençant par un « e » ou un « E », suivie d'un entier pouvant être signé (précédé d'un « + » ou d'un « - »). Un littéral de nombre décimal doit comporter au moins un chiffre et soit un point (séparateur décimal) soit un « e » ou un « E ».

+ +

Des exemples sont : 3.1415, -3.1E12, .1e12, et 2E-12.

+ +

On peut raccourcir cette syntaxe en :

+ +
[(+|-)][chiffres].[chiffres][(E|e)[(+|-)]chiffres]
+
+ +

Par exemple :

+ +
3.14
+2345.789
+.3333333333333333333
+
+ +

Les littéraux d'objets

+ +

Un littéral d'objet - ou 'objet littéral' - est une liste de zéro ou plusieurs propriétés définies par des paires de noms/valeurs. Ces paires sont délimitées par des accolades ({}). N'utilisez pas un tel littéral en début d'instruction. En effet, l'accolade ouvrante sera mal interprétée (début de bloc) et causera une erreur ou un comportement incohérent.

+ +

L'exemple qui suit montre l'utilisation d'un littéral d'objet. Le premier élément de l'objet voiture définit une propriété maVoiture, le deuxième élément : la propriété getVoiture invoque une fonction (carTypes("Honda")), le troisième élément, la propriété special utilise une variable existante (soldes).

+ +
var soldes = "Toyota";
+
+function carTypes(nom) {
+  return (nom === "Honda") ?
+    nom :
+    "Désolé, nous ne vendons pas de " + nom + "." ;
+}
+
+var voiture = { maVoiture: "Saturn", getVoiture: carTypes("Honda"), spécial: soldes };
+
+console.log(voiture.maVoiture);   // Saturn
+console.log(voiture.getVoiture);  // Honda
+console.log(voiture.spécial); // Toyota
+
+ +

Il est également possible d'utiliser un littéral numérique ou un littéral de chaîne de caractères pour désigner le nom d'une propriété ou pour imbriquer un objet dans un autre. L'exemple qui suit illustre cette possibilité :

+ +
var voiture = { plusieursVoitures: {a: "Saab", b: "Jeep"}, 7: "Mazda" };
+
+console.log(voiture.plusieursVoitures.b); // Jeep
+console.log(voiture[7]); // Mazda
+
+ +

Les noms des propriétés d'objets peuvent être n'importe quelle chaîne de caractères, y compris la chaîne vide. Si le nom de la propriété n'est pas un identifiant valide, il faudra qu'il soit placé entre guillemets. Les noms de propriétés qui ne sont pas des identifiants valides ne peuvent pas être utilisés pour accéder à la valeur en utilisant la notation pointée (objet.propriété). En revanche, il est possible d'y accéder avec la notation utilisant les crochets ("[]") comme pour les tableaux.

+ +
var nomsBizarres = {
+  "": "Chaîne vide",
+  "!": "Bang !"
+}
+console.log(nomsBizarres."");   // SyntaxError: Unexpected string
+console.log(nomsBizarres[""]);  // Chaîne vide
+console.log(nomsBizarres.!);    // SyntaxError: Unexpected token !
+console.log(nomsBizarres["!"]); // Bang !
+
+
+ +

Augmentation des littéraux d'objets avec ES2015/ES6

+ +

Avec ES2015, les littéraux d'objets permettent de définir le prototype lors de la construction de l'objet, permettent d'utiliser les affectations en notation raccourcie : toto: toto, de définir des méthodes, d'appeler les méthodes de l'objet parent avec super et d'utiliser des noms de propriétés calculées.

+ +
var obj = {
+    // __proto__
+    __proto__: lePrototypeDeLObjet,
+    // Notation raccourcie pour ‘handler: handler’
+    handler,
+    // Méthodes
+    toString() {
+     // Appelle les méthodes de l'objet parent
+     return "d " + super.toString();
+    },
+    // Noms de propriétés calculés dynamiquement
+    [ 'prop_' + (() => 42)() ]: 42
+};
+ +

Attention :

+ +
var toto = {a: "alpha", 2: "deux"};
+console.log(toto.a);    // alpha
+console.log(toto[2]);   // deux
+//console.log(toto.2);  // Erreur: parenthèse ) manquante après la liste d'argument
+//console.log(toto[a]); // Erreur: a n'est pas défini
+console.log(toto["a"]); // alpha
+console.log(toto["2"]); // deux
+
+ +

Les littéraux d'expressions rationnelles

+ +

Un littéral d'expression rationnelle est un motif encadré par deux barres obliques. Par exemple :

+ +
var re = /ab+c/;
+ +

Les littéraux de chaînes de caractères

+ +

Un littéral de chaîne de caractères consiste en zéro ou plusieurs caractères encadrés par des guillemets droits doubles (") ou des guillemets droits simples ('). Une chaîne de caractères doit être encadrée par des symboles du même type (guillemets droits doubles ou guillemets droits simples) :

+ + + +

Il est possible d'utiliser les méthodes de String sur un tel littéral. JavaScript convertira automatiquement le littéral en un objet String, appellera la méthode puis détruira l'objet String. On peut également utiliser la propriété String.length sur un littéral de chaîne de caractère :

+ +
console.log("j'ai mangé une pomme".length)
+// Affichera le nombre de caractères (y compris les blancs).
+// Dans ce cas, 20.
+
+ +

Il est préférable d'utiliser des littéraux de chaînes de caractères s'il n'est pas spécifiquement nécessaire d'utiliser un objet String. Voir la page sur l'objet String pour plus de détails sur les objets String.

+ +

Avec ECMAScript 2015, on peut également utiliser des littéraux sous forme de gabarits (templates) en utilisant le caractère accent grave (`) comme séparateur. Les gabarits de chaînes de caractères sont semblables aux fonctionnalités d'interpolation existantes en Python, Perl, etc. Ces gabarits permettent d'utiliser des balises afin d'adapter la construction de chaînes.

+ +
// Littéral simple pour une chaîne
+`Un saut de ligne '\n' en JavaScript.`
+
+// On peut écrire une chaîne sur plusieurs
+// lignes
+`Dans les gabarits, on peut écrire
+  sur plusieurs lignes. `
+
+// Interpolation de chaîne
+var nom = "Robert", jour = "aujourd'hui";
+`Bonjour ${nom}, comment allez-vous ${jour} ?`
+
+// On peut construire un préfixe HTTP
+// afin de construire plus facilement
+// des requêtes via des substitutions
+POST`http://toto.org/truc?a=${a}&b=${b}
+     Content-Type: application/json
+     X-Credentials: ${credentials}
+     { "toto": ${toto},
+       "truc": ${truc}}`(myOnReadyStateChangeHandler);
+ +

Utilisation des caractères spéciaux

+ +

En plus des caractères « classiques », il est possible d'insérer des caractères spéciaux dans les chaînes de caractères. Voici un exemple :

+ +
"une ligne \n une autre ligne"
+
+ +

Voici un tableau listant les caractères spéciaux qu'il est possible d'utiliser dans les chaînes de caractères JavaScript :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caractères spéciaux en JavaScript
CaractèreSignification
\0Octet null
\bRetour arrière
\fSaut de page
\nNouvelle ligne
\rRetour chariot
\tTabulation
\vTabulation verticale
\'Apostrophe ou guillemet droit simple
\"Guillemet droit double
\\Barre oblique inversée
\XXXLe caractère dont l'encodage Latin-1 est spécifié grâce à, au plus, 3 chiffres octaux XXX entre 0 et 377. \251, par exemple représente le caractère copyright.
\xXXLe caractère dont l'encodage Latin-1 est spécifié par deux chiffres hexadécimaux entre 00 et FF. Ainsi, \xA9 correspond à la séquence hexadécimale pour le caractère copyright.
\uXXXXLe caractère Unicode spécifié par quatre chiffres hexadécimaux XXXX. Ainsi, \u00A9 correspondra à la séquence Unicode du symbole copyright. Voir {{anch("Unicode escape sequences")}}.
\u{XXXXX}Échappement de codes Unicode. Par exemple, \u{2F804} est équivalent à la combinaison d'échappements « simples » \uD87E\uDC04.
+ +

Les caractères d'échappement

+ +

Pour les caractères qui ne font pas partie du tableau précédent, les barres obliques inversées (backslash) les précédant sont ignorées. Cependant, cet usage est obsolète et devrait être évité.

+ +

En précédant d'une barre oblique inversée les guillemets droits doubles, on échappe ces caractères. Voici un exemple :

+ +
var citation = "Il lit \"Bug Jargal\" de V. Hugo.";
+console.log(citation);
+
+ +

Le résultat serait alors

+ +
Il lit "Bug Jargal" de V. Hugo.
+ +

Pour inclure une barre oblique inversée dans une chaîne de caractères, il faut aussi l'échapper. Par exemple, pour stocker le chemin c:\temp dans une chaîne de caractères, on utilisera le code suivant :

+ +
var chemin = "c:\\temp";
+
+ +

Il est également possible d'échapper des sauts de lignes de la même façon. La barre oblique inversée et le saut de ligne seront alors ignorés dans la valeur de la chaîne de caractères.

+ +
var str = "cette chaîne \
+est cassée \
+sur plusieurs \
+lignes."
+console.log(str);   // cette chaîne est cassée sur plusieurs lignes.
+
+ +

Avant ECMAScript 2015 (ES6), JavaScript ne disposait pas d'une syntaxe permettant de traiter les chaînes de caractères comme des contenus de fichier, il est possible d'ajouter un caractère de saut de ligne échappé et un saut de ligne en fin de ligne en utilisant cette façon :

+ +
var poème =
+"Les roses sont rouges,\n\
+Les violettes sont bleues.\n\
+Le miel est sucré,\n\
+Et moi je suis."
+
+ +

Grâce à ES6, on peut utiliser des littéraux de gabarits qui offrent de nouvelles fonctionnalités dont une qui permet d'avoir des chaînes de caractères écrites sur plusieurs lignes :

+ +
var poème =
+`Les roses sont rouges,
+Les violettes sont bleues,
+Le miel est sucré,
+Et moi je suis.`
+ +

En savoir plus

+ +

Ce chapitre est centré sur les bases de la syntaxe, les déclarations et les types utilisés en JavaScript. Pour en savoir plus sur les différents composants du langage, voir les chapitres suivants du guide:

+ + + +

Dans le chapitre suivant, on abordera les structures conditionnelles, permettant de diriger le flux d'instructions et la gestion des erreurs.

+ +

{{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Contrôle_du_flux_Gestion_des_erreurs")}}

diff --git a/files/fr/web/javascript/guide/index.html b/files/fr/web/javascript/guide/index.html deleted file mode 100644 index ef708eef08..0000000000 --- a/files/fr/web/javascript/guide/index.html +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: Guide JavaScript -slug: Web/JavaScript/Guide -tags: - - Guide - - JavaScript -translation_of: Web/JavaScript/Guide ---- -
{{jsSidebar("JavaScript Guide")}}
- -

Le guide JavaScript illustre comment utiliser JavaScript et fournit un aperçu des fonctionnalités du langage. Pour des informations exhaustives à propos des fonctionnalités du langage, voir la référence JavaScript.

- -

Chapitres

- -

Ce guide est divisé en plusieurs chapitres :

- -

Introduction

- - - -

Grammaire et types

- - - -

Contrôle du flux et gestion des erreurs

- - - -

Itération et boucles

- - - -

Fonctions

- - - -

Expressions et opérateurs

- - - -

Nombres et dates

- - - -

Formatage du texte

- - - - -

Collections indexées

- - - -

Collections avec clés - Map

- - - -

Utiliser les objets

- - - -

Le modèle objet JavaScript en détails

- - - -

Promesses

- - - -

Itérateurs et générateurs

- - - -

Métaprogrammation

- - - -

Modules JavaScript

- - - -

{{Next("Web/JavaScript/Guide/Introduction")}}

diff --git a/files/fr/web/javascript/guide/index.md b/files/fr/web/javascript/guide/index.md new file mode 100644 index 0000000000..ef708eef08 --- /dev/null +++ b/files/fr/web/javascript/guide/index.md @@ -0,0 +1,169 @@ +--- +title: Guide JavaScript +slug: Web/JavaScript/Guide +tags: + - Guide + - JavaScript +translation_of: Web/JavaScript/Guide +--- +
{{jsSidebar("JavaScript Guide")}}
+ +

Le guide JavaScript illustre comment utiliser JavaScript et fournit un aperçu des fonctionnalités du langage. Pour des informations exhaustives à propos des fonctionnalités du langage, voir la référence JavaScript.

+ +

Chapitres

+ +

Ce guide est divisé en plusieurs chapitres :

+ +

Introduction

+ + + +

Grammaire et types

+ + + +

Contrôle du flux et gestion des erreurs

+ + + +

Itération et boucles

+ + + +

Fonctions

+ + + +

Expressions et opérateurs

+ + + +

Nombres et dates

+ + + +

Formatage du texte

+ + + + +

Collections indexées

+ + + +

Collections avec clés - Map

+ + + +

Utiliser les objets

+ + + +

Le modèle objet JavaScript en détails

+ + + +

Promesses

+ + + +

Itérateurs et générateurs

+ + + +

Métaprogrammation

+ + + +

Modules JavaScript

+ + + +

{{Next("Web/JavaScript/Guide/Introduction")}}

diff --git a/files/fr/web/javascript/guide/indexed_collections/index.html b/files/fr/web/javascript/guide/indexed_collections/index.html deleted file mode 100644 index 739de18bcc..0000000000 --- a/files/fr/web/javascript/guide/indexed_collections/index.html +++ /dev/null @@ -1,426 +0,0 @@ ---- -title: Collections indexées -slug: Web/JavaScript/Guide/Indexed_collections -tags: - - Array - - Guide - - JavaScript -translation_of: Web/JavaScript/Guide/Indexed_collections -original_slug: Web/JavaScript/Guide/Collections_indexées ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Expressions_régulières", "Web/JavaScript/Guide/Collections_avec_clés")}}
- -

Ce chapitre présente les collections de données qui sont ordonnées par un indice. Cela inclue les tableaux et les objets semblables à des tableaux que sont les objets {{jsxref("Array")}} et les objets {{jsxref("TypedArray")}}.

- -

Le type Array

- -

Un tableau (array en anglais) est un ensemble ordonné de valeurs auxquelles on peut faire référence avec un nom et un indice. Par exemple, si on a un tableau emp qui contient les noms d'employés indexés par leurs numéros d'employé, on pourrait utiliser emp[1] pour accéder à l'employé n°1, emp[2] pour accéder au deuxième et ainsi de suite.

- -

JavaScript ne possède pas de type particulier pour représenter un tableau de données. En revanche, il est possible d'utiliser l'objet natif Array ainsi que ses méthodes pour manipuler des tableaux. L'objet Array possède plusieurs méthodes qui permettent de manipuler les tableaux pour les fusionner, les inverser, les trier, etc. Il possède une propriété de longueur ainsi que d'autres propriétés qui peuvent être utilisées avec les expressions rationnelles.

- -

Créer un tableau

- -

Les instructions qui suivent sont équivalentes et permettent de créer le même tableau :

- -
var arr = new Array(élément0, élément1, ..., élémentN);
-var arr = Array(élément0, élément1, ..., élémentN);
-var arr = [élément0, élément1, ..., élémentN];
-
- -

élément0, élément1, ..., élémentN est une liste de valeurs qui formeront les éléments du tableau. Lorsque ces valeurs sont définies, le tableau initialisera la valeur des éléments correspondants. La propriété length du tableau permet de connaître le nombre d'arguments du tableau.

- -

Parmi les instructions précédentes, une utilise des crochets, on appelle ceci un « littéral de tableau » ou un « initialisateur de tableau ». Cette notation est plus courte que les autres et est souvent préférée pour sa lisibilité. Pour plus d'informations sur cette notation, voir la page sur les littéraux de tableaux pour plus détails.

- -

Afin de créer un tableau de longueur non nulle mais sans aucun élément initialisé, on peut utiliser l'une des deux instructions suivantes :

- -
var arr = new Array(longueurTableau);
-var arr = Array(longueurTableau);
-
-// Cela aura le même effet que :
-var arr = [];
-arr.length = longueurTableau;
-
- -
-

Note : Dans le code ci-dessus longueurTableau doit être un nombre. Si ce n'est pas le cas, un tableau d'un seul élément (ayant la valeur fournie) sera créé. arr.length renverra longueurTableau, mais le tableau ne contiendra que des éléments « vides » non définis. Si on utilise une boucle {{jsxref("Instructions/for...in")}} sur ce tableau, on ne trouvera aucun élément.

-
- -

On a vu comment créer un tableau, il est aussi possible d'affecter des tableaux à des propriétés d'objets (que ce soit lors de leur création ou pour les modifier) :

- -
var obj = {};
-// ...
-obj.prop = [élément0, élément1, ..., élémentN];
-
-// OU
-var obj = {prop: [élément0, élément1, ...., élémentN]}
-
- -

Si on souhaite initialiser un tableau avec un seul élément et que cet élément est un nombre, il est nécessaire d'utiliser la notation littérale. En effet, si un nombre est passé à la fonction Array() pour construire le tableau, celui-ci sera interprété comme une longueur et non comme la valeur d'un élément.

- -
var arr1 = [42];      // Le tableau créé contient bien un élément qui vaut 42
-var arr2 = Array(42); // Crée un tableau sans élément
-                      // mais dont arr.length vaut 42
-
-// Le code ci-dessus est équivalent à
-var arr = [];
-arr.length = 42 ;
-
- -

Si N est un nombre décimal dont la partie fractionnaire n'est pas nulle, tout appel à Array(N) renverra une exception RangeError. Par exemple :

- -
var arr = Array(9.3);  // RangeError: Invalid array length
-
- -

Si on souhaite créer un tableau d'un seul élément et ce quel que soit le type de données, il sera préférable d'utiliser les littéraux de tableaux. Sinon, on peut créer un tableau vide puis lui ajouter un seul élément.

- -

Avec ES2015 (anciennement ECMAScript 6), on peut utiliser la méthode {{jsxref("Array.of")}} afin de créer un tableau composé d'un seul élément :

- -
let monTableau = Array.of("Joconde"); // monTableau contient uniquement "Joconde"
- -

Remplir un tableau

- -

Il est possible de remplir un tableau en affectant des valeurs à ses éléments. Par exemple :

- -
var emp = [];
-emp[0] = "Casey Jones";
-emp[1] = "Phil Lesh";
-emp[2] = "August West";
-
- -
-

Note : Si on utilise une valeur non entière pour désigner un élément du tableau, cela créera une propriété sur l'objet plutôt qu'un élément du tableau :

- -
var arr = [];
-arr[3.4] = "Oranges";
-console.log(arr.length);                // 0
-console.log(arr.hasOwnProperty(3.4));   // true
-
-
- -

Il est aussi possible de remplir un tableau directement lors de sa création :

- -
var monTableau = new Array("Coucou", maVar, 3.14159);
-var monTableau = ["Mangue", "Pomme", "Orange"]
-
- -

Faire référence aux éléments d'un tableau

- -

Il est possible de faire référence aux éléments d'un tableau en utilisant un nombre ordinal lié à l'élément. Ainsi, si on définit le tableau suivant :

- -
var monTableau = ["Air", "Eau", "Feu"];
-
- -

On pourra accéder au premier élément du tableau en utilisant monTableau[0], on accèdera au deuxième élément avec monTableau[1]. Les indices des éléments sont comptés à partir de 0.

- -
-

Note : Les crochets peuvent également être utilisés pour faire référence aux propriétés du tableau (les tableaux sont des objets JavaScript à part entière). On pourra donc avoir :

- -
var arr = ["un", "deux", "trois"];
-arr[2];         // "trois" - on accède à un élément du tableau
-arr["length"];  // 3 - on accède à une propriété du tableau
-
-
- -

Comprendre la propriété length

- -

En termes d'implémentation, les tableaux JavaScript stockent leurs éléments comme des propriétés normales, l'indice étant utilisé comme nom pour désigner la valeur de la propriété. La propriété length est elle un peu spéciale : elle renvoie toujours la valeur du plus grand indice du tableau plus 1. Dans l'exemple suivant, "Biduche" est placé à l'indice 30, chats.length renvoie donc 30 + 1). On rappelle que les indices des tableaux JavaScript commencent à partir de 0 et pas à partir de 1. Cela signifie que la valeur de la propriété length sera plus grande, de 1, par rapport à l'indice le plus élevé :

- -
var chats = [];
-chats[30] = ['Biduche'];
-console.log(chats.length); // 31
-
- -

Il est aussi possible d'affecter une valeur à la propriété length. Si la valeur fournie est inférieure au nombre d'éléments stockés, cela tronquera la tableau. Si la valeur est 0, cela videra le tableau :

- -
var chats = ['Marie', 'Toulouse', 'Berlioz'];
-console.log(chats.length); // 3
-
-chats.length = 2;
-console.log(chats); // affiche "Marie,Toulouse" - Berlioz a été retiré
-
-chats.length = 0;
-console.log(chats); // affiche [], le tableau est vide
-
-chats.length = 3;
-console.log(chats); // [ <3 empty slots> ]
-
- -

Parcourir un tableau

- -

Un tableau est une structure de données qui se prête particulièrement aux boucles, on pourra utiliser ces dernières pour parcourir les éléments du tableau de façon itérative. Voici un exemple de parcours simple :

- -
var couleurs = ['rouge', 'vert', 'bleu'];
-for (var i = 0; i < couleurs.length; i++) {
-  console.log(couleurs[i]);
-}
-
- -

Si on sait qu'aucun des éléments ne vaut false dans un contexte booléen (par exemple, si le tableau contient des nœuds du DOM), on peut utiliser une formulation encore plus concise :

- -
var divs = document.getElementsByTagName('div');
-for (var i = 0, div; div = divs[i]; i++) {
-  /* On effectue un traitement sur les  div */
-}
-
- -

Cette syntaxe permet d'éviter d'avoir à vérifier la longueur du tableau et de gérer l'affectation de la variable div pour chaque élément du tableau.

- -

La méthode {{jsxref("Array.forEach", "forEach()")}} fournit une autre méthode pour parcourir un tableau :

- -
var couleurs = ['rouge', 'vert', 'bleu'];
-couleurs.forEach(function(couleur) {
-  console.log(couleur);
-});
-
- -

Avec les fonctions fléchées (apparues avec ES6 / ECMAScript 2015), on peut obtenir un code plus concis :

- -
var couleurs = ['rouge', 'vert', 'bleu'];
-couleurs.forEach(couleur => console.log(couleur));
- -

La fonction passée comme argument à forEach() est exécutée une fois pour chacun des éléments du tableau (l'élément du tableau sera passé comme argument de cette fonction). Les éléments qui n'ont pas de valeur affectée ne sont pas parcourus lors d'une boucle forEach.

- -

On notera que les éléments ne sont pas parcourus lorsqu'ils n'ont pas eu de valeur d'affectée. Cependant, si on a affecté la valeur {{jsxref("undefined")}} de façon explicite à un élément, il sera pris en compte lors de la boucle :

- -
var tableau = ['premier', 'deuxième', , 'quatrième'];
-
-// affiche ['premier', 'deuxième', 'quatrième'];
-tableau.forEach(function(élément) {
-  console.log(élément);
-});
-
-if(tableau[2] === undefined) { console.log('tableau[2] vaut undefined'); } // true
-
-var tableau = ['premier', 'deuxième', undefined, 'quatrième'];
-
-// renvoie ['premier', 'deuxième', undefined, 'quatrième'];
-tableau.forEach(function(élément) {
-  console.log(élément);
-})
- -

Étant donné que les éléments des tableaux sont stockés comme des propriétés classiques, il n'est pas conseillé d'utiliser des boucles {{jsxref("Instructions/for...in")}} pour parcourir les tableaux car cela listerait également les propriétés énumérables (en plus des éléments).

- -

Méthodes des tableaux

- -

L'objet Array possède les méthodes suivantes :

- - - -

Du code permettant d'émuler ces fonctions est disponible sur chacune des pages (polyfill). Le support natif de ces fonctionnalités dans les différents navigateurs peut être trouvé ici.

- - - -

Les méthodes présentées ci-avant qui prennent une fonction de rappel (callback) en argument sont appelées méthodes itératives car elles parcourent le tableau de façon itérative. Chacune de ces méthodes peut prendre en compte un deuxième argument (optionnel) qui sera l'objet this pris en compte par le callback. Si ce deuxième argument n'est pas fourni, this vaudra la valeur de l'objet global.

- -

La fonction de rappel est appelée avec trois arguments : le premier étant la valeur de l'élément courant, le deuxième est l'indice de cet élément et le troisième représente le tableau lui-même. Les fonctions JavaScript ignorent les arguments supplémentaires qui ne sont pas déclarés explicitement dans la liste des paramètres, on peut donc utiliser une fonction prenant un seul argument comme fonction de rappel.

- - - -

reduce() et reduceRight() sont à utiliser lorsqu'on souhaite n'obtenir qu'une seule valeur, récursivement, à partir des différents éléments du tableau. Pour plus d'informations sur l'utilisation d'une valeur d'initialisation pour ces deux fonctions, se référer à leurs pages : {{jsxref("Array.reduceRight")}} et {{jsxref("Array.reduce")}}

- -

Tableaux multi-dimensionnels

- -

Les tableaux peuvent être imbriqués les uns dans les autres. Cela signifie qu'un tableau peut avoir un élément dont la valeur est un tableau. En utilisant ce comportement, on peut donc créer des matrices, voire des tableaux à plusieurs dimensions.

- -

Par exemple, avec le code suivant :

- -
var a = new Array(4);
-for (i = 0; i < 4; i++) {
-  a[i] = new Array(4);
-  for (j = 0; j < 4; j++) {
-    a[i][j] = "[" + i + "," + j + "]";
-  }
-}
-
- -

On pourra avoir le tableau suivant sur deux dimensions :

- -
Ligne 0 : [0,0] [0,1] [0,2] [0,3]
-Ligne 1 : [1,0] [1,1] [1,2] [1,3]
-Ligne 2 : [2,0] [2,1] [2,2] [2,3]
-Ligne 3 : [3,0] [3,1] [3,2] [3,3]
-
- -

Les tableaux et les expressions rationnelles

- -

Lorsqu'un tableau est le résultat d'une correspondance entre une expression rationnelle et une chaîne de caractères, les éléments et propriétés du tableau fournissent des informations sur la correspondance. Les méthodes suivantes peuvent renvoyer un tableau : {{jsxref("Objets_globaux/RegExp/exec","RegExp.exec()")}}, {{jsxref("Objets_globaux/String/match/exec","String.match()")}},  {{jsxref("Objets_globaux/String/split","String.split()")}}. Pour plus d'informations sur les tableaux et les expressions rationnelles, voir le chapitre du guide JavaScript sur les expressions rationnelles.

- -

Manipuler des objets semblables à des tableaux

- -

Certains objets JavaScript tels que {{domxref("NodeList")}} (renvoyé par {{domxref("document.getElementsByTagName()")}}) ou l'objet arguments (disponible au sein d'une fonction) ressemblent à des tableaux mais n'en sont pas (ils n'ont pas toutes les méthodes décrites ci-avant par exemple). Ainsi, l'objet arguments fournit une propriété {{jsxref("Objets_globaux/Function/length","length")}} mais n'implémente pas la méthode {{jsxref("Array.forEach", "forEach()")}}.

- -

Les méthodes du prototype des tableaux permettent d'utiliser les méthodes d'objets Array sur des objets semblables à des tableaux :

- -
 function alertArguments() {
-   Array.prototype.forEach.call(arguments, function(item) {
-     console.log(item);
-   });
- }
-
- -

Il est possible d'utiliser ces méthodes génériques sur des chaînes de caractères :

- -
Array.prototype.forEach.call("une chaîne", function(chr) {
-   console.log(chr);
-});
- -

Les tableaux typés

- -

Les tableaux typés JavaScript sont des objets semblables à des tableaux qui fournissent un moyen d'accéder à des données binaires. Comme on l'a vu ci-avant, les objets {{jsxref("Array")}} grandissent et rétrécissent dynamiquement et peuvent contenir n'importe quelle valeur JavaScript. Les moteurs JavaScript effectuent des optimisations afin que les tableaux puissent être utilisés rapidement. Cependant, avec le développement des applications web, les applications viennent à manipuler des données audio, vidéo, binaires et accèdent à des données brutes via les WebSockets d'autres outils. Il apparaît donc nécessaire d'avoir les outils JavaScript pertinents pour manipuler efficacement des données binaires, organisées au sein de tableaux typés.

- -

Les vues et les tampons de mémoire (buffers) : l'architecture des tableaux typés

- -

Afin de permettre un maximum de flexibilité et d'efficacité, les tableaux typés JavaScript séparent l'implémentation entre les tampons (buffers) et les vues (views). Un tampon de mémoire, implémenté par l'objet {{jsxref("ArrayBuffer")}}, est un objet représentant un fragment de données. Un tampon n'a pas de format a proprement parler et il ne fournit aucun mécanisme pour accéder à son contenu. Afin d'accéder à la mémoire contenu dans le tampon, on a besoin d'utiliser une vue. Une vue fournit un contexte, c'est-à-dire un type de donnée, un indice de départ et un nombre d'éléments, qui permet de traiter les données initiales comme un vrai tableau typé.

- -

Typed arrays in an ArrayBuffer

- -

ArrayBuffer

- -

Le type {{jsxref("ArrayBuffer")}} est un type de donnée utilisé pour représenter un tampon de données binaire générique dont la longueur est fixée. Un tampon de données ne peut pas être manipulé directement. Pour manipuler les données, il faut créer une vue sur le tableau typé ou un objet {{jsxref("DataView")}} qui représente le tampon dans un format spécifique et qui pourra être utilisé pour lire et écrire des informations du tampon.

- -

Les vues qui sont des tableaux typés

- -

Les vues de tableaux typés possèdent des noms explicites et fournissent des vues pour les types numériques usuels tels que Int8, Uint32, Float64 et ainsi de suite. Il existe un type de vue spécial qui est Uint8ClampedArray. Ce type ramène les différentes valeurs exploitées entre 0 et 255. Cela peut notamment être utile pour le traitement des données d'un canvas.

- -

{{page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray", "Les_objets_TypedArray")}}

- -

Pour plus d'informations sur les tableaux typés, voir l'article de la référence sur les différents objets {{jsxref("TypedArray")}}.

- -

{{PreviousNext("Web/JavaScript/Guide/Expressions_régulières", "Web/JavaScript/Guide/Collections_avec_clés")}}

diff --git a/files/fr/web/javascript/guide/indexed_collections/index.md b/files/fr/web/javascript/guide/indexed_collections/index.md new file mode 100644 index 0000000000..739de18bcc --- /dev/null +++ b/files/fr/web/javascript/guide/indexed_collections/index.md @@ -0,0 +1,426 @@ +--- +title: Collections indexées +slug: Web/JavaScript/Guide/Indexed_collections +tags: + - Array + - Guide + - JavaScript +translation_of: Web/JavaScript/Guide/Indexed_collections +original_slug: Web/JavaScript/Guide/Collections_indexées +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Expressions_régulières", "Web/JavaScript/Guide/Collections_avec_clés")}}
+ +

Ce chapitre présente les collections de données qui sont ordonnées par un indice. Cela inclue les tableaux et les objets semblables à des tableaux que sont les objets {{jsxref("Array")}} et les objets {{jsxref("TypedArray")}}.

+ +

Le type Array

+ +

Un tableau (array en anglais) est un ensemble ordonné de valeurs auxquelles on peut faire référence avec un nom et un indice. Par exemple, si on a un tableau emp qui contient les noms d'employés indexés par leurs numéros d'employé, on pourrait utiliser emp[1] pour accéder à l'employé n°1, emp[2] pour accéder au deuxième et ainsi de suite.

+ +

JavaScript ne possède pas de type particulier pour représenter un tableau de données. En revanche, il est possible d'utiliser l'objet natif Array ainsi que ses méthodes pour manipuler des tableaux. L'objet Array possède plusieurs méthodes qui permettent de manipuler les tableaux pour les fusionner, les inverser, les trier, etc. Il possède une propriété de longueur ainsi que d'autres propriétés qui peuvent être utilisées avec les expressions rationnelles.

+ +

Créer un tableau

+ +

Les instructions qui suivent sont équivalentes et permettent de créer le même tableau :

+ +
var arr = new Array(élément0, élément1, ..., élémentN);
+var arr = Array(élément0, élément1, ..., élémentN);
+var arr = [élément0, élément1, ..., élémentN];
+
+ +

élément0, élément1, ..., élémentN est une liste de valeurs qui formeront les éléments du tableau. Lorsque ces valeurs sont définies, le tableau initialisera la valeur des éléments correspondants. La propriété length du tableau permet de connaître le nombre d'arguments du tableau.

+ +

Parmi les instructions précédentes, une utilise des crochets, on appelle ceci un « littéral de tableau » ou un « initialisateur de tableau ». Cette notation est plus courte que les autres et est souvent préférée pour sa lisibilité. Pour plus d'informations sur cette notation, voir la page sur les littéraux de tableaux pour plus détails.

+ +

Afin de créer un tableau de longueur non nulle mais sans aucun élément initialisé, on peut utiliser l'une des deux instructions suivantes :

+ +
var arr = new Array(longueurTableau);
+var arr = Array(longueurTableau);
+
+// Cela aura le même effet que :
+var arr = [];
+arr.length = longueurTableau;
+
+ +
+

Note : Dans le code ci-dessus longueurTableau doit être un nombre. Si ce n'est pas le cas, un tableau d'un seul élément (ayant la valeur fournie) sera créé. arr.length renverra longueurTableau, mais le tableau ne contiendra que des éléments « vides » non définis. Si on utilise une boucle {{jsxref("Instructions/for...in")}} sur ce tableau, on ne trouvera aucun élément.

+
+ +

On a vu comment créer un tableau, il est aussi possible d'affecter des tableaux à des propriétés d'objets (que ce soit lors de leur création ou pour les modifier) :

+ +
var obj = {};
+// ...
+obj.prop = [élément0, élément1, ..., élémentN];
+
+// OU
+var obj = {prop: [élément0, élément1, ...., élémentN]}
+
+ +

Si on souhaite initialiser un tableau avec un seul élément et que cet élément est un nombre, il est nécessaire d'utiliser la notation littérale. En effet, si un nombre est passé à la fonction Array() pour construire le tableau, celui-ci sera interprété comme une longueur et non comme la valeur d'un élément.

+ +
var arr1 = [42];      // Le tableau créé contient bien un élément qui vaut 42
+var arr2 = Array(42); // Crée un tableau sans élément
+                      // mais dont arr.length vaut 42
+
+// Le code ci-dessus est équivalent à
+var arr = [];
+arr.length = 42 ;
+
+ +

Si N est un nombre décimal dont la partie fractionnaire n'est pas nulle, tout appel à Array(N) renverra une exception RangeError. Par exemple :

+ +
var arr = Array(9.3);  // RangeError: Invalid array length
+
+ +

Si on souhaite créer un tableau d'un seul élément et ce quel que soit le type de données, il sera préférable d'utiliser les littéraux de tableaux. Sinon, on peut créer un tableau vide puis lui ajouter un seul élément.

+ +

Avec ES2015 (anciennement ECMAScript 6), on peut utiliser la méthode {{jsxref("Array.of")}} afin de créer un tableau composé d'un seul élément :

+ +
let monTableau = Array.of("Joconde"); // monTableau contient uniquement "Joconde"
+ +

Remplir un tableau

+ +

Il est possible de remplir un tableau en affectant des valeurs à ses éléments. Par exemple :

+ +
var emp = [];
+emp[0] = "Casey Jones";
+emp[1] = "Phil Lesh";
+emp[2] = "August West";
+
+ +
+

Note : Si on utilise une valeur non entière pour désigner un élément du tableau, cela créera une propriété sur l'objet plutôt qu'un élément du tableau :

+ +
var arr = [];
+arr[3.4] = "Oranges";
+console.log(arr.length);                // 0
+console.log(arr.hasOwnProperty(3.4));   // true
+
+
+ +

Il est aussi possible de remplir un tableau directement lors de sa création :

+ +
var monTableau = new Array("Coucou", maVar, 3.14159);
+var monTableau = ["Mangue", "Pomme", "Orange"]
+
+ +

Faire référence aux éléments d'un tableau

+ +

Il est possible de faire référence aux éléments d'un tableau en utilisant un nombre ordinal lié à l'élément. Ainsi, si on définit le tableau suivant :

+ +
var monTableau = ["Air", "Eau", "Feu"];
+
+ +

On pourra accéder au premier élément du tableau en utilisant monTableau[0], on accèdera au deuxième élément avec monTableau[1]. Les indices des éléments sont comptés à partir de 0.

+ +
+

Note : Les crochets peuvent également être utilisés pour faire référence aux propriétés du tableau (les tableaux sont des objets JavaScript à part entière). On pourra donc avoir :

+ +
var arr = ["un", "deux", "trois"];
+arr[2];         // "trois" - on accède à un élément du tableau
+arr["length"];  // 3 - on accède à une propriété du tableau
+
+
+ +

Comprendre la propriété length

+ +

En termes d'implémentation, les tableaux JavaScript stockent leurs éléments comme des propriétés normales, l'indice étant utilisé comme nom pour désigner la valeur de la propriété. La propriété length est elle un peu spéciale : elle renvoie toujours la valeur du plus grand indice du tableau plus 1. Dans l'exemple suivant, "Biduche" est placé à l'indice 30, chats.length renvoie donc 30 + 1). On rappelle que les indices des tableaux JavaScript commencent à partir de 0 et pas à partir de 1. Cela signifie que la valeur de la propriété length sera plus grande, de 1, par rapport à l'indice le plus élevé :

+ +
var chats = [];
+chats[30] = ['Biduche'];
+console.log(chats.length); // 31
+
+ +

Il est aussi possible d'affecter une valeur à la propriété length. Si la valeur fournie est inférieure au nombre d'éléments stockés, cela tronquera la tableau. Si la valeur est 0, cela videra le tableau :

+ +
var chats = ['Marie', 'Toulouse', 'Berlioz'];
+console.log(chats.length); // 3
+
+chats.length = 2;
+console.log(chats); // affiche "Marie,Toulouse" - Berlioz a été retiré
+
+chats.length = 0;
+console.log(chats); // affiche [], le tableau est vide
+
+chats.length = 3;
+console.log(chats); // [ <3 empty slots> ]
+
+ +

Parcourir un tableau

+ +

Un tableau est une structure de données qui se prête particulièrement aux boucles, on pourra utiliser ces dernières pour parcourir les éléments du tableau de façon itérative. Voici un exemple de parcours simple :

+ +
var couleurs = ['rouge', 'vert', 'bleu'];
+for (var i = 0; i < couleurs.length; i++) {
+  console.log(couleurs[i]);
+}
+
+ +

Si on sait qu'aucun des éléments ne vaut false dans un contexte booléen (par exemple, si le tableau contient des nœuds du DOM), on peut utiliser une formulation encore plus concise :

+ +
var divs = document.getElementsByTagName('div');
+for (var i = 0, div; div = divs[i]; i++) {
+  /* On effectue un traitement sur les  div */
+}
+
+ +

Cette syntaxe permet d'éviter d'avoir à vérifier la longueur du tableau et de gérer l'affectation de la variable div pour chaque élément du tableau.

+ +

La méthode {{jsxref("Array.forEach", "forEach()")}} fournit une autre méthode pour parcourir un tableau :

+ +
var couleurs = ['rouge', 'vert', 'bleu'];
+couleurs.forEach(function(couleur) {
+  console.log(couleur);
+});
+
+ +

Avec les fonctions fléchées (apparues avec ES6 / ECMAScript 2015), on peut obtenir un code plus concis :

+ +
var couleurs = ['rouge', 'vert', 'bleu'];
+couleurs.forEach(couleur => console.log(couleur));
+ +

La fonction passée comme argument à forEach() est exécutée une fois pour chacun des éléments du tableau (l'élément du tableau sera passé comme argument de cette fonction). Les éléments qui n'ont pas de valeur affectée ne sont pas parcourus lors d'une boucle forEach.

+ +

On notera que les éléments ne sont pas parcourus lorsqu'ils n'ont pas eu de valeur d'affectée. Cependant, si on a affecté la valeur {{jsxref("undefined")}} de façon explicite à un élément, il sera pris en compte lors de la boucle :

+ +
var tableau = ['premier', 'deuxième', , 'quatrième'];
+
+// affiche ['premier', 'deuxième', 'quatrième'];
+tableau.forEach(function(élément) {
+  console.log(élément);
+});
+
+if(tableau[2] === undefined) { console.log('tableau[2] vaut undefined'); } // true
+
+var tableau = ['premier', 'deuxième', undefined, 'quatrième'];
+
+// renvoie ['premier', 'deuxième', undefined, 'quatrième'];
+tableau.forEach(function(élément) {
+  console.log(élément);
+})
+ +

Étant donné que les éléments des tableaux sont stockés comme des propriétés classiques, il n'est pas conseillé d'utiliser des boucles {{jsxref("Instructions/for...in")}} pour parcourir les tableaux car cela listerait également les propriétés énumérables (en plus des éléments).

+ +

Méthodes des tableaux

+ +

L'objet Array possède les méthodes suivantes :

+ + + +

Du code permettant d'émuler ces fonctions est disponible sur chacune des pages (polyfill). Le support natif de ces fonctionnalités dans les différents navigateurs peut être trouvé ici.

+ + + +

Les méthodes présentées ci-avant qui prennent une fonction de rappel (callback) en argument sont appelées méthodes itératives car elles parcourent le tableau de façon itérative. Chacune de ces méthodes peut prendre en compte un deuxième argument (optionnel) qui sera l'objet this pris en compte par le callback. Si ce deuxième argument n'est pas fourni, this vaudra la valeur de l'objet global.

+ +

La fonction de rappel est appelée avec trois arguments : le premier étant la valeur de l'élément courant, le deuxième est l'indice de cet élément et le troisième représente le tableau lui-même. Les fonctions JavaScript ignorent les arguments supplémentaires qui ne sont pas déclarés explicitement dans la liste des paramètres, on peut donc utiliser une fonction prenant un seul argument comme fonction de rappel.

+ + + +

reduce() et reduceRight() sont à utiliser lorsqu'on souhaite n'obtenir qu'une seule valeur, récursivement, à partir des différents éléments du tableau. Pour plus d'informations sur l'utilisation d'une valeur d'initialisation pour ces deux fonctions, se référer à leurs pages : {{jsxref("Array.reduceRight")}} et {{jsxref("Array.reduce")}}

+ +

Tableaux multi-dimensionnels

+ +

Les tableaux peuvent être imbriqués les uns dans les autres. Cela signifie qu'un tableau peut avoir un élément dont la valeur est un tableau. En utilisant ce comportement, on peut donc créer des matrices, voire des tableaux à plusieurs dimensions.

+ +

Par exemple, avec le code suivant :

+ +
var a = new Array(4);
+for (i = 0; i < 4; i++) {
+  a[i] = new Array(4);
+  for (j = 0; j < 4; j++) {
+    a[i][j] = "[" + i + "," + j + "]";
+  }
+}
+
+ +

On pourra avoir le tableau suivant sur deux dimensions :

+ +
Ligne 0 : [0,0] [0,1] [0,2] [0,3]
+Ligne 1 : [1,0] [1,1] [1,2] [1,3]
+Ligne 2 : [2,0] [2,1] [2,2] [2,3]
+Ligne 3 : [3,0] [3,1] [3,2] [3,3]
+
+ +

Les tableaux et les expressions rationnelles

+ +

Lorsqu'un tableau est le résultat d'une correspondance entre une expression rationnelle et une chaîne de caractères, les éléments et propriétés du tableau fournissent des informations sur la correspondance. Les méthodes suivantes peuvent renvoyer un tableau : {{jsxref("Objets_globaux/RegExp/exec","RegExp.exec()")}}, {{jsxref("Objets_globaux/String/match/exec","String.match()")}},  {{jsxref("Objets_globaux/String/split","String.split()")}}. Pour plus d'informations sur les tableaux et les expressions rationnelles, voir le chapitre du guide JavaScript sur les expressions rationnelles.

+ +

Manipuler des objets semblables à des tableaux

+ +

Certains objets JavaScript tels que {{domxref("NodeList")}} (renvoyé par {{domxref("document.getElementsByTagName()")}}) ou l'objet arguments (disponible au sein d'une fonction) ressemblent à des tableaux mais n'en sont pas (ils n'ont pas toutes les méthodes décrites ci-avant par exemple). Ainsi, l'objet arguments fournit une propriété {{jsxref("Objets_globaux/Function/length","length")}} mais n'implémente pas la méthode {{jsxref("Array.forEach", "forEach()")}}.

+ +

Les méthodes du prototype des tableaux permettent d'utiliser les méthodes d'objets Array sur des objets semblables à des tableaux :

+ +
 function alertArguments() {
+   Array.prototype.forEach.call(arguments, function(item) {
+     console.log(item);
+   });
+ }
+
+ +

Il est possible d'utiliser ces méthodes génériques sur des chaînes de caractères :

+ +
Array.prototype.forEach.call("une chaîne", function(chr) {
+   console.log(chr);
+});
+ +

Les tableaux typés

+ +

Les tableaux typés JavaScript sont des objets semblables à des tableaux qui fournissent un moyen d'accéder à des données binaires. Comme on l'a vu ci-avant, les objets {{jsxref("Array")}} grandissent et rétrécissent dynamiquement et peuvent contenir n'importe quelle valeur JavaScript. Les moteurs JavaScript effectuent des optimisations afin que les tableaux puissent être utilisés rapidement. Cependant, avec le développement des applications web, les applications viennent à manipuler des données audio, vidéo, binaires et accèdent à des données brutes via les WebSockets d'autres outils. Il apparaît donc nécessaire d'avoir les outils JavaScript pertinents pour manipuler efficacement des données binaires, organisées au sein de tableaux typés.

+ +

Les vues et les tampons de mémoire (buffers) : l'architecture des tableaux typés

+ +

Afin de permettre un maximum de flexibilité et d'efficacité, les tableaux typés JavaScript séparent l'implémentation entre les tampons (buffers) et les vues (views). Un tampon de mémoire, implémenté par l'objet {{jsxref("ArrayBuffer")}}, est un objet représentant un fragment de données. Un tampon n'a pas de format a proprement parler et il ne fournit aucun mécanisme pour accéder à son contenu. Afin d'accéder à la mémoire contenu dans le tampon, on a besoin d'utiliser une vue. Une vue fournit un contexte, c'est-à-dire un type de donnée, un indice de départ et un nombre d'éléments, qui permet de traiter les données initiales comme un vrai tableau typé.

+ +

Typed arrays in an ArrayBuffer

+ +

ArrayBuffer

+ +

Le type {{jsxref("ArrayBuffer")}} est un type de donnée utilisé pour représenter un tampon de données binaire générique dont la longueur est fixée. Un tampon de données ne peut pas être manipulé directement. Pour manipuler les données, il faut créer une vue sur le tableau typé ou un objet {{jsxref("DataView")}} qui représente le tampon dans un format spécifique et qui pourra être utilisé pour lire et écrire des informations du tampon.

+ +

Les vues qui sont des tableaux typés

+ +

Les vues de tableaux typés possèdent des noms explicites et fournissent des vues pour les types numériques usuels tels que Int8, Uint32, Float64 et ainsi de suite. Il existe un type de vue spécial qui est Uint8ClampedArray. Ce type ramène les différentes valeurs exploitées entre 0 et 255. Cela peut notamment être utile pour le traitement des données d'un canvas.

+ +

{{page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray", "Les_objets_TypedArray")}}

+ +

Pour plus d'informations sur les tableaux typés, voir l'article de la référence sur les différents objets {{jsxref("TypedArray")}}.

+ +

{{PreviousNext("Web/JavaScript/Guide/Expressions_régulières", "Web/JavaScript/Guide/Collections_avec_clés")}}

diff --git a/files/fr/web/javascript/guide/introduction/index.html b/files/fr/web/javascript/guide/introduction/index.html deleted file mode 100644 index 7d99c7a165..0000000000 --- a/files/fr/web/javascript/guide/introduction/index.html +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: Introduction -slug: Web/JavaScript/Guide/Introduction -tags: - - Débutant - - Guide - - Intro - - JavaScript -translation_of: Web/JavaScript/Guide/Introduction ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Types_et_grammaire")}}
- -

Ce chapitre introduit JavaScript et présente certains de ses concepts fondamentaux.

- -

Ce que vous devriez déjà savoir

- -

Pour lire ce guide, il est conseillé d'avoir :

- - - -

Où trouver des informations concernant JavaScript

- -

La documentation MDN pour JavaScript comprend :

- - - -

Si vous débutez en JavaScript, vous pouvez commencer par les articles de la section Apprendre et du Guide JavaScript. Une fois que vous maîtrisez les briques de bases, vous pourrez utiliser la référence JavaScript pour obtenir des informations détaillées sur chacun des objets natifs et des instructions.

- -

Qu'est-ce que JavaScript ?

- -

JavaScript est un langage de script, multi-plateforme et orienté objet. C'est un langage léger qui doit faire partie d'un environnement hôte (un navigateur web par exemple) pour qu'il puisse être utilisé sur les objets de cet environnement.

- -

JavaScript contient une bibliothèque standard d'objets tels que Array, Date, et Math, ainsi qu'un ensemble d'éléments de langage tels que les opérateurs, les structures de contrôles et les instructions. Ces fonctionnalités centrales et natives de JavaScript peuvent être étendues de plusieurs façons en fournissant d'autres objets, par exemple :

- - - -

JavaScript et Java

- -

JavaScript et Java se ressemblent sur certains aspects mais ils sont fondamentalement différents l'un de l'autre. Le langage JavaScript ressemble à Java mais n'est pas typé statiquement et le typage de JavaScript est faible (alors qu'il est fort en Java). La syntaxe des expressions JavaScript est très proche de celle du Java avec les conventions de nommage et les constructions conditionnelles par exemple : c'est une des raisons qui a fait que le langage LiveScript a été renommé en JavaScript.

- -

À la différence de Java qui est un système compilé et dont les classes sont déclarées, JavaScript est traité lors de l'exécution et possède quelques types de données pour représenter les nombres, les booléens et les chaînes de caractères (entre autres). JavaScript utilise un modèle basé sur les prototypes pour représenter les liens entre les objets alors que Java utilise un modèle plus courant basé sur les classes. Les prototypes permettent d'avoir un héritage dynamique. Ainsi, les caractéristiques héritées par un objet peuvent varier dans le temps. JavaScript supporte également les fonctions qui sont des objets à part entière et qui peuvent être des propriétés d'autres objets.

- -

JavaScript est un langage plutôt « libre » comparé au Java. Il n'est pas nécessaire de déclarer toutes les variables, classes et méthodes. Il n'est pas nécessaire de savoir si une méthode est publique, privée ou protégée et il n'y a pas d'interfaces à implémenter. Les variables, les paramètres et les valeurs de retour des fonctions ne sont pas explicitement typés.

- -

Java est un langage de programmation utilisant les classes, conçus pour être exécuté rapidement et garantir la sûreté du typage. Cela signifie par exemple qu'il n'est pas possible de transformer un entier Java en un objet ou qu'on ne peut pas accéder à des caractéristiques privées en corrompant le bytecode Java. Le modèle de classes utilisé par Java signifie qu'un programme n'est constitué que de classes et de méthodes. Cet héritage à base de classes, associé au typage fort font qu'on obtient des structures et des hiérarchies d'objets fortement couplées. Pour ces raisons, Java peut apparaître comme un langage plus complexe que JavaScript.

- -

À l'inverse, JavaScript est un descendant de langages plus légers, dynamiquement typés tels que HyperTalk et dBASE. Ces langages de scripts visent un public plus large avec une syntaxe plus simple, des fonctionnalités natives spécialisées et des prérequis minimaux pour pouvoir créer des objets.

- - - - - - - - - - - - - - - - - - - -
Comparaison synthétique entre JavaScript et Java
JavaScriptJava
Orienté objet. Aucune distinction entre les types et les objets. L'héritage est basé sur un mécanisme utilisant les prototypes et les propriétés et méthodes peuvent être ajoutées dynamiquement à n'importe quel objet.Orienté objet, utilisant un modèle de classes. Les objets sont divisés entre les classes et les instances, l'héritage s'effectue via la hiérarchie des classes. Les classes et les instances ne peuvent pas recevoir de nouvelles propriétés ou méthodes dynamiquement.
Le type de données des variables n'est pas déclaré (typage dynamique).Le type de données des variables doit être déclaré (typage statique).
- -

Pour plus d'informations sur les différences entre JavaScript et Java, voir le chapitre sur les détails du modèle objet JavaScript.

- -

JavaScript et la spécification ECMAScript

- -

JavaScript est standardisé par Ecma International — une association européenne de standardisation des systèmes d'information et de communication (ECMA étant historiquement un acronyme pour European Computer Manufacturers Association) qui délivre un langage de programmation standardisé, international appelé ECMAScript. Ce langage se comporte de la même façon pour toutes les applications qui supportent ce standard. Les entreprises peuvent utiliser ce langage standard afin de développer leur implémentation de JavaScript. Le standard ECMAScript est documenté avec la spécification ECMA-262. Voir la page Nouveautés de JavaScript pour en savoir plus sur les différentes versions de JavaScript et les différentes éditions de la spécification ECMAScript.

- -

Le standard ECMA-262 est également approuvé par l'ISO (International Organization for Standardization) sous ISO-16262. La spécification peut également être trouvée sur le site web d'Ecma International. La spécification ECMAScript ne décrit pas le Document Object Model (DOM) qui est standardisé par le World Wide Web Consortium (W3C) et le WHATWG (Web Hypertext Application Technology Working Group). Le DOM définit la façon dont les documents HTML sont exposés aux scripts. Pour mieux comprendre les différentes technologies gravitant autour de JavaScript, voir l'article Aperçu des technologies JavaScript.

- -

Documentation JavaScript et spécification ECMAScript

- -

La spécification ECMAScript est un ensemble de conditions à respecter pour implémenter ECMAScript : cela est utile lorsqu'on souhaite implémenter des fonctionnalités standard du langage au sein d'une implémentation ou d'un moteur ECMAScript (tel que SpiderMonkey pour Firefox, ou V8 pour Chrome).

- -

La spécification ECMAScript n'a pas pour but d'aider les développeurs à écrire des scripts. La documentation JavaScript permet d'obtenir des informations pour écrire des scripts JavaScript.

- -

La spécification ECMAScript utilise parfois une terminologie et une syntaxe qui peuvent sembler étranges aux yeux d'un développeur JavaScript. Bien que la description du langage diffère entre ECMAScript et la documentation JavaScript, le langage lui-même reste le même. JavaScript supporte l'ensemble des fonctionnalités mises en avant dans la spécification ECMAScript.

- -

La documentation JavaScript décrit les aspects du langage qui pourront être utilisés par les développeurs JavaScript.

- -

Démarrer avec JavaScript

- -

Pour commencer à développer en JavaScript, c'est très simple : il suffit d'avoir un navigateur web récent. Ce guide inclut certaines fonctionnalités de JavaScript qui ne sont disponibles que dans les dernières versions de Firefox, il est donc recommandé d'utiliser une version de Firefox à jour pour essayer les exemples fournis.

- -

L'outil Web Console intégré à Firefox est utile pour expérimenter avec JavaScript. Vous pouvez l'utiliser selon deux modes : le mode de saisie à une ligne et le mode de saisie multiligne.

- -

La console web

- -

La console web affiche des informations sur la page actuellement chargée, elle dispose également d'une ligne de commande qui peut être utilisée pour exécuter des expressions JavaScript dans la page actuelle.

- -

Pour ouvrir la console, dans le menu, sélectionner « Développement » puis « Console web » (en passant par la barre d'outils, ce sera « Outils » puis « Développement web » puis « Console web »). Avec le clavier, on pourra utiliser la combinaison de touche Ctrl+Shift+K sur Windows et Linux ou Cmd-Option-K sur Mac. Une fois lancée, la console apparaît en base de la fenêtre du navigateur. En bas de la zone occupée par la console, il y a une ligne de commande qui peut être utilisée pour saisir des instructions JavaScript, le résultat de ces instructions sera affiché dans le panneau au dessus :

- -

Console web

- - -

La console fonctionne exactement de la même manière que eval : la dernière expression saisie est retournée. Pour simplifier, on peut imaginer que chaque fois qu'une expression est saisie dans la console, elle est en fait entourée de console.log autour de eval, comme suit:

- -
function saluer(votreNom) {
-  alert("Hello " + votreNom)
-}
-console.log(eval('3 + 5'))
-
- -

Le mode éditeur multiligne

- -

La console est pratique quand il s'agit d'exécuter des instructions ligne par ligne. Cependant dès qu'on souhaite exécuter un script plus complexe de plusieurs lignes, la console devient vite limitée. Pour ça, on pourra utiliser le mode éditeur multiligne.

- -

Coucou monde (hello world)

- -

Pour commencer à écrire du JavaScript, ouvrez votre console web en mode éditeur multiligne et écrivez votre premier « Hello world » en JavaScript.

- -
function saluer(utilisateur) {
-  return "Bonjour " + utilisateur;
-}
-
-saluer("Alice"); // "Bonjour Alice"
-
- -

Dans les pages qui suivent, ce guide introduira la syntaxe du langage JavaScript ainsi que ses fonctionnalités ; vous pourrez ainsi écrire des applications plus complexes.

- -

{{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Types_et_grammaire")}}

diff --git a/files/fr/web/javascript/guide/introduction/index.md b/files/fr/web/javascript/guide/introduction/index.md new file mode 100644 index 0000000000..7d99c7a165 --- /dev/null +++ b/files/fr/web/javascript/guide/introduction/index.md @@ -0,0 +1,138 @@ +--- +title: Introduction +slug: Web/JavaScript/Guide/Introduction +tags: + - Débutant + - Guide + - Intro + - JavaScript +translation_of: Web/JavaScript/Guide/Introduction +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Types_et_grammaire")}}
+ +

Ce chapitre introduit JavaScript et présente certains de ses concepts fondamentaux.

+ +

Ce que vous devriez déjà savoir

+ +

Pour lire ce guide, il est conseillé d'avoir :

+ + + +

Où trouver des informations concernant JavaScript

+ +

La documentation MDN pour JavaScript comprend :

+ + + +

Si vous débutez en JavaScript, vous pouvez commencer par les articles de la section Apprendre et du Guide JavaScript. Une fois que vous maîtrisez les briques de bases, vous pourrez utiliser la référence JavaScript pour obtenir des informations détaillées sur chacun des objets natifs et des instructions.

+ +

Qu'est-ce que JavaScript ?

+ +

JavaScript est un langage de script, multi-plateforme et orienté objet. C'est un langage léger qui doit faire partie d'un environnement hôte (un navigateur web par exemple) pour qu'il puisse être utilisé sur les objets de cet environnement.

+ +

JavaScript contient une bibliothèque standard d'objets tels que Array, Date, et Math, ainsi qu'un ensemble d'éléments de langage tels que les opérateurs, les structures de contrôles et les instructions. Ces fonctionnalités centrales et natives de JavaScript peuvent être étendues de plusieurs façons en fournissant d'autres objets, par exemple :

+ + + +

JavaScript et Java

+ +

JavaScript et Java se ressemblent sur certains aspects mais ils sont fondamentalement différents l'un de l'autre. Le langage JavaScript ressemble à Java mais n'est pas typé statiquement et le typage de JavaScript est faible (alors qu'il est fort en Java). La syntaxe des expressions JavaScript est très proche de celle du Java avec les conventions de nommage et les constructions conditionnelles par exemple : c'est une des raisons qui a fait que le langage LiveScript a été renommé en JavaScript.

+ +

À la différence de Java qui est un système compilé et dont les classes sont déclarées, JavaScript est traité lors de l'exécution et possède quelques types de données pour représenter les nombres, les booléens et les chaînes de caractères (entre autres). JavaScript utilise un modèle basé sur les prototypes pour représenter les liens entre les objets alors que Java utilise un modèle plus courant basé sur les classes. Les prototypes permettent d'avoir un héritage dynamique. Ainsi, les caractéristiques héritées par un objet peuvent varier dans le temps. JavaScript supporte également les fonctions qui sont des objets à part entière et qui peuvent être des propriétés d'autres objets.

+ +

JavaScript est un langage plutôt « libre » comparé au Java. Il n'est pas nécessaire de déclarer toutes les variables, classes et méthodes. Il n'est pas nécessaire de savoir si une méthode est publique, privée ou protégée et il n'y a pas d'interfaces à implémenter. Les variables, les paramètres et les valeurs de retour des fonctions ne sont pas explicitement typés.

+ +

Java est un langage de programmation utilisant les classes, conçus pour être exécuté rapidement et garantir la sûreté du typage. Cela signifie par exemple qu'il n'est pas possible de transformer un entier Java en un objet ou qu'on ne peut pas accéder à des caractéristiques privées en corrompant le bytecode Java. Le modèle de classes utilisé par Java signifie qu'un programme n'est constitué que de classes et de méthodes. Cet héritage à base de classes, associé au typage fort font qu'on obtient des structures et des hiérarchies d'objets fortement couplées. Pour ces raisons, Java peut apparaître comme un langage plus complexe que JavaScript.

+ +

À l'inverse, JavaScript est un descendant de langages plus légers, dynamiquement typés tels que HyperTalk et dBASE. Ces langages de scripts visent un public plus large avec une syntaxe plus simple, des fonctionnalités natives spécialisées et des prérequis minimaux pour pouvoir créer des objets.

+ + + + + + + + + + + + + + + + + + + +
Comparaison synthétique entre JavaScript et Java
JavaScriptJava
Orienté objet. Aucune distinction entre les types et les objets. L'héritage est basé sur un mécanisme utilisant les prototypes et les propriétés et méthodes peuvent être ajoutées dynamiquement à n'importe quel objet.Orienté objet, utilisant un modèle de classes. Les objets sont divisés entre les classes et les instances, l'héritage s'effectue via la hiérarchie des classes. Les classes et les instances ne peuvent pas recevoir de nouvelles propriétés ou méthodes dynamiquement.
Le type de données des variables n'est pas déclaré (typage dynamique).Le type de données des variables doit être déclaré (typage statique).
+ +

Pour plus d'informations sur les différences entre JavaScript et Java, voir le chapitre sur les détails du modèle objet JavaScript.

+ +

JavaScript et la spécification ECMAScript

+ +

JavaScript est standardisé par Ecma International — une association européenne de standardisation des systèmes d'information et de communication (ECMA étant historiquement un acronyme pour European Computer Manufacturers Association) qui délivre un langage de programmation standardisé, international appelé ECMAScript. Ce langage se comporte de la même façon pour toutes les applications qui supportent ce standard. Les entreprises peuvent utiliser ce langage standard afin de développer leur implémentation de JavaScript. Le standard ECMAScript est documenté avec la spécification ECMA-262. Voir la page Nouveautés de JavaScript pour en savoir plus sur les différentes versions de JavaScript et les différentes éditions de la spécification ECMAScript.

+ +

Le standard ECMA-262 est également approuvé par l'ISO (International Organization for Standardization) sous ISO-16262. La spécification peut également être trouvée sur le site web d'Ecma International. La spécification ECMAScript ne décrit pas le Document Object Model (DOM) qui est standardisé par le World Wide Web Consortium (W3C) et le WHATWG (Web Hypertext Application Technology Working Group). Le DOM définit la façon dont les documents HTML sont exposés aux scripts. Pour mieux comprendre les différentes technologies gravitant autour de JavaScript, voir l'article Aperçu des technologies JavaScript.

+ +

Documentation JavaScript et spécification ECMAScript

+ +

La spécification ECMAScript est un ensemble de conditions à respecter pour implémenter ECMAScript : cela est utile lorsqu'on souhaite implémenter des fonctionnalités standard du langage au sein d'une implémentation ou d'un moteur ECMAScript (tel que SpiderMonkey pour Firefox, ou V8 pour Chrome).

+ +

La spécification ECMAScript n'a pas pour but d'aider les développeurs à écrire des scripts. La documentation JavaScript permet d'obtenir des informations pour écrire des scripts JavaScript.

+ +

La spécification ECMAScript utilise parfois une terminologie et une syntaxe qui peuvent sembler étranges aux yeux d'un développeur JavaScript. Bien que la description du langage diffère entre ECMAScript et la documentation JavaScript, le langage lui-même reste le même. JavaScript supporte l'ensemble des fonctionnalités mises en avant dans la spécification ECMAScript.

+ +

La documentation JavaScript décrit les aspects du langage qui pourront être utilisés par les développeurs JavaScript.

+ +

Démarrer avec JavaScript

+ +

Pour commencer à développer en JavaScript, c'est très simple : il suffit d'avoir un navigateur web récent. Ce guide inclut certaines fonctionnalités de JavaScript qui ne sont disponibles que dans les dernières versions de Firefox, il est donc recommandé d'utiliser une version de Firefox à jour pour essayer les exemples fournis.

+ +

L'outil Web Console intégré à Firefox est utile pour expérimenter avec JavaScript. Vous pouvez l'utiliser selon deux modes : le mode de saisie à une ligne et le mode de saisie multiligne.

+ +

La console web

+ +

La console web affiche des informations sur la page actuellement chargée, elle dispose également d'une ligne de commande qui peut être utilisée pour exécuter des expressions JavaScript dans la page actuelle.

+ +

Pour ouvrir la console, dans le menu, sélectionner « Développement » puis « Console web » (en passant par la barre d'outils, ce sera « Outils » puis « Développement web » puis « Console web »). Avec le clavier, on pourra utiliser la combinaison de touche Ctrl+Shift+K sur Windows et Linux ou Cmd-Option-K sur Mac. Une fois lancée, la console apparaît en base de la fenêtre du navigateur. En bas de la zone occupée par la console, il y a une ligne de commande qui peut être utilisée pour saisir des instructions JavaScript, le résultat de ces instructions sera affiché dans le panneau au dessus :

+ +

Console web

+ + +

La console fonctionne exactement de la même manière que eval : la dernière expression saisie est retournée. Pour simplifier, on peut imaginer que chaque fois qu'une expression est saisie dans la console, elle est en fait entourée de console.log autour de eval, comme suit:

+ +
function saluer(votreNom) {
+  alert("Hello " + votreNom)
+}
+console.log(eval('3 + 5'))
+
+ +

Le mode éditeur multiligne

+ +

La console est pratique quand il s'agit d'exécuter des instructions ligne par ligne. Cependant dès qu'on souhaite exécuter un script plus complexe de plusieurs lignes, la console devient vite limitée. Pour ça, on pourra utiliser le mode éditeur multiligne.

+ +

Coucou monde (hello world)

+ +

Pour commencer à écrire du JavaScript, ouvrez votre console web en mode éditeur multiligne et écrivez votre premier « Hello world » en JavaScript.

+ +
function saluer(utilisateur) {
+  return "Bonjour " + utilisateur;
+}
+
+saluer("Alice"); // "Bonjour Alice"
+
+ +

Dans les pages qui suivent, ce guide introduira la syntaxe du langage JavaScript ainsi que ses fonctionnalités ; vous pourrez ainsi écrire des applications plus complexes.

+ +

{{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Types_et_grammaire")}}

diff --git a/files/fr/web/javascript/guide/iterators_and_generators/index.html b/files/fr/web/javascript/guide/iterators_and_generators/index.html deleted file mode 100644 index 87d1a5c28a..0000000000 --- a/files/fr/web/javascript/guide/iterators_and_generators/index.html +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: Itérateurs et générateurs -slug: Web/JavaScript/Guide/Iterators_and_Generators -tags: - - Guide - - Intermediate - - JavaScript -translation_of: Web/JavaScript/Guide/Iterators_and_Generators -original_slug: Web/JavaScript/Guide/iterateurs_et_generateurs ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Utiliser_les_promesses", "Web/JavaScript/Guide/Métaprogrammation")}}
- -

Effectuer des traitements sur chacun des éléments d'une collection est une opération très fréquente. Il existe plusieurs outils natifs dans JavaScript pour parcourir une collection, les boucles for, map(), filter(). Les itérateurs et les générateurs font de ce concept d'itération une fonctionnalité principale du langage et permettent d'adapter et de personnaliser le comportement des boucles for...of.

- -

Pour plus de détails sur les mécanismes d'itération, voir les pages suivantes :

- - - -

Itérateurs

- -

Un itérateur est un objet sachant comment accéder aux éléments d'une collection un par un et qui connait leur position dans la collection. En JavaScript, un itérateur expose une méthode next() qui retourne l'élément suivant dans la séquence. Cette méthode renvoie un objet possédant deux propriétés : done et value.

- -

Un itérateur est "terminé" lorsque l'appel à la méthode next() renvoie un objet dont la propriété done vaut true.

- -

Une fois créé, un itérateur peut être utilisé explicitement en appelant sa méthode next(), ou implicitement en utilisant la boucle for...in.

- -

Voici un exemple d'une fonction créant un itérateur qui parcourt l'intervalle défini par ses arguments (depuis debut (inclus) jusqu'à end (exclus) et avec pas comme incrément. La valeur finale qui est renvoyée correspond à la taille de la séquence créée

- -
function creerIterateurIntervalle(debut = 0, fin = Infinity, pas = 1) {
-  let prochainIndex = debut;
-  let nbIterations = 0;
-
-  const rangeIterator = {
-    next: function() {
-      let resultat;
-      if (prochainIndex < fin) {
-        resultat = { value: prochainIndex, done: false };
-        prochainIndex += pas;
-        nbIterations++;
-        return resultat;
-      }
-      return { value: nbIterations, done: true }
-    }
-  };
-  return rangeIterator;
-}
- -

On pourra alors utiliser cette fonction et l'itérateur de la façon suivante :

- -
let it = creerIterateurIntervalle(1, 10, 2);
-
-let resultat = it.next();
-while (!resultat.done) {
- console.log(resultat.value); // 1 3 5 7 9
- resultat = it.next();
-}
-
-console.log("La séquence parcourue contenait ", result.value, " éléments.");
-
- -

Itérables

- -

Un objet est considéré comme itérable s'il définit le comportement qu'il aura lors de l'itération (par exemple les valeurs qui seront utilisées dans une boucle {{jsxref("Instructions/for...of", "for...of")}}). Certains types natifs, tels qu'{{jsxref("Array")}} ou {{jsxref("Map")}}, possède un comportement par défaut pour les itérations, cependant d'autres types comme les Objets, ne possèdent pas ce comportement.

- -

Pour qu'un objet soit itérable, un objet doit implémenter la méthode @@iterator, cela signifie que l'objet (ou un des objets de la chaîne de prototypes) doit avoir une propriété avec la clé {{jsxref("Symbol.iterator")}}. Cette fonction doit également, même si ce n'est pas une obligation, renvoyer une nouvel opérateur à chaque appel.

- -

Itérables personnalisés

- -

Il est possible de définir ses propres itérables de cette façon :

- -
var monItérable = {};
-monItérable[Symbol.iterator] = function* () {
-    yield 1;
-    yield 2;
-    yield 3;
-};
-[...monItérable] // [1, 2, 3]
-
- -

Itérables natifs

- -

{{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} et {{jsxref("Set")}} sont des itérables natifs car les prototypes de chacun ont tous une méthode {{jsxref("Symbol.iterator")}}.

- -

Les éléments de syntaxe utilisant des itérables

- -

Certaines instructions ou expressions utilisent des itérables, par exemple les boucles {{jsxref("Instructions/for...of","for...of")}} et {{jsxref("Opérateurs/yield*","yield*")}}.

- -
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"
-
-
- -

Générateurs

- -

Les itérateurs personnalisés sont un outil utile mais leur création peut s'avérer complexe et il faut maintenir leur état interne. Avec les générateurs, on peut définir une seule fonction qui est un algorithme itératif et qui peut maintenir son état.

- -

Un générateur est un type de fonction spécial qui fonctionne comme une fabrique (factory) d'itérateurs. Une fonction devient un générateur lorsqu'elle contient une ou plusieurs expressions yield et qu'elle utilise la syntaxe function*.

- -
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
-// ...
- -

Générateurs avancés

- -

Les générateurs calculent les valeurs à fournir à la demande, ce qui leur permet de représenter efficacement des suites complexes à calculer, voire des séries infinies (comme vu dans l'exemple précédent).

- -

La méthode next() accepte également un argument qui pourra être utilisé pour modifier l'état interne du générateur. Une valeur passée à next() sera traitée comme le résultat de la dernière expression yield qui a interrompu le générateur. Une valeur passée au premier appel de next() sera toujours ignorée.

- -

Par exemple, on peut avoir un générateur pour la suite de Fibonnaci et utiliser next(x) pour redémarrer la série :

- -
function* fibonacci(){
-  var fn1 = 0;
-  var fn2 = 1;
-  while (true){
-    var current = fn1;
-    fn1 = fn2;
-    fn2 = fn1 + current;
-    var reset = yield current;
-    if (reset){
-        fn1 = 0;
-        fn2 = 1;
-    }
-  }
-}
-
-var sequence = fibonacci();
-console.log(sequence.next().value);     // 0
-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(true).value); // 0
-console.log(sequence.next().value);     // 1
-console.log(sequence.next().value);     // 1
-console.log(sequence.next().value);     // 2
- -

Il est possible de forcer un générateur à lever une exception en utilisant la méthode throw() en lui passant la valeur de l'exception en argument. Cette exception sera levée depuis l'état actuel du générateur, comme si le yield qui était en attente avait été une instruction throw valeur.

- -

Si le mot-clé yield n'est pas trouvé lors de la levée de l'exception, l'exception sera propagée jusqu'à l'appel de throw(), les appels à next() qui suivent renverront une valeur dont la propriété done sera true.

- -

Si l'exception n'est pas interceptée dans le générateur, elle se propagera jusqu'à l'appel de throw() et les appels suivants de next() renverront un objet dont la propriété done vaut true.

- -

Les générateurs possèdent une méthode return(valeur) qui permet de renvoyer une valeur donnée et de terminer le générateur.

- -

{{PreviousNext("Web/JavaScript/Guide/Utiliser_les_promesses", "Web/JavaScript/Guide/Métaprogrammation")}}

diff --git a/files/fr/web/javascript/guide/iterators_and_generators/index.md b/files/fr/web/javascript/guide/iterators_and_generators/index.md new file mode 100644 index 0000000000..87d1a5c28a --- /dev/null +++ b/files/fr/web/javascript/guide/iterators_and_generators/index.md @@ -0,0 +1,176 @@ +--- +title: Itérateurs et générateurs +slug: Web/JavaScript/Guide/Iterators_and_Generators +tags: + - Guide + - Intermediate + - JavaScript +translation_of: Web/JavaScript/Guide/Iterators_and_Generators +original_slug: Web/JavaScript/Guide/iterateurs_et_generateurs +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Utiliser_les_promesses", "Web/JavaScript/Guide/Métaprogrammation")}}
+ +

Effectuer des traitements sur chacun des éléments d'une collection est une opération très fréquente. Il existe plusieurs outils natifs dans JavaScript pour parcourir une collection, les boucles for, map(), filter(). Les itérateurs et les générateurs font de ce concept d'itération une fonctionnalité principale du langage et permettent d'adapter et de personnaliser le comportement des boucles for...of.

+ +

Pour plus de détails sur les mécanismes d'itération, voir les pages suivantes :

+ + + +

Itérateurs

+ +

Un itérateur est un objet sachant comment accéder aux éléments d'une collection un par un et qui connait leur position dans la collection. En JavaScript, un itérateur expose une méthode next() qui retourne l'élément suivant dans la séquence. Cette méthode renvoie un objet possédant deux propriétés : done et value.

+ +

Un itérateur est "terminé" lorsque l'appel à la méthode next() renvoie un objet dont la propriété done vaut true.

+ +

Une fois créé, un itérateur peut être utilisé explicitement en appelant sa méthode next(), ou implicitement en utilisant la boucle for...in.

+ +

Voici un exemple d'une fonction créant un itérateur qui parcourt l'intervalle défini par ses arguments (depuis debut (inclus) jusqu'à end (exclus) et avec pas comme incrément. La valeur finale qui est renvoyée correspond à la taille de la séquence créée

+ +
function creerIterateurIntervalle(debut = 0, fin = Infinity, pas = 1) {
+  let prochainIndex = debut;
+  let nbIterations = 0;
+
+  const rangeIterator = {
+    next: function() {
+      let resultat;
+      if (prochainIndex < fin) {
+        resultat = { value: prochainIndex, done: false };
+        prochainIndex += pas;
+        nbIterations++;
+        return resultat;
+      }
+      return { value: nbIterations, done: true }
+    }
+  };
+  return rangeIterator;
+}
+ +

On pourra alors utiliser cette fonction et l'itérateur de la façon suivante :

+ +
let it = creerIterateurIntervalle(1, 10, 2);
+
+let resultat = it.next();
+while (!resultat.done) {
+ console.log(resultat.value); // 1 3 5 7 9
+ resultat = it.next();
+}
+
+console.log("La séquence parcourue contenait ", result.value, " éléments.");
+
+ +

Itérables

+ +

Un objet est considéré comme itérable s'il définit le comportement qu'il aura lors de l'itération (par exemple les valeurs qui seront utilisées dans une boucle {{jsxref("Instructions/for...of", "for...of")}}). Certains types natifs, tels qu'{{jsxref("Array")}} ou {{jsxref("Map")}}, possède un comportement par défaut pour les itérations, cependant d'autres types comme les Objets, ne possèdent pas ce comportement.

+ +

Pour qu'un objet soit itérable, un objet doit implémenter la méthode @@iterator, cela signifie que l'objet (ou un des objets de la chaîne de prototypes) doit avoir une propriété avec la clé {{jsxref("Symbol.iterator")}}. Cette fonction doit également, même si ce n'est pas une obligation, renvoyer une nouvel opérateur à chaque appel.

+ +

Itérables personnalisés

+ +

Il est possible de définir ses propres itérables de cette façon :

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

Itérables natifs

+ +

{{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} et {{jsxref("Set")}} sont des itérables natifs car les prototypes de chacun ont tous une méthode {{jsxref("Symbol.iterator")}}.

+ +

Les éléments de syntaxe utilisant des itérables

+ +

Certaines instructions ou expressions utilisent des itérables, par exemple les boucles {{jsxref("Instructions/for...of","for...of")}} et {{jsxref("Opérateurs/yield*","yield*")}}.

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

Générateurs

+ +

Les itérateurs personnalisés sont un outil utile mais leur création peut s'avérer complexe et il faut maintenir leur état interne. Avec les générateurs, on peut définir une seule fonction qui est un algorithme itératif et qui peut maintenir son état.

+ +

Un générateur est un type de fonction spécial qui fonctionne comme une fabrique (factory) d'itérateurs. Une fonction devient un générateur lorsqu'elle contient une ou plusieurs expressions yield et qu'elle utilise la syntaxe function*.

+ +
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
+// ...
+ +

Générateurs avancés

+ +

Les générateurs calculent les valeurs à fournir à la demande, ce qui leur permet de représenter efficacement des suites complexes à calculer, voire des séries infinies (comme vu dans l'exemple précédent).

+ +

La méthode next() accepte également un argument qui pourra être utilisé pour modifier l'état interne du générateur. Une valeur passée à next() sera traitée comme le résultat de la dernière expression yield qui a interrompu le générateur. Une valeur passée au premier appel de next() sera toujours ignorée.

+ +

Par exemple, on peut avoir un générateur pour la suite de Fibonnaci et utiliser next(x) pour redémarrer la série :

+ +
function* fibonacci(){
+  var fn1 = 0;
+  var fn2 = 1;
+  while (true){
+    var current = fn1;
+    fn1 = fn2;
+    fn2 = fn1 + current;
+    var reset = yield current;
+    if (reset){
+        fn1 = 0;
+        fn2 = 1;
+    }
+  }
+}
+
+var sequence = fibonacci();
+console.log(sequence.next().value);     // 0
+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(true).value); // 0
+console.log(sequence.next().value);     // 1
+console.log(sequence.next().value);     // 1
+console.log(sequence.next().value);     // 2
+ +

Il est possible de forcer un générateur à lever une exception en utilisant la méthode throw() en lui passant la valeur de l'exception en argument. Cette exception sera levée depuis l'état actuel du générateur, comme si le yield qui était en attente avait été une instruction throw valeur.

+ +

Si le mot-clé yield n'est pas trouvé lors de la levée de l'exception, l'exception sera propagée jusqu'à l'appel de throw(), les appels à next() qui suivent renverront une valeur dont la propriété done sera true.

+ +

Si l'exception n'est pas interceptée dans le générateur, elle se propagera jusqu'à l'appel de throw() et les appels suivants de next() renverront un objet dont la propriété done vaut true.

+ +

Les générateurs possèdent une méthode return(valeur) qui permet de renvoyer une valeur donnée et de terminer le générateur.

+ +

{{PreviousNext("Web/JavaScript/Guide/Utiliser_les_promesses", "Web/JavaScript/Guide/Métaprogrammation")}}

diff --git a/files/fr/web/javascript/guide/keyed_collections/index.html b/files/fr/web/javascript/guide/keyed_collections/index.html deleted file mode 100644 index 9b93b1cc67..0000000000 --- a/files/fr/web/javascript/guide/keyed_collections/index.html +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Collections avec clés -slug: Web/JavaScript/Guide/Keyed_collections -tags: - - Collections - - Guide - - JavaScript - - Map - - set -translation_of: Web/JavaScript/Guide/Keyed_collections -original_slug: Web/JavaScript/Guide/Collections_avec_clés ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Collections_indexées", "Web/JavaScript/Guide/Utiliser_les_objets")}}
- -

Ce chapitre présente les collections de données qui sont ordonnées avec une clé. Les objets Map et Set contiennent des éléments sur lesquels on peut itérer dans leur ordre d'insertion.

- -

Maps

- -

Le type Map

- -

ECMAScript 2015 introduit une nouvelle structure de données pour faire correspondre des données entre elle. Un objet {{jsxref("Map")}} représente une collection de données qui sont des correspondances entre des clés ou valeurs et pour lequel on peut itérer dans l'ordre d'insertion pour lister les différentes clés / valeurs.

- -

Le code suivant illustre certaines opérations basiques avec Map. Pour plus d'informations sur cet objet, voir également la page de référence {{jsxref("Map")}}. Il est possible d'utiliser une boucle {{jsxref("Instructions/for...of","for...of")}} pour renvoyer un tableau [clé, valeur] à chaque itération.

- -
var sayings = new Map();
-sayings.set("dog", "woof");
-sayings.set("cat", "meow");
-sayings.set("elephant", "toot");
-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"
-
- -

Comparaison entre les types Object et Map

- -

Habituellement, les objets {{jsxref("Object", "objets", "", 1)}} ont été utilisés pour faire correspondre des chaînes avec des valeurs. Les objets permettent d'associer des clés avec des valeurs, de récupérer ces valeurs, de supprimer des clés, de détecter si quelque chose est enregistré dans une clé. Le type Map possède cependant certains avantages pour être utilisés comme maps.

- - - -

Pour savoir si on doit utiliser le type Map ou le type Object, on peut considérer les aspects suivants :

- - - -

Le type WeakMap

- -

L'objet {{jsxref("WeakMap")}} est une collection de paires clés/valeurs pour lesquelles les clés sont uniquement des objets (les valeurs peuvent être d'un type arbitraire). Les références vers les objets sont des références « faibles ». Cela signifie qu'elles seront collectées par le ramasse-miettes s'il n'y a pas d'autres références vers cet objet. L'API WeakMap offre les mêmes fonctionnalités que l'API Map.

- -

La différence entre le type Map et le type WeakMap est que les clés d'un objet WeakMap ne sont pas énumérables (c'est-à-dire qu'on n'a pas de méthode pour donner la liste des clés). S'il en existait une, la liste dépendrait de l'état d'avancement du ramasse-miettes, ce qui introduirait un non-déterminisme.

- -

Pour plus d'informations et d'exemples, voir également le paragraphe « Pourquoi WeakMap ? » sur l'article {{jsxref("WeakMap")}} de la référence.

- -

Un cas d'utilisation des objets WeakMap est le stockage de données privées d'un objet ou pour cacher certains détails d'implémentation. L'exemple qui suit est tiré du billet de blog de Nick Fitzgerald « Masquer des détails d'implémentation avec les WeakMaps ECMAScript 6 ». Les données et méthodes privées sont stockées dans l'objet WeakMap privates. Tout ce qui est exposé par l'instance et le prototype est public. Tout ce qui est en dehors est inaccessible car privates n'est pas exporté depuis le module :

- -
const privates = new WeakMap();
-
-function Public() {
-  const me = {
-    // Les données privées ici
-  };
-  privates.set(this, me);
-}
-
-Public.prototype.method = function () {
-  const me = privates.get(this);
-  // On fait des choses avec les données privées dans `me`...
-};
-
-module.exports = Public;
-
- -

Les ensembles

- -

Le type Set

- -

Les objets {{jsxref("Set")}} sont des ensembles de valeurs. Il est possible de les parcourir dans l'ordre d'insertion des éléments. Une valeur d'un élément Set ne peut y apparaître qu'une seule fois, il est unique pour cette instance de Set.

- -

Le code suivant illustre certaines opérations basiques avec Set. Voir aussi la page {{jsxref("Set")}} pour plus d'exemples et l'API complète.

- -
var monEnsemble = new Set();
-monEnsemble.add(1);
-monEnsemble.add("du texte");
-monEnsemble.add("toto");
-
-monEnsemble.has(1); // true
-monEnsemble.delete("toto");
-monEnsemble.size; // 2
-
-for (let item of monEnsemble) console.log(item);
-// 1
-// "du texte"
-
- -

Convertir des tableaux (Array) en ensembles (Set)

- -

Il est possible de créer un {{jsxref("Array")}} à partir d'un Set grâce à {{jsxref("Array.from")}} ou l'opérateur de décomposition. Pour effectuer la conversion dans l'autre sens, on peut utiliser le constructeur Set avec un argument de type Array. Encore une fois, les objets Set stockent des valeurs uniques, les éléments dupliqués dans un tableau seront supprimés lors de la conversion.

- -
Array.from(monSet);
-[...monSet2];
-
-monSet2 = new Set([1,2,3,4]);
-
- -

Comparaison entre Array et Set

- -

Historiquement, on représentait des ensembles avec des tableaux JavaScript. Ce nouveau type, Set, possède certains avantages :

- - - -

Le type WeakSet

- -

Les objets {{jsxref("WeakSet")}} sont des ensembles d'objets. Un objet d'un WeakSet ne peut y apparaître qu'une seule fois maximum. On ne peut pas itérer sur les objets WeakSet (ils ne sont pas énumérables).

- -

Les principales différences avec l'objet {{jsxref("Set")}} sont :

- - - -

Les cas d'utilisations pour les objets WeakSet objects sont relativement limités. Ils empêcheront toute fuite mémoire donc on pourra, de façon sécurisée, les utiliser avec des éléments DOM qui pourront être des clés (pour les utiliser par ailleurs, etc.).

- -

Égalité des clés et des valeurs avec Map et Set

- -

L'égalité utilisée pour les clés des objets Map et celle utilisée pour les valeurs des objets Set sont les mêmes : elles sont basées sur l'algorithme suivant :

- - - -

{{PreviousNext("Web/JavaScript/Guide/Collections_indexées", "Web/JavaScript/Guide/Utiliser_les_objets")}}

diff --git a/files/fr/web/javascript/guide/keyed_collections/index.md b/files/fr/web/javascript/guide/keyed_collections/index.md new file mode 100644 index 0000000000..9b93b1cc67 --- /dev/null +++ b/files/fr/web/javascript/guide/keyed_collections/index.md @@ -0,0 +1,153 @@ +--- +title: Collections avec clés +slug: Web/JavaScript/Guide/Keyed_collections +tags: + - Collections + - Guide + - JavaScript + - Map + - set +translation_of: Web/JavaScript/Guide/Keyed_collections +original_slug: Web/JavaScript/Guide/Collections_avec_clés +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Collections_indexées", "Web/JavaScript/Guide/Utiliser_les_objets")}}
+ +

Ce chapitre présente les collections de données qui sont ordonnées avec une clé. Les objets Map et Set contiennent des éléments sur lesquels on peut itérer dans leur ordre d'insertion.

+ +

Maps

+ +

Le type Map

+ +

ECMAScript 2015 introduit une nouvelle structure de données pour faire correspondre des données entre elle. Un objet {{jsxref("Map")}} représente une collection de données qui sont des correspondances entre des clés ou valeurs et pour lequel on peut itérer dans l'ordre d'insertion pour lister les différentes clés / valeurs.

+ +

Le code suivant illustre certaines opérations basiques avec Map. Pour plus d'informations sur cet objet, voir également la page de référence {{jsxref("Map")}}. Il est possible d'utiliser une boucle {{jsxref("Instructions/for...of","for...of")}} pour renvoyer un tableau [clé, valeur] à chaque itération.

+ +
var sayings = new Map();
+sayings.set("dog", "woof");
+sayings.set("cat", "meow");
+sayings.set("elephant", "toot");
+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"
+
+ +

Comparaison entre les types Object et Map

+ +

Habituellement, les objets {{jsxref("Object", "objets", "", 1)}} ont été utilisés pour faire correspondre des chaînes avec des valeurs. Les objets permettent d'associer des clés avec des valeurs, de récupérer ces valeurs, de supprimer des clés, de détecter si quelque chose est enregistré dans une clé. Le type Map possède cependant certains avantages pour être utilisés comme maps.

+ + + +

Pour savoir si on doit utiliser le type Map ou le type Object, on peut considérer les aspects suivants :

+ + + +

Le type WeakMap

+ +

L'objet {{jsxref("WeakMap")}} est une collection de paires clés/valeurs pour lesquelles les clés sont uniquement des objets (les valeurs peuvent être d'un type arbitraire). Les références vers les objets sont des références « faibles ». Cela signifie qu'elles seront collectées par le ramasse-miettes s'il n'y a pas d'autres références vers cet objet. L'API WeakMap offre les mêmes fonctionnalités que l'API Map.

+ +

La différence entre le type Map et le type WeakMap est que les clés d'un objet WeakMap ne sont pas énumérables (c'est-à-dire qu'on n'a pas de méthode pour donner la liste des clés). S'il en existait une, la liste dépendrait de l'état d'avancement du ramasse-miettes, ce qui introduirait un non-déterminisme.

+ +

Pour plus d'informations et d'exemples, voir également le paragraphe « Pourquoi WeakMap ? » sur l'article {{jsxref("WeakMap")}} de la référence.

+ +

Un cas d'utilisation des objets WeakMap est le stockage de données privées d'un objet ou pour cacher certains détails d'implémentation. L'exemple qui suit est tiré du billet de blog de Nick Fitzgerald « Masquer des détails d'implémentation avec les WeakMaps ECMAScript 6 ». Les données et méthodes privées sont stockées dans l'objet WeakMap privates. Tout ce qui est exposé par l'instance et le prototype est public. Tout ce qui est en dehors est inaccessible car privates n'est pas exporté depuis le module :

+ +
const privates = new WeakMap();
+
+function Public() {
+  const me = {
+    // Les données privées ici
+  };
+  privates.set(this, me);
+}
+
+Public.prototype.method = function () {
+  const me = privates.get(this);
+  // On fait des choses avec les données privées dans `me`...
+};
+
+module.exports = Public;
+
+ +

Les ensembles

+ +

Le type Set

+ +

Les objets {{jsxref("Set")}} sont des ensembles de valeurs. Il est possible de les parcourir dans l'ordre d'insertion des éléments. Une valeur d'un élément Set ne peut y apparaître qu'une seule fois, il est unique pour cette instance de Set.

+ +

Le code suivant illustre certaines opérations basiques avec Set. Voir aussi la page {{jsxref("Set")}} pour plus d'exemples et l'API complète.

+ +
var monEnsemble = new Set();
+monEnsemble.add(1);
+monEnsemble.add("du texte");
+monEnsemble.add("toto");
+
+monEnsemble.has(1); // true
+monEnsemble.delete("toto");
+monEnsemble.size; // 2
+
+for (let item of monEnsemble) console.log(item);
+// 1
+// "du texte"
+
+ +

Convertir des tableaux (Array) en ensembles (Set)

+ +

Il est possible de créer un {{jsxref("Array")}} à partir d'un Set grâce à {{jsxref("Array.from")}} ou l'opérateur de décomposition. Pour effectuer la conversion dans l'autre sens, on peut utiliser le constructeur Set avec un argument de type Array. Encore une fois, les objets Set stockent des valeurs uniques, les éléments dupliqués dans un tableau seront supprimés lors de la conversion.

+ +
Array.from(monSet);
+[...monSet2];
+
+monSet2 = new Set([1,2,3,4]);
+
+ +

Comparaison entre Array et Set

+ +

Historiquement, on représentait des ensembles avec des tableaux JavaScript. Ce nouveau type, Set, possède certains avantages :

+ + + +

Le type WeakSet

+ +

Les objets {{jsxref("WeakSet")}} sont des ensembles d'objets. Un objet d'un WeakSet ne peut y apparaître qu'une seule fois maximum. On ne peut pas itérer sur les objets WeakSet (ils ne sont pas énumérables).

+ +

Les principales différences avec l'objet {{jsxref("Set")}} sont :

+ + + +

Les cas d'utilisations pour les objets WeakSet objects sont relativement limités. Ils empêcheront toute fuite mémoire donc on pourra, de façon sécurisée, les utiliser avec des éléments DOM qui pourront être des clés (pour les utiliser par ailleurs, etc.).

+ +

Égalité des clés et des valeurs avec Map et Set

+ +

L'égalité utilisée pour les clés des objets Map et celle utilisée pour les valeurs des objets Set sont les mêmes : elles sont basées sur l'algorithme suivant :

+ + + +

{{PreviousNext("Web/JavaScript/Guide/Collections_indexées", "Web/JavaScript/Guide/Utiliser_les_objets")}}

diff --git a/files/fr/web/javascript/guide/loops_and_iteration/index.html b/files/fr/web/javascript/guide/loops_and_iteration/index.html deleted file mode 100644 index b3a7c80e31..0000000000 --- a/files/fr/web/javascript/guide/loops_and_iteration/index.html +++ /dev/null @@ -1,350 +0,0 @@ ---- -title: Boucles et itérations -slug: Web/JavaScript/Guide/Loops_and_iteration -tags: - - Guide - - JavaScript - - Syntax -translation_of: Web/JavaScript/Guide/Loops_and_iteration -original_slug: Web/JavaScript/Guide/Boucles_et_itération ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Contr%C3%B4le_du_flux_Gestion_des_erreurs", "Web/JavaScript/Guide/Fonctions")}}
- -

Les boucles permettent de répéter des actions simplement et rapidement. Ce chapitre du guide JavaScript présente les différentes instructions qu'il est possible d'utiliser en JavaScript pour effectuer des itérations.

- -

Les boucles permettent de répéter des actions simplement et rapidement. Une boucle peut être vue comme une version informatique de « copier N lignes » ou de « faire X fois quelque chose ». Par exemple, en JavaScript, on pourrait traduire « Faire 5 pas vers l'est » avec cette boucle :

- -
for (let pas = 0; pas < 5; pas++) {
-  // Ceci sera exécuté 5 fois
-  // À chaque éxécution, la variable "pas" augmentera de 1
-  // Lorsque'elle sera arrivée à 5, le boucle se terminera.
-  console.log('Faire ' + pas + ' pas vers l\'est');
-}
-
- -

Il y a différents types de boucles mais elles se ressemblent toutes au sens où elles répètent une action un certain nombre de fois (ce nombre peut éventuellement être zéro). Les différents types de boucles permettent d'utiliser différentes façon de commencer et de terminer une boucle. Chaque type de boucle pourra être utilisé en fonction de la situation et du problème que l'on cherche à résoudre.

- -

Voici les différentes boucles fournies par JavaScript :

- - - -

L'instruction for

- -

Une boucle {{jsxref("statements/for", "for")}} répète des instructions jusqu'à ce qu'une condition donnée ne soit plus vérifiée. La boucle for JavaScript ressemble beaucoup à celle utilisée en C ou en Java. Une boucle for s'utilise de la façon suivante :

- -
for ([expressionInitiale]; [condition]; [expressionIncrément])
-  instruction
-
- -

Voici ce qui se passe quand une boucle for s'exécute :

- -
    -
  1. L'expression initiale expressionInitiale est exécutée si elle est présente. Généralement, on utilise cette expression pour initialiser un ou plusieurs compteurs dont on se servira dans la boucle. Il est possible d'utiliser des expressions plus complexes si besoin. Elle peut servir à déclarer des variables.
  2. -
  3. L'expression condition est évaluée, si elle vaut true, les instructions contenues dans la boucle sont exécutées. Si la valeur de condition est false, la boucle for se termine. Si la condition est absente, elle est considérée comme true.
  4. -
  5. L'instruction instruction est exécutée. Si l'on souhaite exécuter plusieurs instructions, on utilisera un bloc d'instructions ({ ... }) afin de les grouper.
  6. -
  7. Si elle est présente, l'expression de mise à jour expressionIncrément est exécutée.
  8. -
  9. On retourne ensuite à l'étape 2.
  10. -
- -

Exemple

- -

La fonction suivante contient une instruction for qui compte le nombre d'options sélectionnées dans une liste déroulante (ici, un objet {{HTMLElement("select")}} permettant une sélection multiple). L'instruction for déclare une variable i et l'initialise à zéro. Elle vérifie que i est bien inférieur au nombre d'options et, pour chaque option, effectue un test conditionnel pour savoir si l'option est sélectionnée puis passe à l'option suivante en incrémentant la variable i pour chaque itération.

- -
<form name="selectForm">
-  <p>
-    <label for="typesMusique">Veuillez choisir des genres musicaux, puis cliquez :</label>
-    <select id="typesMusique" name="typesMusique" multiple="multiple">
-      <option selected="selected">R&B</option>
-      <option>Jazz</option>
-      <option>Blues</option>
-      <option>New Age</option>
-      <option>Classique</option>
-      <option>Opera</option>
-    </select>
-  </p>
-  <p><button id="btn" type="button">Combien sont sélectionnés ?</button></p>
-</form>
-
-<script>
-function quantité(selectObject) {
-  let qtéSélectionnée = 0;
-  for (let i = 0; i < selectObject.options.length; i++) {
-    if (selectObject.options[i].selected) {
-      qtéSélectionnée++;
-    }
-  }
-  return qtéSélectionnée;
-}
-
-let btn = document.getElementById("btn");
-btn.addEventListener("click", function(){
-  alert('Nombre d\'options choisies : ' + quantité(document.selectForm.typesMusique))
-});
-</script>
-
-
- -

L'instruction do...while

- -

L'instruction {{jsxref("statements/do...while", "do...while")}} permet de répéter un ensemble d'instructions jusqu'à ce qu'une condition donnée ne soit plus vérifiée. (NdT : littéralement « do...while » signifie « faire... tant que »). Une instruction do...while s'utilise de la façon suivante :

- -
do
-  instruction
-while (condition);
-
- -

instruction est exécutée au moins une fois avant que la condition soit vérifiée. Pour utiliser plusieurs instructions à cet endroit, on utilisera une instruction de bloc ({ ... }) pour regrouper différentes instructions. Si la condition est vérifiée, l'instruction est à nouveau exécutée. À la fin de chaque exécution, la condition est vérifiée. Quand la condition n'est plus vérifiée (vaut false ou une valeur équivalente), l'exécution de l'instruction do...while est stoppée et le contrôle passe à l'instruction suivante.

- -

Exemple

- -

Dans l'exemple qui suit, la boucle do est exécutée au moins une fois et répétée jusqu'à ce que i ne soit plus inférieur à 5.

- -
let i = 0;
-do {
-  i += 1;
-  console.log(i);
-} while (i < 5);
- -

L'instruction while

- -

Une instruction {{jsxref("statements/while", "while")}} permet d'exécuter une instruction tant qu'une condition donnée est vérifiée. Cette instruction while s'utilise de la façon suivante :

- -
while (condition)
-  instruction
-
- -

Si la condition n'est pas vérifiée, l'instruction instruction n'est pas exécutée et le contrôle passe directement à l'instruction suivant la boucle.

- -

Le test de la condition s'effectue avant d'exécuter instruction. Si la condition renvoie true (ou une valeur équivalente), instruction sera exécutée et la condition sera testée à nouveau. Si la condition renvoie false (ou une valeur équivalente), l'exécution s'arrête et le contrôle est passé à l'instruction qui suit while.

- -

Pour pouvoir utiliser plusieurs instructions dans la boucle, on utilisera une instruction de bloc ({ ... }) afin de les regrouper.

- -

Exemple 1

- -

La boucle while qui suit permet d'effectuer des itérations tant que n est inférieur à 3 :

- -
let n = 0;
-let x = 0;
-while (n < 3) {
-  n++;
-  x += n;
-}
-
- -

À chaque itération, la boucle incrémente n et ajoute la valeur de n à x. x et n prendront ainsi les valeurs suivantes :

- - - -

Une fois la troisième itération effectuée, la condition n < 3 n'est plus vérifiée, par conséquent, la boucle se termine.

- -

Exemple 2

- -

Attention à éviter les boucles infinies. Il faut bien s'assurer que la condition utilisée dans la boucle ne soit plus vérifiée à un moment donné. Si la condition est toujours vérifiée, la boucle se répétera sans jamais s'arrêter. Dans l'exemple qui suit, les instructions contenues dans la boucle while s'exécutent sans discontinuer car la condition est toujours vérifiée :

- -
while (true) {
-  console.log("Coucou monde !");
-}
- -

L'instruction label

- -

Un {{jsxref("statements/label","label")}} (ou étiquette) permet de fournir un identifiant pour une instruction afin d'y faire référence depuis un autre endroit dans le programme. On peut ainsi identifier une boucle grâce à un label puis utiliser les instructions break ou continue pour indiquer si le programme doit interrompre ou poursuivre l'exécution de cette boucle.

- -

On utilise un label de la façon suivante :

- -
label:
-  instruction
-
- -

La valeur de label peut être n'importe quel identifiant JavaScript valide (et ne doit pas être un mot réservé pour le langage). L'instruction peut être n'importe quelle instruction JavaScript valide (y compris un bloc).

- -

Exemple

- -

Dans cet exemple, on utilise un label memoBoucle pour identifier une boucle while.

- -
memoBoucle:
-while (memo == true) {
-  faireQQC();
-}
- -
-

Note : Pour plus de détails sur cette instruction, voir la page de la référence JavaScript pour label.

-
- -

L'instruction break

- -

L'instruction {{jsxref("statements/break","break")}} est utilisée pour finir l'exécution d'une boucle, d'une instruction switch, ou avec un label.

- - - -

La syntaxe de cette instruction possède donc deux formes :

- -
    -
  1. break;
  2. -
  3. break label;
  4. -
- -

La première forme permet d'interrompre la boucle la plus imbriquée (ou le switch) dans laquelle on se trouve. La seconde forme interrompt l'exécution d'une instruction identifiée par un label.

- -

Exemple 1

- -

Dans l'exemple qui suit, on itère sur un tableau grâce à une boucle jusqu'à trouver un élément dont la valeur est valeurTest :

- -
for (i = 0; i < a.length; i++) {
-  if (a[i] === valeurTest) {
-    break;
-  }
-}
- -

Exemple 2

- -

Ici, on utilise break des deux façons : avec une instruction représentée par un label et sans.

- -
let x = 0;
-let z = 0;
-labelAnnuleBoucle: while (true) {
-  console.log("Boucle externe : " + x);
-  x += 1;
-  z = 1;
-  while (true) {
-    console.log("Boucle interne : " + z);
-    z += 1;
-    if (z === 10 && x === 10) {
-      break labelAnnuleBoucle;
-    } else if (z === 10) {
-      break;
-    }
-  }
-}
-
- -

L'instruction continue

- -

L'instruction {{jsxref("statements/continue","continue")}} permet de reprendre une boucle while, do-while, for, ou une instruction label.

- - - -

L'instruction continue s'utilise donc de la façon suivante :

- -
    -
  1. continue;
  2. -
  3. continue label;
  4. -
- -

Exemple 1

- -

Dans l'exemple qui suit, on utilise une boucle while avec une instruction continue qui est exécutée lorsque i vaut 3. Ici, n prendra donc les valeurs 1, 3, 7 et 12.

- -
let i = 0;
-let n = 0;
-while (i < 5) {
-  i++;
-  if (i === 3) {
-    continue;
-  }
-  n += i;
-  console.log(n);
-}
-// 1, 3, 7, 12
-
-
- -

Exemple 2

- -

Dans l'exemple suivant, on a une instruction étiquetée vérifIetJ qui contient une autre instruction étiquetée vérifJ. Si l'instruction continue est utilisée, le programme reprend l'exécution au début de l'instruction vérifJ. Chaque fois que continue est utilisé, vérifJ réitère jusqu'à ce que sa condition renvoie false. Lorsque c'est le cas, le reste de l'instruction vérifIetJ est exécuté.

- -

Si continue utilisait l'étiquette vérifIetJ, le programme continuerait au début de l'instruction vérifIetJ

- -
let i = 0;
-let j = 8;
-
-vérifIetJ: while (i < 4) {
-  console.log("i : " + i);
-  i += 1;
-
-  vérifJ: while (j > 4) {
-    console.log("j : "+ j);
-    j -= 1;
-    if ((j % 2) === 0){
-      continue vérifJ;
-    }
-    console.log(j + " est impaire.");
-   }
-   console.log("i = " + i);
-   console.log("j = " + j);
-}
- -

L'instruction for...in

- -

L'instruction {{jsxref("statements/for...in","for...in")}} permet d'itérer sur l'ensemble des propriétés énumérables d'un objet. Pour chaque propriété, JavaScript exécutera l'instruction indiquée. Cette instruction s'utilise de la façon suivante :

- -
for (variable in objet) {
-  instruction
-}
-
- -

Exemple

- -

La fonction suivante prend comme argument un objet et le nom de cet objet. Elle parcourt ensuite les propriétés de l'objet et renvoie une chaîne de caractères qui liste les propriétés avec leurs noms et leurs valeurs respectives :

- -
function afficherProps(obj, nomObj) {
-  var result = "";
-  for (var i in obj) {
-    result += nomObj + "." + i + " = " + obj[i] + "\n";
-  }
-  result += "\n";
-  return result;
-}
-
- -

Pour un objet voiture dont les propriétés sont fabricant et modèle, result serait :

- -
voiture.fabricant = Ford
-voiture.modèle = Mustang
-
- -

Les tableaux (arrays) et for...in

- -

Bien qu'il soit tentant d'utiliser cette instruction pour parcourir les éléments d'un objet Array , cela peut avoir des comportements inattendus. En effet, for...in permet de parcourir les propriétés définies par l'utilisateur ainsi que les éléments de tableau. Ainsi, si l'on modifie un objet Array en lui ajoutant des propriétés et/ou des méthodes, la boucle for...in renverra le nom de ces nouvelles propriétés en plus des indices des éléments du tableau. C'est pourquoi, il est préférable d'utiliser une boucle for avec les indices du tableau pour parcourir ses éléments.

- -

L'instruction for...of

- -

L'instruction {{jsxref("statements/for...of","for...of")}} crée une boucle qui fonctionne avec les objets itérables (qui incluent {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, l'objet arguments, etc.). La boucle appelle un mécanisme d'itération propre à l'objet utilisé et elle parcourt l'objet et les valeurs de ses différentes propriétés.

- -
for (variable of objet) {
-  instruction
-}
- -

Dans l'exemple suivant, on illustre la différence entre une boucle for...of et une boucle for...infor...in parcourt les noms des propriétés d'un objet alors que for...of parcourt les valeurs des propriétés :

- -
let arr = [3, 5, 7];
-arr.toto = "coucou";
-
-for (let i in arr) {
-  console.log(i); // affiche 0, 1, 2, "toto" dans la console
-}
-
-for (let i of arr) {
-  console.log(i); // affiche 3, 5, 7 dans la console
-}
-
- -

{{PreviousNext("Web/JavaScript/Guide/Contr%C3%B4le_du_flux_Gestion_des_erreurs", "Web/JavaScript/Guide/Fonctions")}}

diff --git a/files/fr/web/javascript/guide/loops_and_iteration/index.md b/files/fr/web/javascript/guide/loops_and_iteration/index.md new file mode 100644 index 0000000000..b3a7c80e31 --- /dev/null +++ b/files/fr/web/javascript/guide/loops_and_iteration/index.md @@ -0,0 +1,350 @@ +--- +title: Boucles et itérations +slug: Web/JavaScript/Guide/Loops_and_iteration +tags: + - Guide + - JavaScript + - Syntax +translation_of: Web/JavaScript/Guide/Loops_and_iteration +original_slug: Web/JavaScript/Guide/Boucles_et_itération +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Contr%C3%B4le_du_flux_Gestion_des_erreurs", "Web/JavaScript/Guide/Fonctions")}}
+ +

Les boucles permettent de répéter des actions simplement et rapidement. Ce chapitre du guide JavaScript présente les différentes instructions qu'il est possible d'utiliser en JavaScript pour effectuer des itérations.

+ +

Les boucles permettent de répéter des actions simplement et rapidement. Une boucle peut être vue comme une version informatique de « copier N lignes » ou de « faire X fois quelque chose ». Par exemple, en JavaScript, on pourrait traduire « Faire 5 pas vers l'est » avec cette boucle :

+ +
for (let pas = 0; pas < 5; pas++) {
+  // Ceci sera exécuté 5 fois
+  // À chaque éxécution, la variable "pas" augmentera de 1
+  // Lorsque'elle sera arrivée à 5, le boucle se terminera.
+  console.log('Faire ' + pas + ' pas vers l\'est');
+}
+
+ +

Il y a différents types de boucles mais elles se ressemblent toutes au sens où elles répètent une action un certain nombre de fois (ce nombre peut éventuellement être zéro). Les différents types de boucles permettent d'utiliser différentes façon de commencer et de terminer une boucle. Chaque type de boucle pourra être utilisé en fonction de la situation et du problème que l'on cherche à résoudre.

+ +

Voici les différentes boucles fournies par JavaScript :

+ + + +

L'instruction for

+ +

Une boucle {{jsxref("statements/for", "for")}} répète des instructions jusqu'à ce qu'une condition donnée ne soit plus vérifiée. La boucle for JavaScript ressemble beaucoup à celle utilisée en C ou en Java. Une boucle for s'utilise de la façon suivante :

+ +
for ([expressionInitiale]; [condition]; [expressionIncrément])
+  instruction
+
+ +

Voici ce qui se passe quand une boucle for s'exécute :

+ +
    +
  1. L'expression initiale expressionInitiale est exécutée si elle est présente. Généralement, on utilise cette expression pour initialiser un ou plusieurs compteurs dont on se servira dans la boucle. Il est possible d'utiliser des expressions plus complexes si besoin. Elle peut servir à déclarer des variables.
  2. +
  3. L'expression condition est évaluée, si elle vaut true, les instructions contenues dans la boucle sont exécutées. Si la valeur de condition est false, la boucle for se termine. Si la condition est absente, elle est considérée comme true.
  4. +
  5. L'instruction instruction est exécutée. Si l'on souhaite exécuter plusieurs instructions, on utilisera un bloc d'instructions ({ ... }) afin de les grouper.
  6. +
  7. Si elle est présente, l'expression de mise à jour expressionIncrément est exécutée.
  8. +
  9. On retourne ensuite à l'étape 2.
  10. +
+ +

Exemple

+ +

La fonction suivante contient une instruction for qui compte le nombre d'options sélectionnées dans une liste déroulante (ici, un objet {{HTMLElement("select")}} permettant une sélection multiple). L'instruction for déclare une variable i et l'initialise à zéro. Elle vérifie que i est bien inférieur au nombre d'options et, pour chaque option, effectue un test conditionnel pour savoir si l'option est sélectionnée puis passe à l'option suivante en incrémentant la variable i pour chaque itération.

+ +
<form name="selectForm">
+  <p>
+    <label for="typesMusique">Veuillez choisir des genres musicaux, puis cliquez :</label>
+    <select id="typesMusique" name="typesMusique" multiple="multiple">
+      <option selected="selected">R&B</option>
+      <option>Jazz</option>
+      <option>Blues</option>
+      <option>New Age</option>
+      <option>Classique</option>
+      <option>Opera</option>
+    </select>
+  </p>
+  <p><button id="btn" type="button">Combien sont sélectionnés ?</button></p>
+</form>
+
+<script>
+function quantité(selectObject) {
+  let qtéSélectionnée = 0;
+  for (let i = 0; i < selectObject.options.length; i++) {
+    if (selectObject.options[i].selected) {
+      qtéSélectionnée++;
+    }
+  }
+  return qtéSélectionnée;
+}
+
+let btn = document.getElementById("btn");
+btn.addEventListener("click", function(){
+  alert('Nombre d\'options choisies : ' + quantité(document.selectForm.typesMusique))
+});
+</script>
+
+
+ +

L'instruction do...while

+ +

L'instruction {{jsxref("statements/do...while", "do...while")}} permet de répéter un ensemble d'instructions jusqu'à ce qu'une condition donnée ne soit plus vérifiée. (NdT : littéralement « do...while » signifie « faire... tant que »). Une instruction do...while s'utilise de la façon suivante :

+ +
do
+  instruction
+while (condition);
+
+ +

instruction est exécutée au moins une fois avant que la condition soit vérifiée. Pour utiliser plusieurs instructions à cet endroit, on utilisera une instruction de bloc ({ ... }) pour regrouper différentes instructions. Si la condition est vérifiée, l'instruction est à nouveau exécutée. À la fin de chaque exécution, la condition est vérifiée. Quand la condition n'est plus vérifiée (vaut false ou une valeur équivalente), l'exécution de l'instruction do...while est stoppée et le contrôle passe à l'instruction suivante.

+ +

Exemple

+ +

Dans l'exemple qui suit, la boucle do est exécutée au moins une fois et répétée jusqu'à ce que i ne soit plus inférieur à 5.

+ +
let i = 0;
+do {
+  i += 1;
+  console.log(i);
+} while (i < 5);
+ +

L'instruction while

+ +

Une instruction {{jsxref("statements/while", "while")}} permet d'exécuter une instruction tant qu'une condition donnée est vérifiée. Cette instruction while s'utilise de la façon suivante :

+ +
while (condition)
+  instruction
+
+ +

Si la condition n'est pas vérifiée, l'instruction instruction n'est pas exécutée et le contrôle passe directement à l'instruction suivant la boucle.

+ +

Le test de la condition s'effectue avant d'exécuter instruction. Si la condition renvoie true (ou une valeur équivalente), instruction sera exécutée et la condition sera testée à nouveau. Si la condition renvoie false (ou une valeur équivalente), l'exécution s'arrête et le contrôle est passé à l'instruction qui suit while.

+ +

Pour pouvoir utiliser plusieurs instructions dans la boucle, on utilisera une instruction de bloc ({ ... }) afin de les regrouper.

+ +

Exemple 1

+ +

La boucle while qui suit permet d'effectuer des itérations tant que n est inférieur à 3 :

+ +
let n = 0;
+let x = 0;
+while (n < 3) {
+  n++;
+  x += n;
+}
+
+ +

À chaque itération, la boucle incrémente n et ajoute la valeur de n à x. x et n prendront ainsi les valeurs suivantes :

+ + + +

Une fois la troisième itération effectuée, la condition n < 3 n'est plus vérifiée, par conséquent, la boucle se termine.

+ +

Exemple 2

+ +

Attention à éviter les boucles infinies. Il faut bien s'assurer que la condition utilisée dans la boucle ne soit plus vérifiée à un moment donné. Si la condition est toujours vérifiée, la boucle se répétera sans jamais s'arrêter. Dans l'exemple qui suit, les instructions contenues dans la boucle while s'exécutent sans discontinuer car la condition est toujours vérifiée :

+ +
while (true) {
+  console.log("Coucou monde !");
+}
+ +

L'instruction label

+ +

Un {{jsxref("statements/label","label")}} (ou étiquette) permet de fournir un identifiant pour une instruction afin d'y faire référence depuis un autre endroit dans le programme. On peut ainsi identifier une boucle grâce à un label puis utiliser les instructions break ou continue pour indiquer si le programme doit interrompre ou poursuivre l'exécution de cette boucle.

+ +

On utilise un label de la façon suivante :

+ +
label:
+  instruction
+
+ +

La valeur de label peut être n'importe quel identifiant JavaScript valide (et ne doit pas être un mot réservé pour le langage). L'instruction peut être n'importe quelle instruction JavaScript valide (y compris un bloc).

+ +

Exemple

+ +

Dans cet exemple, on utilise un label memoBoucle pour identifier une boucle while.

+ +
memoBoucle:
+while (memo == true) {
+  faireQQC();
+}
+ +
+

Note : Pour plus de détails sur cette instruction, voir la page de la référence JavaScript pour label.

+
+ +

L'instruction break

+ +

L'instruction {{jsxref("statements/break","break")}} est utilisée pour finir l'exécution d'une boucle, d'une instruction switch, ou avec un label.

+ + + +

La syntaxe de cette instruction possède donc deux formes :

+ +
    +
  1. break;
  2. +
  3. break label;
  4. +
+ +

La première forme permet d'interrompre la boucle la plus imbriquée (ou le switch) dans laquelle on se trouve. La seconde forme interrompt l'exécution d'une instruction identifiée par un label.

+ +

Exemple 1

+ +

Dans l'exemple qui suit, on itère sur un tableau grâce à une boucle jusqu'à trouver un élément dont la valeur est valeurTest :

+ +
for (i = 0; i < a.length; i++) {
+  if (a[i] === valeurTest) {
+    break;
+  }
+}
+ +

Exemple 2

+ +

Ici, on utilise break des deux façons : avec une instruction représentée par un label et sans.

+ +
let x = 0;
+let z = 0;
+labelAnnuleBoucle: while (true) {
+  console.log("Boucle externe : " + x);
+  x += 1;
+  z = 1;
+  while (true) {
+    console.log("Boucle interne : " + z);
+    z += 1;
+    if (z === 10 && x === 10) {
+      break labelAnnuleBoucle;
+    } else if (z === 10) {
+      break;
+    }
+  }
+}
+
+ +

L'instruction continue

+ +

L'instruction {{jsxref("statements/continue","continue")}} permet de reprendre une boucle while, do-while, for, ou une instruction label.

+ + + +

L'instruction continue s'utilise donc de la façon suivante :

+ +
    +
  1. continue;
  2. +
  3. continue label;
  4. +
+ +

Exemple 1

+ +

Dans l'exemple qui suit, on utilise une boucle while avec une instruction continue qui est exécutée lorsque i vaut 3. Ici, n prendra donc les valeurs 1, 3, 7 et 12.

+ +
let i = 0;
+let n = 0;
+while (i < 5) {
+  i++;
+  if (i === 3) {
+    continue;
+  }
+  n += i;
+  console.log(n);
+}
+// 1, 3, 7, 12
+
+
+ +

Exemple 2

+ +

Dans l'exemple suivant, on a une instruction étiquetée vérifIetJ qui contient une autre instruction étiquetée vérifJ. Si l'instruction continue est utilisée, le programme reprend l'exécution au début de l'instruction vérifJ. Chaque fois que continue est utilisé, vérifJ réitère jusqu'à ce que sa condition renvoie false. Lorsque c'est le cas, le reste de l'instruction vérifIetJ est exécuté.

+ +

Si continue utilisait l'étiquette vérifIetJ, le programme continuerait au début de l'instruction vérifIetJ

+ +
let i = 0;
+let j = 8;
+
+vérifIetJ: while (i < 4) {
+  console.log("i : " + i);
+  i += 1;
+
+  vérifJ: while (j > 4) {
+    console.log("j : "+ j);
+    j -= 1;
+    if ((j % 2) === 0){
+      continue vérifJ;
+    }
+    console.log(j + " est impaire.");
+   }
+   console.log("i = " + i);
+   console.log("j = " + j);
+}
+ +

L'instruction for...in

+ +

L'instruction {{jsxref("statements/for...in","for...in")}} permet d'itérer sur l'ensemble des propriétés énumérables d'un objet. Pour chaque propriété, JavaScript exécutera l'instruction indiquée. Cette instruction s'utilise de la façon suivante :

+ +
for (variable in objet) {
+  instruction
+}
+
+ +

Exemple

+ +

La fonction suivante prend comme argument un objet et le nom de cet objet. Elle parcourt ensuite les propriétés de l'objet et renvoie une chaîne de caractères qui liste les propriétés avec leurs noms et leurs valeurs respectives :

+ +
function afficherProps(obj, nomObj) {
+  var result = "";
+  for (var i in obj) {
+    result += nomObj + "." + i + " = " + obj[i] + "\n";
+  }
+  result += "\n";
+  return result;
+}
+
+ +

Pour un objet voiture dont les propriétés sont fabricant et modèle, result serait :

+ +
voiture.fabricant = Ford
+voiture.modèle = Mustang
+
+ +

Les tableaux (arrays) et for...in

+ +

Bien qu'il soit tentant d'utiliser cette instruction pour parcourir les éléments d'un objet Array , cela peut avoir des comportements inattendus. En effet, for...in permet de parcourir les propriétés définies par l'utilisateur ainsi que les éléments de tableau. Ainsi, si l'on modifie un objet Array en lui ajoutant des propriétés et/ou des méthodes, la boucle for...in renverra le nom de ces nouvelles propriétés en plus des indices des éléments du tableau. C'est pourquoi, il est préférable d'utiliser une boucle for avec les indices du tableau pour parcourir ses éléments.

+ +

L'instruction for...of

+ +

L'instruction {{jsxref("statements/for...of","for...of")}} crée une boucle qui fonctionne avec les objets itérables (qui incluent {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, l'objet arguments, etc.). La boucle appelle un mécanisme d'itération propre à l'objet utilisé et elle parcourt l'objet et les valeurs de ses différentes propriétés.

+ +
for (variable of objet) {
+  instruction
+}
+ +

Dans l'exemple suivant, on illustre la différence entre une boucle for...of et une boucle for...infor...in parcourt les noms des propriétés d'un objet alors que for...of parcourt les valeurs des propriétés :

+ +
let arr = [3, 5, 7];
+arr.toto = "coucou";
+
+for (let i in arr) {
+  console.log(i); // affiche 0, 1, 2, "toto" dans la console
+}
+
+for (let i of arr) {
+  console.log(i); // affiche 3, 5, 7 dans la console
+}
+
+ +

{{PreviousNext("Web/JavaScript/Guide/Contr%C3%B4le_du_flux_Gestion_des_erreurs", "Web/JavaScript/Guide/Fonctions")}}

diff --git a/files/fr/web/javascript/guide/meta_programming/index.html b/files/fr/web/javascript/guide/meta_programming/index.html deleted file mode 100644 index c126f53d88..0000000000 --- a/files/fr/web/javascript/guide/meta_programming/index.html +++ /dev/null @@ -1,279 +0,0 @@ ---- -title: Métaprogrammation -slug: Web/JavaScript/Guide/Meta_programming -tags: - - Guide - - JavaScript - - Proxy - - Reflect -translation_of: Web/JavaScript/Guide/Meta_programming -original_slug: Web/JavaScript/Guide/Métaprogrammation ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/iterateurs_et_generateurs","Web/JavaScript/Guide/Modules")}}
- -

À partir d'ECMAScript 2015, JavaScript fournit les objets natifs {{jsxref("Proxy")}} et {{jsxref("Reflect")}}. Ces objets permettent d'intercepter et de définir des comportements spécifiques pour certaines opérations fondamentales du langage (par exemple la recherche d'une propriété, l'affectation, l'énumération, l'appel d'une fonction, etc.). Grâce à ces deux objets, il est possible d'interagir avec le langage lui-même (on parle alors de métaprogrammation).

- -

Les proxies

- -

Introduits avec ECMAScript 2015, les objets {{jsxref("Proxy")}} permettent d'intercepter certaines opérations JavaScript et de définir le comportement à avoir quand celles-ci se produisent. Par exemple, on peut intercepter l'accès à une propriété d'un objet :

- -
var handler = {
-  get: function(cible, nom){
-    return nom in cible ? cible[nom] : 42;
-}};
-var p = new Proxy({}, handler);
-p.a = 1;
-console.log(p.a, p.b); // 1, 42
-
- -

Ici, l'objet Proxy définit une cible (ici c'est un objet vide) et un gestionnaire (handler) qui implémente une trappe pour l'opération get. Ainsi, l'objet qui est « proxyfié » ne renverra pas undefined lorsqu'on tentera d'accéder à une propriété qui n'est pas définie, à la place le nombre 42 sera renvoyé.

- -
-

Note : D'autres exemples sont disponibles sur la page de l'objet {{jsxref("Proxy")}}.

-
- -

Terminologie

- -

Lorsqu'on utilise les proxies et leurs fonctionnalités, on utilisera les termes suivants :

- -
-
{{jsxref("Objets_globaux/Proxy/handler","gestionnaire (handler)","","true")}}
-
L'objet qui contient les trappes.
-
trappes
-
Les méthodes qui fournissent l'accès aux propriétés. Ce concept est analogue aux trappes utilisées dans les systèmes d'exploitations.
-
cible
-
L'objet que le proxy virtualise. C'est généralement un objet utilisé en arrière-plan pour stocker les informations. Les invariants (c'est-à-dire les éléments sémantiques qui doivent rester inchangés) concernant le caractère non-extensible de l'objet ou l'aspect non-configurable des propriétés sont vérifiés par rapport à cet objet cible.
-
invariants
-
Les éléments sémantiques qui ne doivent pas être modifiés par les opérations définies dans les proxies. Si un invariant n'est pas respecté au sein d'un gestionnaire, cela provoquera une exception {{jsxref("TypeError")}}.
-
- -

Les gestionnaires et les trappes

- -

Le tableau suivant résume les différentes trappes disponibles pour les objets Proxy. Pour plus d'explications et de détails, voir les différents pages de la référence sur chacun de ces concepts.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Gestionnaires / TrappesOpérations interceptéesInvariants
{{jsxref("Objets_globaux/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}{{jsxref("Object.getPrototypeOf()")}}
- {{jsxref("Reflect.getPrototypeOf()")}}
- {{jsxref("Object/proto", "__proto__")}}
- {{jsxref("Object.prototype.isPrototypeOf()")}}
- {{jsxref("Operators/instanceof", "instanceof")}}
getPrototypeOf doit renvoyer un objet ou null.
-
- Si cible n'est pas extensible, Object.getPrototypeOf(proxy) doit renvoyer le même objet que Object.getPrototypeOf(cible).
{{jsxref("Objets_globaux/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}{{jsxref("Object.setPrototypeOf()")}}
- {{jsxref("Reflect.setPrototypeOf()")}}
-

Si cible n'est pas extensible, le paramètre prototype doit être la même valeur que Object.getPrototypeOf(cible).

-
{{jsxref("Objets_globaux/Proxy/handler/isExtensible", "handler.isExtensible()")}} -

{{jsxref("Object.isExtensible()")}}

- -

{{jsxref("Reflect.isExtensible()")}}

-
-

Object.isExtensible(proxy) doit renvoyer la même valeur que Object.isExtensible(target).

-
{{jsxref("Objets_globaux/Proxy/handler/preventExtensions", "handler.preventExtensions()")}} -

{{jsxref("Object.preventExtensions()")}}

- -

{{jsxref("Reflect.preventExtensions()")}}

-
-

Object.preventExtensions(proxy) ne renvoie true que si Object.isExtensible(proxy) vaut false.

-
{{jsxref("Objets_globaux/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}} -

{{jsxref("Object.getOwnPropertyDescriptor()")}}

- -

{{jsxref("Reflect.getOwnPropertyDescriptor()")}}

-
-

getOwnPropertyDescriptor doit renvoyer un objet ou undefined.

- -

Une propriété ne peut pas être vue comme non-existante si elle existe comme une propriété propre non-configurable de l'objet cible.

- -

Une propriété ne peut pas être vue comme non-existante si elle existe comme une propriété propre de la cible et que l'objet cible n'est pas extensible.

- -

Une propriété ne peut pas être vue comme existante si elle n'existe pas comme une propriété propre de l'objet cible et que l'objet cible n'est pas extensible.

- -

Une propriété ne peut pas être vue comme non-configurable si elle n'existe pas comme une propriété propre de l'objet cible ou si elle existe comme une propriété configurable propre de l'objet cible.

- -

Le résultat de Object.getOwnPropertyDescriptor(cible) peut être appliqué à la cible en utilisant Object.defineProperty sans que cela ne lève d'exception.

-
{{jsxref("Objets_globaux/Proxy/handler/defineProperty", "handler.defineProperty()")}} -

{{jsxref("Object.defineProperty()")}}

- -

{{jsxref("Reflect.defineProperty()")}}

-
-

Une propriété ne peut pas être ajoutée si l'objet cible n'est pas extensible.

- -

Une propriété ne peut pas être ajoutée ou être modifiée afin d'être non-configurable si elle n'existe pas comme une propriété propre de l'objet cible et qu'elle n'est pas non-configurable.

- -

Une propriété peut ne pas être non-configurable si une propriété correspondante configurable existe sur l'objet cible.

- -

Si une propriété possède une propriété correspondante sur l'objet cible, Object.defineProperty(cible, prop, descripteur) ne doit pas renvoyer d'exception.

- -

En mode strict, si la valeur de retour de defineProperty est false, cela entraînera une exception {{jsxref("TypeError")}} exception.

-
{{jsxref("Objets_globaux/Proxy/handler/has", "handler.has()")}} -

Requête d'une propriété : toto in proxy

- -

Requête d'une propriété héritée : toto in Object.create(proxy)

- -

{{jsxref("Reflect.has()")}}

-
-

Une propriété ne peut pas être vue comme non-existante si elle existe comme propriété propre non-configurable de l'objet cible.

- -

Une propriété ne peut pas être vue comme non-existante si elle existe comme propriété propre de l'objet cible et que l'objet cible n'est pas extensible.

-
{{jsxref("Objets_globaux/Proxy/handler/get", "handler.get()")}} -

Accès à une propriété : proxy[toto] et proxy.truc

- -

Accès à une propriété héritée : Object.create(proxy)[toto]

- -

{{jsxref("Reflect.get()")}}

-
-

La valeur rapportée pour la propriété doit être la même que la valeur de la propriété correspondante sur l'objet cible si celle-ci est une propriété de donnée non accessible en écriture et non-configurable..

- -

La valeur rapportée pour une propriété doit être undefined si la propriété correspondante de l'objet cible est une propriété d'accesseur dont l'attribut [[Get]] vaut undefined.

-
{{jsxref("Objets_globaux/Proxy/handler/set", "handler.set()")}} -

Affection d'une propriété : proxy[toto] = truc et proxy.toto = truc
-
- Affectation d'une propriété héritée : Object.create(proxy)[toto] = truc
-
- {{jsxref("Reflect.set()")}}

-
-

Il est impossible de modifier la valeur d'une propriété pour que celle-ci soit différente de la valeur de la propriété correspondante de l'objet cible si la propriété de l'objet cible est une propriété de donnée qui n'est pas accessible en écriture et qui n'est pas configurable.

- -

Il est impossible de modifier la valeur d'une propriété si la propriété correspondante de l'objet cible est une propriété d'accesseur non-configurable dont l'attribut [[Set]] vaut undefined.

- -

En mode strict, si le gestionnaire pour set renvoie false, cela provoquera une exception {{jsxref("TypeError")}}.

-
{{jsxref("Objets_globaux/Proxy/handler/deleteProperty", "handler.deleteProperty()")}} -

Suppression d'une propriété : delete proxy[toto] et delete proxy.toto
-
- {{jsxref("Reflect.deleteProperty()")}}

-
Une propriété ne peut pas être supprimée si elle existe comme une propriété propre non-configurable de l'objet cible.
{{jsxref("Objets_globaux/Proxy/handler/enumerate", "handler.enumerate()")}} -

Lister les propriétés avec for...in : for (var nom in proxy) {...}
-
- {{jsxref("Reflect.enumerate()")}}

-
La méthode enumerate doit renvoyer un objet.
{{jsxref("Objets_globaux/Proxy/handler/ownKeys", "handler.ownKeys()")}} -

{{jsxref("Object.getOwnPropertyNames()")}}
- {{jsxref("Object.getOwnPropertySymbols()")}}
- {{jsxref("Object.keys()")}}
- {{jsxref("Reflect.ownKeys()")}}

-
-

Le résultat de ownKeys est une liste.
-
- Le type de chaque élément de la liste est soit une {{jsxref("String")}} soit un  {{jsxref("Symbol")}}.
-
- La liste résultatnte doit contenir les clés de toutes les propriétés non-configurables de l'objet cible.
-
- Si l'objet cible n'est pas extensible, la liste résultante doit contenir toutes les clés des propriétés propres de l'objet cibles et aucune autre valeur.

-
{{jsxref("Objets_globaux/Proxy/handler/apply", "handler.apply()")}} -

proxy(..args)
-
- {{jsxref("Function.prototype.apply()")}} and {{jsxref("Function.prototype.call()")}}
-
- {{jsxref("Reflect.apply()")}}

-
Il n'y a pas d'invariant pour la méthode handler.apply.
{{jsxref("Objets_globaux/Proxy/handler/construct", "handler.construct()")}} -

new proxy(...args)
- {{jsxref("Reflect.construct()")}}

-
Le résultat doit être un Objet.
- -

Proxies révocables

- -

La méthode {{jsxref("Proxy.revocable()")}} est utilisée pour créer un objet Proxy qui puisse être révoqué. Cela signifie que que le proxy pourra être révoqué avec la fonction revoke et arrêtera le proxy. Après cet arrêt, toute opération sur le proxy entraînera une exception {{jsxref("TypeError")}}.

- -
var revocable = Proxy.revocable({}, {
-  get: function(cible, nom) {
-    return "[[" + nom + "]]";
-  }
-});
-var proxy = revocable.proxy;
-console.log(proxy.toto); // "[[toto]]"
-
-revocable.revoke();
-
-console.log(proxy.toto); // déclenche une TypeError
-proxy.toto = 1;          // une TypeError encore
-delete proxy.toto;       // toujours une TypeError
-typeof proxy             // "object", typeof ne déclenche aucune trappe
- -

Réflexion

- -

{{jsxref("Reflect")}} est un objet natif qui fournit des méthodes pour les opérations JavaScript qui peuvent être interceptées. Ces méthodes sont les mêmes que celles gérées par les {{jsxref("Objets_globaux/Proxy/handler","gestionnaires de proxy","","true")}}. Reflect n'est pas un constructeur et ne peut pas être utilisé comme une fonction !

- -

Reflect aide à transférer les opérations par défaut depuis le gestionnaire vers la cible.

- -

Par exemple, avec {{jsxref("Reflect.has()")}}, on obtient le comportement de l'opérateur in sous forme d'une fonction :

- -
Reflect.has(Object, "assign"); // true
-
- -

{{PreviousNext("Web/JavaScript/Guide/iterateurs_et_generateurs","Web/JavaScript/Guide/Modules")}}

diff --git a/files/fr/web/javascript/guide/meta_programming/index.md b/files/fr/web/javascript/guide/meta_programming/index.md new file mode 100644 index 0000000000..c126f53d88 --- /dev/null +++ b/files/fr/web/javascript/guide/meta_programming/index.md @@ -0,0 +1,279 @@ +--- +title: Métaprogrammation +slug: Web/JavaScript/Guide/Meta_programming +tags: + - Guide + - JavaScript + - Proxy + - Reflect +translation_of: Web/JavaScript/Guide/Meta_programming +original_slug: Web/JavaScript/Guide/Métaprogrammation +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/iterateurs_et_generateurs","Web/JavaScript/Guide/Modules")}}
+ +

À partir d'ECMAScript 2015, JavaScript fournit les objets natifs {{jsxref("Proxy")}} et {{jsxref("Reflect")}}. Ces objets permettent d'intercepter et de définir des comportements spécifiques pour certaines opérations fondamentales du langage (par exemple la recherche d'une propriété, l'affectation, l'énumération, l'appel d'une fonction, etc.). Grâce à ces deux objets, il est possible d'interagir avec le langage lui-même (on parle alors de métaprogrammation).

+ +

Les proxies

+ +

Introduits avec ECMAScript 2015, les objets {{jsxref("Proxy")}} permettent d'intercepter certaines opérations JavaScript et de définir le comportement à avoir quand celles-ci se produisent. Par exemple, on peut intercepter l'accès à une propriété d'un objet :

+ +
var handler = {
+  get: function(cible, nom){
+    return nom in cible ? cible[nom] : 42;
+}};
+var p = new Proxy({}, handler);
+p.a = 1;
+console.log(p.a, p.b); // 1, 42
+
+ +

Ici, l'objet Proxy définit une cible (ici c'est un objet vide) et un gestionnaire (handler) qui implémente une trappe pour l'opération get. Ainsi, l'objet qui est « proxyfié » ne renverra pas undefined lorsqu'on tentera d'accéder à une propriété qui n'est pas définie, à la place le nombre 42 sera renvoyé.

+ +
+

Note : D'autres exemples sont disponibles sur la page de l'objet {{jsxref("Proxy")}}.

+
+ +

Terminologie

+ +

Lorsqu'on utilise les proxies et leurs fonctionnalités, on utilisera les termes suivants :

+ +
+
{{jsxref("Objets_globaux/Proxy/handler","gestionnaire (handler)","","true")}}
+
L'objet qui contient les trappes.
+
trappes
+
Les méthodes qui fournissent l'accès aux propriétés. Ce concept est analogue aux trappes utilisées dans les systèmes d'exploitations.
+
cible
+
L'objet que le proxy virtualise. C'est généralement un objet utilisé en arrière-plan pour stocker les informations. Les invariants (c'est-à-dire les éléments sémantiques qui doivent rester inchangés) concernant le caractère non-extensible de l'objet ou l'aspect non-configurable des propriétés sont vérifiés par rapport à cet objet cible.
+
invariants
+
Les éléments sémantiques qui ne doivent pas être modifiés par les opérations définies dans les proxies. Si un invariant n'est pas respecté au sein d'un gestionnaire, cela provoquera une exception {{jsxref("TypeError")}}.
+
+ +

Les gestionnaires et les trappes

+ +

Le tableau suivant résume les différentes trappes disponibles pour les objets Proxy. Pour plus d'explications et de détails, voir les différents pages de la référence sur chacun de ces concepts.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Gestionnaires / TrappesOpérations interceptéesInvariants
{{jsxref("Objets_globaux/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}{{jsxref("Object.getPrototypeOf()")}}
+ {{jsxref("Reflect.getPrototypeOf()")}}
+ {{jsxref("Object/proto", "__proto__")}}
+ {{jsxref("Object.prototype.isPrototypeOf()")}}
+ {{jsxref("Operators/instanceof", "instanceof")}}
getPrototypeOf doit renvoyer un objet ou null.
+
+ Si cible n'est pas extensible, Object.getPrototypeOf(proxy) doit renvoyer le même objet que Object.getPrototypeOf(cible).
{{jsxref("Objets_globaux/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}{{jsxref("Object.setPrototypeOf()")}}
+ {{jsxref("Reflect.setPrototypeOf()")}}
+

Si cible n'est pas extensible, le paramètre prototype doit être la même valeur que Object.getPrototypeOf(cible).

+
{{jsxref("Objets_globaux/Proxy/handler/isExtensible", "handler.isExtensible()")}} +

{{jsxref("Object.isExtensible()")}}

+ +

{{jsxref("Reflect.isExtensible()")}}

+
+

Object.isExtensible(proxy) doit renvoyer la même valeur que Object.isExtensible(target).

+
{{jsxref("Objets_globaux/Proxy/handler/preventExtensions", "handler.preventExtensions()")}} +

{{jsxref("Object.preventExtensions()")}}

+ +

{{jsxref("Reflect.preventExtensions()")}}

+
+

Object.preventExtensions(proxy) ne renvoie true que si Object.isExtensible(proxy) vaut false.

+
{{jsxref("Objets_globaux/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}} +

{{jsxref("Object.getOwnPropertyDescriptor()")}}

+ +

{{jsxref("Reflect.getOwnPropertyDescriptor()")}}

+
+

getOwnPropertyDescriptor doit renvoyer un objet ou undefined.

+ +

Une propriété ne peut pas être vue comme non-existante si elle existe comme une propriété propre non-configurable de l'objet cible.

+ +

Une propriété ne peut pas être vue comme non-existante si elle existe comme une propriété propre de la cible et que l'objet cible n'est pas extensible.

+ +

Une propriété ne peut pas être vue comme existante si elle n'existe pas comme une propriété propre de l'objet cible et que l'objet cible n'est pas extensible.

+ +

Une propriété ne peut pas être vue comme non-configurable si elle n'existe pas comme une propriété propre de l'objet cible ou si elle existe comme une propriété configurable propre de l'objet cible.

+ +

Le résultat de Object.getOwnPropertyDescriptor(cible) peut être appliqué à la cible en utilisant Object.defineProperty sans que cela ne lève d'exception.

+
{{jsxref("Objets_globaux/Proxy/handler/defineProperty", "handler.defineProperty()")}} +

{{jsxref("Object.defineProperty()")}}

+ +

{{jsxref("Reflect.defineProperty()")}}

+
+

Une propriété ne peut pas être ajoutée si l'objet cible n'est pas extensible.

+ +

Une propriété ne peut pas être ajoutée ou être modifiée afin d'être non-configurable si elle n'existe pas comme une propriété propre de l'objet cible et qu'elle n'est pas non-configurable.

+ +

Une propriété peut ne pas être non-configurable si une propriété correspondante configurable existe sur l'objet cible.

+ +

Si une propriété possède une propriété correspondante sur l'objet cible, Object.defineProperty(cible, prop, descripteur) ne doit pas renvoyer d'exception.

+ +

En mode strict, si la valeur de retour de defineProperty est false, cela entraînera une exception {{jsxref("TypeError")}} exception.

+
{{jsxref("Objets_globaux/Proxy/handler/has", "handler.has()")}} +

Requête d'une propriété : toto in proxy

+ +

Requête d'une propriété héritée : toto in Object.create(proxy)

+ +

{{jsxref("Reflect.has()")}}

+
+

Une propriété ne peut pas être vue comme non-existante si elle existe comme propriété propre non-configurable de l'objet cible.

+ +

Une propriété ne peut pas être vue comme non-existante si elle existe comme propriété propre de l'objet cible et que l'objet cible n'est pas extensible.

+
{{jsxref("Objets_globaux/Proxy/handler/get", "handler.get()")}} +

Accès à une propriété : proxy[toto] et proxy.truc

+ +

Accès à une propriété héritée : Object.create(proxy)[toto]

+ +

{{jsxref("Reflect.get()")}}

+
+

La valeur rapportée pour la propriété doit être la même que la valeur de la propriété correspondante sur l'objet cible si celle-ci est une propriété de donnée non accessible en écriture et non-configurable..

+ +

La valeur rapportée pour une propriété doit être undefined si la propriété correspondante de l'objet cible est une propriété d'accesseur dont l'attribut [[Get]] vaut undefined.

+
{{jsxref("Objets_globaux/Proxy/handler/set", "handler.set()")}} +

Affection d'une propriété : proxy[toto] = truc et proxy.toto = truc
+
+ Affectation d'une propriété héritée : Object.create(proxy)[toto] = truc
+
+ {{jsxref("Reflect.set()")}}

+
+

Il est impossible de modifier la valeur d'une propriété pour que celle-ci soit différente de la valeur de la propriété correspondante de l'objet cible si la propriété de l'objet cible est une propriété de donnée qui n'est pas accessible en écriture et qui n'est pas configurable.

+ +

Il est impossible de modifier la valeur d'une propriété si la propriété correspondante de l'objet cible est une propriété d'accesseur non-configurable dont l'attribut [[Set]] vaut undefined.

+ +

En mode strict, si le gestionnaire pour set renvoie false, cela provoquera une exception {{jsxref("TypeError")}}.

+
{{jsxref("Objets_globaux/Proxy/handler/deleteProperty", "handler.deleteProperty()")}} +

Suppression d'une propriété : delete proxy[toto] et delete proxy.toto
+
+ {{jsxref("Reflect.deleteProperty()")}}

+
Une propriété ne peut pas être supprimée si elle existe comme une propriété propre non-configurable de l'objet cible.
{{jsxref("Objets_globaux/Proxy/handler/enumerate", "handler.enumerate()")}} +

Lister les propriétés avec for...in : for (var nom in proxy) {...}
+
+ {{jsxref("Reflect.enumerate()")}}

+
La méthode enumerate doit renvoyer un objet.
{{jsxref("Objets_globaux/Proxy/handler/ownKeys", "handler.ownKeys()")}} +

{{jsxref("Object.getOwnPropertyNames()")}}
+ {{jsxref("Object.getOwnPropertySymbols()")}}
+ {{jsxref("Object.keys()")}}
+ {{jsxref("Reflect.ownKeys()")}}

+
+

Le résultat de ownKeys est une liste.
+
+ Le type de chaque élément de la liste est soit une {{jsxref("String")}} soit un  {{jsxref("Symbol")}}.
+
+ La liste résultatnte doit contenir les clés de toutes les propriétés non-configurables de l'objet cible.
+
+ Si l'objet cible n'est pas extensible, la liste résultante doit contenir toutes les clés des propriétés propres de l'objet cibles et aucune autre valeur.

+
{{jsxref("Objets_globaux/Proxy/handler/apply", "handler.apply()")}} +

proxy(..args)
+
+ {{jsxref("Function.prototype.apply()")}} and {{jsxref("Function.prototype.call()")}}
+
+ {{jsxref("Reflect.apply()")}}

+
Il n'y a pas d'invariant pour la méthode handler.apply.
{{jsxref("Objets_globaux/Proxy/handler/construct", "handler.construct()")}} +

new proxy(...args)
+ {{jsxref("Reflect.construct()")}}

+
Le résultat doit être un Objet.
+ +

Proxies révocables

+ +

La méthode {{jsxref("Proxy.revocable()")}} est utilisée pour créer un objet Proxy qui puisse être révoqué. Cela signifie que que le proxy pourra être révoqué avec la fonction revoke et arrêtera le proxy. Après cet arrêt, toute opération sur le proxy entraînera une exception {{jsxref("TypeError")}}.

+ +
var revocable = Proxy.revocable({}, {
+  get: function(cible, nom) {
+    return "[[" + nom + "]]";
+  }
+});
+var proxy = revocable.proxy;
+console.log(proxy.toto); // "[[toto]]"
+
+revocable.revoke();
+
+console.log(proxy.toto); // déclenche une TypeError
+proxy.toto = 1;          // une TypeError encore
+delete proxy.toto;       // toujours une TypeError
+typeof proxy             // "object", typeof ne déclenche aucune trappe
+ +

Réflexion

+ +

{{jsxref("Reflect")}} est un objet natif qui fournit des méthodes pour les opérations JavaScript qui peuvent être interceptées. Ces méthodes sont les mêmes que celles gérées par les {{jsxref("Objets_globaux/Proxy/handler","gestionnaires de proxy","","true")}}. Reflect n'est pas un constructeur et ne peut pas être utilisé comme une fonction !

+ +

Reflect aide à transférer les opérations par défaut depuis le gestionnaire vers la cible.

+ +

Par exemple, avec {{jsxref("Reflect.has()")}}, on obtient le comportement de l'opérateur in sous forme d'une fonction :

+ +
Reflect.has(Object, "assign"); // true
+
+ +

{{PreviousNext("Web/JavaScript/Guide/iterateurs_et_generateurs","Web/JavaScript/Guide/Modules")}}

diff --git a/files/fr/web/javascript/guide/modules/index.html b/files/fr/web/javascript/guide/modules/index.html deleted file mode 100644 index aab9361aa6..0000000000 --- a/files/fr/web/javascript/guide/modules/index.html +++ /dev/null @@ -1,432 +0,0 @@ ---- -title: Les modules JavaScript -slug: Web/JavaScript/Guide/Modules -tags: - - Guide - - JavaScript - - Modules - - export - - import -translation_of: Web/JavaScript/Guide/Modules ---- -
{{jsSidebar("JavaScript Guide")}}{{Previous("Web/JavaScript/Guide/Métaprogrammation")}}
- -

Ce guide aborde l'ensemble des notions vous permettant d'utiliser la syntaxe des modules en JavaScript.

- -

Un peu de contexte

- -

Les programmes JavaScript ont commencé par être assez petits, réalisant des tâches isolées uniquement là où l'interactivité était nécessaire. Après plusieurs années, nous avons maintenant des applications complètes qui sont exécutées dans les navigateurs avec des codes complexes et volumineux. Des programmes JavaScript sont également exécutés dans d'autres contextes (Node.js par exemple).

- -

Il a donc été question de fournir un mécanisme pour diviser les programmes JavaScript en plusieurs modules qu'on pourrait importer les uns dans les autres. Cette fonctionnalité était présente dans Node.js depuis longtemps et plusieurs bibliothèques et frameworks JavaScript ont permis l'utilisation de modules (CommonJS, AMD, RequireJS ou, plus récemment, Webpack et Babel).

- -

Bonne nouvelle, les navigateurs ont également commencé à prendre en charge ces fonctionnalités nativement. C'est le sujet de ce guide.

- -

Cette implémentation permettra aux navigateurs d'optimiser le chargement des modules, rendant le fonctionnement plus efficace qu'une bibliothèque tierce avec un traitement côté client des allers-retours sur le réseau.

- -

Compatibilité des navigateurs

- -

L'utilisation des modules natifs JavaScript repose sur les instructions import and export dont vous pouvez voir l'état de la compatibilité ici :

- -

import

- -

{{Compat("javascript.statements.import")}}

- -

export

- -

{{Compat("javascript.statements.export")}}

- -

Commençons par un exemple

- -

Pour illustrer le fonctionnement des modules, nous avons créé un ensemble d'exemples disponibles sur GitHub. Ces exemples illustrent un ensemble de modules pour créer un élément {{htmlelement("canvas")}} sur une page web puis dessiner (et afficher des informations) sur les différentes formes du canevas.

- -

Ces opérations sont assez simples mais nous les avons choisies pour nous concentrer plutôt sur le fonctionnement des modules.

- -
-

Note : Si vous souhaitez télécharger les exemples et les exécuter en local, vous devrez utiliser un serveur web local.

-
- -

Structure de l'exemple

- -

Dans notre premier exemple (cf. basic-modules), nous avons l'arborescence de fichier suivante :

- -
index.html
-main.mjs
-modules/
-    canvas.mjs
-    square.mjs
- -
-

Note : Tous les exemples de ce guide suivent la même structure.

-
- -

Le répertoire dédié aux modules contient deux modules :

- - - -
-

Note : Pour les modules JavaScript natifs, l'extension .mjs a son importance car elle permet d'importer des fichiers avec un type MIME javascript/esm (on pourra utiliser une autre extension qui fournira le type MIME application/javascript) afin d'éviter les erreurs liées à la vérification des types MIME. L'extension .mjs est notamment utile afin de distinguer plus clairement les scripts « classiques » des modules et pourra être exploitée par d'autres outils. Pour plus de détails, voir cette note de Google.

-
- -

Exporter des fonctionnalités

- -

Pour commencer et afin d'utiliser les fonctionnalités d'un module, on devra les exporter. Pour cela, on utilisera l'instruction export.

- -

La méthode la plus simple consiste à placer cette instruction devant chaque valeur qu'on souhaite exporter, par exemple :

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

Il est possible d'exporter des fonctions, des variables (qu'elles soient définies avec var, let ou const) et aussi des classes (que nous verrons par la suite). Les valeurs exportées doivent être présentes au plus haut niveau du script, il n'est pas possible d'utiliser export dans une fonction.

- -

Une méthode plus concise consiste à exporter l'ensemble des valeurs grâce à une seule instruction située à la fin du fichier : les valeurs sont séparées par des virgules et la liste est délimitée entre accolades :

- -
export { name, draw, reportArea, reportPerimeter };
- -

Importer des fonctionnalités

- -

Lorsque des fonctionnalités sont exportées par un premier module, on peut les importer dans un script afin de les utiliser. Voici la méthode la plus simple pour ce faire :

- -
import { name, draw, reportArea, reportPerimeter } from './modules/square.mjs';
- -

On utilise ici l'instruction import, suivi d'une liste d'identifiants séparées par des virgules et délimitée par des accolades, suivie du mot-clé from puis du chemin vers le fichier du module. Le chemin est relatif à la racine du site. Dans notre cas, pour basic-module, on écrira /js-examples/modules/basic-modules.

- -

Ici, nous avons écrit le chemin d'une façon légèrement différente : on utilise le point (.) afin d'indiquer « l'emplacement courant », suivi du chemin vers le fichier. Cela permet d'éviter d'avoir à écrire l'intégralité du chemin à chaque fois, c'est aussi plus court et cela permet de déplacer le script et le modules sans avoir à modifier les scripts.

- -

Ainsi :

- -
/js-examples/modules/basic-modules/modules/square.mjs
- -

devient :

- -
./modules/square.mjs
- -

Vous pouvez voir ces lignes dans main.mjs.

- -
-

Note : Pour certains systèmes de module, on peut omettre l'extension de fichier et le point (c'est-à-dire qu'on peut écrire '/modules/square'). Cela ne fonctionne pas pour les modules JavaScript !

-
- -

Une fois les fonctionnalités importées dans le script, vous pouvez utiliser les valeurs dans votre script. Dans main.mjs, après les lignes d'import, on trouvera :

- -
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);
-
- -

Charger le module via le document HTML

- -

Il faut ensuite pouvoir charger le script main.mjs sur la page HTML. Pour cela, nous allons voir qu'il y a quelques différences avec le chargement d'un script « classique ».

- -

Tout d'abord, il est nécessaire d'indiquer type="module" dans l'élément {{htmlelement("script")}} afin d'indiquer qu'on charge des modules :

- -
<script type="module" src="main.mjs"></script>
- -

Le script qu'on importe ici agit comme le module de plus haut niveau. Si on oublie ce type, Firefox déclenchera une erreur "SyntaxError: import declarations may only appear at top level of a module".

- -

Les instructions import et export ne peuvent être utilisées qu'à l'intérieur de modules et pas à l'intérieur de scripts « classiques ».

- -
-

Note : Il est aussi possible d'importer des modules dans des scripts qui sont déclarés en incise si on indique bien type="module". On pourra donc écrire <script type="module"> //code du script utilisant les modules ici </script>.

-
- -

Différences entre les modules et les scripts « classiques »

- - - -

Exports par défaut et exports nommés

- -

Jusqu'à présent, nous avons utilisé des exports nommés — chaque valeur est exportée avec un nom et c'est ce nom qui est également utilisé lorsqu'on réalise l'import.

- -

Il existe également un export par défaut — conçu pour simplifier l'export d'une fonction par module et pour faciliter l'interopérabilité avec les systèmes de module CommonJS et AMD (pour plus d'informations, voir ES6 en détails : les modules).

- -

Prenons un exemple pour comprendre le fonctionnement des exports par défaut. Dans square.mjs, on a une fonction intitulée randomSquare() qui crée un carré avec une taille/couleur/position aléatoires. On souhaite exporter cette fonction par défaut et on écrit donc ceci à la fin du fichier :

- -
export default randomSquare;
- -

On notera ici l'absence d'accolades.

- -

On aurait également pu ajouter export default devant le mot-clé function et la définir comme fonction anonyme :

- -
export default function(ctx) {
-  ...
-}
- -

Dans le fichier main.mjs, on importe la fonction par défaut avec cette ligne

- -
import randomSquare from './modules/square.mjs';
- -

On voit ici aussi l'absence d'accolade car il n'y a qu'un seul export par défaut possible par module (et ici, on sait qu'il s'agit de randomSquare). La ligne ci-avant est en fait une notation raccourcie équivalente à :

- -
import {default as randomSquare} from './modules/square.mjs';
- -
-

Note : Pour en savoir plus sur le renommage des objets exportés, voir ci-après {{anch("Renommage des imports et des exports")}}.

-
- -

Gestion des conflits de nommage

- -

Jusqu'à présent, notre exemple fonctionne. Mais que se passerait-il si nous ajoutions un module permettant de dessiner une autre forme comme un cercle ou un triangle ? Ces formes disposeraient sans doute également de fonctions telles que draw(), reportArea(), etc. Si on essaie d'importer ces fonctions avec les mêmes noms dans le module de plus haut niveau, nous allons avoir des conflits et des erreurs.

- -

Heureusement, il existe différentes façons de résoudre ce problème.

- -

Renommage des imports et des exports

- -

Entre les accolades utilisées pour les instructions import et export, on peut utiliser le mot-clé as avec un autre nom afin de modifier le nom par lequel on souhaite identifier la fonctionnalité.

- -

Ainsi, les deux fragments qui suivent permettraient d'obtenir le même résultat de façons différentes :

- -
// dans module.mjs
-export {
-  fonction1 as nouveauNomDeFonction,
-  fonction2 as autreNouveauNomDeFonction
-};
-
-// dans main.mjs
-import { nouveauNomDeFonction, autreNouveauNomDeFonction } from './modules/module.mjs';
- -
// dans module.mjs
-export { fonction1, fonction2 };
-
-// dans main.mjs
-import { fonction1 as nouveauNomDeFonction,
-         fonction2 as autreNouveauNomDeFonction } from './modules/module.mjs';
- -

Prenons un exemple concret. Dans le répertoire renaming, vous verrez le même système de modules que précédemment auquel nous avons ajouté circle.mjs et triangle.mjs afin de dessiner et d'écrire des informations sur des cercles et des triangles.

- -

Dans chaque module, on exporte les fonctionnalités avec des noms identiques : l'instruction  export utilisée est la même à chaque fin de fichier :

- -
export { name, draw, reportArea, reportPerimeter };
- -

Lorsqu'on importe les valeurs dans main.mjs, si on essaie d'utiliser

- -
import { name, draw, reportArea, reportPerimeter } from './modules/square.mjs';
-import { name, draw, reportArea, reportPerimeter } from './modules/circle.mjs';
-import { name, draw, reportArea, reportPerimeter } from './modules/triangle.mjs';
- -

Le navigateur déclenchera une erreur telle que "SyntaxError: redeclaration of import name" (Firefox).

- -

Pour éviter ce problème, on renomme les imports afin qu'ils soient uniques :

- -
import { name as squareName,
-         draw as drawSquare,
-         reportArea as reportSquareArea,
-         reportPerimeter as reportSquarePerimeter } from './modules/square.mjs';
-
-import { name as circleName,
-         draw as drawCircle,
-         reportArea as reportCircleArea,
-         reportPerimeter as reportCirclePerimeter } from './modules/circle.mjs';
-
-import { name as triangleName,
-        draw as drawTriangle,
-        reportArea as reportTriangleArea,
-        reportPerimeter as reportTrianglePerimeter } from './modules/triangle.mjs';
- -

On aurait pu également résoudre le problème dans les fichiers de chaque module.

- -
// dans square.mjs
-export { name as squareName,
-         draw as drawSquare,
-         reportArea as reportSquareArea,
-         reportPerimeter as reportSquarePerimeter };
- -
// dans main.mjs
-import { squareName, drawSquare, reportSquareArea, reportSquarePerimeter } from './modules/square.mjs';
- -

Les deux approches fonctionnent. C'est à vous de choisir le style. Toutefois, il est souvent plus pratique d'effectuer le renommage à l'import, notamment lorsqu'on importe des fonctionnalités de modules tiers sur lesquels on n'a pas le contrôle.

- -

Créer un objet module

- -

La méthode précédente fonctionne mais reste « brouillonne ». Pour faire mieux, on peut importer l'ensemble des fonctionnalités de chaque module dans un objet, de la façon suivante :

- -
import * as Module from './modules/module.mjs';
- -

Cela récupère tous les exports disponibles depuis module.mjs et les transforme en propriétés et méthodes rattachées à l'objet Module qui fournit alors un espace de noms (namespace) :

- -
Module.function1()
-Module.function2()
-etc.
- -

Là encore, prenons un exemple concret avec le répertoire module-objects. Il s'agit du même exemple que précédemment mais qui a été réécrit afin de tirer parti de cette syntaxe. Dans les modules, les exports sont tous écrits ainsi :

- -
export { name, draw, reportArea, reportPerimeter };
- -

En revanche, pour les imports, on les récupère ainsi :

- -
import * as Canvas from './modules/canvas.mjs';
-
-import * as Square from './modules/square.mjs';
-import * as Circle from './modules/circle.mjs';
-import * as Triangle from './modules/triangle.mjs';
- -

Dans chaque cas, on peut accéder aux imports comme propriétés des objets ainsi créés :

- -
let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, 'blue');
-Square.reportArea(square1.length, reportList);
-Square.reportPerimeter(square1.length, reportList);
- -

On obtient alors un code plus lisible.

- -

Classes et modules

- -

Comme mentionné avant, il est possible d'importer et d'exporter des classes. Cette méthode peut aussi être utilisée afin d'éviter les conflits de nommage. Elle s'avère notamment utile lorsque vous utilisez déjà des classes pour construire vos objets (cela permet de garder une certaine cohérence dans le style).

- -

Pour voir le résultat obtenu, vous pouvez consulter le répertoire classes du dépôt où l'ensemble a été réécrit pour tirer parti des classes ECMAScript. Ainsi, square.mjs contient désormais l'ensemble des fonctionnalités via une classe :

- -
class Square {
-  constructor(ctx, listId, length, x, y, color) {
-    ...
-  }
-
-  draw() {
-    ...
-  }
-
-  ...
-}
- -

Il suffit d'exporter cette classe :

- -
export { Square };
- -

Puis de l'importer ainsi dans main.mjs :

- -
import { Square } from './modules/square.mjs';
- -

Ensuite, on peut utiliser cette classe afin de dessiner le carré :

- -
let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
-square1.draw();
-square1.reportArea();
-square1.reportPerimeter();
- -

Agréger des modules

- -

Il arrivera qu'on veuille agréger des modules entre eux. On peut avoir plusieurs niveaux de dépendances et vouloir simplifier les choses en combinant différents sous-modules en un seul module parent. Pour cela, on pourra utiliser la notation raccourcie suivante :

- -
export * from 'x.mjs'
-export { name } from 'x.mjs'
- -

Pour voir cela en pratique, vous pouvez consulter le répertoire module-aggregation. Dans cet exemple (construit sur le précédent qui utilise les classes), on a un module supplémentaire intitulé shapes.mjs qui agrège les fonctionnalités fournies par circle.mjs, square.mjs et triangle.mjs. Les sous-modules ont également été déplacés dans un répertoire shapes situé dans un répertoire modules. L'arborescence utilisée est donc :

- -
modules/
-  canvas.mjs
-  shapes.mjs
-  shapes/
-    circle.mjs
-    square.mjs
-    triangle.mjs
- -

Dans chaque sous-module, l'export aura la même forme :

- -
export { Square };
- -

Pour l'agrégation au sein de shapes.mjs, on écrit les lignes suivantes :

- -
export { Square } from './shapes/square.mjs';
-export { Triangle } from './shapes/triangle.mjs';
-export { Circle } from './shapes/circle.mjs';
- -

On récupère ainsi l'ensemble des exports de chaque module et on les rend disponibles via shapes.mjs.

- -
-

Note : Cette notation ne permet que de rediriger les exports via le fichier. Les objets importés/exportés n'existent pas vraiment dans shapes.mjs et on ne peut donc pas écrire de code utile qui les manipule.

-
- -

Dans le fichier main.mjs, on pourra alors remplacer :

- -
import { Square } from './modules/square.mjs';
-import { Circle } from './modules/circle.mjs';
-import { Triangle } from './modules/triangle.mjs';
- -

par :

- -
import { Square, Circle, Triangle } from './modules/shapes.mjs';
- -

Chargement dynamique de modules

- -

Cette nouvelle fonctionnalité permet aux navigateurs de charger les modules lorsqu'ils sont nécessaires plutôt que de tout précharger en avance de phase. Cette méthode offre de nombreux avantages quant aux performances. Voyons comment cela fonctionne.

- -

Pour utiliser cette fonctionnalité, on pourra utiliser import() comme une fonction et lui passer le chemin du module en argument. Cette fonction renverra une promesse, qui sera résolue en un module objet donnant accès aux exports.

- -
import('./modules/monModule.mjs')
-  .then((module) => {
-    // Faire qqc avec le module.
-  });
- -

Dans nos exemples, regardons le répertoire dynamic-module-imports, également basé sur les classes. Cette fois, on ne dessine rien au chargement de l'exemple mais on ajoute trois boutons — "Circle", "Square" et "Triangle" — qui, lorsqu'ils seront utilisés, chargeront dynamiquement les modules nécessaires et les utiliseront pour charger la forme associée.

- -

Dans cet exemple, nous avons uniquement modifié index.html et main.js — les exports restent les mêmes.

- -

Dans main.js, on récupère une référence à chaque bouton en utilisant document.querySelector(). Par exemple :

- -
let squareBtn = document.querySelector('.square');
- -

Ensuite, on attache un gestionnaire d'évènement à chaque bouton afin qu'on puisse appuyer dessus. Le module correspondant est alors chargé dynamiquement et utilisé pour dessiner la forme :

- -
squareBtn.addEventListener('click', () => {
-  import('./modules/square.mjs').then((Module) => {
-    let square1 = new Module.Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
-    square1.draw();
-    square1.reportArea();
-    square1.reportPerimeter();
-  })
-});
- -

On voit ici que, parce que la promesse renvoie un objet module à la résolution, la classe est une propriété de cet objet et qu'il faut ajouter cet espace de nom devant le constructeur exporté pour l'utiliser. Autrement dit, avec cette méthode, on doit ajouter Module. devant Square (plutôt que d'utiliser uniquement Square).

- -

Diagnostiquer les problèmes avec les modules

- -

Voici quelques notes pour aider à comprendre et à diagnostiquer les problèmes parfois rencontrés avec les modules. N'hésitez pas à ajouter vos conseils à cette liste si vous en avez.

- - - -

Voir aussi

- - - -

{{Previous("Web/JavaScript/Guide/Métaprogrammation")}}

diff --git a/files/fr/web/javascript/guide/modules/index.md b/files/fr/web/javascript/guide/modules/index.md new file mode 100644 index 0000000000..aab9361aa6 --- /dev/null +++ b/files/fr/web/javascript/guide/modules/index.md @@ -0,0 +1,432 @@ +--- +title: Les modules JavaScript +slug: Web/JavaScript/Guide/Modules +tags: + - Guide + - JavaScript + - Modules + - export + - import +translation_of: Web/JavaScript/Guide/Modules +--- +
{{jsSidebar("JavaScript Guide")}}{{Previous("Web/JavaScript/Guide/Métaprogrammation")}}
+ +

Ce guide aborde l'ensemble des notions vous permettant d'utiliser la syntaxe des modules en JavaScript.

+ +

Un peu de contexte

+ +

Les programmes JavaScript ont commencé par être assez petits, réalisant des tâches isolées uniquement là où l'interactivité était nécessaire. Après plusieurs années, nous avons maintenant des applications complètes qui sont exécutées dans les navigateurs avec des codes complexes et volumineux. Des programmes JavaScript sont également exécutés dans d'autres contextes (Node.js par exemple).

+ +

Il a donc été question de fournir un mécanisme pour diviser les programmes JavaScript en plusieurs modules qu'on pourrait importer les uns dans les autres. Cette fonctionnalité était présente dans Node.js depuis longtemps et plusieurs bibliothèques et frameworks JavaScript ont permis l'utilisation de modules (CommonJS, AMD, RequireJS ou, plus récemment, Webpack et Babel).

+ +

Bonne nouvelle, les navigateurs ont également commencé à prendre en charge ces fonctionnalités nativement. C'est le sujet de ce guide.

+ +

Cette implémentation permettra aux navigateurs d'optimiser le chargement des modules, rendant le fonctionnement plus efficace qu'une bibliothèque tierce avec un traitement côté client des allers-retours sur le réseau.

+ +

Compatibilité des navigateurs

+ +

L'utilisation des modules natifs JavaScript repose sur les instructions import and export dont vous pouvez voir l'état de la compatibilité ici :

+ +

import

+ +

{{Compat("javascript.statements.import")}}

+ +

export

+ +

{{Compat("javascript.statements.export")}}

+ +

Commençons par un exemple

+ +

Pour illustrer le fonctionnement des modules, nous avons créé un ensemble d'exemples disponibles sur GitHub. Ces exemples illustrent un ensemble de modules pour créer un élément {{htmlelement("canvas")}} sur une page web puis dessiner (et afficher des informations) sur les différentes formes du canevas.

+ +

Ces opérations sont assez simples mais nous les avons choisies pour nous concentrer plutôt sur le fonctionnement des modules.

+ +
+

Note : Si vous souhaitez télécharger les exemples et les exécuter en local, vous devrez utiliser un serveur web local.

+
+ +

Structure de l'exemple

+ +

Dans notre premier exemple (cf. basic-modules), nous avons l'arborescence de fichier suivante :

+ +
index.html
+main.mjs
+modules/
+    canvas.mjs
+    square.mjs
+ +
+

Note : Tous les exemples de ce guide suivent la même structure.

+
+ +

Le répertoire dédié aux modules contient deux modules :

+ + + +
+

Note : Pour les modules JavaScript natifs, l'extension .mjs a son importance car elle permet d'importer des fichiers avec un type MIME javascript/esm (on pourra utiliser une autre extension qui fournira le type MIME application/javascript) afin d'éviter les erreurs liées à la vérification des types MIME. L'extension .mjs est notamment utile afin de distinguer plus clairement les scripts « classiques » des modules et pourra être exploitée par d'autres outils. Pour plus de détails, voir cette note de Google.

+
+ +

Exporter des fonctionnalités

+ +

Pour commencer et afin d'utiliser les fonctionnalités d'un module, on devra les exporter. Pour cela, on utilisera l'instruction export.

+ +

La méthode la plus simple consiste à placer cette instruction devant chaque valeur qu'on souhaite exporter, par exemple :

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

Il est possible d'exporter des fonctions, des variables (qu'elles soient définies avec var, let ou const) et aussi des classes (que nous verrons par la suite). Les valeurs exportées doivent être présentes au plus haut niveau du script, il n'est pas possible d'utiliser export dans une fonction.

+ +

Une méthode plus concise consiste à exporter l'ensemble des valeurs grâce à une seule instruction située à la fin du fichier : les valeurs sont séparées par des virgules et la liste est délimitée entre accolades :

+ +
export { name, draw, reportArea, reportPerimeter };
+ +

Importer des fonctionnalités

+ +

Lorsque des fonctionnalités sont exportées par un premier module, on peut les importer dans un script afin de les utiliser. Voici la méthode la plus simple pour ce faire :

+ +
import { name, draw, reportArea, reportPerimeter } from './modules/square.mjs';
+ +

On utilise ici l'instruction import, suivi d'une liste d'identifiants séparées par des virgules et délimitée par des accolades, suivie du mot-clé from puis du chemin vers le fichier du module. Le chemin est relatif à la racine du site. Dans notre cas, pour basic-module, on écrira /js-examples/modules/basic-modules.

+ +

Ici, nous avons écrit le chemin d'une façon légèrement différente : on utilise le point (.) afin d'indiquer « l'emplacement courant », suivi du chemin vers le fichier. Cela permet d'éviter d'avoir à écrire l'intégralité du chemin à chaque fois, c'est aussi plus court et cela permet de déplacer le script et le modules sans avoir à modifier les scripts.

+ +

Ainsi :

+ +
/js-examples/modules/basic-modules/modules/square.mjs
+ +

devient :

+ +
./modules/square.mjs
+ +

Vous pouvez voir ces lignes dans main.mjs.

+ +
+

Note : Pour certains systèmes de module, on peut omettre l'extension de fichier et le point (c'est-à-dire qu'on peut écrire '/modules/square'). Cela ne fonctionne pas pour les modules JavaScript !

+
+ +

Une fois les fonctionnalités importées dans le script, vous pouvez utiliser les valeurs dans votre script. Dans main.mjs, après les lignes d'import, on trouvera :

+ +
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);
+
+ +

Charger le module via le document HTML

+ +

Il faut ensuite pouvoir charger le script main.mjs sur la page HTML. Pour cela, nous allons voir qu'il y a quelques différences avec le chargement d'un script « classique ».

+ +

Tout d'abord, il est nécessaire d'indiquer type="module" dans l'élément {{htmlelement("script")}} afin d'indiquer qu'on charge des modules :

+ +
<script type="module" src="main.mjs"></script>
+ +

Le script qu'on importe ici agit comme le module de plus haut niveau. Si on oublie ce type, Firefox déclenchera une erreur "SyntaxError: import declarations may only appear at top level of a module".

+ +

Les instructions import et export ne peuvent être utilisées qu'à l'intérieur de modules et pas à l'intérieur de scripts « classiques ».

+ +
+

Note : Il est aussi possible d'importer des modules dans des scripts qui sont déclarés en incise si on indique bien type="module". On pourra donc écrire <script type="module"> //code du script utilisant les modules ici </script>.

+
+ +

Différences entre les modules et les scripts « classiques »

+ + + +

Exports par défaut et exports nommés

+ +

Jusqu'à présent, nous avons utilisé des exports nommés — chaque valeur est exportée avec un nom et c'est ce nom qui est également utilisé lorsqu'on réalise l'import.

+ +

Il existe également un export par défaut — conçu pour simplifier l'export d'une fonction par module et pour faciliter l'interopérabilité avec les systèmes de module CommonJS et AMD (pour plus d'informations, voir ES6 en détails : les modules).

+ +

Prenons un exemple pour comprendre le fonctionnement des exports par défaut. Dans square.mjs, on a une fonction intitulée randomSquare() qui crée un carré avec une taille/couleur/position aléatoires. On souhaite exporter cette fonction par défaut et on écrit donc ceci à la fin du fichier :

+ +
export default randomSquare;
+ +

On notera ici l'absence d'accolades.

+ +

On aurait également pu ajouter export default devant le mot-clé function et la définir comme fonction anonyme :

+ +
export default function(ctx) {
+  ...
+}
+ +

Dans le fichier main.mjs, on importe la fonction par défaut avec cette ligne

+ +
import randomSquare from './modules/square.mjs';
+ +

On voit ici aussi l'absence d'accolade car il n'y a qu'un seul export par défaut possible par module (et ici, on sait qu'il s'agit de randomSquare). La ligne ci-avant est en fait une notation raccourcie équivalente à :

+ +
import {default as randomSquare} from './modules/square.mjs';
+ +
+

Note : Pour en savoir plus sur le renommage des objets exportés, voir ci-après {{anch("Renommage des imports et des exports")}}.

+
+ +

Gestion des conflits de nommage

+ +

Jusqu'à présent, notre exemple fonctionne. Mais que se passerait-il si nous ajoutions un module permettant de dessiner une autre forme comme un cercle ou un triangle ? Ces formes disposeraient sans doute également de fonctions telles que draw(), reportArea(), etc. Si on essaie d'importer ces fonctions avec les mêmes noms dans le module de plus haut niveau, nous allons avoir des conflits et des erreurs.

+ +

Heureusement, il existe différentes façons de résoudre ce problème.

+ +

Renommage des imports et des exports

+ +

Entre les accolades utilisées pour les instructions import et export, on peut utiliser le mot-clé as avec un autre nom afin de modifier le nom par lequel on souhaite identifier la fonctionnalité.

+ +

Ainsi, les deux fragments qui suivent permettraient d'obtenir le même résultat de façons différentes :

+ +
// dans module.mjs
+export {
+  fonction1 as nouveauNomDeFonction,
+  fonction2 as autreNouveauNomDeFonction
+};
+
+// dans main.mjs
+import { nouveauNomDeFonction, autreNouveauNomDeFonction } from './modules/module.mjs';
+ +
// dans module.mjs
+export { fonction1, fonction2 };
+
+// dans main.mjs
+import { fonction1 as nouveauNomDeFonction,
+         fonction2 as autreNouveauNomDeFonction } from './modules/module.mjs';
+ +

Prenons un exemple concret. Dans le répertoire renaming, vous verrez le même système de modules que précédemment auquel nous avons ajouté circle.mjs et triangle.mjs afin de dessiner et d'écrire des informations sur des cercles et des triangles.

+ +

Dans chaque module, on exporte les fonctionnalités avec des noms identiques : l'instruction  export utilisée est la même à chaque fin de fichier :

+ +
export { name, draw, reportArea, reportPerimeter };
+ +

Lorsqu'on importe les valeurs dans main.mjs, si on essaie d'utiliser

+ +
import { name, draw, reportArea, reportPerimeter } from './modules/square.mjs';
+import { name, draw, reportArea, reportPerimeter } from './modules/circle.mjs';
+import { name, draw, reportArea, reportPerimeter } from './modules/triangle.mjs';
+ +

Le navigateur déclenchera une erreur telle que "SyntaxError: redeclaration of import name" (Firefox).

+ +

Pour éviter ce problème, on renomme les imports afin qu'ils soient uniques :

+ +
import { name as squareName,
+         draw as drawSquare,
+         reportArea as reportSquareArea,
+         reportPerimeter as reportSquarePerimeter } from './modules/square.mjs';
+
+import { name as circleName,
+         draw as drawCircle,
+         reportArea as reportCircleArea,
+         reportPerimeter as reportCirclePerimeter } from './modules/circle.mjs';
+
+import { name as triangleName,
+        draw as drawTriangle,
+        reportArea as reportTriangleArea,
+        reportPerimeter as reportTrianglePerimeter } from './modules/triangle.mjs';
+ +

On aurait pu également résoudre le problème dans les fichiers de chaque module.

+ +
// dans square.mjs
+export { name as squareName,
+         draw as drawSquare,
+         reportArea as reportSquareArea,
+         reportPerimeter as reportSquarePerimeter };
+ +
// dans main.mjs
+import { squareName, drawSquare, reportSquareArea, reportSquarePerimeter } from './modules/square.mjs';
+ +

Les deux approches fonctionnent. C'est à vous de choisir le style. Toutefois, il est souvent plus pratique d'effectuer le renommage à l'import, notamment lorsqu'on importe des fonctionnalités de modules tiers sur lesquels on n'a pas le contrôle.

+ +

Créer un objet module

+ +

La méthode précédente fonctionne mais reste « brouillonne ». Pour faire mieux, on peut importer l'ensemble des fonctionnalités de chaque module dans un objet, de la façon suivante :

+ +
import * as Module from './modules/module.mjs';
+ +

Cela récupère tous les exports disponibles depuis module.mjs et les transforme en propriétés et méthodes rattachées à l'objet Module qui fournit alors un espace de noms (namespace) :

+ +
Module.function1()
+Module.function2()
+etc.
+ +

Là encore, prenons un exemple concret avec le répertoire module-objects. Il s'agit du même exemple que précédemment mais qui a été réécrit afin de tirer parti de cette syntaxe. Dans les modules, les exports sont tous écrits ainsi :

+ +
export { name, draw, reportArea, reportPerimeter };
+ +

En revanche, pour les imports, on les récupère ainsi :

+ +
import * as Canvas from './modules/canvas.mjs';
+
+import * as Square from './modules/square.mjs';
+import * as Circle from './modules/circle.mjs';
+import * as Triangle from './modules/triangle.mjs';
+ +

Dans chaque cas, on peut accéder aux imports comme propriétés des objets ainsi créés :

+ +
let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, 'blue');
+Square.reportArea(square1.length, reportList);
+Square.reportPerimeter(square1.length, reportList);
+ +

On obtient alors un code plus lisible.

+ +

Classes et modules

+ +

Comme mentionné avant, il est possible d'importer et d'exporter des classes. Cette méthode peut aussi être utilisée afin d'éviter les conflits de nommage. Elle s'avère notamment utile lorsque vous utilisez déjà des classes pour construire vos objets (cela permet de garder une certaine cohérence dans le style).

+ +

Pour voir le résultat obtenu, vous pouvez consulter le répertoire classes du dépôt où l'ensemble a été réécrit pour tirer parti des classes ECMAScript. Ainsi, square.mjs contient désormais l'ensemble des fonctionnalités via une classe :

+ +
class Square {
+  constructor(ctx, listId, length, x, y, color) {
+    ...
+  }
+
+  draw() {
+    ...
+  }
+
+  ...
+}
+ +

Il suffit d'exporter cette classe :

+ +
export { Square };
+ +

Puis de l'importer ainsi dans main.mjs :

+ +
import { Square } from './modules/square.mjs';
+ +

Ensuite, on peut utiliser cette classe afin de dessiner le carré :

+ +
let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
+square1.draw();
+square1.reportArea();
+square1.reportPerimeter();
+ +

Agréger des modules

+ +

Il arrivera qu'on veuille agréger des modules entre eux. On peut avoir plusieurs niveaux de dépendances et vouloir simplifier les choses en combinant différents sous-modules en un seul module parent. Pour cela, on pourra utiliser la notation raccourcie suivante :

+ +
export * from 'x.mjs'
+export { name } from 'x.mjs'
+ +

Pour voir cela en pratique, vous pouvez consulter le répertoire module-aggregation. Dans cet exemple (construit sur le précédent qui utilise les classes), on a un module supplémentaire intitulé shapes.mjs qui agrège les fonctionnalités fournies par circle.mjs, square.mjs et triangle.mjs. Les sous-modules ont également été déplacés dans un répertoire shapes situé dans un répertoire modules. L'arborescence utilisée est donc :

+ +
modules/
+  canvas.mjs
+  shapes.mjs
+  shapes/
+    circle.mjs
+    square.mjs
+    triangle.mjs
+ +

Dans chaque sous-module, l'export aura la même forme :

+ +
export { Square };
+ +

Pour l'agrégation au sein de shapes.mjs, on écrit les lignes suivantes :

+ +
export { Square } from './shapes/square.mjs';
+export { Triangle } from './shapes/triangle.mjs';
+export { Circle } from './shapes/circle.mjs';
+ +

On récupère ainsi l'ensemble des exports de chaque module et on les rend disponibles via shapes.mjs.

+ +
+

Note : Cette notation ne permet que de rediriger les exports via le fichier. Les objets importés/exportés n'existent pas vraiment dans shapes.mjs et on ne peut donc pas écrire de code utile qui les manipule.

+
+ +

Dans le fichier main.mjs, on pourra alors remplacer :

+ +
import { Square } from './modules/square.mjs';
+import { Circle } from './modules/circle.mjs';
+import { Triangle } from './modules/triangle.mjs';
+ +

par :

+ +
import { Square, Circle, Triangle } from './modules/shapes.mjs';
+ +

Chargement dynamique de modules

+ +

Cette nouvelle fonctionnalité permet aux navigateurs de charger les modules lorsqu'ils sont nécessaires plutôt que de tout précharger en avance de phase. Cette méthode offre de nombreux avantages quant aux performances. Voyons comment cela fonctionne.

+ +

Pour utiliser cette fonctionnalité, on pourra utiliser import() comme une fonction et lui passer le chemin du module en argument. Cette fonction renverra une promesse, qui sera résolue en un module objet donnant accès aux exports.

+ +
import('./modules/monModule.mjs')
+  .then((module) => {
+    // Faire qqc avec le module.
+  });
+ +

Dans nos exemples, regardons le répertoire dynamic-module-imports, également basé sur les classes. Cette fois, on ne dessine rien au chargement de l'exemple mais on ajoute trois boutons — "Circle", "Square" et "Triangle" — qui, lorsqu'ils seront utilisés, chargeront dynamiquement les modules nécessaires et les utiliseront pour charger la forme associée.

+ +

Dans cet exemple, nous avons uniquement modifié index.html et main.js — les exports restent les mêmes.

+ +

Dans main.js, on récupère une référence à chaque bouton en utilisant document.querySelector(). Par exemple :

+ +
let squareBtn = document.querySelector('.square');
+ +

Ensuite, on attache un gestionnaire d'évènement à chaque bouton afin qu'on puisse appuyer dessus. Le module correspondant est alors chargé dynamiquement et utilisé pour dessiner la forme :

+ +
squareBtn.addEventListener('click', () => {
+  import('./modules/square.mjs').then((Module) => {
+    let square1 = new Module.Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
+    square1.draw();
+    square1.reportArea();
+    square1.reportPerimeter();
+  })
+});
+ +

On voit ici que, parce que la promesse renvoie un objet module à la résolution, la classe est une propriété de cet objet et qu'il faut ajouter cet espace de nom devant le constructeur exporté pour l'utiliser. Autrement dit, avec cette méthode, on doit ajouter Module. devant Square (plutôt que d'utiliser uniquement Square).

+ +

Diagnostiquer les problèmes avec les modules

+ +

Voici quelques notes pour aider à comprendre et à diagnostiquer les problèmes parfois rencontrés avec les modules. N'hésitez pas à ajouter vos conseils à cette liste si vous en avez.

+ + + +

Voir aussi

+ + + +

{{Previous("Web/JavaScript/Guide/Métaprogrammation")}}

diff --git a/files/fr/web/javascript/guide/numbers_and_dates/index.html b/files/fr/web/javascript/guide/numbers_and_dates/index.html deleted file mode 100644 index c80c7ce65e..0000000000 --- a/files/fr/web/javascript/guide/numbers_and_dates/index.html +++ /dev/null @@ -1,392 +0,0 @@ ---- -title: Nombres et dates -slug: Web/JavaScript/Guide/Numbers_and_dates -tags: - - Guide - - JavaScript -translation_of: Web/JavaScript/Guide/Numbers_and_dates -original_slug: Web/JavaScript/Guide/Nombres_et_dates ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs", "Web/JavaScript/Guide/Formatage_du_texte")}}
- -

Ce chapitre illustre le fonctionnement des nombres et des dates en JavaScript grâce aux concepts, objets et fonctions utilisables avec ce langage. Cela inclut notamment l'écriture de nombre selon différentes bases (décimale, binaire, hexadécimale) et l'utilisation de l'objet global {{jsxref("Math")}}.

- -

Nombres

- -

Les nombres en JavaScript sont implémentés comme des nombres sur 64 bits à précision double selon le format IEEE-754 qui est un standard pour la représentation des nombres flottants et qui permet d'avoir jusqu'à 16 chiffres significatifs. Le type numérique possède également trois valeurs spéciales symboliques : +{{jsxref("Infinity")}}, -{{jsxref("Infinity")}} et {{jsxref("NaN")}} (pour désigner une valeur qui n'est pas un nombre).

- -

Le format IEEE-754 permet de représenter des valeurs entre ±2^−1022 et ±2^+1023, ce qui correspond à des valeurs entre ±10^−308 et ±10^+308 avec une précision sur 53 bits. Les nombres entiers compris sur l'intervalle ±2^53 − 1 peuvent être représentés exactement.

- -

Le type {{jsxref("BigInt")}} est une addition récente à JavaScript qui permet de représenter de grands entiers. Toutefois, il n'est pas possible de mélanger les BigInt et les nombres ({{jsxref("Number")}}) dans les mêmes opérations et on ne peut pas utiliser l'objet {{jsxref("Math")}} avec les valeurs BigInt.

- -

Voir également les types de données et structures JavaScript pour l'articulation des types primitifs en JavaScript.

- -

Il est possible d'utiliser quatre types de littéraux numériques : décimal, binaire, octal et hexadécimal.

- -

Les nombres décimaux

- -
1234567980;
-42;
-
-// Attention à l'utilisation des zéros
-// en début de nombre
-
-0888; // 888 analysé en base décimale
-0777; // en mode non-strict, analysé en base octale,
-      // ce qui correspond
-      // à 511 en base décimale
-
- -

On voit ici que les littéraux numériques qui commencent par un zéro (0) et contiennent un chiffre strictement inférieur à 8 après ce 0 sont analysés comme étant exprimés en base octale.

- -

Les nombres binaires

- -

Pour utiliser des nombres binaires, on utilise un littéral qui commence par un 0 suivi d'un b minuscule ou majuscule (0b ou 0B). Si les chiffres qui suivent ce préfixe ne sont pas des 0 ou des 1, une exception {{jsxref("SyntaxError")}} sera levée.

- -
var FLT_BITSIGNE = 0b10000000000000000000000000000000; // 2147483648
-var FLT_EXPOSANT = 0b01111111100000000000000000000000; // 2139095040
-var FLT_MANTISSE = 0B00000000011111111111111111111111; // 8388607
-
- -

Les nombres octaux

- -

Pour utiliser des nombres en base octale, on utilisera un préfixe avec un 0. Si les nombres qui suivent ce 0 ne sont pas compris entre 0 et 7 (au sens strict), le nombre sera interprété comme un nombre décimal.

- -
var n = 0755; // 493 en base 10
-var m = 0644; // 420 en base 10
-
- -

En mode strict, ECMAScript 5 interdit cette syntaxe octale. Cette syntaxe ne fait pas partie d'ECMAScript 5 mais est supportée par la majorité des navigateurs. Avec ECMAScript 2015 (ES6), il est possible de représenter un nombre en notation octale grâce au préfixe "0o" :

- -
var a = 0o10; // Notation octale pour ES2015
- -

Les nombres hexadécimaux

- -

Pour utiliser des nombres exprimés en base hexadécimale, on utilisera un préfixe avec un zéro suivi d'un x majuscule ou minuscule (0x ou 0X). Si les chiffres qui suivent ce préfixe ne sont pas 0123456789ABCDEF, cela provoquera une exception {{jsxref("SyntaxError")}}.

- -
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
-0x123456789ABCDEF   // 81985529216486900
-0XA                 // 10
-
- -

Notation scientifique

- -
1E3   // 100
-2e6   // 2000000
-0.1e2 // 10
-
- -

L'objet Number

- -

L'objet {{jsxref("Number")}} possède certaines propriétés représentant les constantes numériques telles que : la valeur maximale représentable en JavaScript, une valeur spéciale pour dire que la valeur numérique n'est pas un nombre et l'infini. Ces valeurs ne peuvent pas être modifiées, on pourra les utiliser de la façon suivante :

- -
var plusGrandNombre = Number.MAX_VALUE;
-var plusPetitNombre = Number.MIN_VALUE;
-var infini = Number.POSITIVE_INFINITY;
-var infiniNégatif = Number.NEGATIVE_INFINITY;
-var pasUnNombre = Number.NaN;
-
- -

On utilisera toujours ces valeurs directement avec l'objet natif Number (et non pas avec les propriétés d'une instance d'un objet Number qu'on aurait créé).

- -

Le tableau qui suit liste certaines des propriétés de Number.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Propriétés de Number
PropriétéDescription
{{jsxref("Number.MAX_VALUE")}}Le plus grand nombre qu'on peut représenter en JavaScript (±1.7976931348623157e+308).
{{jsxref("Number.MIN_VALUE")}}Le plus petit nombre qu'on peut représenter en JavaScript (±5e-324).
{{jsxref("Number.NaN")}}Une valeur spéciale signifiant que la valeur n'est pas un nombre.
{{jsxref("Number.NEGATIVE_INFINITY")}}L'infini négatif, renvoyé lorsqu'on dépasse la valeur minimale.
{{jsxref("Number.POSITIVE_INFINITY")}}L'infini positif, renvoyé lorsqu'on dépasse la valeur maximale.
{{jsxref("Number.EPSILON")}}La différence entre 1 et la première valeur supérieure à 1 qui puisse être représentée comme {{jsxref("Number")}}. (2.220446049250313e-16)
{{jsxref("Number.MIN_SAFE_INTEGER")}}Le plus petit entier qu'on puisse représenter en JavaScript. (−2^53 + 1 ou −9007199254740991)
{{jsxref("Number.MAX_SAFE_INTEGER")}} -

L'entier le plus grand qu'on puisse représenter en JavaScript (+2^53 − 1 ou +9007199254740991)

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Méthodes de Number
MéthodeDescription
{{jsxref("Number.parseFloat()")}}Analyse un argument qui est une chaîne de caractères et renvoie un nombre décimal. Cette méthode est équivalente à la fonction {{jsxref("parseFloat", "parseFloat()")}}.
{{jsxref("Number.parseInt()")}}Analyse un argument qui est une chaîne de caractères et renvoie un entier exprimé dans une base donnée. Cette méthode est équivalente à la fonction {{jsxref("parseInt", "parseInt()")}}.
{{jsxref("Number.isFinite()")}}Détermine si la valeur passée en argument est un nombre fini.
{{jsxref("Number.isInteger()")}}Détermine si la valeur passée en argument est un nombre entier.
{{jsxref("Number.isNaN()")}}Détermine si la valeur passée en argument est {{jsxref("NaN")}}. Cette version est plus robuste que la fonction globale {{jsxref("Objets_globaux/isNaN", "isNaN()")}}.
{{jsxref("Number.isSafeInteger()")}}Détermine si la valeur fournie est un nombre qu'il est possible de représenter comme un entier sans perdre d'information.
- -

Le prototype de Number fournit certaines méthodes pour exprimer les valeurs représentées par les objets Number dans différents formats. Le tableau suivant liste certaines de ces méthodes de Number.prototype.

- - - - - - - - - - - - - - - - - - - - - - - -
Méthodes of Number.prototype
MéthodeDescription
{{jsxref("Number.toExponential", "toExponential()")}}Renvoie une chaîne de caractères représentant le nombre en notation exponentielle.
{{jsxref("Number.toFixed", "toFixed()")}}Renvoie une chaîne de caractères représentant le nombre en notation à point fixe.
{{jsxref("Number.toPrecision", "toPrecision()")}}Renvoie une chaîne de caractères représentant le nombre en notation à point fixe avec une précision donnée.
- -

L'objet Math

- -

L'objet natif {{jsxref("Math")}} possède des propriétés et des méthodes statiques pour représenter des constantes et des fonctions mathématiques. Ainsi, la propriété PI de l'objet Math représente la valeur de la constante π\pi (3.141...), on peut l'utiliser dans les applications avec :

- -
Math.PI
-
- -

De la même façon, les fonctions mathématiques usuelles sont des méthodes de Math. On retrouve par exemple les fonctions trigonométriques, logarithmiques et exponentielles ainsi que d'autres fonctions. Si on souhaite utiliser la fonction sinus, on pourra écrire :

- -
Math.sin(1.56)
-
- -
-

Note : Les méthodes trigonométriques de Math prennent des arguments exprimés en radians.

-
- -

Le tableau suivant liste les méthodes de l'objet Math.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Méthodes de Math
MéthodeDescription
{{jsxref("Math.abs", "abs()")}}Valeur absolue
{{jsxref("Math.sin", "sin()")}}, {{jsxref("Math.cos", "cos()")}}, {{jsxref("Math.tan", "tan()")}}Fonctions trigonométriques standards (les arguments sont exprimés en radians)
{{jsxref("Math.asin", "asin()")}}, {{jsxref("Math.acos", "acos()")}}, {{jsxref("Math.atan", "atan()")}}, {{jsxref("Math.atan2", "atan2()")}}Fonctions trigonométriques inverses (les valeurs renvoyées sont exprimées en radians)
{{jsxref("Math.sinh", "sinh()")}}, {{jsxref("Math.cosh", "cosh()")}}, {{jsxref("Math.tanh", "tanh()")}}Fonctions trigonométriques hyperboliques (les arguments sont exprimés en radians)
{{jsxref("Math.asinh", "asinh()")}}, {{jsxref("Math.acosh", "acosh()")}}, {{jsxref("Math.atanh", "atanh()")}}Fonctions trigonométriques hyperboliques inverses (les valeurs renvoyées sont exprimées en radians).
{{jsxref("Math.pow", "pow()")}}, {{jsxref("Math.exp", "exp()")}}, {{jsxref("Math.expm1", "expm1()")}}, {{jsxref("Math.log10", "log10()")}}, {{jsxref("Math.log1p", "log1p()")}}, {{jsxref("Math.log2", "log2()")}}Fonctions exponentielles et logarithmiques
{{jsxref("Math.floor", "floor()")}}, {{jsxref("Math.ceil", "ceil()")}}Renvoie le plus petit/grand entier inférieur/supérieur ou égal à l'argument donné
{{jsxref("Math.min", "min()")}}, {{jsxref("Math.max", "max()")}}Renvoie le plus petit (resp. grand) nombre d'une liste de nombres séparés par des virgules
{{jsxref("Math.random", "random()")}}Renvoie un nombre aléatoire compris entre 0 et 1
{{jsxref("Math.round", "round()")}}, {{jsxref("Math.fround", "fround()")}}, {{jsxref("Math.trunc", "trunc()")}},Fonctions d'arrondis et de troncature
{{jsxref("Math.sqrt", "sqrt()")}}, {{jsxref("Math.cbrt", "cbrt()")}}, {{jsxref("Math.hypot", "hypot()")}}Racine carrée, cubique et racine carrée de la somme des carrés des arguments
{{jsxref("Math.sign", "sign()")}}Renvoie le signe d'un nombre et indique si la valeur est négative, positive ou nulle
{{jsxref("Math.clz32", "clz32()")}},
- {{jsxref("Math.imul", "imul()")}}
Le nombre de zéros qui commencent un nombre sur 32 bits en représentation binaire.
- La résultat de la multiplication de deux arguments sur 32 bits effectuée comme en C.
- -

À la différence des autres objets, on ne crée pas d'objet de type Math. Ses propriétés sont statiques, on les appelle donc toujours depuis l'objet Math.

- -

L'objet Date

- -

JavaScript ne possède pas de type primitif pour représenter des dates. Cependant l'objet {{jsxref("Date")}} et ses méthodes permettent de manipuler des dates et des heures au sein d'une application. L'objet Date possède de nombreuses méthodes pour définir, modifier, obtenir des dates. Il ne possède pas de propriétés.

- -

JavaScript gère les dates de façon similaire à Java. Les deux langages possèdent de nombreuses méthodes en commun et les deux langages stockent les dates selon les nombres de millisecondes écoulées depuis le premier janvier 1970 à 00h00:00.

- -

L'objet Date permet de représenter des dates allant de -100 000 000 jours jusqu'à +100 000 000 jours par rapport au premier janvier 1970 UTC.

- -

Pour créer un objet Date, on utilisera la syntaxe suivante :

- -
var monObjetDate = new Date([paramètres]);
-
- -

avec monObjetDate étant le nom de l'objet à créer, cela peut être un nouvel objet ou une propriété d'un objet existant.

- -

Lorsqu'on appelle Date sans le mot-clé new, cela renvoie la date fournie sous la forme d'une chaîne de caractères.

- -

Les paramètres qui peuvent être utilisés sont :

- - - -

Méthodes de l'objet Date

- -

Les méthodes de l'objet Date se répartissent en différentes catégories :

- - - -

Avec les accesseurs et les mutateurs, il est possible d'obtenir ou de modifier séparément les secondes, les minutes, les heures, le jour du mois ou de la semaine, le mois et l'année. Il existe une méthode getDay qui renvoie le jour de la semaine mais il n'existe pas de méthode réciproque setDay car le jour de la semaine est automatiquement déterminé. Ces méthodes utilisent des entiers pour représenter les valeurs utilisées :

- - - -

Ainsi, si on définit la date suivante :

- -
var noël95 = new Date("December 25, 1995");
-
- -

noël95.getMonth() renverra 11, et noël95.getFullYear() renverra 1995.

- -

Les méthodes getTime et setTime peuvent être utiles pour comparer des dates entre elles. La méthode getTime renvoie le nombre de millisecondes écoulées depuis le premier janvier 1970 à 00:00:00 pour l'objet Date.

- -

Par exemple, les instructions suivantes affichent le nombre de jours qui restent pour l'année courante :

- -
var aujourdhui = new Date();
-
-// On définit le jour et le mois
-var finAnnée = new Date(1995, 11, 31, 23, 59, 59, 999);
-
-// On définit l'année avec l'année courante
-finAnnée.setFullYear(aujourdhui.getFullYear());
-
-// On calcule le nombre de millisecondes par jour
-var msParJour = 24 * 60 * 60 * 1000;
-
-// On renvoie le nombre de jours restants dans l'année
-var joursRestants = (finAnnée.getTime() - aujourdhui.getTime()) / msParJour;
-
-joursRestants = Math.round(joursRestants);
- -

Cet exemple crée un objet Date nommé aujourdhui qui contient la date du jour. On crée ensuite un objet Date nommé finAnnée pour lequel on définit ensuite l'année avec l'année courante. Après, on calcule le nombre de millisecondes qui s'écoulent dans une journée. Enfin, on calcule le nombre de jours entre aujourdhui et finAnnée en utilisant getTime puis on arrondit le tout pour avoir un nombre de jours.

- -

La méthode parse est utile lorsqu'on souhaite affecter des valeurs temporelles à partir de chaînes de caractères. Par exemple, dans le code qui suit, on utilise les méthodes parse et setTime pour affecter la valeur d'une date à un objet IPOdate :

- -
var IPOdate = new Date();
-IPOdate.setTime(Date.parse("Aug 9, 1995"));
-
- -

Exemple d'utilisation de l'objet Date

- -

Dans l'exemple qui suit, la fonction JSClock() renvoie le temps au format d'une horloge numérique représentant les heures sur 12 heures :

- -
function JSClock() {
-  var temps = new Date();
-  var heures = temps.getHours();
-  var minutes = temps.getMinutes();
-  var secondes = temps.getSeconds();
-  var calc = "" + (heures > 12) ? heures - 12 : heures);
-  if (heures == 0)
-    calc = "12";
-  calc += ((minutes < 10) ? ":0" : ":") + minutes;
-  calc += ((secondes < 10) ? ":0" : ":") + secondes;
-  calc += (heures >= 12) ? " P.M." : " A.M.";
-  return calc;
-}
-
- -

Pour commencer, la fonction JSClock crée un objet Date appelé temps qui représente la date et l'heure à l'instant où la fonction est exécutée. Ensuite, les méthodes getHours, getMinutes, et getSeconds sont appelées afin d'affecter les valeurs correspondantes à heures, minutes, et secondes.

- -

Les quatre instructions suivantes permettent de construire une chaîne de caractères à partir de la valeur temporelle. La première instruction crée une variable calc et lui affecte une valeur avec une expression conditionnelle : si heures est supérieure à 12, on affichera (heures - 12), sinon on affichera l'heure sauf si c'est 0 auquel cas on affichera 12.

- -

L'instruction qui suit concatène la valeur de minutes à calc. Si la valeur de minutes est inférieure à 10, l'expression conditionnelle ajoutera une chaîne avec un zéro pour que la valeur soit affichée avec deux chiffres. De la même façon, l'instruction qui suit concatène la valeur de calc avec les secondes.

- -

Enfin, une expression conditionnelle est utilisée pour ajouter "P.M." à calc si heures vaut 12 ou plus, sinon ce sera la chaîne "A.M." qui sera ajoutée à la fin de calc.

- -

{{PreviousNext("Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs", "Web/JavaScript/Guide/Formatage_du_texte")}}

diff --git a/files/fr/web/javascript/guide/numbers_and_dates/index.md b/files/fr/web/javascript/guide/numbers_and_dates/index.md new file mode 100644 index 0000000000..c80c7ce65e --- /dev/null +++ b/files/fr/web/javascript/guide/numbers_and_dates/index.md @@ -0,0 +1,392 @@ +--- +title: Nombres et dates +slug: Web/JavaScript/Guide/Numbers_and_dates +tags: + - Guide + - JavaScript +translation_of: Web/JavaScript/Guide/Numbers_and_dates +original_slug: Web/JavaScript/Guide/Nombres_et_dates +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs", "Web/JavaScript/Guide/Formatage_du_texte")}}
+ +

Ce chapitre illustre le fonctionnement des nombres et des dates en JavaScript grâce aux concepts, objets et fonctions utilisables avec ce langage. Cela inclut notamment l'écriture de nombre selon différentes bases (décimale, binaire, hexadécimale) et l'utilisation de l'objet global {{jsxref("Math")}}.

+ +

Nombres

+ +

Les nombres en JavaScript sont implémentés comme des nombres sur 64 bits à précision double selon le format IEEE-754 qui est un standard pour la représentation des nombres flottants et qui permet d'avoir jusqu'à 16 chiffres significatifs. Le type numérique possède également trois valeurs spéciales symboliques : +{{jsxref("Infinity")}}, -{{jsxref("Infinity")}} et {{jsxref("NaN")}} (pour désigner une valeur qui n'est pas un nombre).

+ +

Le format IEEE-754 permet de représenter des valeurs entre ±2^−1022 et ±2^+1023, ce qui correspond à des valeurs entre ±10^−308 et ±10^+308 avec une précision sur 53 bits. Les nombres entiers compris sur l'intervalle ±2^53 − 1 peuvent être représentés exactement.

+ +

Le type {{jsxref("BigInt")}} est une addition récente à JavaScript qui permet de représenter de grands entiers. Toutefois, il n'est pas possible de mélanger les BigInt et les nombres ({{jsxref("Number")}}) dans les mêmes opérations et on ne peut pas utiliser l'objet {{jsxref("Math")}} avec les valeurs BigInt.

+ +

Voir également les types de données et structures JavaScript pour l'articulation des types primitifs en JavaScript.

+ +

Il est possible d'utiliser quatre types de littéraux numériques : décimal, binaire, octal et hexadécimal.

+ +

Les nombres décimaux

+ +
1234567980;
+42;
+
+// Attention à l'utilisation des zéros
+// en début de nombre
+
+0888; // 888 analysé en base décimale
+0777; // en mode non-strict, analysé en base octale,
+      // ce qui correspond
+      // à 511 en base décimale
+
+ +

On voit ici que les littéraux numériques qui commencent par un zéro (0) et contiennent un chiffre strictement inférieur à 8 après ce 0 sont analysés comme étant exprimés en base octale.

+ +

Les nombres binaires

+ +

Pour utiliser des nombres binaires, on utilise un littéral qui commence par un 0 suivi d'un b minuscule ou majuscule (0b ou 0B). Si les chiffres qui suivent ce préfixe ne sont pas des 0 ou des 1, une exception {{jsxref("SyntaxError")}} sera levée.

+ +
var FLT_BITSIGNE = 0b10000000000000000000000000000000; // 2147483648
+var FLT_EXPOSANT = 0b01111111100000000000000000000000; // 2139095040
+var FLT_MANTISSE = 0B00000000011111111111111111111111; // 8388607
+
+ +

Les nombres octaux

+ +

Pour utiliser des nombres en base octale, on utilisera un préfixe avec un 0. Si les nombres qui suivent ce 0 ne sont pas compris entre 0 et 7 (au sens strict), le nombre sera interprété comme un nombre décimal.

+ +
var n = 0755; // 493 en base 10
+var m = 0644; // 420 en base 10
+
+ +

En mode strict, ECMAScript 5 interdit cette syntaxe octale. Cette syntaxe ne fait pas partie d'ECMAScript 5 mais est supportée par la majorité des navigateurs. Avec ECMAScript 2015 (ES6), il est possible de représenter un nombre en notation octale grâce au préfixe "0o" :

+ +
var a = 0o10; // Notation octale pour ES2015
+ +

Les nombres hexadécimaux

+ +

Pour utiliser des nombres exprimés en base hexadécimale, on utilisera un préfixe avec un zéro suivi d'un x majuscule ou minuscule (0x ou 0X). Si les chiffres qui suivent ce préfixe ne sont pas 0123456789ABCDEF, cela provoquera une exception {{jsxref("SyntaxError")}}.

+ +
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+0x123456789ABCDEF   // 81985529216486900
+0XA                 // 10
+
+ +

Notation scientifique

+ +
1E3   // 100
+2e6   // 2000000
+0.1e2 // 10
+
+ +

L'objet Number

+ +

L'objet {{jsxref("Number")}} possède certaines propriétés représentant les constantes numériques telles que : la valeur maximale représentable en JavaScript, une valeur spéciale pour dire que la valeur numérique n'est pas un nombre et l'infini. Ces valeurs ne peuvent pas être modifiées, on pourra les utiliser de la façon suivante :

+ +
var plusGrandNombre = Number.MAX_VALUE;
+var plusPetitNombre = Number.MIN_VALUE;
+var infini = Number.POSITIVE_INFINITY;
+var infiniNégatif = Number.NEGATIVE_INFINITY;
+var pasUnNombre = Number.NaN;
+
+ +

On utilisera toujours ces valeurs directement avec l'objet natif Number (et non pas avec les propriétés d'une instance d'un objet Number qu'on aurait créé).

+ +

Le tableau qui suit liste certaines des propriétés de Number.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Propriétés de Number
PropriétéDescription
{{jsxref("Number.MAX_VALUE")}}Le plus grand nombre qu'on peut représenter en JavaScript (±1.7976931348623157e+308).
{{jsxref("Number.MIN_VALUE")}}Le plus petit nombre qu'on peut représenter en JavaScript (±5e-324).
{{jsxref("Number.NaN")}}Une valeur spéciale signifiant que la valeur n'est pas un nombre.
{{jsxref("Number.NEGATIVE_INFINITY")}}L'infini négatif, renvoyé lorsqu'on dépasse la valeur minimale.
{{jsxref("Number.POSITIVE_INFINITY")}}L'infini positif, renvoyé lorsqu'on dépasse la valeur maximale.
{{jsxref("Number.EPSILON")}}La différence entre 1 et la première valeur supérieure à 1 qui puisse être représentée comme {{jsxref("Number")}}. (2.220446049250313e-16)
{{jsxref("Number.MIN_SAFE_INTEGER")}}Le plus petit entier qu'on puisse représenter en JavaScript. (−2^53 + 1 ou −9007199254740991)
{{jsxref("Number.MAX_SAFE_INTEGER")}} +

L'entier le plus grand qu'on puisse représenter en JavaScript (+2^53 − 1 ou +9007199254740991)

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Méthodes de Number
MéthodeDescription
{{jsxref("Number.parseFloat()")}}Analyse un argument qui est une chaîne de caractères et renvoie un nombre décimal. Cette méthode est équivalente à la fonction {{jsxref("parseFloat", "parseFloat()")}}.
{{jsxref("Number.parseInt()")}}Analyse un argument qui est une chaîne de caractères et renvoie un entier exprimé dans une base donnée. Cette méthode est équivalente à la fonction {{jsxref("parseInt", "parseInt()")}}.
{{jsxref("Number.isFinite()")}}Détermine si la valeur passée en argument est un nombre fini.
{{jsxref("Number.isInteger()")}}Détermine si la valeur passée en argument est un nombre entier.
{{jsxref("Number.isNaN()")}}Détermine si la valeur passée en argument est {{jsxref("NaN")}}. Cette version est plus robuste que la fonction globale {{jsxref("Objets_globaux/isNaN", "isNaN()")}}.
{{jsxref("Number.isSafeInteger()")}}Détermine si la valeur fournie est un nombre qu'il est possible de représenter comme un entier sans perdre d'information.
+ +

Le prototype de Number fournit certaines méthodes pour exprimer les valeurs représentées par les objets Number dans différents formats. Le tableau suivant liste certaines de ces méthodes de Number.prototype.

+ + + + + + + + + + + + + + + + + + + + + + + +
Méthodes of Number.prototype
MéthodeDescription
{{jsxref("Number.toExponential", "toExponential()")}}Renvoie une chaîne de caractères représentant le nombre en notation exponentielle.
{{jsxref("Number.toFixed", "toFixed()")}}Renvoie une chaîne de caractères représentant le nombre en notation à point fixe.
{{jsxref("Number.toPrecision", "toPrecision()")}}Renvoie une chaîne de caractères représentant le nombre en notation à point fixe avec une précision donnée.
+ +

L'objet Math

+ +

L'objet natif {{jsxref("Math")}} possède des propriétés et des méthodes statiques pour représenter des constantes et des fonctions mathématiques. Ainsi, la propriété PI de l'objet Math représente la valeur de la constante π\pi (3.141...), on peut l'utiliser dans les applications avec :

+ +
Math.PI
+
+ +

De la même façon, les fonctions mathématiques usuelles sont des méthodes de Math. On retrouve par exemple les fonctions trigonométriques, logarithmiques et exponentielles ainsi que d'autres fonctions. Si on souhaite utiliser la fonction sinus, on pourra écrire :

+ +
Math.sin(1.56)
+
+ +
+

Note : Les méthodes trigonométriques de Math prennent des arguments exprimés en radians.

+
+ +

Le tableau suivant liste les méthodes de l'objet Math.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Méthodes de Math
MéthodeDescription
{{jsxref("Math.abs", "abs()")}}Valeur absolue
{{jsxref("Math.sin", "sin()")}}, {{jsxref("Math.cos", "cos()")}}, {{jsxref("Math.tan", "tan()")}}Fonctions trigonométriques standards (les arguments sont exprimés en radians)
{{jsxref("Math.asin", "asin()")}}, {{jsxref("Math.acos", "acos()")}}, {{jsxref("Math.atan", "atan()")}}, {{jsxref("Math.atan2", "atan2()")}}Fonctions trigonométriques inverses (les valeurs renvoyées sont exprimées en radians)
{{jsxref("Math.sinh", "sinh()")}}, {{jsxref("Math.cosh", "cosh()")}}, {{jsxref("Math.tanh", "tanh()")}}Fonctions trigonométriques hyperboliques (les arguments sont exprimés en radians)
{{jsxref("Math.asinh", "asinh()")}}, {{jsxref("Math.acosh", "acosh()")}}, {{jsxref("Math.atanh", "atanh()")}}Fonctions trigonométriques hyperboliques inverses (les valeurs renvoyées sont exprimées en radians).
{{jsxref("Math.pow", "pow()")}}, {{jsxref("Math.exp", "exp()")}}, {{jsxref("Math.expm1", "expm1()")}}, {{jsxref("Math.log10", "log10()")}}, {{jsxref("Math.log1p", "log1p()")}}, {{jsxref("Math.log2", "log2()")}}Fonctions exponentielles et logarithmiques
{{jsxref("Math.floor", "floor()")}}, {{jsxref("Math.ceil", "ceil()")}}Renvoie le plus petit/grand entier inférieur/supérieur ou égal à l'argument donné
{{jsxref("Math.min", "min()")}}, {{jsxref("Math.max", "max()")}}Renvoie le plus petit (resp. grand) nombre d'une liste de nombres séparés par des virgules
{{jsxref("Math.random", "random()")}}Renvoie un nombre aléatoire compris entre 0 et 1
{{jsxref("Math.round", "round()")}}, {{jsxref("Math.fround", "fround()")}}, {{jsxref("Math.trunc", "trunc()")}},Fonctions d'arrondis et de troncature
{{jsxref("Math.sqrt", "sqrt()")}}, {{jsxref("Math.cbrt", "cbrt()")}}, {{jsxref("Math.hypot", "hypot()")}}Racine carrée, cubique et racine carrée de la somme des carrés des arguments
{{jsxref("Math.sign", "sign()")}}Renvoie le signe d'un nombre et indique si la valeur est négative, positive ou nulle
{{jsxref("Math.clz32", "clz32()")}},
+ {{jsxref("Math.imul", "imul()")}}
Le nombre de zéros qui commencent un nombre sur 32 bits en représentation binaire.
+ La résultat de la multiplication de deux arguments sur 32 bits effectuée comme en C.
+ +

À la différence des autres objets, on ne crée pas d'objet de type Math. Ses propriétés sont statiques, on les appelle donc toujours depuis l'objet Math.

+ +

L'objet Date

+ +

JavaScript ne possède pas de type primitif pour représenter des dates. Cependant l'objet {{jsxref("Date")}} et ses méthodes permettent de manipuler des dates et des heures au sein d'une application. L'objet Date possède de nombreuses méthodes pour définir, modifier, obtenir des dates. Il ne possède pas de propriétés.

+ +

JavaScript gère les dates de façon similaire à Java. Les deux langages possèdent de nombreuses méthodes en commun et les deux langages stockent les dates selon les nombres de millisecondes écoulées depuis le premier janvier 1970 à 00h00:00.

+ +

L'objet Date permet de représenter des dates allant de -100 000 000 jours jusqu'à +100 000 000 jours par rapport au premier janvier 1970 UTC.

+ +

Pour créer un objet Date, on utilisera la syntaxe suivante :

+ +
var monObjetDate = new Date([paramètres]);
+
+ +

avec monObjetDate étant le nom de l'objet à créer, cela peut être un nouvel objet ou une propriété d'un objet existant.

+ +

Lorsqu'on appelle Date sans le mot-clé new, cela renvoie la date fournie sous la forme d'une chaîne de caractères.

+ +

Les paramètres qui peuvent être utilisés sont :

+ + + +

Méthodes de l'objet Date

+ +

Les méthodes de l'objet Date se répartissent en différentes catégories :

+ + + +

Avec les accesseurs et les mutateurs, il est possible d'obtenir ou de modifier séparément les secondes, les minutes, les heures, le jour du mois ou de la semaine, le mois et l'année. Il existe une méthode getDay qui renvoie le jour de la semaine mais il n'existe pas de méthode réciproque setDay car le jour de la semaine est automatiquement déterminé. Ces méthodes utilisent des entiers pour représenter les valeurs utilisées :

+ + + +

Ainsi, si on définit la date suivante :

+ +
var noël95 = new Date("December 25, 1995");
+
+ +

noël95.getMonth() renverra 11, et noël95.getFullYear() renverra 1995.

+ +

Les méthodes getTime et setTime peuvent être utiles pour comparer des dates entre elles. La méthode getTime renvoie le nombre de millisecondes écoulées depuis le premier janvier 1970 à 00:00:00 pour l'objet Date.

+ +

Par exemple, les instructions suivantes affichent le nombre de jours qui restent pour l'année courante :

+ +
var aujourdhui = new Date();
+
+// On définit le jour et le mois
+var finAnnée = new Date(1995, 11, 31, 23, 59, 59, 999);
+
+// On définit l'année avec l'année courante
+finAnnée.setFullYear(aujourdhui.getFullYear());
+
+// On calcule le nombre de millisecondes par jour
+var msParJour = 24 * 60 * 60 * 1000;
+
+// On renvoie le nombre de jours restants dans l'année
+var joursRestants = (finAnnée.getTime() - aujourdhui.getTime()) / msParJour;
+
+joursRestants = Math.round(joursRestants);
+ +

Cet exemple crée un objet Date nommé aujourdhui qui contient la date du jour. On crée ensuite un objet Date nommé finAnnée pour lequel on définit ensuite l'année avec l'année courante. Après, on calcule le nombre de millisecondes qui s'écoulent dans une journée. Enfin, on calcule le nombre de jours entre aujourdhui et finAnnée en utilisant getTime puis on arrondit le tout pour avoir un nombre de jours.

+ +

La méthode parse est utile lorsqu'on souhaite affecter des valeurs temporelles à partir de chaînes de caractères. Par exemple, dans le code qui suit, on utilise les méthodes parse et setTime pour affecter la valeur d'une date à un objet IPOdate :

+ +
var IPOdate = new Date();
+IPOdate.setTime(Date.parse("Aug 9, 1995"));
+
+ +

Exemple d'utilisation de l'objet Date

+ +

Dans l'exemple qui suit, la fonction JSClock() renvoie le temps au format d'une horloge numérique représentant les heures sur 12 heures :

+ +
function JSClock() {
+  var temps = new Date();
+  var heures = temps.getHours();
+  var minutes = temps.getMinutes();
+  var secondes = temps.getSeconds();
+  var calc = "" + (heures > 12) ? heures - 12 : heures);
+  if (heures == 0)
+    calc = "12";
+  calc += ((minutes < 10) ? ":0" : ":") + minutes;
+  calc += ((secondes < 10) ? ":0" : ":") + secondes;
+  calc += (heures >= 12) ? " P.M." : " A.M.";
+  return calc;
+}
+
+ +

Pour commencer, la fonction JSClock crée un objet Date appelé temps qui représente la date et l'heure à l'instant où la fonction est exécutée. Ensuite, les méthodes getHours, getMinutes, et getSeconds sont appelées afin d'affecter les valeurs correspondantes à heures, minutes, et secondes.

+ +

Les quatre instructions suivantes permettent de construire une chaîne de caractères à partir de la valeur temporelle. La première instruction crée une variable calc et lui affecte une valeur avec une expression conditionnelle : si heures est supérieure à 12, on affichera (heures - 12), sinon on affichera l'heure sauf si c'est 0 auquel cas on affichera 12.

+ +

L'instruction qui suit concatène la valeur de minutes à calc. Si la valeur de minutes est inférieure à 10, l'expression conditionnelle ajoutera une chaîne avec un zéro pour que la valeur soit affichée avec deux chiffres. De la même façon, l'instruction qui suit concatène la valeur de calc avec les secondes.

+ +

Enfin, une expression conditionnelle est utilisée pour ajouter "P.M." à calc si heures vaut 12 ou plus, sinon ce sera la chaîne "A.M." qui sera ajoutée à la fin de calc.

+ +

{{PreviousNext("Web/JavaScript/Guide/Expressions_et_Op%C3%A9rateurs", "Web/JavaScript/Guide/Formatage_du_texte")}}

diff --git a/files/fr/web/javascript/guide/regular_expressions/assertions/index.html b/files/fr/web/javascript/guide/regular_expressions/assertions/index.html deleted file mode 100644 index a16c6b48ce..0000000000 --- a/files/fr/web/javascript/guide/regular_expressions/assertions/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Assertions -slug: Web/JavaScript/Guide/Regular_Expressions/Assertions -tags: - - Assertions - - Guide - - JavaScript - - RegExp -translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions -original_slug: Web/JavaScript/Guide/Expressions_régulières/Assertions ---- -

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

- -

Les assertions indiquent les conditions selon lesquelles il est possible d'avoir une correspondance (contenu situé avant la correspondance, situé après ou expressions conditionnelles).

- -

Types

- -
-

Note : Le caractère ? peut également être utilisé comme quantificateur.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
CaractèresSignification
x(?=y) -

Correspond à 'x' seulement s'il est suivi de 'y'. On appelle cela un test de succession (lookahead).

- -

Ainsi, /Jack(?=Sparrow)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow'. /Jack(?=Sparrow|Bauer)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow' ou de 'Bauer'. Cependant, ni 'Sparrow' ni 'Bauer' ne feront partie de la correspondance.

-
x(?!y) -

Correspond à 'x' seulement si 'x' n'est pas suivi de 'y'.

- -

Ainsi, /\d+(?!\.)/ correspond à un nombre qui n'est pas suivi par un point, cette expression utilisée avec la chaîne 3.141 correspondra pour '141' mais pas pour '3.141'.

-
(?<=y)x -

Correspond à x seulement si x est précédé par y. C'est ce qu'on appelle une recherche arrière (lookbehind).

- -

Ainsi /(?<=Jack)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack".
- /(?<=Jack|Tom)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack" ou "Tom".
- Toutefois, "Jack" et "Tom" ne feront pas partie de la correspondance.

-
(?<!y)x -

Correspond à x uniquement si x n'est pas précédé par y (parfois appelée en anglais negated lookbehind).

- -

Ainsi, /(?<!-)\d+/ correspondra à un nombre seulement si celui-ci n'est pas précédé d'un signe moins.
- /(?<!-)\d+/.exec('3') cible "3".
-  /(?<!-)\d+/.exec('-3')  ne trouve aucune correspondance car le nombre est précédé d'un signe

-
- -

Exemples

- -

Assertion avant (lookahead)

- -
let regex = /Premier(?= test)/g;
-
-console.log('Premier test'.match(regex)); // [ 'Premier' ]
-console.log('Premier truc'.match(regex)); // null
-console.log("Voici le Premier test de l'année.".match(regex)); // [ 'Premier' ]
-console.log('Voici le Premier truc du mois.'.match(regex)); // null
-
- -

Assertion avant négative

- -

L'expression rationnelle /\d+(?!\.)/ permettra de rechercher plusieurs chiffres si ceux-ci ne sont pas suivis d'un point décimal. Ainsi, /\d+(?!\.)/.exec('3.141') trouvera la sous-chaîne "141" mais pas "3."

- -
console.log(/\d+(?!\.)/g.exec('3.141')); // [ '141', index: 2, input: '3.141' ]
-
- -

Signification différente de '?!' entre les assertions et les intervalles

- -

La combinaison de caractères ?! a un sens différent entre les assertions /x(?!y)/ et les intervalles [^?!].

- -
let orangePasCitron = "Voulez-vous avoir une orange? Oui, je ne veux pas avoir de citron!";
-
-let choixPasCitron = /[^?!]+avoir(?! un citron)[^?!]+[?!]/gi
-console.log(orangePasCitron.match(choixPasCitron)); // [ 'Voulez-vous avoir une orange?' ]
-
-let choixPasOrange = /[^?!]+avoir(?! une orange)[^?!]+[?!]/gi
-console.log(orangePasCitron.match(choixPasOrange)); // [ 'Oui, je ne veux pas avoir de citron!' ]
-
- -

Assertion arrière (lookbehind)

- -
let oranges = ['espèce orange A ', 'sorte orange B', 'espèce orange C',];
-
-let especesOranges = oranges.filter( fruit => fruit.match(/(?<=espèce )orange/));
-console.log(especesOranges); // [ 'espèce orange A ', 'espèce orange C' ]
-
diff --git a/files/fr/web/javascript/guide/regular_expressions/assertions/index.md b/files/fr/web/javascript/guide/regular_expressions/assertions/index.md new file mode 100644 index 0000000000..a16c6b48ce --- /dev/null +++ b/files/fr/web/javascript/guide/regular_expressions/assertions/index.md @@ -0,0 +1,107 @@ +--- +title: Assertions +slug: Web/JavaScript/Guide/Regular_Expressions/Assertions +tags: + - Assertions + - Guide + - JavaScript + - RegExp +translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions +original_slug: Web/JavaScript/Guide/Expressions_régulières/Assertions +--- +

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

+ +

Les assertions indiquent les conditions selon lesquelles il est possible d'avoir une correspondance (contenu situé avant la correspondance, situé après ou expressions conditionnelles).

+ +

Types

+ +
+

Note : Le caractère ? peut également être utilisé comme quantificateur.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
CaractèresSignification
x(?=y) +

Correspond à 'x' seulement s'il est suivi de 'y'. On appelle cela un test de succession (lookahead).

+ +

Ainsi, /Jack(?=Sparrow)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow'. /Jack(?=Sparrow|Bauer)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow' ou de 'Bauer'. Cependant, ni 'Sparrow' ni 'Bauer' ne feront partie de la correspondance.

+
x(?!y) +

Correspond à 'x' seulement si 'x' n'est pas suivi de 'y'.

+ +

Ainsi, /\d+(?!\.)/ correspond à un nombre qui n'est pas suivi par un point, cette expression utilisée avec la chaîne 3.141 correspondra pour '141' mais pas pour '3.141'.

+
(?<=y)x +

Correspond à x seulement si x est précédé par y. C'est ce qu'on appelle une recherche arrière (lookbehind).

+ +

Ainsi /(?<=Jack)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack".
+ /(?<=Jack|Tom)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack" ou "Tom".
+ Toutefois, "Jack" et "Tom" ne feront pas partie de la correspondance.

+
(?<!y)x +

Correspond à x uniquement si x n'est pas précédé par y (parfois appelée en anglais negated lookbehind).

+ +

Ainsi, /(?<!-)\d+/ correspondra à un nombre seulement si celui-ci n'est pas précédé d'un signe moins.
+ /(?<!-)\d+/.exec('3') cible "3".
+  /(?<!-)\d+/.exec('-3')  ne trouve aucune correspondance car le nombre est précédé d'un signe

+
+ +

Exemples

+ +

Assertion avant (lookahead)

+ +
let regex = /Premier(?= test)/g;
+
+console.log('Premier test'.match(regex)); // [ 'Premier' ]
+console.log('Premier truc'.match(regex)); // null
+console.log("Voici le Premier test de l'année.".match(regex)); // [ 'Premier' ]
+console.log('Voici le Premier truc du mois.'.match(regex)); // null
+
+ +

Assertion avant négative

+ +

L'expression rationnelle /\d+(?!\.)/ permettra de rechercher plusieurs chiffres si ceux-ci ne sont pas suivis d'un point décimal. Ainsi, /\d+(?!\.)/.exec('3.141') trouvera la sous-chaîne "141" mais pas "3."

+ +
console.log(/\d+(?!\.)/g.exec('3.141')); // [ '141', index: 2, input: '3.141' ]
+
+ +

Signification différente de '?!' entre les assertions et les intervalles

+ +

La combinaison de caractères ?! a un sens différent entre les assertions /x(?!y)/ et les intervalles [^?!].

+ +
let orangePasCitron = "Voulez-vous avoir une orange? Oui, je ne veux pas avoir de citron!";
+
+let choixPasCitron = /[^?!]+avoir(?! un citron)[^?!]+[?!]/gi
+console.log(orangePasCitron.match(choixPasCitron)); // [ 'Voulez-vous avoir une orange?' ]
+
+let choixPasOrange = /[^?!]+avoir(?! une orange)[^?!]+[?!]/gi
+console.log(orangePasCitron.match(choixPasOrange)); // [ 'Oui, je ne veux pas avoir de citron!' ]
+
+ +

Assertion arrière (lookbehind)

+ +
let oranges = ['espèce orange A ', 'sorte orange B', 'espèce orange C',];
+
+let especesOranges = oranges.filter( fruit => fruit.match(/(?<=espèce )orange/));
+console.log(especesOranges); // [ 'espèce orange A ', 'espèce orange C' ]
+
diff --git a/files/fr/web/javascript/guide/regular_expressions/character_classes/index.html b/files/fr/web/javascript/guide/regular_expressions/character_classes/index.html deleted file mode 100644 index ba3e075bce..0000000000 --- a/files/fr/web/javascript/guide/regular_expressions/character_classes/index.html +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: Classes de caractères -slug: Web/JavaScript/Guide/Regular_Expressions/Character_Classes -tags: - - Classes - - Guide - - JavaScript - - RegExp -translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_Classes -original_slug: Web/JavaScript/Guide/Expressions_régulières/Classes_de_caractères ---- -

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

- -

Les classes de caractères permettent de distinguer différents ensembles de caractères dans les expressions rationnelles (par exemple les chiffres d'une part et les lettres d'autre part).

- -

Types

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CaractèresSignification
. -

Par défaut, (Le point) correspond à n'importe quel caractère excepté un caractère de saut de ligne.

- -

Ainsi, /.n/ correspond à  'un' et 'en' dans "Un baobab nain en cours de  croissance" mais pas à 'nain'.

- -

Si le marqueur s (dotAll) est utilisé, le point correspondra également aux caractères de saut de ligne.

- -

Le marqueur m ne modifie pas le comportement du point.

- -

Attention, si on utilise le point dans un intervalle de caractères, il n'aura plus cette signification spéciale.

-
\d -

Correspond à un chiffre et est équivalent à [0-9].

- -

Ainsi, /\d/ ou /[0-9]/ correspond à '2' dans "H2O est la molécule de l'eau".

-
\D -

Correspond à tout caractère qui n'est pas un chiffre et est équivalent à [^0-9].

- -

Ainsi, /\D/ ou /[^0-9]/ correspond à 'H' dans "H2O est la molécule de l'eau".

-
\w -

Correspond à n'importe quel caractère alphanumérique de l'alphabet latin, y compris le tiret bas. C'est équivalent à [A-Za-z0-9_].

- -

Ainsi, /\w/ correspond à 'l' dans "licorne", à '5' dans "5,28€", et à '3' dans "3D."

-
\W -

Correspond à n'importe quel caractère n'étant pas un caractère de l'alphabet latin ou le tiret bas. Cela est équivalent à [^A-Za-z0-9_].

- -

Ainsi, /\W/ ou /[^A-Za-z0-9_]/ correspond à '%' dans "50%."

-
\s -

Correspond à un blanc (cela comprend les espace, tabulation, saut de ligne ou saut de page). C'est équivalent à [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

- -

Ainsi, /\s\w*/ correspond à ' toto' dans "truc toto".

-
\S -

Correspond à un caractère qui n'est pas un blanc. C'est équivalent à [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

- -

Ainsi, /\S\w*/ correspond à 'truc' dans "truc toto".

-
\tCorrespond à une tabulation (U+0009).
\rCorrespond à un retour chariot (U+000D).
\nCorrespond à un saut de ligne (U+000A).
\vCorrespond à une tabulation verticale (U+000B).
\fCorrespond à un saut de page (U+000C).
[\b]Correspond pour un retour arrière (U+0008). (À ne pas confondre avec \b, voir les limites).
\0Correspond au caractère NULL (U+0000). Il ne doit pas être suivi d'un autre chiffre car \0<chiffres> est une séquence d'échappement pour les nombres en notation octale (si besoin d'utiliser un chiffre ensuite, on pourra utiliser la forme \x00, cf. ci-après).
\cX -

Correspond au caractère de contrôle où X est une lettre entre A et Z. Correspond au caractèlres de contrôle correspondant entre U+0001-U+001F. Ainsi, /\cM/ correspondra au caractère controle-M au sein d'une chaîne de caractères soit "\r" pour "\r\n".

-
\xhhCorrespond au caractère dont le code hexadécimal est hh (deux chiffres hexadécimaux).
\uhhhhCorrespond au caractère dont le code est hhhh (quatre chiffres hexadécimaux).
\u{hhhh} ou \u{hhhhh}(Uniquement actif quand le marqueur u est activé) Correspond au caractère dont la valeur Unicode est hhhh (en chiffre hexadécimaux).
\ -

La barre oblique inversée indique que le prochain caractère doit être traité spécifiquement ou échappé. Elle se comporte d'une de ces façons :

- -
    -
  • Pour les caractères normalement traités littéralement, cela indique que le prochain caractère est spécial et qu'il ne doit pas être interprété littéralement. Ainsi, /b/ correspondra à la lettre "b" mais en utilisant la barre oblique inversée devant /\b/, on cherchera une limite de mot.
  • -
  • Pour les caractères spéciaux, la barre indique que le caractère doit être interprété littéralement. Ainsi, "*" est un caractère spécial (un quantificateur qui signifie que le caractère précédent doit être présent 0 ou plusieurs fois) : /a*/ cherchera une correspondance avec 0 ou plusieurs "a". Si on souhaite trouver le caractère * dans une chaîne, on placera la barre oblique inversée devant : on a ainsi /a\*/ qui permet de trouver "a*" dans une chaîne.
  • -
- -
-

Note : L'échappement vaut également avec la barre oblique inversée. Autrement dit, si on cherche la présence de \ dans une chaîne, on pourra utiliser l'expression /\\/ (où la première barre oblique échape la seconde).

-
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.1.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.property_escapes")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/guide/regular_expressions/character_classes/index.md b/files/fr/web/javascript/guide/regular_expressions/character_classes/index.md new file mode 100644 index 0000000000..ba3e075bce --- /dev/null +++ b/files/fr/web/javascript/guide/regular_expressions/character_classes/index.md @@ -0,0 +1,181 @@ +--- +title: Classes de caractères +slug: Web/JavaScript/Guide/Regular_Expressions/Character_Classes +tags: + - Classes + - Guide + - JavaScript + - RegExp +translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_Classes +original_slug: Web/JavaScript/Guide/Expressions_régulières/Classes_de_caractères +--- +

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

+ +

Les classes de caractères permettent de distinguer différents ensembles de caractères dans les expressions rationnelles (par exemple les chiffres d'une part et les lettres d'autre part).

+ +

Types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaractèresSignification
. +

Par défaut, (Le point) correspond à n'importe quel caractère excepté un caractère de saut de ligne.

+ +

Ainsi, /.n/ correspond à  'un' et 'en' dans "Un baobab nain en cours de  croissance" mais pas à 'nain'.

+ +

Si le marqueur s (dotAll) est utilisé, le point correspondra également aux caractères de saut de ligne.

+ +

Le marqueur m ne modifie pas le comportement du point.

+ +

Attention, si on utilise le point dans un intervalle de caractères, il n'aura plus cette signification spéciale.

+
\d +

Correspond à un chiffre et est équivalent à [0-9].

+ +

Ainsi, /\d/ ou /[0-9]/ correspond à '2' dans "H2O est la molécule de l'eau".

+
\D +

Correspond à tout caractère qui n'est pas un chiffre et est équivalent à [^0-9].

+ +

Ainsi, /\D/ ou /[^0-9]/ correspond à 'H' dans "H2O est la molécule de l'eau".

+
\w +

Correspond à n'importe quel caractère alphanumérique de l'alphabet latin, y compris le tiret bas. C'est équivalent à [A-Za-z0-9_].

+ +

Ainsi, /\w/ correspond à 'l' dans "licorne", à '5' dans "5,28€", et à '3' dans "3D."

+
\W +

Correspond à n'importe quel caractère n'étant pas un caractère de l'alphabet latin ou le tiret bas. Cela est équivalent à [^A-Za-z0-9_].

+ +

Ainsi, /\W/ ou /[^A-Za-z0-9_]/ correspond à '%' dans "50%."

+
\s +

Correspond à un blanc (cela comprend les espace, tabulation, saut de ligne ou saut de page). C'est équivalent à [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

+ +

Ainsi, /\s\w*/ correspond à ' toto' dans "truc toto".

+
\S +

Correspond à un caractère qui n'est pas un blanc. C'est équivalent à [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

+ +

Ainsi, /\S\w*/ correspond à 'truc' dans "truc toto".

+
\tCorrespond à une tabulation (U+0009).
\rCorrespond à un retour chariot (U+000D).
\nCorrespond à un saut de ligne (U+000A).
\vCorrespond à une tabulation verticale (U+000B).
\fCorrespond à un saut de page (U+000C).
[\b]Correspond pour un retour arrière (U+0008). (À ne pas confondre avec \b, voir les limites).
\0Correspond au caractère NULL (U+0000). Il ne doit pas être suivi d'un autre chiffre car \0<chiffres> est une séquence d'échappement pour les nombres en notation octale (si besoin d'utiliser un chiffre ensuite, on pourra utiliser la forme \x00, cf. ci-après).
\cX +

Correspond au caractère de contrôle où X est une lettre entre A et Z. Correspond au caractèlres de contrôle correspondant entre U+0001-U+001F. Ainsi, /\cM/ correspondra au caractère controle-M au sein d'une chaîne de caractères soit "\r" pour "\r\n".

+
\xhhCorrespond au caractère dont le code hexadécimal est hh (deux chiffres hexadécimaux).
\uhhhhCorrespond au caractère dont le code est hhhh (quatre chiffres hexadécimaux).
\u{hhhh} ou \u{hhhhh}(Uniquement actif quand le marqueur u est activé) Correspond au caractère dont la valeur Unicode est hhhh (en chiffre hexadécimaux).
\ +

La barre oblique inversée indique que le prochain caractère doit être traité spécifiquement ou échappé. Elle se comporte d'une de ces façons :

+ +
    +
  • Pour les caractères normalement traités littéralement, cela indique que le prochain caractère est spécial et qu'il ne doit pas être interprété littéralement. Ainsi, /b/ correspondra à la lettre "b" mais en utilisant la barre oblique inversée devant /\b/, on cherchera une limite de mot.
  • +
  • Pour les caractères spéciaux, la barre indique que le caractère doit être interprété littéralement. Ainsi, "*" est un caractère spécial (un quantificateur qui signifie que le caractère précédent doit être présent 0 ou plusieurs fois) : /a*/ cherchera une correspondance avec 0 ou plusieurs "a". Si on souhaite trouver le caractère * dans une chaîne, on placera la barre oblique inversée devant : on a ainsi /a\*/ qui permet de trouver "a*" dans une chaîne.
  • +
+ +
+

Note : L'échappement vaut également avec la barre oblique inversée. Autrement dit, si on cherche la présence de \ dans une chaîne, on pourra utiliser l'expression /\\/ (où la première barre oblique échape la seconde).

+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.1.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.property_escapes")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.html b/files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.html deleted file mode 100644 index 498e9e7ce8..0000000000 --- a/files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Groupes et intervalles -slug: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges -tags: - - Groupes - - Guide - - Intervalles - - JavaScript - - RegExp -translation_of: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges -original_slug: Web/JavaScript/Guide/Expressions_régulières/Groupes_et_intervalles ---- -

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

- -

Les groupes et intervalles permettent de représenter des groupes ou des intervalles de caractères dans des expressions rationnelles.

- -

Types

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CaractèresSignification
x|y -

Correspond à 'x' ou 'y'.

- -

Ainsi, /vert|rouge/ correspond à 'vert' dans "feu vert" et à 'rouge' dans "feu rouge".

-
[xyz] ou [a-c]Un ensemble de caractère. Ce type de motif correspond pour n'importe quel caractètre présent entre les crochets, y compris les séquences d'échappement. Les caractères spéciaux comme le point (.) et l'astérisque ne sont pas considérés comme spéciaux au sein d'un ensemble et n'ont donc pas besoin d'être échappés. Il est possible de donner un ensemble sur un intervalle de caractères en utilisant un tiret (-), comme le montre l'exemple qui suit.
-
- Le motif [a-d],  aura les mêmes correspondances que [abcd], correspondant au 'b' de "bulle" et au 'c' de "ciel". Les motifis /[a-z.]+/ et /[\w.]+/ correspondront pour la chaîne entirère : "Adre.ss.e".
-

[^xyz] ou [^a-c]

-
- - -

Exclusion d'un ensemble de caractères. Cela correspond à tout ce qui n'est pas compris entre crochets. Il est possible de fournir un intervalle de caractères en utilisant un tiret (-). Les autres règles qui s'appliquent pour l'ensemble de caractères (ci-avant) s'appliquent également ici.

- -

Par exemple, [^abc] est équivalent à [^a-c]. Ils correspondent à 'u' dans "bulle" et à 'i' dans "ciel".

- -
-

Note : Le caractère ^ peut également être utilisé afin d'indiquer le début d'un champ.

-
-
(x) -

Correspond à 'x' et garde la correspondance en mémoire. Les parenthèses permettent de capturer l'expression dans un « groupe ».
-
- Les '(toto)' et '(truc)', dans le motif /(toto) (truc) \1 \2/ correspondent et gardent en mémoire les deux premiers mots de la chaîne de caractère "toto truc toto truc". Les \1 et \2 du motif correspondent respectivement à la première et à la deuxième correspondances pour les sous-chaînes entre parenthèses. Lorsqu'on souhaite effectuer un remplacement, on utilisera $1 et $2 pour faire référence au premier et second groupe et $n pour faire référence au n-ième groupe capturé (ex. ('toto truc'.replace(/(...) (...)/, '$2 $1'). $& fera référence à la chaîne entière).

- -

Capturing groups have a performance penalty. If you don't need the matched substring to be recalled, prefer non-capturing parentheses (see below).

- -

String.match() won't return groups if the /.../g flag is set. However, you can still use String.matchAll() to get all matches.

-
\n -

Avec n un entier positif. Cela permet de faire référence à la dernière sous-chaîne qui correspond au n-ième groupe entre parenthèses de l'expression rationnelle (en comptant les parenthèses gauche). Ainsi, /apple(,)\sorange\1/ correspondra à "apple, orange," dans "apple, orange, cherry, peach".

-
(?<Nom>x) -

Correspond à x et nomme la correspondance. Les correspondances associées pourront être retrouvées via le nom indiqué. Les chevrons ('<' et '>') sont obligatoires pour encadrer le nom.

- -

Ainsi, si on veut extraire la composante de zone d'un numéro de téléphone aux États-Unis, on pourra écrire /\((?<area>\d\d\d)\)/ et récupérer le nombre voulu avec matches.groups.area.

-
(?:x)Correspond à 'x' mais ne garde pas la correspondance en mémoire. Les parenthèses ne capturent pas l'expression et permettent d'utiliser des sous-expressions d'une expression régulière pour travailler plus finement. L'expression /(?:zoo){1,2}/ sans parenthèes non-capturantes les caractères {1,2} ne s'appliqueraient qu'au dernier 'o' de 'zoo'. Avec les parenthèses capturantes, {1,2} s'applique au mot entier 'zoo'.
- -
-

Note : Firefox ne prend pas en charge les groupes nommés. Pour plus d'informations, voir le bug correspondant.

-
diff --git a/files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.md b/files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.md new file mode 100644 index 0000000000..498e9e7ce8 --- /dev/null +++ b/files/fr/web/javascript/guide/regular_expressions/groups_and_ranges/index.md @@ -0,0 +1,92 @@ +--- +title: Groupes et intervalles +slug: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges +tags: + - Groupes + - Guide + - Intervalles + - JavaScript + - RegExp +translation_of: Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges +original_slug: Web/JavaScript/Guide/Expressions_régulières/Groupes_et_intervalles +--- +

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

+ +

Les groupes et intervalles permettent de représenter des groupes ou des intervalles de caractères dans des expressions rationnelles.

+ +

Types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaractèresSignification
x|y +

Correspond à 'x' ou 'y'.

+ +

Ainsi, /vert|rouge/ correspond à 'vert' dans "feu vert" et à 'rouge' dans "feu rouge".

+
[xyz] ou [a-c]Un ensemble de caractère. Ce type de motif correspond pour n'importe quel caractètre présent entre les crochets, y compris les séquences d'échappement. Les caractères spéciaux comme le point (.) et l'astérisque ne sont pas considérés comme spéciaux au sein d'un ensemble et n'ont donc pas besoin d'être échappés. Il est possible de donner un ensemble sur un intervalle de caractères en utilisant un tiret (-), comme le montre l'exemple qui suit.
+
+ Le motif [a-d],  aura les mêmes correspondances que [abcd], correspondant au 'b' de "bulle" et au 'c' de "ciel". Les motifis /[a-z.]+/ et /[\w.]+/ correspondront pour la chaîne entirère : "Adre.ss.e".
+

[^xyz] ou [^a-c]

+
+ + +

Exclusion d'un ensemble de caractères. Cela correspond à tout ce qui n'est pas compris entre crochets. Il est possible de fournir un intervalle de caractères en utilisant un tiret (-). Les autres règles qui s'appliquent pour l'ensemble de caractères (ci-avant) s'appliquent également ici.

+ +

Par exemple, [^abc] est équivalent à [^a-c]. Ils correspondent à 'u' dans "bulle" et à 'i' dans "ciel".

+ +
+

Note : Le caractère ^ peut également être utilisé afin d'indiquer le début d'un champ.

+
+
(x) +

Correspond à 'x' et garde la correspondance en mémoire. Les parenthèses permettent de capturer l'expression dans un « groupe ».
+
+ Les '(toto)' et '(truc)', dans le motif /(toto) (truc) \1 \2/ correspondent et gardent en mémoire les deux premiers mots de la chaîne de caractère "toto truc toto truc". Les \1 et \2 du motif correspondent respectivement à la première et à la deuxième correspondances pour les sous-chaînes entre parenthèses. Lorsqu'on souhaite effectuer un remplacement, on utilisera $1 et $2 pour faire référence au premier et second groupe et $n pour faire référence au n-ième groupe capturé (ex. ('toto truc'.replace(/(...) (...)/, '$2 $1'). $& fera référence à la chaîne entière).

+ +

Capturing groups have a performance penalty. If you don't need the matched substring to be recalled, prefer non-capturing parentheses (see below).

+ +

String.match() won't return groups if the /.../g flag is set. However, you can still use String.matchAll() to get all matches.

+
\n +

Avec n un entier positif. Cela permet de faire référence à la dernière sous-chaîne qui correspond au n-ième groupe entre parenthèses de l'expression rationnelle (en comptant les parenthèses gauche). Ainsi, /apple(,)\sorange\1/ correspondra à "apple, orange," dans "apple, orange, cherry, peach".

+
(?<Nom>x) +

Correspond à x et nomme la correspondance. Les correspondances associées pourront être retrouvées via le nom indiqué. Les chevrons ('<' et '>') sont obligatoires pour encadrer le nom.

+ +

Ainsi, si on veut extraire la composante de zone d'un numéro de téléphone aux États-Unis, on pourra écrire /\((?<area>\d\d\d)\)/ et récupérer le nombre voulu avec matches.groups.area.

+
(?:x)Correspond à 'x' mais ne garde pas la correspondance en mémoire. Les parenthèses ne capturent pas l'expression et permettent d'utiliser des sous-expressions d'une expression régulière pour travailler plus finement. L'expression /(?:zoo){1,2}/ sans parenthèes non-capturantes les caractères {1,2} ne s'appliqueraient qu'au dernier 'o' de 'zoo'. Avec les parenthèses capturantes, {1,2} s'applique au mot entier 'zoo'.
+ +
+

Note : Firefox ne prend pas en charge les groupes nommés. Pour plus d'informations, voir le bug correspondant.

+
diff --git a/files/fr/web/javascript/guide/regular_expressions/index.html b/files/fr/web/javascript/guide/regular_expressions/index.html deleted file mode 100644 index dda529fffd..0000000000 --- a/files/fr/web/javascript/guide/regular_expressions/index.html +++ /dev/null @@ -1,746 +0,0 @@ ---- -title: Expressions rationnelles -slug: Web/JavaScript/Guide/Regular_Expressions -tags: - - Guide - - Intermédiaire - - JavaScript - - RegExp -translation_of: Web/JavaScript/Guide/Regular_Expressions -original_slug: Web/JavaScript/Guide/Expressions_régulières ---- -

{{jsSidebar("JavaScript Guide")}}{{PreviousNext("Web/JavaScript/Guide/Formatage_du_texte", "Web/JavaScript/Guide/Collections_indexées")}}

- -

Les expressions rationnelles sont des motifs utilisés pour correspondre à certaines combinaisons de caractères au sein de chaînes de caractères. En JavaScript, les expressions rationnelles sont également des objets. Ces motifs sont utilisés avec les méthodes {{jsxref("RegExp.exec", "exec")}} et {{jsxref("RegExp.test", "test")}} de {{jsxref("RegExp")}}, et avec les méthodes {{jsxref("String.match", "match")}}, {{jsxref("String.matchAll", "matchAll")}}, {{jsxref("String.replace", "replace")}}, {{jsxref("String.search", "search")}} et {{jsxref("String.split", "split")}} de {{jsxref("String")}}. Ce chapitre explique comment utiliser les expressions rationnelles en JavaScript (aussi appelées expressions régulières ou « RegExp »).

- -

Créer une expression rationnelle

- -

Il est possible de construire une expression rationnelle de deux façons :

- - - -

Écrire une expression rationnelle

- -

Le motif d'une expression rationnelle est composé de caractères simples (comme /abc/), ou de caractères simples et spéciaux, comme /ab*c/ ou /Chapitre (\d+)\.\d*/ . Le dernier exemple utilise des parenthèses qui permettent d'avoir une « mémoire ». La correspondance avec le motif contenu entre parenthèses pourra être utilisée par la suite. Ceci est décrit avec ce paragraphe.

- -

Utiliser des motifs simples

- -

Les motifs simples sont construits à partir de caractères pour lesquels on souhaite avoir une correspondance directe. Le motif /des/ correspond lorsqu'on observe exactement les caractères 'des' ensemble et dans cet ordre précis. On pourrait utiliser ce motif et détecter une correspondance dans les chaînes suivantes : "J'ai vu des licornes ?" et "Sa description de licorne était superbe" car la chaîne de caractères 'des' y est présente (dans le mot description pour le second exemple). Il n'y aura pas de correspondance avec la chaîne de caractères "Toc toc" car 'des' n'est pas présente.

- -

Utiliser des caractères spéciaux

- -

Lorsque le motif à trouver est plus complexe qu'une simple égalité (trouver tous les B, les blancs...), le motif devra contenir des caractères spéciaux. Ainsi, le motif /ab*c/ correspond à toutes les combinaisons de caractères qui possèdent un seul 'a' suivi de zéro ou plusieurs 'b' (l'astérisque utilisée ici signifie que l'élément qui la précède doit être présent zéro ou plusieurs fois) qui sont immédiatement suivis d'un 'c'. Par exemple, la chaîne de caractère "cbbabbbbcdebc" correspond au motif avec la chaîne de caractères 'abbbbc'.

- -

Les pages suivantes décrivent en détail les caractères spéciaux qui peuvent être utilisés afin de composer une expression rationnelle.

- -
-
Assertions
-
Une assertion caractérisant la façon dont la correspondance peut se produire (en recherchant un motif avant, après ou avec une expression conditionnelle).
-
Limites
-
Permet d'indiquer le début ou la fin d'une ligne ou d'un mot.
-
Classes de caractère
-
Les classes permettent de distinguer différents caractères selon différents groupes (par exemple les lettres et les chiffres).
-
Groupes et intervalles
-
Permet d'indiquer un groupe ou un intervalle de caractères.
-
Quantificateurs
-
Permet d'indiquer un nombre de caractères ou d'expressions qui doivent correspondre.
-
Propriétés Unicode
-
Permet de distinguer les caractères en fonction de leurs caractéristiques Unicode (majuscule/minuscule, symbole mathématique, ponctuation).
-
- -

Échapper des caractères

- -

SI on souhaite rechercher certains caractères dans une chaîne de caractères et que ceux-ci ont une signification spéciale lorsqu'ils font partie d'une expression rationnelle (ex. "*"), il faudra échapper ces caractères spéciaux en plaçant une barre oblique inversée (backslash "\") devant. Ainsi, si on souhaite trouver un "a" suivi d'un astérisque ("*") suivi d'un "b", on pourra composer l'expression rationnelle : /a\*b/ où la barre oblique inversée échappe l'astérisque afin de lui enlever sa signification particulière.

- -

De même si on écrit un littéral d'expression rationnelle et qu'on souhaite rechercher une barre oblique ("/") dans la chaîne cible, on pourra échapper ce caractère (sinon, il aura sa signification particulière aux expressions rationnelles et indiquera la fin du motif). Si on cherche la présence de "/exemple/" dans une chaîne de caractères, on pourra utiliser le littéral /\/exemple\//.

- -

Il en va de même avec la barre oblique inversée (dont la signification spécifique est justement l'échappement) : si on veut rechercher la chaîne "C:\", on pourra utiliser le motif /C:\\/ (la première barre oblique inversée sert à échapper la seconde).

- -

Lorsqu'on utilise le constructeur {{jsxref("RegExp")}} avec une chaîne de caractères en paramètre (plutôt qu'un littéral), il faudra échapper la barre oblique inversée qui a un sens particulier dans les chaînes de caractères. Ainsi, le littéral /a\*b/ et new RegExp("a\\*b") créeront la même expression (qui permet de chercher la lettre "a", suivie d'un astérisque, suivi de la lettre "b").

- -

La tableau qui suit fournit une liste complète des caractères spéciaux pouvant être utilisés dans les expressions régulières ainsi que leur signification.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caractères spéciaux utilisables pour les expressions rationnelles.
CaractèreSignification
\ -

Correspond selon les règles suivantes :
-
- Une barre oblique inversée (backslash) précédant un caractère non spécial indique que le caractère qui suit est spécial et qu'il ne doit pas être interprété directement. Ainsi, un 'b', sans \ avant, correspondra pour les 'b' minuscules quel que soit leur position. En revanche '\b' ne correspondra à aucun caractère mais indique un caractère de fin de mot.
-
- Un backslash précédant un caractère spécial indique que le caractère qui suit doit être interprété littéralement (et non pas comme un caractère spécial). Ainsi, le motif /a*/ utilise le caractère spécial '*' pour correspondre à 0 ou plusieurs 'a'. Le motif /a\*/, au contraire, rend '*' non-spécial pour correspondre aux chaînes de caractères qui comportent la lettre a et une astérisque, comme 'a*'.
-
- Il ne faut pas oublier d'échapper le caractère \ car lui-même est un caractère d'échappement dans les chaînes de caractères. Cela est utile lorsqu'on utilise la notation RegExp("motif").

-
^Correspond au début la séquence. Si le marqueur (flag) de lignes multiples vaut true, il correspondra également immédiatement après un caractère de saut de ligne.
-
- Ainsi, /^A/ ne correspond pas au 'A' de "un A", mais correspond au 'A' de "Arceau".
-
- Le caractère '^' possède un sens différent lorsqu'il est utilisé dans un motif d'ensemble de caractères. Voir les compléments sur les ensembles de caractères pour plus de détails et d'exemples.
$ -

Correspond à la fin de la séquence. Si le marqueur (flag) de lignes multiples vaut true, il correspondra également immédiatement avant un caractère de saut de ligne.

- -

Ainsi, /t$/ ne correspond pas au 't' de "printemps", mais correspond au 't' de "aliment".

-
* -

Correspond à l'expression précédente qui est répétée 0 ou plusieurs fois. Équivalent à {0,}

- -

Ainsi, /bo*/ correspond à 'boo' dans "Un booléen" et à 'b' dans "Un bateau bleu", mais ne correspond à rien dans "Ce matin".

-
+ -

Correspond à l'expression précédente qui est répétée une ou plusieurs fois. C'est équivalent à {1,}.

- -

Ainsi, /a+/ correspond au 'a' dans "maison" et à tous les 'a' dans "maaaaaaison" mais ne correspond à rien dans "mission".

-
?Correspond à l'expression précédente qui est présente une fois ou pas du tout. C'est équivalent à {0,1}.
-
- Ainsi, /e?le?/ correspond au 'el' dans "gel" et au 'le' dans "angle" mais aussi au 'l' dans "Oslo".
-
- S'il est utilisé immédiatement après l'un des quantificateurs : *, +, ?, ou {}, il rend le quantificateur moins « gourmand » auquel cas le moins de caractères correspond (le comportement par défaut, « gourmand », permettant de faire correspondre le plus de caractères possible). Par exemple /\d+/ utilisée avec "123abc" fait correspondre "123". Utiliser /\d+?/ à la même chaîne de caractères fait correspondre "1".
-
- Ce symbole est également utilisé dans les tests de présence autour de l'expression, décrits par les lignes x(?=y) et x(?!y) de ce tableau.
. -

Par défaut, (Le point) correspond à n'importe quel caractère excepté un caractère de saut de ligne.

- -

Ainsi, /.n/ correspond à 'un' et 'en' dans "Un baobab nain en cours de croissance" mais pas à 'nain'.

- -

Si le marqueur s (dotAll) est utilisé, le point correspondra également aux caractères de saut de ligne.

-
(x) -

Correspond à 'x' et garde la correspondance en mémoire. Les parenthèses permettent de capturer l'expression dans un « groupe ».
-
- Les '(toto)' et '(truc)', dans le motif /(toto) (truc) \1 \2/ correspondent et gardent en mémoire les deux premiers mots de la chaîne de caractère "toto truc toto truc". Les \1 et \2 du motif correspondent respectivement à la première et à la deuxième correspondances pour les sous-chaînes entre parenthèses. Lorsqu'on souhaite effectuer un remplacement, on utilisera $1 et $2 pour faire référence au premier et second groupe et $n pour faire référence au n-ième groupe capturé (ex. ('toto truc'.replace(/(...) (...)/, '$2 $1'). $& fera référence à la chaîne entière).

-
(?:x)Correspond à 'x' mais ne garde pas la correspondance en mémoire. Les parenthèses ne capturent pas l'expression et permettent d'utiliser des sous-expressions d'une expression régulière pour travailler plus finement. L'expression /(?:zoo){1,2}/ sans parenthèses non-capturantes les caractères {1,2} ne s'appliqueraient qu'au dernier 'o' de 'zoo'. Avec les parenthèses capturantes, {1,2} s'applique au mot entier 'zoo'. Pour plus d'informations, voir Utiliser les parenthèses ci-après.
x(?=y) -

Correspond à 'x' seulement s'il est suivi de 'y'. On appelle cela un test de succession (lookahead).

- -

Ainsi, /Jack(?=Sparrow)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow'. /Jack(?=Sparrow|Bauer)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow' ou de 'Bauer'. Cependant, ni 'Sparrow' ni 'Bauer' ne feront partie de la correspondance.

-
x(?!y) -

Correspond à 'x' seulement si 'x' n'est pas suivi de 'y'.

- -

Ainsi, /\d+(?!\.)/ correspond à un nombre qui n'est pas suivi par un point, cette expression utilisée avec la chaîne 3.141 correspondra pour '141' mais pas pour '3.141'.

-
(?<=y)x -

Correspond à x seulement si x est précédé par y. C'est ce qu'on appelle une recherche arrière (lookbehind).

- -

Ainsi /(?<=Jack)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack".
- /(?<=Jack|Tom)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack" ou "Tom".
- Toutefois, "Jack" et "Tom" ne feront pas partie de la correspondance.

-
(?<!y)x -

Correspond à x uniquement si x n'est pas précédé par y (parfois appelée en anglais negated lookbehind).

- -

Ainsi, /(?<!-)\d+/ correspondra à un nombre seulement si celui-ci n'est pas précédé d'un signe moins.
- /(?<!-)\d+/.exec('3') cible "3".
- /(?<!-)\d+/.exec('-3') ne trouve aucune correspondance car le nombre est précédé d'un signe.

-
x|y -

Correspond à 'x' ou 'y'.

- -

Ainsi, /vert|rouge/ correspond à 'vert' dans "feu vert" et à 'rouge' dans "feu rouge".

-
{n}Correspond pour exactement n occurences de l'expression précédente. N doit être un entier positif.
-
- Ainsi, /a{2}/ ne correspond pas au 'a' de "Mozilla" mais correspond à tous les 'a' de "Mozilaa" et aux deux premiers 'a' de "Mozillaaa".
{n,} -

Correspond lorsqu'il y a au moins n occurences de l'expression précédente. n doit être un entier positif.

- -

Par exemple /a{2,}/ correspondra à "aa" ou à "aaa" ou encore à "aaaa" mais pas à "a".

-
{n,m} -

Lorsque n et m sont des entiers positifs, cela correspond à au moins n occurences de l'expression précédente et à au plus m occurrences. Lorsque m n'est pas utilisé, la valeur par défaut correspondante sera l'infini.

- -

Ainsi, /a{1,3}/ ne correspond à rien dans "Mozill", au 'a' de "Mozilla", au deux premiers 'a' de "Mozillaa" et au trois premiers 'a' de "Mozillaaaaa". Pour ce dernier exemple, on doit noter que le correspondance ne se fait que sur "aaa" bien qu'il y ait plus de 'a' dans la chaîne de caractères.

-
[xyz]Un ensemble de caractère. Ce type de motif correspond pour n'importe quel caractètre présent entre les crochets, y compris les séquences d'échappement. Les caractères spéciaux comme le point (.) et l'astérisque ne sont pas considérés comme spéciaux au sein d'un ensemble et n'ont donc pas besoin d'être échappés. Il est possible de donner un ensemble sur un intervalle de caractères en utilisant un tiret (-), comme le montre l'exemple qui suit.
-
- Le motif [a-d], aura les mêmes correspondances que [abcd], correspondant au 'b' de "bulle" et au 'c' de "ciel". Les motifis /[a-z.]+/ et /[\w.]+/ correspondront pour la chaîne entirère : "Adre.ss.e".
[^xyz] -

Exclusion d'un ensemble de caractères. Cela correspond à tout ce qui n'est pas compris entre crochets. Il est possible de fournir un intervalle de caractères en utilisant un tiret (-). Les autres règles qui s'appliquent pour l'ensemble de caractères (ci-avant) s'appliquent également ici.

- -

Par exemple, [^abc] est équivalent à [^a-c]. Ils correspondent à 'u' dans "bulle" et à 'i' dans "ciel".

-
[\b]Correspond pour un retour arrière (U+0008). (À ne pas confondre avec \b.)
\b -

Correspond à la position d'uneAfter the limite de mot. Une limite de mot correspond à la position où un caractère d'un mot n'est pas suivi ou précédé d'un autre caractère de mot. Il faut savoir que la limite correspondante n'est pas incluse dans le résultat. Autrement dit, la longueur d'une telle correspondance est nulle. (À ne pas confondre avec [\b].)

- -

Exemples :
- /\bm/ correspond au 'm' dans "mignon" ;
- /no\b/ ne correspond pas au 'no' de "mignon" car 'no' est suivi de 'n' qui n'est pas un caractère de limite de mot;
- /non\b/ correspond au 'non' de "mignon" car 'non' représente la fin de la chaîne de caractère et n'est donc pas suivi par un caractère de mot.
- /\w\b\w/ ne correspondra jamais à quoi que ce soit car un caractère de mot ne peut pas être suivi à la fois par un caractère de mot et un caractère n'étant pas un caractère de mot.

- -
-

Note : Le moteur d'expressions rationnelles JavaScript définit un ensemble de caractères spécifiques qui doivent être considérés comme des caractères de mot. Tout caractère qui n'est pas dans cet ensemble est considéré comme une limite de mot. Cet ensemble de caractères est relativement limité car constitué uniquement des caractères de l'alphabet romain en minuscules et en majuscules, des chiffres décimaux et du tiret-bas (underscore). Les autres caractères, comme les caractères accentués (é ou ü par exemple), sont donc considérés comme des limites de mots.

-
-
\B -

Correspond à une "non-limite de mot". Cela correspond pour les cas suivants :

- -
    -
  • Avant le premier caractère d'une chaîne de caractères
  • -
  • Après le dernier caractère d'une chaîne de caractères
  • -
  • Entre deux caractères de mot
  • -
  • Entre deux caractères qui ne sont pas des caractères de mot
  • -
  • Avec la chaîne vide.
  • -
- -

Ainsi, /\B../ correspond au 'oo' de "football" (et /e\B./ correspond au 'er' dans "une mer "

-
\cX -

Étant donné un caractère X compris entre A et Z, cela correspond au caractère de contrôle dans une chaîne de caractères.

- -

Ainsi, /\cM/ correspond au caractère de contrôle M (U+000D) d'une chaîne de caractère.

-
\d -

Correspond à un chiffre et est équivalent à [0-9].

- -

Ainsi, /\d/ ou /[0-9]/ correspond à '2' dans "H2O est la molécule de l'eau".

-
\D -

Correspond à tout caractère qui n'est pas un chiffre et est équivalent à [^0-9].

- -

Ainsi, /\D/ ou /[^0-9]/ correspond à 'H' dans "H2O est la molécule de l'eau".

-
\fCorrespond à un saut de page (U+000C).
\nCorrespond à un saut de ligne (U+000A).
\rCorrespond à un retour chariot (U+000D).
\s -

Correspond à un blanc (cela comprend les espace, tabulation, saut de ligne ou saut de page). C'est équivalent à [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

- -

Ainsi, /\s\w*/ correspond à ' toto' dans "truc toto".

-
\S -

Correspond à un caractère qui n'est pas un blanc. C'est équivalent à [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

- -

Ainsi, /\S\w*/ correspond à 'truc' dans "truc toto".

-
\tCorrespond à une tabulation (U+0009).
\vCorrespond à une tabulation verticale (U+000B).
\w -

Correspond à n'importe quel caractère alphanumérique, y compris le tiret bas. C'est équivalent à [A-Za-z0-9_].

- -

Ainsi, /\w/ correspond à 'l' dans "licorne", à '5' dans "5,28€", et à '3' dans "3D."

-
\W -

Correspond à n'importe quel caractère n'étant pas un caractère de mot. Cela est équivalent à [^A-Za-z0-9_].

- -

Ainsi, /\W/ ou /[^A-Za-z0-9_]/ correspond à '%' dans "50%."

-
\n -

Soit n un entier strictement positif, cela fait référence au groupe de la n-ième expression entre parenthèses (en comptant les parenthèses ouvrantes).

- -

Ainsi, /pomme(,)\spoire\1/ correspond à 'pomme, poire,' dans "pomme, poire, cerise, pêche".

-
\0Correspond au caractère NULL (U+0000). Il ne doit pas être suivi d'un autre chiffre car \0<chiffres> est une séquence d'échappement pour les nombres en notation octale (si besoin d'utiliser un chiffre ensuite, on pourra utiliser la forme \x00, cf. ci-après).
\xhhCorrespond au caractère dont le code hexadécimal est hh (deux chiffres hexadécimaux).
\uhhhhCorrespond au caractère dont le code est hhhh (quatre chiffres hexadécimaux).
\u{hhhh}(Uniquement actif quand le marqueur u est activé) Correspond au caractère dont la valeur Unicode est hhhh (en chiffre hexadécimaux).
- -

Afin d'échapper les informations saisies par l'utilisateur et de traîter les chaînes de caractères pour les utiliser au sein d'un expression régulière correspondante, il est possible d'utiliser le remplacement suivant :

- -
function escapeRegExp(string){
-  // $& correspond à la chaîne correspondante
-  // dans son intégralité
-  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
-}
- -

Le marqueur g situé en fin d'expression permet d'effectuer une recherche globale, qui parcoure toute la chaîne et renvoie l'ensemble des correspondances trouvées (voir Utiliser les marqueurs ci-après).

- -
-

Note : Voir la page sur la méthode String.replace pour plus d'informations.

-
- -

Utiliser les parenthèses

- -

Les parenthèses encadrant une partie du motif de l'expression régulière peuvent être utilisées pour garder en mémoire les correspondances. Cela pourra être utile pour réutiliser la correspondance trouvée.

- -

Ainsi, le motif /Chapitre (\d+)\.\d*/ utilise des caractères échappés et spéciaux et indique une partie du motif à garder en mémoire. Ce motif correspond aux caractères 'Chapitre ' suivi par un ou plusieurs caractères numériques (\d correspond à un chiffre et + indiquant que une série de 1 ou plusieurs chiffres), suivis par un point (qu'il est nécessaire d'échapper car c'est un caractère spécial, on utilise donc '\' pour indiquer qu'on souhaite reconnaître le caractère '.'), suivi par 0 ou plusieurs chiffres (\d correspondant à un chiffre et l'astérisque indiquant que le caractère est présent 0 ou plusieurs fois). Les parenthèses sont utilisées pour garder en mémoire les premiers chiffres correspondant.

- -

Ce motif est trouvé dans "Ouvrir le Chapitre 4.3 au paragraphe 6" et le chiffre '4' est gardé en mémoire. Le motif n'est pas trouvé dans  "Chapitre 3 et 4", car la chaîne de caractères ne comporte pas de point après le '3'.

- -

Pour qu'une partie de la chaîne de caractère corresponde mais que la correspondance ne soit pas gardée en mémoire, on pourra utiliser ?:. Ainsi, (?:\d+) correspondra pour une séquence de chiffres (1 ou plusieurs chiffres) mais on ne gardera pas en mémoire les caractères correspondants.

- -

Utiliser les expressions rationnelles

- -

Les expresssions régulières sont utilisées avec les méthodes test et exec de l'objet RegExp et avec les méthodes match, replace, search, et split de l'objet String. Ces méthodes sont expliquées en détail dans la Référence JavaScript.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Méthodes utilisant les expressions régulières
MéthodeDescription
{{jsxref("RegExp.exec", "exec")}}Une méthode de l'objet RegExp qui exécute une recherche de correspondance dans une chaîne de caractères. Elle renvoie un tableau d'informations ou null lorsqu'il n'y a pas de correspondance.
{{jsxref("RegExp.test", "test")}}Une méthode de l'objet RegExp testant la présence d'une correspondance dans une chaîne de caractères. Elle renvoie true ou false.
{{jsxref("String.match", "match")}}Une méthode de l'objet String qui exécute une recherche de correspondance dans une chaîne de caractères. Elle renvoie un tableau d'informations ou null lorsqu'il n'y a pas de correspondance.
{{jsxref("String.matchAll", "matchAll")}}Une méthode de l'objet String qui renvoie un itérateur contenant l'ensemble des correspondances, y compris les groupes capturants.
{{jsxref("String.search", "search")}}Une méthode de l'objet String qui teste la présence d'une correspondance dans une chaîne de correspondance. Elle renvoie la position de la correspondance ou -1 s'il n'y en a pas.
{{jsxref("String.replace", "replace")}}Une méthode de l'objet String qui recherche une correspondance dans une chaîne de caractères et qui remplace la correspondance par une chaîne de substitution.
{{jsxref("String.split", "split")}}Une méthode de l'objet String qui utilise une expression régulière ou une chaîne de caractères pour découper une chaîne de caractères en un tableau comprenant les fragments résultants.
- -

Pour savoir si un motif est présent au sein d'une chaîne de caractères, utiliser les méthodes test ou search. Pour obtenir plus d'informations (moins rapidement) on utilisera les méthodes exec ou match. Si on utilise exec ou match et qu'une correspondance est trouvée, ces méthodes renverront un tableau et mettront à jour des propriétés de l'objet global RegExp et aussi de l'instance de RegExp associée à l'expression rationnelle. Si aucune correspondance n'est trouvée, la méthode exec renverra null (qui est automatiquement converti à false lors d'un test conditionnel).

- -

Dans l'exemple qui suit, le script utilise la méthode exec pour trouver une correspondance dans une chaîne de caractères.

- -
var monExpressionReguliere = /d(b+)d/g;
-var monTableau = monExpressionReguliere.exec("cdbbdbsbz");
-
- -

S'il n'est pas nécessaire d'accéder aux propriétés de l'expression régulière, une autre façon de récupérer monTableau peut être :

- -
var monTableau = /d(b+)d/g.exec("cdbbdbsbz");
-// équivalent à "cdbbdbsbz".match(/d(b+)d/g);
-
- -

Si on souhaite construire une expression régulière à partir d'une chaîne de caractères, on peut utiliser le script suivant :

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

Avec ces scripts, on obtient bien une correspondance, la méthode renvoie un tableau et met à jour les propriétés listées dans le tableau qui suit.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Résultats dûs à l'exécution d'une expression rationnelle.
ObjetPropriété ou indiceDescriptionPour cet exemple
monTableauLa chaîne de caractères correspondante et les fragments de chaînes gardés en mémoire.["dbbd", "bb"]
indexL'indice (débute à partir de 0) de la correspondance, compté dans la chaîne de caractère initiale.1
inputLa chaîne de caractères initiale."cdbbdbsbz"
[0]Les derniers caractères qui correspondent."dbbd"
monExpressionRégulièrelastIndexL'indice auquel débuter la prochaine correspondance. (Cette propriété n'est utilisée que si l'expression régulière utilise l'option g, décrite dans « Effectuer des recherches avancées avec les marqueurs ».5
sourceLe texte du motif, mis à jour à la création de l'expression régulière mais pas lors de son exécution."d(b+)d"
- -

Comme le montre la seconde formulation de cet exemple, il est possible d'utiliser une expression rationnelle, créée avec un objet initialisé sans l'affecter à une variable. Cela implique qu'à chaque utilisation, on aura une nouvelle expression régulière distincte et qu'on ne pourra pas, pour cette raison, accéder aux propriétés de l'expression régulière. Avec le script suivant :

- -
var monExpressionReguliere = /d(b+)d/g;
-var monTableau = monExpressionReguliere.exec("cdbbdbsbz");
-console.log("La valeur de lastIndex est " + monExpressionReguliere.lastIndex);
-
-// "La valeur de lastIndex est 5"
-
- -

Si le script utilisé est :

- -
var monTableau = /d(b+)d/g.exec("cdbbdbsbz");
-console.log("La valeur de lastIndex est " + /d(b+)d/g.lastIndex);
-
-// "La valeur de lastIndex est 0"
-
- -

Les occurences de /d(b+)d/g dans les deux instructions sont des objets différents. Leurs propriétés lastIndex respectives ont donc des valeurs différentes. Quand il est nécessaire d'accéder aux propriétés d'un objet décrivant une expression rationnelle, il faudra d'abord l'affecter à une variable.

- -

Utiliser les correspondances de groupes avec les parenthèses

- -

Les parenthèses, utilisées dans un motif d'expression régulière, permettent de garder en mémoire un groupe (ou fragment) d'une correspondance. Ainsi, /a(b)c/ correspond aux caractères 'abc' et garde 'b' en mémoire. Pour récupérer ces fragments mémorisés, on peut utiliser les éléments du tableau array [1], ..., [n].

- -

Le nombre de fragments qu'il est possible de garder entre parenthèses n'est pas limité. Le tableau renvoyé contiendra tout ce qui aura été trouvé. Les exemples qui suivent montrent comment utiliser cette syntaxe.

- -

Le script qui suit utilise la méthode {{jsxref("String.replace", "replace()")}} pour échanger les mots d'une chaîne de caractères. Pour remplacer le texte, le script utilise $1 et $2 qui correspondent au premier et deuxième groupe correspondant.

- -
var re = /(\w+)\s(\w+)/;
-var str = "Titi toto";
-var newstr = str.replace(re, "$2, $1");
-console.log(newstr);
-
- -

Cela affichera "toto, Titi".

- -

Effectuer des recherches avancées en utilisant les marqueurs (flags)

- -

Les expressions rationnelles peuvent être utilisées avec des marqueurs optionnels permettant des recherches globales et/ou ne respectant pas la casse. Ces marqueurs peuvent être utilisés séparement ou ensemble, quel que soit l'ordre. Ils font partie de l'expression régulière.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Drapeaux utilisés avec les expressions régulières.
Drapeau (Flag)Description
gRecherche globale
iRecherche ne respectant pas la casse
mRecherche sur plusieurs lignes
sLe point peut correspondre aux caractères de saut de ligne.
uUnicode. Le motif de recherche est interprété comme une séquence de codets Unicode.
yEffectue une recherche qui « adhère », en partant de la position courante de la chaîne de caractères sur laquelle la recherche est effectuée. Voir la page sur {{jsxref("RegExp.sticky","sticky")}}.
- -

Pour utiliser un marqueur avec une expression régulière, on utilisera la syntaxe suivante :

- -
var re = /motif/marqueurs;
-
- -

ou

- -
var re = new RegExp("motif", "marqueurs");
-
- -

Les marqueurs font partie intégrante d'une expression régulière, ils ne peuvent pas être ajoutés ou supprimés ensuite.

- -

Ainsi, re = /\w+\s/g permet de créer une expression régulière pour trouver un ou plusieurs caractères suivis d'un espace, la recherche est effectuée globalement, sur toute la chaîne de caractères.

- -
var re = /\w+\s/g;
-var str = "un deux trois quatre";
-var monTableau = str.match(re);
-console.log(monTableau);
-
- -

Cela affichera ["un ", "deux ", "trois "]. On pourrait remplacer la ligne :

- -
var re = /\w+\s/g;
-
- -

avec la ligne :

- -
var re = new RegExp("\\w+\\s", "g");
-
- -

pour obtenir le même résultat.

- -

Le comportement du marqueur 'g' est différent selon qu'il est utilisé avec exec() ou avec match(). Pour match(), c'est la chaîne de caractères qui invoque la méthode et l'expression rationnelle est alors un argument. Pour exec(), c'est l'expression rationnelle qui invoque la méthode et c'est la chaîne de caractères qui est passée en argument. Dans l'appel à exec(), le marqueur 'g' permet d'avoir une progression itérative.

- -

Le marqueur m pourra être utilisé pour traiter une chaîne de caractères de plusieurs lignes comme plusieurs lignes distinctes. Si ce marqueur est utilisé, les caractères spéciaux ^ et $ correspondront au début ou à la fin de n'importe quelle ligne appartenant à la chaîne de caractères au lieu de correspondre simplement au début ou à la fin de la chaîne.

- -

Exemples

- -

Les exemples qui suivent utilisent les expressions régulières dans différents cas.

- -

Changer l'ordre d'une saisie

- -

L'exemple qui suit utilise les expressions régulières et string.split() et string.replace(). Le script nettoie la chaîne de caractères saisie qui contient des noms (prénom puis nom) séparés par des blancs, tabulations et points-virgules. Enfin il inverse les noms et prénoms puis trie la liste.

- -
// La chaîne des noms contient plusieurs blancs et tabulations,
-// il peut y avoir plusieurs espaces entre le nom et le prénom.
-var noms = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
-
-var output = ["---------- Chaîne originale\n", noms + "\n"];
-
-// Préparer deux expressions régulières pour stocker un tableau.
-// et découper les chaînes dans ce tableau.
-
-// motif: on peut avoir des blancs, un point virgule puis d'autres blancs
-var motif = /\s*;\s*/;
-
-// Découper la chaîne de caractères en morceaux séparés par le précédent motif
-// Stocker ces morceaux dans un tableau listeNoms
-var listeNoms = noms.split(motif);
-
-// nouveau motif : un ou plusieurs caractères, des blancs puis des caractères.
-// On utilise des parenthèses pour garder en mémoire les groupes du motif.
-// On utilisera ces groupes par la suite.
-motif = /(\w+)\s+(\w+)/;
-
-// Nouveau tableau pour enregistrer les noms traités.
-var listeParNomFamille = [];
-
-// Afficher le tableau des noms et remplir le nouveau tableau
-// avec les noms et prénoms séparés par des virgules, le nom
-// de famille étant écrit en premier
-//
-// La méthode replace supprime tout ce qui correspond au motif
-// et le remplace par le nom (mémorisé), une virgule, un espace
-// et le prénom (mémorisé).
-//
-// Les variables $1 et $2 font références aux fragments gardés
-// en mémoire lors de l'utilisation du motif.
-
-output.push("---------- Après découpage avec l'expression régulière");
-
-var i, len;
-for (i = 0, len = listeNoms.length; i < len; i++){
-  output.push(listeNoms[i]);
-  listeParNomFamille[i] = listeNoms[i].replace(motif, "$2, $1");
-}
-
-// Afficher le nouveau tableau
-output.push("---------- Noms et prénoms inversés");
-for (i = 0, len = listeParNomFamille.length; i < len; i++){
-  output.push(listeParNomFamille[i]);
-}
-
-// Trier par le nom de famille puis afficher le tableau trié
-listeParNomFamille.sort();
-output.push("---------- Triée");
-for (i = 0, len = listeParNomFamille.length; i < len; i++){
-  output.push(listeParNomFamille[i]);
-}
-
-output.push("---------- Fin");
-
-console.log(output.join("\n"));
-
- -

Utiliser les caractères spéciaux pour vérifier la saisie

- -

Dans l'exemple suivant, on s'attend à ce que l'utilisateur saisissent un numéro de téléphone. Quand l'utilisateur appuie sur le bouton "Vérifier", le script vérifie la validité du numéro. Si le numéro est valide (il correspond à la séquence de caractères fournie par l'expression régulière), le script affiche un message remerciant l'utilisateur et confirmant le numéro. S'il est invalide, le script informe l'utilisateur et lui signifie que les informations saisies ne sont pas valides.

- -

Dans les parenthèses sans mémoire (?: , l'expression régulière cherche les deux premiers chiffres ou l'indicatif du pays suivi d'un blanc et du premier chiffre, ce qui correspond à

- -
\d{2}|\+\d{2}[ ]\d
- -

Cette partie signifie : deux chiffres OU un signe '+' suivi de deux chiffres, un blanc et un autre chiffre.

- -

Ensuite, on a un groupe qui est mémorisé (entre parenthèses) :

- -
([- ])
- -

Ce groupe correspond à ce qui va être utilisé pour séparer les différentes composantes du numéro de téléphone.

- -

Ensuite,

- -
\d{2}\1
- -

signifie qu'on a deux chiffres suivi du premier groupe qui est celui qui définit le séparateur. Le reste est composé de la même façon. Ainsi les numéros de téléphone +33 1 23 45 67 89 et 01 23 45 67 89 seront tous les deux valides.

- -

L'événement Change, provoqué quand l'utilisateur appuie sur Entrée, renseigne la valeur RegExp.input.

- -
<!DOCTYPE html>
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-    <meta http-equiv="Content-Script-Type" content="text/javascript">
-    <script type="text/javascript">
-      var re = /(?:\d{2}|\+\d{2}[ ]\d)([- ])\d{2}\1\d{2}\1\d{2}\1\d{2}/;
-      function testInfo(phoneInput){
-        var OK = re.exec(phoneInput.value);
-        if (!OK)
-          window.alert(phone.input + " n'est pas un numéro de téléphone valide!");
-        else
-          window.alert("Merci, votre numéro est : " + OK[0]);
-      }
-    </script>
-  </head>
-  <body>
-    <p>Saisissez votre numéro de téléphone (avec indicatif) puis cliquez sur "Vérifier".
-        <br>Le format attendu est ## ## ## ## ## ou +## # ## ## ## ##.</p>
-    <form action="#">
-      <input id="phone"><button onclick="testInfo(document.getElementById('phone'));">Vérifier</button>
-    </form>
-  </body>
-</html>
-
- -

{{PreviousNext("Web/JavaScript/Guide/Formatage_du_texte", "Web/JavaScript/Guide/Collections_indexées")}}

diff --git a/files/fr/web/javascript/guide/regular_expressions/index.md b/files/fr/web/javascript/guide/regular_expressions/index.md new file mode 100644 index 0000000000..dda529fffd --- /dev/null +++ b/files/fr/web/javascript/guide/regular_expressions/index.md @@ -0,0 +1,746 @@ +--- +title: Expressions rationnelles +slug: Web/JavaScript/Guide/Regular_Expressions +tags: + - Guide + - Intermédiaire + - JavaScript + - RegExp +translation_of: Web/JavaScript/Guide/Regular_Expressions +original_slug: Web/JavaScript/Guide/Expressions_régulières +--- +

{{jsSidebar("JavaScript Guide")}}{{PreviousNext("Web/JavaScript/Guide/Formatage_du_texte", "Web/JavaScript/Guide/Collections_indexées")}}

+ +

Les expressions rationnelles sont des motifs utilisés pour correspondre à certaines combinaisons de caractères au sein de chaînes de caractères. En JavaScript, les expressions rationnelles sont également des objets. Ces motifs sont utilisés avec les méthodes {{jsxref("RegExp.exec", "exec")}} et {{jsxref("RegExp.test", "test")}} de {{jsxref("RegExp")}}, et avec les méthodes {{jsxref("String.match", "match")}}, {{jsxref("String.matchAll", "matchAll")}}, {{jsxref("String.replace", "replace")}}, {{jsxref("String.search", "search")}} et {{jsxref("String.split", "split")}} de {{jsxref("String")}}. Ce chapitre explique comment utiliser les expressions rationnelles en JavaScript (aussi appelées expressions régulières ou « RegExp »).

+ +

Créer une expression rationnelle

+ +

Il est possible de construire une expression rationnelle de deux façons :

+ + + +

Écrire une expression rationnelle

+ +

Le motif d'une expression rationnelle est composé de caractères simples (comme /abc/), ou de caractères simples et spéciaux, comme /ab*c/ ou /Chapitre (\d+)\.\d*/ . Le dernier exemple utilise des parenthèses qui permettent d'avoir une « mémoire ». La correspondance avec le motif contenu entre parenthèses pourra être utilisée par la suite. Ceci est décrit avec ce paragraphe.

+ +

Utiliser des motifs simples

+ +

Les motifs simples sont construits à partir de caractères pour lesquels on souhaite avoir une correspondance directe. Le motif /des/ correspond lorsqu'on observe exactement les caractères 'des' ensemble et dans cet ordre précis. On pourrait utiliser ce motif et détecter une correspondance dans les chaînes suivantes : "J'ai vu des licornes ?" et "Sa description de licorne était superbe" car la chaîne de caractères 'des' y est présente (dans le mot description pour le second exemple). Il n'y aura pas de correspondance avec la chaîne de caractères "Toc toc" car 'des' n'est pas présente.

+ +

Utiliser des caractères spéciaux

+ +

Lorsque le motif à trouver est plus complexe qu'une simple égalité (trouver tous les B, les blancs...), le motif devra contenir des caractères spéciaux. Ainsi, le motif /ab*c/ correspond à toutes les combinaisons de caractères qui possèdent un seul 'a' suivi de zéro ou plusieurs 'b' (l'astérisque utilisée ici signifie que l'élément qui la précède doit être présent zéro ou plusieurs fois) qui sont immédiatement suivis d'un 'c'. Par exemple, la chaîne de caractère "cbbabbbbcdebc" correspond au motif avec la chaîne de caractères 'abbbbc'.

+ +

Les pages suivantes décrivent en détail les caractères spéciaux qui peuvent être utilisés afin de composer une expression rationnelle.

+ +
+
Assertions
+
Une assertion caractérisant la façon dont la correspondance peut se produire (en recherchant un motif avant, après ou avec une expression conditionnelle).
+
Limites
+
Permet d'indiquer le début ou la fin d'une ligne ou d'un mot.
+
Classes de caractère
+
Les classes permettent de distinguer différents caractères selon différents groupes (par exemple les lettres et les chiffres).
+
Groupes et intervalles
+
Permet d'indiquer un groupe ou un intervalle de caractères.
+
Quantificateurs
+
Permet d'indiquer un nombre de caractères ou d'expressions qui doivent correspondre.
+
Propriétés Unicode
+
Permet de distinguer les caractères en fonction de leurs caractéristiques Unicode (majuscule/minuscule, symbole mathématique, ponctuation).
+
+ +

Échapper des caractères

+ +

SI on souhaite rechercher certains caractères dans une chaîne de caractères et que ceux-ci ont une signification spéciale lorsqu'ils font partie d'une expression rationnelle (ex. "*"), il faudra échapper ces caractères spéciaux en plaçant une barre oblique inversée (backslash "\") devant. Ainsi, si on souhaite trouver un "a" suivi d'un astérisque ("*") suivi d'un "b", on pourra composer l'expression rationnelle : /a\*b/ où la barre oblique inversée échappe l'astérisque afin de lui enlever sa signification particulière.

+ +

De même si on écrit un littéral d'expression rationnelle et qu'on souhaite rechercher une barre oblique ("/") dans la chaîne cible, on pourra échapper ce caractère (sinon, il aura sa signification particulière aux expressions rationnelles et indiquera la fin du motif). Si on cherche la présence de "/exemple/" dans une chaîne de caractères, on pourra utiliser le littéral /\/exemple\//.

+ +

Il en va de même avec la barre oblique inversée (dont la signification spécifique est justement l'échappement) : si on veut rechercher la chaîne "C:\", on pourra utiliser le motif /C:\\/ (la première barre oblique inversée sert à échapper la seconde).

+ +

Lorsqu'on utilise le constructeur {{jsxref("RegExp")}} avec une chaîne de caractères en paramètre (plutôt qu'un littéral), il faudra échapper la barre oblique inversée qui a un sens particulier dans les chaînes de caractères. Ainsi, le littéral /a\*b/ et new RegExp("a\\*b") créeront la même expression (qui permet de chercher la lettre "a", suivie d'un astérisque, suivi de la lettre "b").

+ +

La tableau qui suit fournit une liste complète des caractères spéciaux pouvant être utilisés dans les expressions régulières ainsi que leur signification.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caractères spéciaux utilisables pour les expressions rationnelles.
CaractèreSignification
\ +

Correspond selon les règles suivantes :
+
+ Une barre oblique inversée (backslash) précédant un caractère non spécial indique que le caractère qui suit est spécial et qu'il ne doit pas être interprété directement. Ainsi, un 'b', sans \ avant, correspondra pour les 'b' minuscules quel que soit leur position. En revanche '\b' ne correspondra à aucun caractère mais indique un caractère de fin de mot.
+
+ Un backslash précédant un caractère spécial indique que le caractère qui suit doit être interprété littéralement (et non pas comme un caractère spécial). Ainsi, le motif /a*/ utilise le caractère spécial '*' pour correspondre à 0 ou plusieurs 'a'. Le motif /a\*/, au contraire, rend '*' non-spécial pour correspondre aux chaînes de caractères qui comportent la lettre a et une astérisque, comme 'a*'.
+
+ Il ne faut pas oublier d'échapper le caractère \ car lui-même est un caractère d'échappement dans les chaînes de caractères. Cela est utile lorsqu'on utilise la notation RegExp("motif").

+
^Correspond au début la séquence. Si le marqueur (flag) de lignes multiples vaut true, il correspondra également immédiatement après un caractère de saut de ligne.
+
+ Ainsi, /^A/ ne correspond pas au 'A' de "un A", mais correspond au 'A' de "Arceau".
+
+ Le caractère '^' possède un sens différent lorsqu'il est utilisé dans un motif d'ensemble de caractères. Voir les compléments sur les ensembles de caractères pour plus de détails et d'exemples.
$ +

Correspond à la fin de la séquence. Si le marqueur (flag) de lignes multiples vaut true, il correspondra également immédiatement avant un caractère de saut de ligne.

+ +

Ainsi, /t$/ ne correspond pas au 't' de "printemps", mais correspond au 't' de "aliment".

+
* +

Correspond à l'expression précédente qui est répétée 0 ou plusieurs fois. Équivalent à {0,}

+ +

Ainsi, /bo*/ correspond à 'boo' dans "Un booléen" et à 'b' dans "Un bateau bleu", mais ne correspond à rien dans "Ce matin".

+
+ +

Correspond à l'expression précédente qui est répétée une ou plusieurs fois. C'est équivalent à {1,}.

+ +

Ainsi, /a+/ correspond au 'a' dans "maison" et à tous les 'a' dans "maaaaaaison" mais ne correspond à rien dans "mission".

+
?Correspond à l'expression précédente qui est présente une fois ou pas du tout. C'est équivalent à {0,1}.
+
+ Ainsi, /e?le?/ correspond au 'el' dans "gel" et au 'le' dans "angle" mais aussi au 'l' dans "Oslo".
+
+ S'il est utilisé immédiatement après l'un des quantificateurs : *, +, ?, ou {}, il rend le quantificateur moins « gourmand » auquel cas le moins de caractères correspond (le comportement par défaut, « gourmand », permettant de faire correspondre le plus de caractères possible). Par exemple /\d+/ utilisée avec "123abc" fait correspondre "123". Utiliser /\d+?/ à la même chaîne de caractères fait correspondre "1".
+
+ Ce symbole est également utilisé dans les tests de présence autour de l'expression, décrits par les lignes x(?=y) et x(?!y) de ce tableau.
. +

Par défaut, (Le point) correspond à n'importe quel caractère excepté un caractère de saut de ligne.

+ +

Ainsi, /.n/ correspond à 'un' et 'en' dans "Un baobab nain en cours de croissance" mais pas à 'nain'.

+ +

Si le marqueur s (dotAll) est utilisé, le point correspondra également aux caractères de saut de ligne.

+
(x) +

Correspond à 'x' et garde la correspondance en mémoire. Les parenthèses permettent de capturer l'expression dans un « groupe ».
+
+ Les '(toto)' et '(truc)', dans le motif /(toto) (truc) \1 \2/ correspondent et gardent en mémoire les deux premiers mots de la chaîne de caractère "toto truc toto truc". Les \1 et \2 du motif correspondent respectivement à la première et à la deuxième correspondances pour les sous-chaînes entre parenthèses. Lorsqu'on souhaite effectuer un remplacement, on utilisera $1 et $2 pour faire référence au premier et second groupe et $n pour faire référence au n-ième groupe capturé (ex. ('toto truc'.replace(/(...) (...)/, '$2 $1'). $& fera référence à la chaîne entière).

+
(?:x)Correspond à 'x' mais ne garde pas la correspondance en mémoire. Les parenthèses ne capturent pas l'expression et permettent d'utiliser des sous-expressions d'une expression régulière pour travailler plus finement. L'expression /(?:zoo){1,2}/ sans parenthèses non-capturantes les caractères {1,2} ne s'appliqueraient qu'au dernier 'o' de 'zoo'. Avec les parenthèses capturantes, {1,2} s'applique au mot entier 'zoo'. Pour plus d'informations, voir Utiliser les parenthèses ci-après.
x(?=y) +

Correspond à 'x' seulement s'il est suivi de 'y'. On appelle cela un test de succession (lookahead).

+ +

Ainsi, /Jack(?=Sparrow)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow'. /Jack(?=Sparrow|Bauer)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow' ou de 'Bauer'. Cependant, ni 'Sparrow' ni 'Bauer' ne feront partie de la correspondance.

+
x(?!y) +

Correspond à 'x' seulement si 'x' n'est pas suivi de 'y'.

+ +

Ainsi, /\d+(?!\.)/ correspond à un nombre qui n'est pas suivi par un point, cette expression utilisée avec la chaîne 3.141 correspondra pour '141' mais pas pour '3.141'.

+
(?<=y)x +

Correspond à x seulement si x est précédé par y. C'est ce qu'on appelle une recherche arrière (lookbehind).

+ +

Ainsi /(?<=Jack)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack".
+ /(?<=Jack|Tom)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack" ou "Tom".
+ Toutefois, "Jack" et "Tom" ne feront pas partie de la correspondance.

+
(?<!y)x +

Correspond à x uniquement si x n'est pas précédé par y (parfois appelée en anglais negated lookbehind).

+ +

Ainsi, /(?<!-)\d+/ correspondra à un nombre seulement si celui-ci n'est pas précédé d'un signe moins.
+ /(?<!-)\d+/.exec('3') cible "3".
+ /(?<!-)\d+/.exec('-3') ne trouve aucune correspondance car le nombre est précédé d'un signe.

+
x|y +

Correspond à 'x' ou 'y'.

+ +

Ainsi, /vert|rouge/ correspond à 'vert' dans "feu vert" et à 'rouge' dans "feu rouge".

+
{n}Correspond pour exactement n occurences de l'expression précédente. N doit être un entier positif.
+
+ Ainsi, /a{2}/ ne correspond pas au 'a' de "Mozilla" mais correspond à tous les 'a' de "Mozilaa" et aux deux premiers 'a' de "Mozillaaa".
{n,} +

Correspond lorsqu'il y a au moins n occurences de l'expression précédente. n doit être un entier positif.

+ +

Par exemple /a{2,}/ correspondra à "aa" ou à "aaa" ou encore à "aaaa" mais pas à "a".

+
{n,m} +

Lorsque n et m sont des entiers positifs, cela correspond à au moins n occurences de l'expression précédente et à au plus m occurrences. Lorsque m n'est pas utilisé, la valeur par défaut correspondante sera l'infini.

+ +

Ainsi, /a{1,3}/ ne correspond à rien dans "Mozill", au 'a' de "Mozilla", au deux premiers 'a' de "Mozillaa" et au trois premiers 'a' de "Mozillaaaaa". Pour ce dernier exemple, on doit noter que le correspondance ne se fait que sur "aaa" bien qu'il y ait plus de 'a' dans la chaîne de caractères.

+
[xyz]Un ensemble de caractère. Ce type de motif correspond pour n'importe quel caractètre présent entre les crochets, y compris les séquences d'échappement. Les caractères spéciaux comme le point (.) et l'astérisque ne sont pas considérés comme spéciaux au sein d'un ensemble et n'ont donc pas besoin d'être échappés. Il est possible de donner un ensemble sur un intervalle de caractères en utilisant un tiret (-), comme le montre l'exemple qui suit.
+
+ Le motif [a-d], aura les mêmes correspondances que [abcd], correspondant au 'b' de "bulle" et au 'c' de "ciel". Les motifis /[a-z.]+/ et /[\w.]+/ correspondront pour la chaîne entirère : "Adre.ss.e".
[^xyz] +

Exclusion d'un ensemble de caractères. Cela correspond à tout ce qui n'est pas compris entre crochets. Il est possible de fournir un intervalle de caractères en utilisant un tiret (-). Les autres règles qui s'appliquent pour l'ensemble de caractères (ci-avant) s'appliquent également ici.

+ +

Par exemple, [^abc] est équivalent à [^a-c]. Ils correspondent à 'u' dans "bulle" et à 'i' dans "ciel".

+
[\b]Correspond pour un retour arrière (U+0008). (À ne pas confondre avec \b.)
\b +

Correspond à la position d'uneAfter the limite de mot. Une limite de mot correspond à la position où un caractère d'un mot n'est pas suivi ou précédé d'un autre caractère de mot. Il faut savoir que la limite correspondante n'est pas incluse dans le résultat. Autrement dit, la longueur d'une telle correspondance est nulle. (À ne pas confondre avec [\b].)

+ +

Exemples :
+ /\bm/ correspond au 'm' dans "mignon" ;
+ /no\b/ ne correspond pas au 'no' de "mignon" car 'no' est suivi de 'n' qui n'est pas un caractère de limite de mot;
+ /non\b/ correspond au 'non' de "mignon" car 'non' représente la fin de la chaîne de caractère et n'est donc pas suivi par un caractère de mot.
+ /\w\b\w/ ne correspondra jamais à quoi que ce soit car un caractère de mot ne peut pas être suivi à la fois par un caractère de mot et un caractère n'étant pas un caractère de mot.

+ +
+

Note : Le moteur d'expressions rationnelles JavaScript définit un ensemble de caractères spécifiques qui doivent être considérés comme des caractères de mot. Tout caractère qui n'est pas dans cet ensemble est considéré comme une limite de mot. Cet ensemble de caractères est relativement limité car constitué uniquement des caractères de l'alphabet romain en minuscules et en majuscules, des chiffres décimaux et du tiret-bas (underscore). Les autres caractères, comme les caractères accentués (é ou ü par exemple), sont donc considérés comme des limites de mots.

+
+
\B +

Correspond à une "non-limite de mot". Cela correspond pour les cas suivants :

+ +
    +
  • Avant le premier caractère d'une chaîne de caractères
  • +
  • Après le dernier caractère d'une chaîne de caractères
  • +
  • Entre deux caractères de mot
  • +
  • Entre deux caractères qui ne sont pas des caractères de mot
  • +
  • Avec la chaîne vide.
  • +
+ +

Ainsi, /\B../ correspond au 'oo' de "football" (et /e\B./ correspond au 'er' dans "une mer "

+
\cX +

Étant donné un caractère X compris entre A et Z, cela correspond au caractère de contrôle dans une chaîne de caractères.

+ +

Ainsi, /\cM/ correspond au caractère de contrôle M (U+000D) d'une chaîne de caractère.

+
\d +

Correspond à un chiffre et est équivalent à [0-9].

+ +

Ainsi, /\d/ ou /[0-9]/ correspond à '2' dans "H2O est la molécule de l'eau".

+
\D +

Correspond à tout caractère qui n'est pas un chiffre et est équivalent à [^0-9].

+ +

Ainsi, /\D/ ou /[^0-9]/ correspond à 'H' dans "H2O est la molécule de l'eau".

+
\fCorrespond à un saut de page (U+000C).
\nCorrespond à un saut de ligne (U+000A).
\rCorrespond à un retour chariot (U+000D).
\s +

Correspond à un blanc (cela comprend les espace, tabulation, saut de ligne ou saut de page). C'est équivalent à [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

+ +

Ainsi, /\s\w*/ correspond à ' toto' dans "truc toto".

+
\S +

Correspond à un caractère qui n'est pas un blanc. C'est équivalent à [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

+ +

Ainsi, /\S\w*/ correspond à 'truc' dans "truc toto".

+
\tCorrespond à une tabulation (U+0009).
\vCorrespond à une tabulation verticale (U+000B).
\w +

Correspond à n'importe quel caractère alphanumérique, y compris le tiret bas. C'est équivalent à [A-Za-z0-9_].

+ +

Ainsi, /\w/ correspond à 'l' dans "licorne", à '5' dans "5,28€", et à '3' dans "3D."

+
\W +

Correspond à n'importe quel caractère n'étant pas un caractère de mot. Cela est équivalent à [^A-Za-z0-9_].

+ +

Ainsi, /\W/ ou /[^A-Za-z0-9_]/ correspond à '%' dans "50%."

+
\n +

Soit n un entier strictement positif, cela fait référence au groupe de la n-ième expression entre parenthèses (en comptant les parenthèses ouvrantes).

+ +

Ainsi, /pomme(,)\spoire\1/ correspond à 'pomme, poire,' dans "pomme, poire, cerise, pêche".

+
\0Correspond au caractère NULL (U+0000). Il ne doit pas être suivi d'un autre chiffre car \0<chiffres> est une séquence d'échappement pour les nombres en notation octale (si besoin d'utiliser un chiffre ensuite, on pourra utiliser la forme \x00, cf. ci-après).
\xhhCorrespond au caractère dont le code hexadécimal est hh (deux chiffres hexadécimaux).
\uhhhhCorrespond au caractère dont le code est hhhh (quatre chiffres hexadécimaux).
\u{hhhh}(Uniquement actif quand le marqueur u est activé) Correspond au caractère dont la valeur Unicode est hhhh (en chiffre hexadécimaux).
+ +

Afin d'échapper les informations saisies par l'utilisateur et de traîter les chaînes de caractères pour les utiliser au sein d'un expression régulière correspondante, il est possible d'utiliser le remplacement suivant :

+ +
function escapeRegExp(string){
+  // $& correspond à la chaîne correspondante
+  // dans son intégralité
+  return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+}
+ +

Le marqueur g situé en fin d'expression permet d'effectuer une recherche globale, qui parcoure toute la chaîne et renvoie l'ensemble des correspondances trouvées (voir Utiliser les marqueurs ci-après).

+ +
+

Note : Voir la page sur la méthode String.replace pour plus d'informations.

+
+ +

Utiliser les parenthèses

+ +

Les parenthèses encadrant une partie du motif de l'expression régulière peuvent être utilisées pour garder en mémoire les correspondances. Cela pourra être utile pour réutiliser la correspondance trouvée.

+ +

Ainsi, le motif /Chapitre (\d+)\.\d*/ utilise des caractères échappés et spéciaux et indique une partie du motif à garder en mémoire. Ce motif correspond aux caractères 'Chapitre ' suivi par un ou plusieurs caractères numériques (\d correspond à un chiffre et + indiquant que une série de 1 ou plusieurs chiffres), suivis par un point (qu'il est nécessaire d'échapper car c'est un caractère spécial, on utilise donc '\' pour indiquer qu'on souhaite reconnaître le caractère '.'), suivi par 0 ou plusieurs chiffres (\d correspondant à un chiffre et l'astérisque indiquant que le caractère est présent 0 ou plusieurs fois). Les parenthèses sont utilisées pour garder en mémoire les premiers chiffres correspondant.

+ +

Ce motif est trouvé dans "Ouvrir le Chapitre 4.3 au paragraphe 6" et le chiffre '4' est gardé en mémoire. Le motif n'est pas trouvé dans  "Chapitre 3 et 4", car la chaîne de caractères ne comporte pas de point après le '3'.

+ +

Pour qu'une partie de la chaîne de caractère corresponde mais que la correspondance ne soit pas gardée en mémoire, on pourra utiliser ?:. Ainsi, (?:\d+) correspondra pour une séquence de chiffres (1 ou plusieurs chiffres) mais on ne gardera pas en mémoire les caractères correspondants.

+ +

Utiliser les expressions rationnelles

+ +

Les expresssions régulières sont utilisées avec les méthodes test et exec de l'objet RegExp et avec les méthodes match, replace, search, et split de l'objet String. Ces méthodes sont expliquées en détail dans la Référence JavaScript.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Méthodes utilisant les expressions régulières
MéthodeDescription
{{jsxref("RegExp.exec", "exec")}}Une méthode de l'objet RegExp qui exécute une recherche de correspondance dans une chaîne de caractères. Elle renvoie un tableau d'informations ou null lorsqu'il n'y a pas de correspondance.
{{jsxref("RegExp.test", "test")}}Une méthode de l'objet RegExp testant la présence d'une correspondance dans une chaîne de caractères. Elle renvoie true ou false.
{{jsxref("String.match", "match")}}Une méthode de l'objet String qui exécute une recherche de correspondance dans une chaîne de caractères. Elle renvoie un tableau d'informations ou null lorsqu'il n'y a pas de correspondance.
{{jsxref("String.matchAll", "matchAll")}}Une méthode de l'objet String qui renvoie un itérateur contenant l'ensemble des correspondances, y compris les groupes capturants.
{{jsxref("String.search", "search")}}Une méthode de l'objet String qui teste la présence d'une correspondance dans une chaîne de correspondance. Elle renvoie la position de la correspondance ou -1 s'il n'y en a pas.
{{jsxref("String.replace", "replace")}}Une méthode de l'objet String qui recherche une correspondance dans une chaîne de caractères et qui remplace la correspondance par une chaîne de substitution.
{{jsxref("String.split", "split")}}Une méthode de l'objet String qui utilise une expression régulière ou une chaîne de caractères pour découper une chaîne de caractères en un tableau comprenant les fragments résultants.
+ +

Pour savoir si un motif est présent au sein d'une chaîne de caractères, utiliser les méthodes test ou search. Pour obtenir plus d'informations (moins rapidement) on utilisera les méthodes exec ou match. Si on utilise exec ou match et qu'une correspondance est trouvée, ces méthodes renverront un tableau et mettront à jour des propriétés de l'objet global RegExp et aussi de l'instance de RegExp associée à l'expression rationnelle. Si aucune correspondance n'est trouvée, la méthode exec renverra null (qui est automatiquement converti à false lors d'un test conditionnel).

+ +

Dans l'exemple qui suit, le script utilise la méthode exec pour trouver une correspondance dans une chaîne de caractères.

+ +
var monExpressionReguliere = /d(b+)d/g;
+var monTableau = monExpressionReguliere.exec("cdbbdbsbz");
+
+ +

S'il n'est pas nécessaire d'accéder aux propriétés de l'expression régulière, une autre façon de récupérer monTableau peut être :

+ +
var monTableau = /d(b+)d/g.exec("cdbbdbsbz");
+// équivalent à "cdbbdbsbz".match(/d(b+)d/g);
+
+ +

Si on souhaite construire une expression régulière à partir d'une chaîne de caractères, on peut utiliser le script suivant :

+ +
var monExpressionReguliere = new RegExp("d(b+)d", "g");
+var monTableau = monExpressionReguliere.exec("cdbbdbsbz");
+
+ +

Avec ces scripts, on obtient bien une correspondance, la méthode renvoie un tableau et met à jour les propriétés listées dans le tableau qui suit.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Résultats dûs à l'exécution d'une expression rationnelle.
ObjetPropriété ou indiceDescriptionPour cet exemple
monTableauLa chaîne de caractères correspondante et les fragments de chaînes gardés en mémoire.["dbbd", "bb"]
indexL'indice (débute à partir de 0) de la correspondance, compté dans la chaîne de caractère initiale.1
inputLa chaîne de caractères initiale."cdbbdbsbz"
[0]Les derniers caractères qui correspondent."dbbd"
monExpressionRégulièrelastIndexL'indice auquel débuter la prochaine correspondance. (Cette propriété n'est utilisée que si l'expression régulière utilise l'option g, décrite dans « Effectuer des recherches avancées avec les marqueurs ».5
sourceLe texte du motif, mis à jour à la création de l'expression régulière mais pas lors de son exécution."d(b+)d"
+ +

Comme le montre la seconde formulation de cet exemple, il est possible d'utiliser une expression rationnelle, créée avec un objet initialisé sans l'affecter à une variable. Cela implique qu'à chaque utilisation, on aura une nouvelle expression régulière distincte et qu'on ne pourra pas, pour cette raison, accéder aux propriétés de l'expression régulière. Avec le script suivant :

+ +
var monExpressionReguliere = /d(b+)d/g;
+var monTableau = monExpressionReguliere.exec("cdbbdbsbz");
+console.log("La valeur de lastIndex est " + monExpressionReguliere.lastIndex);
+
+// "La valeur de lastIndex est 5"
+
+ +

Si le script utilisé est :

+ +
var monTableau = /d(b+)d/g.exec("cdbbdbsbz");
+console.log("La valeur de lastIndex est " + /d(b+)d/g.lastIndex);
+
+// "La valeur de lastIndex est 0"
+
+ +

Les occurences de /d(b+)d/g dans les deux instructions sont des objets différents. Leurs propriétés lastIndex respectives ont donc des valeurs différentes. Quand il est nécessaire d'accéder aux propriétés d'un objet décrivant une expression rationnelle, il faudra d'abord l'affecter à une variable.

+ +

Utiliser les correspondances de groupes avec les parenthèses

+ +

Les parenthèses, utilisées dans un motif d'expression régulière, permettent de garder en mémoire un groupe (ou fragment) d'une correspondance. Ainsi, /a(b)c/ correspond aux caractères 'abc' et garde 'b' en mémoire. Pour récupérer ces fragments mémorisés, on peut utiliser les éléments du tableau array [1], ..., [n].

+ +

Le nombre de fragments qu'il est possible de garder entre parenthèses n'est pas limité. Le tableau renvoyé contiendra tout ce qui aura été trouvé. Les exemples qui suivent montrent comment utiliser cette syntaxe.

+ +

Le script qui suit utilise la méthode {{jsxref("String.replace", "replace()")}} pour échanger les mots d'une chaîne de caractères. Pour remplacer le texte, le script utilise $1 et $2 qui correspondent au premier et deuxième groupe correspondant.

+ +
var re = /(\w+)\s(\w+)/;
+var str = "Titi toto";
+var newstr = str.replace(re, "$2, $1");
+console.log(newstr);
+
+ +

Cela affichera "toto, Titi".

+ +

Effectuer des recherches avancées en utilisant les marqueurs (flags)

+ +

Les expressions rationnelles peuvent être utilisées avec des marqueurs optionnels permettant des recherches globales et/ou ne respectant pas la casse. Ces marqueurs peuvent être utilisés séparement ou ensemble, quel que soit l'ordre. Ils font partie de l'expression régulière.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Drapeaux utilisés avec les expressions régulières.
Drapeau (Flag)Description
gRecherche globale
iRecherche ne respectant pas la casse
mRecherche sur plusieurs lignes
sLe point peut correspondre aux caractères de saut de ligne.
uUnicode. Le motif de recherche est interprété comme une séquence de codets Unicode.
yEffectue une recherche qui « adhère », en partant de la position courante de la chaîne de caractères sur laquelle la recherche est effectuée. Voir la page sur {{jsxref("RegExp.sticky","sticky")}}.
+ +

Pour utiliser un marqueur avec une expression régulière, on utilisera la syntaxe suivante :

+ +
var re = /motif/marqueurs;
+
+ +

ou

+ +
var re = new RegExp("motif", "marqueurs");
+
+ +

Les marqueurs font partie intégrante d'une expression régulière, ils ne peuvent pas être ajoutés ou supprimés ensuite.

+ +

Ainsi, re = /\w+\s/g permet de créer une expression régulière pour trouver un ou plusieurs caractères suivis d'un espace, la recherche est effectuée globalement, sur toute la chaîne de caractères.

+ +
var re = /\w+\s/g;
+var str = "un deux trois quatre";
+var monTableau = str.match(re);
+console.log(monTableau);
+
+ +

Cela affichera ["un ", "deux ", "trois "]. On pourrait remplacer la ligne :

+ +
var re = /\w+\s/g;
+
+ +

avec la ligne :

+ +
var re = new RegExp("\\w+\\s", "g");
+
+ +

pour obtenir le même résultat.

+ +

Le comportement du marqueur 'g' est différent selon qu'il est utilisé avec exec() ou avec match(). Pour match(), c'est la chaîne de caractères qui invoque la méthode et l'expression rationnelle est alors un argument. Pour exec(), c'est l'expression rationnelle qui invoque la méthode et c'est la chaîne de caractères qui est passée en argument. Dans l'appel à exec(), le marqueur 'g' permet d'avoir une progression itérative.

+ +

Le marqueur m pourra être utilisé pour traiter une chaîne de caractères de plusieurs lignes comme plusieurs lignes distinctes. Si ce marqueur est utilisé, les caractères spéciaux ^ et $ correspondront au début ou à la fin de n'importe quelle ligne appartenant à la chaîne de caractères au lieu de correspondre simplement au début ou à la fin de la chaîne.

+ +

Exemples

+ +

Les exemples qui suivent utilisent les expressions régulières dans différents cas.

+ +

Changer l'ordre d'une saisie

+ +

L'exemple qui suit utilise les expressions régulières et string.split() et string.replace(). Le script nettoie la chaîne de caractères saisie qui contient des noms (prénom puis nom) séparés par des blancs, tabulations et points-virgules. Enfin il inverse les noms et prénoms puis trie la liste.

+ +
// La chaîne des noms contient plusieurs blancs et tabulations,
+// il peut y avoir plusieurs espaces entre le nom et le prénom.
+var noms = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
+
+var output = ["---------- Chaîne originale\n", noms + "\n"];
+
+// Préparer deux expressions régulières pour stocker un tableau.
+// et découper les chaînes dans ce tableau.
+
+// motif: on peut avoir des blancs, un point virgule puis d'autres blancs
+var motif = /\s*;\s*/;
+
+// Découper la chaîne de caractères en morceaux séparés par le précédent motif
+// Stocker ces morceaux dans un tableau listeNoms
+var listeNoms = noms.split(motif);
+
+// nouveau motif : un ou plusieurs caractères, des blancs puis des caractères.
+// On utilise des parenthèses pour garder en mémoire les groupes du motif.
+// On utilisera ces groupes par la suite.
+motif = /(\w+)\s+(\w+)/;
+
+// Nouveau tableau pour enregistrer les noms traités.
+var listeParNomFamille = [];
+
+// Afficher le tableau des noms et remplir le nouveau tableau
+// avec les noms et prénoms séparés par des virgules, le nom
+// de famille étant écrit en premier
+//
+// La méthode replace supprime tout ce qui correspond au motif
+// et le remplace par le nom (mémorisé), une virgule, un espace
+// et le prénom (mémorisé).
+//
+// Les variables $1 et $2 font références aux fragments gardés
+// en mémoire lors de l'utilisation du motif.
+
+output.push("---------- Après découpage avec l'expression régulière");
+
+var i, len;
+for (i = 0, len = listeNoms.length; i < len; i++){
+  output.push(listeNoms[i]);
+  listeParNomFamille[i] = listeNoms[i].replace(motif, "$2, $1");
+}
+
+// Afficher le nouveau tableau
+output.push("---------- Noms et prénoms inversés");
+for (i = 0, len = listeParNomFamille.length; i < len; i++){
+  output.push(listeParNomFamille[i]);
+}
+
+// Trier par le nom de famille puis afficher le tableau trié
+listeParNomFamille.sort();
+output.push("---------- Triée");
+for (i = 0, len = listeParNomFamille.length; i < len; i++){
+  output.push(listeParNomFamille[i]);
+}
+
+output.push("---------- Fin");
+
+console.log(output.join("\n"));
+
+ +

Utiliser les caractères spéciaux pour vérifier la saisie

+ +

Dans l'exemple suivant, on s'attend à ce que l'utilisateur saisissent un numéro de téléphone. Quand l'utilisateur appuie sur le bouton "Vérifier", le script vérifie la validité du numéro. Si le numéro est valide (il correspond à la séquence de caractères fournie par l'expression régulière), le script affiche un message remerciant l'utilisateur et confirmant le numéro. S'il est invalide, le script informe l'utilisateur et lui signifie que les informations saisies ne sont pas valides.

+ +

Dans les parenthèses sans mémoire (?: , l'expression régulière cherche les deux premiers chiffres ou l'indicatif du pays suivi d'un blanc et du premier chiffre, ce qui correspond à

+ +
\d{2}|\+\d{2}[ ]\d
+ +

Cette partie signifie : deux chiffres OU un signe '+' suivi de deux chiffres, un blanc et un autre chiffre.

+ +

Ensuite, on a un groupe qui est mémorisé (entre parenthèses) :

+ +
([- ])
+ +

Ce groupe correspond à ce qui va être utilisé pour séparer les différentes composantes du numéro de téléphone.

+ +

Ensuite,

+ +
\d{2}\1
+ +

signifie qu'on a deux chiffres suivi du premier groupe qui est celui qui définit le séparateur. Le reste est composé de la même façon. Ainsi les numéros de téléphone +33 1 23 45 67 89 et 01 23 45 67 89 seront tous les deux valides.

+ +

L'événement Change, provoqué quand l'utilisateur appuie sur Entrée, renseigne la valeur RegExp.input.

+ +
<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+    <meta http-equiv="Content-Script-Type" content="text/javascript">
+    <script type="text/javascript">
+      var re = /(?:\d{2}|\+\d{2}[ ]\d)([- ])\d{2}\1\d{2}\1\d{2}\1\d{2}/;
+      function testInfo(phoneInput){
+        var OK = re.exec(phoneInput.value);
+        if (!OK)
+          window.alert(phone.input + " n'est pas un numéro de téléphone valide!");
+        else
+          window.alert("Merci, votre numéro est : " + OK[0]);
+      }
+    </script>
+  </head>
+  <body>
+    <p>Saisissez votre numéro de téléphone (avec indicatif) puis cliquez sur "Vérifier".
+        <br>Le format attendu est ## ## ## ## ## ou +## # ## ## ## ##.</p>
+    <form action="#">
+      <input id="phone"><button onclick="testInfo(document.getElementById('phone'));">Vérifier</button>
+    </form>
+  </body>
+</html>
+
+ +

{{PreviousNext("Web/JavaScript/Guide/Formatage_du_texte", "Web/JavaScript/Guide/Collections_indexées")}}

diff --git a/files/fr/web/javascript/guide/regular_expressions/quantifiers/index.html b/files/fr/web/javascript/guide/regular_expressions/quantifiers/index.html deleted file mode 100644 index f27dfa250b..0000000000 --- a/files/fr/web/javascript/guide/regular_expressions/quantifiers/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Quantificateurs -slug: Web/JavaScript/Guide/Regular_Expressions/Quantifiers -tags: - - Guide - - JavaScript - - Quantificateurs - - RegExp -translation_of: Web/JavaScript/Guide/Regular_Expressions/Quantifiers -original_slug: Web/JavaScript/Guide/Expressions_régulières/Quantificateurs ---- -

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

- -

Les quantificateurs indiquent le nombre de caractères ou d'expressions qu'il faut pour une correspondance.

- -

Types

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CaractèresSignification
x* -

Correspond à l'expression précédente qui est répétée 0 ou plusieurs fois. Équivalent à {0,}

- -

Ainsi, /bo*/ correspond à 'boo' dans "Un booléen" et à 'b' dans "Un bateau bleu", mais ne correspond à rien dans "Ce matin".

-
x+ -

Correspond à l'expression précédente qui est répétée une ou plusieurs fois. C'est équivalent à {1,}.

- -

Ainsi, /a+/ correspond au 'a' dans "maison" et à tous les 'a' dans "maaaaaaison" mais ne correspond à rien dans "mission".

-
x? -

Correspond à l'expression précédente qui est présente une fois ou pas du tout. C'est équivalent à {0,1}.
-
- Ainsi, /e?le?/ correspond au 'el' dans "gel" et au 'le' dans "angle" mais aussi au 'l' dans "Oslo".
-
- S'il est utilisé immédiatement après l'un des quantificateurs : *, +, ?, ou {}, il rend le quantificateur moins « gourmand » auquel cas le moins de caractères correspond (le comportement par défaut, « gourmand », permettant de faire correspondre le plus de caractères possible). Par exemple /\d+/ utilisée avec "123abc" fait correspondre "123". Utiliser /\d+?/ à la même chaîne de caractères fait correspondre "1".
-
- Ce symbole est également utilisé dans les tests de présence autour de l'expression, décrits par les lignes x(?=y) et x(?!y) de ce tableau.

-
x{n} -

Correspond pour exactement n occurences de l'expression précédente. N doit être un entier positif.
-
- Ainsi, /a{2}/ ne correspond pas au 'a' de "Mozilla" mais correspond à tous les 'a' de "Mozilaa" et aux deux premiers 'a' de "Mozillaaa".

-
x{n,} -

Correspond lorsqu'il y a au moins n occurences de l'expression précédente. n doit être un entier positif.

- -

Par exemple /a{2,}/ correspondra à "aa" ou à "aaa" ou encore à "aaaa" mais pas à "a".

-
x{n,m} -

Lorsque n et m sont des entiers positifs, cela correspond à au moins n occurences de l'expression précédente et à au plus m occurrences. Lorsque m n'est pas utilisé, la valeur par défaut correspondante sera l'infini.

- -

Ainsi, /a{1,3}/ ne correspond à rien dans "Mozill", au 'a' de "Mozilla", au deux premiers 'a' de "Mozillaa" et au trois premiers 'a' de "Mozillaaaaa". Pour ce dernier exemple, on doit noter que le correspondance ne se fait que sur "aaa" bien qu'il y ait plus de 'a' dans la chaîne de caractères.

-
-

x*?
- x+?
- x??
- x{n}?
- x{n,}?
- x{n,m}?

-
-

Correspond à l'expression précédente qui est présente une fois ou pas du tout. C'est équivalent à {0,1}.
-
- Ainsi, /e?le?/ correspond au 'el' dans "gel" et au 'le' dans "angle" mais aussi au 'l' dans "Oslo".
-
- S'il est utilisé immédiatement après l'un des quantificateurs : *, +, ?, ou {}, il rend le quantificateur moins « gourmand » auquel cas le moins de caractères correspond (le comportement par défaut, « gourmand », permettant de faire correspondre le plus de caractères possible). Par exemple /\d+/ utilisée avec "123abc" fait correspondre "123". Utiliser /\d+?/ à la même chaîne de caractères fait correspondre "1".
-
- Ce symbole est également utilisé dans les tests de présence autour de l'expression, décrits par les lignes x(?=y) et x(?!y) de ce tableau.

-
diff --git a/files/fr/web/javascript/guide/regular_expressions/quantifiers/index.md b/files/fr/web/javascript/guide/regular_expressions/quantifiers/index.md new file mode 100644 index 0000000000..f27dfa250b --- /dev/null +++ b/files/fr/web/javascript/guide/regular_expressions/quantifiers/index.md @@ -0,0 +1,98 @@ +--- +title: Quantificateurs +slug: Web/JavaScript/Guide/Regular_Expressions/Quantifiers +tags: + - Guide + - JavaScript + - Quantificateurs + - RegExp +translation_of: Web/JavaScript/Guide/Regular_Expressions/Quantifiers +original_slug: Web/JavaScript/Guide/Expressions_régulières/Quantificateurs +--- +

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

+ +

Les quantificateurs indiquent le nombre de caractères ou d'expressions qu'il faut pour une correspondance.

+ +

Types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CaractèresSignification
x* +

Correspond à l'expression précédente qui est répétée 0 ou plusieurs fois. Équivalent à {0,}

+ +

Ainsi, /bo*/ correspond à 'boo' dans "Un booléen" et à 'b' dans "Un bateau bleu", mais ne correspond à rien dans "Ce matin".

+
x+ +

Correspond à l'expression précédente qui est répétée une ou plusieurs fois. C'est équivalent à {1,}.

+ +

Ainsi, /a+/ correspond au 'a' dans "maison" et à tous les 'a' dans "maaaaaaison" mais ne correspond à rien dans "mission".

+
x? +

Correspond à l'expression précédente qui est présente une fois ou pas du tout. C'est équivalent à {0,1}.
+
+ Ainsi, /e?le?/ correspond au 'el' dans "gel" et au 'le' dans "angle" mais aussi au 'l' dans "Oslo".
+
+ S'il est utilisé immédiatement après l'un des quantificateurs : *, +, ?, ou {}, il rend le quantificateur moins « gourmand » auquel cas le moins de caractères correspond (le comportement par défaut, « gourmand », permettant de faire correspondre le plus de caractères possible). Par exemple /\d+/ utilisée avec "123abc" fait correspondre "123". Utiliser /\d+?/ à la même chaîne de caractères fait correspondre "1".
+
+ Ce symbole est également utilisé dans les tests de présence autour de l'expression, décrits par les lignes x(?=y) et x(?!y) de ce tableau.

+
x{n} +

Correspond pour exactement n occurences de l'expression précédente. N doit être un entier positif.
+
+ Ainsi, /a{2}/ ne correspond pas au 'a' de "Mozilla" mais correspond à tous les 'a' de "Mozilaa" et aux deux premiers 'a' de "Mozillaaa".

+
x{n,} +

Correspond lorsqu'il y a au moins n occurences de l'expression précédente. n doit être un entier positif.

+ +

Par exemple /a{2,}/ correspondra à "aa" ou à "aaa" ou encore à "aaaa" mais pas à "a".

+
x{n,m} +

Lorsque n et m sont des entiers positifs, cela correspond à au moins n occurences de l'expression précédente et à au plus m occurrences. Lorsque m n'est pas utilisé, la valeur par défaut correspondante sera l'infini.

+ +

Ainsi, /a{1,3}/ ne correspond à rien dans "Mozill", au 'a' de "Mozilla", au deux premiers 'a' de "Mozillaa" et au trois premiers 'a' de "Mozillaaaaa". Pour ce dernier exemple, on doit noter que le correspondance ne se fait que sur "aaa" bien qu'il y ait plus de 'a' dans la chaîne de caractères.

+
+

x*?
+ x+?
+ x??
+ x{n}?
+ x{n,}?
+ x{n,m}?

+
+

Correspond à l'expression précédente qui est présente une fois ou pas du tout. C'est équivalent à {0,1}.
+
+ Ainsi, /e?le?/ correspond au 'el' dans "gel" et au 'le' dans "angle" mais aussi au 'l' dans "Oslo".
+
+ S'il est utilisé immédiatement après l'un des quantificateurs : *, +, ?, ou {}, il rend le quantificateur moins « gourmand » auquel cas le moins de caractères correspond (le comportement par défaut, « gourmand », permettant de faire correspondre le plus de caractères possible). Par exemple /\d+/ utilisée avec "123abc" fait correspondre "123". Utiliser /\d+?/ à la même chaîne de caractères fait correspondre "1".
+
+ Ce symbole est également utilisé dans les tests de présence autour de l'expression, décrits par les lignes x(?=y) et x(?!y) de ce tableau.

+
diff --git a/files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html b/files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html deleted file mode 100644 index 04b21810ae..0000000000 --- a/files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.html +++ /dev/null @@ -1,431 +0,0 @@ ---- -title: Échappement des propriétés Unicode -slug: Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes -tags: - - Expressions rationnelles - - Expressions régulières - - Guide - - JavaScript - - regex -translation_of: Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes -original_slug: Web/JavaScript/Guide/Expressions_régulières/Échappement_propriétés_Unicode ---- -

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

- -

Les séquences d'échappement pour les propriétés Unicode permettent de distinguer les caractères Unicodes en fonction de leurs propriétés : majuscules, minuscules, symboles mathématiques, ponctuation, etc.

- -

Syntaxe

- -
// Valeurs non-binaires
-\p{UnicodePropertyName=ValeurPropriétéUnicode}
-\p{UnicodePropertyName}
-
-// Valeurs binaires et non-binaires
-\p{UnicodePropertyName}
-
- -
-
ValeurPropriétéUnicode
-
Une des valeurs listées ci-après. Pour certaines valeurs, le mot-clé NomPropriétéUnicode et le signe égal peuvent être omis.
-
- -

Valeurs

- -

Non-binaires

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ÉchappementsSignification
\p{LC}
- \p{Cased_Letter}
- \p{UnicodePropertyName=Cased_Letter}
N'importe quelle lettre avec la version minuscule et la version majuscule. Équivalent à \p{Lu}|\p{Ll}|p{Lt}.
\p{Close_Punctuation}
- \p{UnicodePropertyName=Close_Punctuation}
\p{Connector_Punctuation}
- \p{UnicodePropertyName=Connector_Punctuation}
\p{Control}
- \p{UnicodePropertyName=Control}
\p{Currency_Symbol}
- \p{UnicodePropertyName=Currency_Symbol}
\p{Dash_Punctuation}
- \p{UnicodePropertyName=Dash_Punctuation}
\p{Decimal_Number}
- \p{UnicodePropertyName=Decimal_Number}
\p{Enclosing_Mark}
- \p{UnicodePropertyName=Enclosing_Mark}
\p{Final_Punctuation}
- ​​​​​​​\p{UnicodePropertyName=Final_Punctuation}
\p{Format}
- ​​​​​​​\p{UnicodePropertyName=Format}
\p{Initial_Punctuation}
- ​​​​​​​\p{UnicodePropertyName=Initial_Punctuation}
\p{Letter}
- ​​​​​​​\p{UnicodePropertyName=Letter}
\p{Letter_Number}
- ​​​​​​​\p{UnicodePropertyName=Line_Separator}
\p{Lowercase_Letter}
- ​​​​​​​\p{UnicodePropertyName=Lowercase_Letter}
\p{Mark}
- ​​​​​​​\p{UnicodePropertyName=Mark}
\p{Math_Symbol;}
- ​​​​​​​\p{UnicodePropertyName=Math_Symbol}
\p{Modifier_Letter}
- ​​​​​​​\p{UnicodePropertyName=Modifier_Letter}
\p{Modifier_Symbol}
- ​​​​​​​\p{UnicodePropertyName=Modifier_Symbol}
\p{Nonspacing_Mark}
- ​​​​​​​\p{UnicodePropertyName=Nonspacing_Mark}
\p{Number}
- ​​​​​​​\p{UnicodePropertyName=Number}
\p{Open_Punctuation}
- ​​​​​​​\p{UnicodePropertyName=Open_Punctuation}
\p{Other}
- ​​​​​​​\p{UnicodePropertyName=Other_Letter}
\p{Other_Letter}
- ​​​​​​​\p{UnicodePropertyName=Other_Letter}
\p{Other_Number}
- ​​​​​​​\p{UnicodePropertyName=Other_Number}
\p{Other_Punctuation}
- ​​​​​​​\p{UnicodePropertyName=Other_Punctuation}
\p{Paragraph_Separator}
- ​​​​​​​\p{UnicodePropertyName=Paragraph_Separator}
\p{Private_Use}Meaning
- ​​​​​​​\p{UnicodePropertyName=Private_Use}
\p{Punctuation}
- ​​​​​​​\p{UnicodePropertyName=Punctuation}
\p{Separator}
- ​​​​​​​\p{UnicodePropertyName=Separator}
\p{Space_Separator}
- ​​​​​​​\p{UnicodePropertyName=Space_Separator}
\p{Spaceing_Mark}
- ​​​​​​​\p{UnicodePropertyName=Spacing_Mark}
\p{Surrogate}
- ​​​​​​​\p{UnicodePropertyName=Surrogate}
\p{Symbol}
- ​​​​​​​\p{UnicodePropertyName=Symbol}
\p{Titlecase_Letter}
- ​​​​​​​\p{UnicodePropertyName=Titlecase_Letter}
\p{Unassigned}
- ​​​​​​​\p{UnicodePropertyName=Unassigned}
\p{Uppercase_Letter}
- ​​​​​​​\p{UnicodePropertyName=UppercaseLetter}
- -

Binaires

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ÉchappementSignification
\p{Alphabetic}
\p{Bidi_Control}
\p{Bidi_Mirrored}
\p{Case_Ignorable}
\p{Cased}
\p{Changes_When_Casefolded}
\p{Changes_When_Casemapped}
\p{Changes_When_Lowercased}
\p{Changes_When_NFKC_Casefolded}
\p{Changes_When_Titlecased}
\p{Changes_When_Uppercased}
\p{Dash}
\p{Default_Ignorable_Code_Point}
\p{Deprecated}
\p{Diacritic}
\p{Emoji}
\p{Emoji_Component}
\p{Emoji_Modifier}
\p{Emoji_Modifier_Base}
\p{Emoji_Presentation}
\p{Extender}
\p{Grapheme_Base}
\p{Grapheme_Extend}
\p{Hex_Digit}
\p{ID_Continue}
\p{ID_Start}
\p{Ideographic}
\p{IDS_Binary_Operator}
\p{IDS_Trinary_Operator}
\p{Join_Control}
\p{Logical_Order_Exception}
\p{Lowercase}
\p{Math}
\p{Noncharacter_Code_Point}
\p{Pattern_Syntax}
\p{Pattern_White_Space}
\p{Quotation_Mark}
\p{Radical}
\p{RegionalIndicator}
\p{Sentence_Terminal}
\p{Soft_Dotted}
\p{Terminal_Punctuation}
\p{Unified_Ideograph}
\p{Uppercase}
\p{Variation_Selector}
\p{White_Space}
\p{XID_Continue}
\p{XID_Start}
diff --git a/files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.md b/files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.md new file mode 100644 index 0000000000..04b21810ae --- /dev/null +++ b/files/fr/web/javascript/guide/regular_expressions/unicode_property_escapes/index.md @@ -0,0 +1,431 @@ +--- +title: Échappement des propriétés Unicode +slug: Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes +tags: + - Expressions rationnelles + - Expressions régulières + - Guide + - JavaScript + - regex +translation_of: Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes +original_slug: Web/JavaScript/Guide/Expressions_régulières/Échappement_propriétés_Unicode +--- +

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

+ +

Les séquences d'échappement pour les propriétés Unicode permettent de distinguer les caractères Unicodes en fonction de leurs propriétés : majuscules, minuscules, symboles mathématiques, ponctuation, etc.

+ +

Syntaxe

+ +
// Valeurs non-binaires
+\p{UnicodePropertyName=ValeurPropriétéUnicode}
+\p{UnicodePropertyName}
+
+// Valeurs binaires et non-binaires
+\p{UnicodePropertyName}
+
+ +
+
ValeurPropriétéUnicode
+
Une des valeurs listées ci-après. Pour certaines valeurs, le mot-clé NomPropriétéUnicode et le signe égal peuvent être omis.
+
+ +

Valeurs

+ +

Non-binaires

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ÉchappementsSignification
\p{LC}
+ \p{Cased_Letter}
+ \p{UnicodePropertyName=Cased_Letter}
N'importe quelle lettre avec la version minuscule et la version majuscule. Équivalent à \p{Lu}|\p{Ll}|p{Lt}.
\p{Close_Punctuation}
+ \p{UnicodePropertyName=Close_Punctuation}
\p{Connector_Punctuation}
+ \p{UnicodePropertyName=Connector_Punctuation}
\p{Control}
+ \p{UnicodePropertyName=Control}
\p{Currency_Symbol}
+ \p{UnicodePropertyName=Currency_Symbol}
\p{Dash_Punctuation}
+ \p{UnicodePropertyName=Dash_Punctuation}
\p{Decimal_Number}
+ \p{UnicodePropertyName=Decimal_Number}
\p{Enclosing_Mark}
+ \p{UnicodePropertyName=Enclosing_Mark}
\p{Final_Punctuation}
+ ​​​​​​​\p{UnicodePropertyName=Final_Punctuation}
\p{Format}
+ ​​​​​​​\p{UnicodePropertyName=Format}
\p{Initial_Punctuation}
+ ​​​​​​​\p{UnicodePropertyName=Initial_Punctuation}
\p{Letter}
+ ​​​​​​​\p{UnicodePropertyName=Letter}
\p{Letter_Number}
+ ​​​​​​​\p{UnicodePropertyName=Line_Separator}
\p{Lowercase_Letter}
+ ​​​​​​​\p{UnicodePropertyName=Lowercase_Letter}
\p{Mark}
+ ​​​​​​​\p{UnicodePropertyName=Mark}
\p{Math_Symbol;}
+ ​​​​​​​\p{UnicodePropertyName=Math_Symbol}
\p{Modifier_Letter}
+ ​​​​​​​\p{UnicodePropertyName=Modifier_Letter}
\p{Modifier_Symbol}
+ ​​​​​​​\p{UnicodePropertyName=Modifier_Symbol}
\p{Nonspacing_Mark}
+ ​​​​​​​\p{UnicodePropertyName=Nonspacing_Mark}
\p{Number}
+ ​​​​​​​\p{UnicodePropertyName=Number}
\p{Open_Punctuation}
+ ​​​​​​​\p{UnicodePropertyName=Open_Punctuation}
\p{Other}
+ ​​​​​​​\p{UnicodePropertyName=Other_Letter}
\p{Other_Letter}
+ ​​​​​​​\p{UnicodePropertyName=Other_Letter}
\p{Other_Number}
+ ​​​​​​​\p{UnicodePropertyName=Other_Number}
\p{Other_Punctuation}
+ ​​​​​​​\p{UnicodePropertyName=Other_Punctuation}
\p{Paragraph_Separator}
+ ​​​​​​​\p{UnicodePropertyName=Paragraph_Separator}
\p{Private_Use}Meaning
+ ​​​​​​​\p{UnicodePropertyName=Private_Use}
\p{Punctuation}
+ ​​​​​​​\p{UnicodePropertyName=Punctuation}
\p{Separator}
+ ​​​​​​​\p{UnicodePropertyName=Separator}
\p{Space_Separator}
+ ​​​​​​​\p{UnicodePropertyName=Space_Separator}
\p{Spaceing_Mark}
+ ​​​​​​​\p{UnicodePropertyName=Spacing_Mark}
\p{Surrogate}
+ ​​​​​​​\p{UnicodePropertyName=Surrogate}
\p{Symbol}
+ ​​​​​​​\p{UnicodePropertyName=Symbol}
\p{Titlecase_Letter}
+ ​​​​​​​\p{UnicodePropertyName=Titlecase_Letter}
\p{Unassigned}
+ ​​​​​​​\p{UnicodePropertyName=Unassigned}
\p{Uppercase_Letter}
+ ​​​​​​​\p{UnicodePropertyName=UppercaseLetter}
+ +

Binaires

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ÉchappementSignification
\p{Alphabetic}
\p{Bidi_Control}
\p{Bidi_Mirrored}
\p{Case_Ignorable}
\p{Cased}
\p{Changes_When_Casefolded}
\p{Changes_When_Casemapped}
\p{Changes_When_Lowercased}
\p{Changes_When_NFKC_Casefolded}
\p{Changes_When_Titlecased}
\p{Changes_When_Uppercased}
\p{Dash}
\p{Default_Ignorable_Code_Point}
\p{Deprecated}
\p{Diacritic}
\p{Emoji}
\p{Emoji_Component}
\p{Emoji_Modifier}
\p{Emoji_Modifier_Base}
\p{Emoji_Presentation}
\p{Extender}
\p{Grapheme_Base}
\p{Grapheme_Extend}
\p{Hex_Digit}
\p{ID_Continue}
\p{ID_Start}
\p{Ideographic}
\p{IDS_Binary_Operator}
\p{IDS_Trinary_Operator}
\p{Join_Control}
\p{Logical_Order_Exception}
\p{Lowercase}
\p{Math}
\p{Noncharacter_Code_Point}
\p{Pattern_Syntax}
\p{Pattern_White_Space}
\p{Quotation_Mark}
\p{Radical}
\p{RegionalIndicator}
\p{Sentence_Terminal}
\p{Soft_Dotted}
\p{Terminal_Punctuation}
\p{Unified_Ideograph}
\p{Uppercase}
\p{Variation_Selector}
\p{White_Space}
\p{XID_Continue}
\p{XID_Start}
diff --git a/files/fr/web/javascript/guide/text_formatting/index.html b/files/fr/web/javascript/guide/text_formatting/index.html deleted file mode 100644 index 0049f8f7ac..0000000000 --- a/files/fr/web/javascript/guide/text_formatting/index.html +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Formatage de texte -slug: Web/JavaScript/Guide/Text_formatting -tags: - - Guide - - JavaScript - - l10n:priority -translation_of: Web/JavaScript/Guide/Text_formatting -original_slug: Web/JavaScript/Guide/Formatage_du_texte ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}
- -

Ce chapitre présente comment travailler avec les chaînes de caractères et le texte en JavaScript.

- -

Les chaînes de caractères

- -

Le type {{Glossary("String")}} de JavaScript est utilisé pour représenter des données textuelles. C'est un ensemble d'"éléments" de valeurs non signées sur 16 bits (unités de codage UTF-16). Chaque élément dans la chaîne de caractères occupe une position dans la chaîne de caractères. Le premier élément se trouve à l'indice 0, le suivant à l'indice 1 et ainsi de suite. La longueur d'une chaîne de caractères est le nombre d'éléments qu'elle contient. Vous pouvez créer des chaînes de caractères en utilisant des littéraux de chaîne de caractères ou des objets chaîne de caractères.

- -

Les littéraux de chaînes de caractères

- -

Vous pouvez créer des chaînes de caractères simple en utilisant des apostrophes simples ou doubles :

- -
'machin'
-"truc"
- -

Des chaînes plus avancées peuvent être créées en utilisant des séquences d'échappement.

- -

Les séquences d'échappement hexadécimales

- -

Le nombre situé après \x est interprété comme un nombre hexadécimal :

- -
'\xA9' // "©"
- -

Les séquences d'échappement Unicode

- -

Les séquences d'échappement Unicode requièrent au moins quatres caractères hexadécimaux après \u.

- -
'\u00A9' // "©"
- -

L'échappement d'unités de codage Unicode

- -

Nouveau dans ECMAScript 2015. Avec les échappements d'unités de codage Unicode, tout caractère peut être échappé en utilisant des nombres hexadécimaux, de sorte qu'il est possible de d'utiliser des unités de codage Unicode jusqu'à 0x10FFFF. Avec les échappements Unicode simples, il est souvent nécessaire d'écrire les moitiés de remplacement séparément pour obtenir le même résultat.

- -

Voir aussi {{jsxref("String.fromCodePoint()")}} ou {{jsxref("String.prototype.codePointAt()")}}.

- -
'\u{2F804}'
-
-// Le même avec des échappements Unicode simples
-'\uD87E\uDC04'
-
- -

Les objets String

- -

L'objet {{jsxref("String")}} est un conteneur autour du type de donnée primitif chaîne de caractères.

- -
var s = new String('foo'); // crée un objet String
-console.log(s); // affiche : {'0': 'f', '1': 'o', '2': 'o'}
-typeof s; // retourne 'object'
- -

Vous pouvez appeler chacune des méthodes de l'objet String avec une valeur littérale de chaîne de caractères : JavaScript convertira automatiquement le littéral en un objet String temporaire, appellera la méthode, puis supprimera l'objet String temporaire. Vous pouvez aussi utiliser la propriété String.length sur un littéral de chaîne de caractères.

- -

Vous devriez utiliser des littéraux de chaîne de caractères, à moins que vous n'ayez spécifiquement besoin d'un objet String, parce que les objets String peuvent avoir un comportement contre-intuitif :

- -
var s1 = '2 + 2'; // crée une valeur de chaîne de caractères
-var s2 = new String('2 + 2'); // crée un objet String
-eval(s1); // renvoie le nombre 4
-eval(s2); // renvoie la chaîne "2 + 2"
- -

Un objet String possède une propriété, length, qui indique le nombre d'unités de codage UTF-16 dans la chaîne de caractères. Par exemple, le code suivant affecte à x la valeur 16, parce que la chaîne "Bonjour, Monde !" contient 16 caractères, chacun représenté par une unité de codage UTF-16. Vous pouvez accéder à chaque unité de codage en utilisant une syntaxe de tableau entre crochets. Vous ne pouvez pas changer les caractères, du fait que les chaînes sont des objets immuables (semblables à des tableaux) :

- -
var machaine = 'Bonjour, Monde !';
-var x = machaine.length;
-machaine[0] = 'L'; // cela n'a aucun effet car les chaînes sont immuables
-machaine[0]; // cela renvoie "B"
-
- -

Les caractères dont les valeurs scalaires sont supérieures à U+FFFF (comme certains rares caractères chinois/japonais/coréens/vietnamiens et certains emojis) sont stockés en UTF-16 via deux unités de codage de remplacement. Par exemple, une chaîne de caractères contenant le seul caractère U+1F600 ("Emoji grinning face") aura une longueur de 2. Le fait d'accéder aux unités de codage individuelles dans une telle chaîne de caractères en utilisant des crochets peut avoir des conséquences indésirables telles que la génération d'unité de codage de remplacement non conformes, en violation du standard Unicode. (Des exemples devraient être ajoutés à cette page après que le bug MDN 857438 sera corrigé. Voir aussi {{jsxref("String.fromCodePoint()")}} ou {{jsxref("String.prototype.codePointAt()")}}.

- -

Un objet String a une grande variété de méthodes : par exemple, celles qui retournent une variation de la chaîne de caractères elle-même, telles que substring et toUpperCase.

- -

Le tableau suivant résume les méthodes des objets {{jsxref("String")}}.

- -

Méthodes de String

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MéthodeDescription
{{jsxref("String.charAt", "charAt")}}, {{jsxref("String.charCodeAt", "charCodeAt")}}, {{jsxref("String.codePointAt", "codePointAt")}}Retourne le caractère ou le code de caractère à la position spécifiée de la chaîne de caractères.
{{jsxref("String.indexOf", "indexOf")}}, {{jsxref("String.lastIndexOf", "lastIndexOf")}}Retourne la position de la sous-chaîne spécifiée dans la chaîne de caractères, ou la dernière position de la sous-chaîne spécifiée, respectivement.
{{jsxref("String.startsWith", "startsWith")}}, {{jsxref("String.endsWith", "endsWith")}}, {{jsxref("String.includes", "includes")}}Retourne le fait de savoir si la chaîne de caractères courante commence ou non par, finit ou non par, ou contient ou non, la chaîne spécifiée.
{{jsxref("String.concat", "concat")}}Combine le texte de deux chaînes de caractères et retourne une nouvelle chaîne de caractères.
{{jsxref("String.fromCharCode", "fromCharCode")}}, {{jsxref("String.fromCodePoint", "fromCodePoint")}},Construit une chaîne de caractères à partir de la séquence de valeurs Unicode fournie. Cette méthode est une méthode de la classe String et non une instance de String.
{{jsxref("String.split", "split")}}Découpe un objet String en un tableau de chaînes de caractères en découpant la chaîne de caractères en sous-chaînes.
{{jsxref("String.slice", "slice")}}Extrait une partie de la chaîne de caractères et retourne une nouvelle chaîne de caractères.
{{jsxref("String.substring", "substring")}}, {{jsxref("String.substr", "substr")}}Retourne le sous-ensemble spécifié de la chaîne de caractères, en spécifiant soit des indices de début et de fin, soit l'indice de début et une longueur.
{{jsxref("String.match", "match")}}, {{jsxref("String.matchAll", "matchAll")}}, {{jsxref("String.replace", "replace")}}, {{jsxref("String.search", "search")}}Ces fonctions utilisent des expressions rationnelles.
{{jsxref("String.toLowerCase", "toLowerCase")}}, {{jsxref("String.toUpperCase", "toUpperCase")}} -

Retourne la chaîne tout en minuscules ou tout en majuscules, respectivement.

-
{{jsxref("String.normalize", "normalize")}}Retourne la Forme Normalisée Unicode de la chaîne de caractères appelante.
{{jsxref("String.repeat", "repeat")}}Retourne une chaîne constituée des éléments de l'objet répétés le nombre de fois donné.
{{jsxref("String.trim", "trim")}}Retire les blancs en début et en fin de chaîne.
- -

Les littéraux de modèle multi-lignes

- -

Le littéraux de modèle sont des littéraux de chaîne de caractères permettant des expressions intégrées. Avec eux, vous pouvez utiliser des chaînes de caractères multi-lignes et des fonctionnalités d'interpolation de chaînes.

- -

Les littéraux de gabarits sont délimités par des accents graves (ou backticks` ` en anglais), au lieu des apostrophes simples ou doubles. Les littéraux de modèle peuvent contenir des marque-places. Ceux-ci sont indiqués par le signe dollar et des accolades (${expression}).

- -

Multi-lignes

- -

Tout caractère de passage à la ligne inséré dans le source fait partie du littéral de modèle. En utilisant les chaînes de caractères normales, vous auriez eu à utiliser la syntaxe suivante afin d'avoir des chaînes de caractères multi-lignes :

- -
console.log('chaîne ligne de texte 1\n\
-chaîne ligne de texte 2');
-// "chaîne ligne de texte 1
-// chaîne ligne de texte 2"
- -

Pour obtenir le même effet avec des chaînes de caractères multi-lignes, vous pouvez maintenant écrire :

- -
console.log(`chaîne ligne de texte 1
-chaîne ligne de texte 2`);
-// "chaîne ligne de texte 1
-// chaîne ligne de texte 2"
- -

Expressions intégrées

- -

Pour intégrer des expressions dans des chaînes normales, vous devriez utiliser la syntaxe suivante :

- -
var a = 5;
-var b = 10;
-console.log('Quinze vaut ' + (a + b) + ' et\npas ' + (2 * a + b) + '.');
-// "Quinze vaut 15 et
-// pas 20."
- -

Maintenant, avec les modèles, vous pouvez utiliser du sucre syntaxique rendant plus lisibles les substitutions comme celle-ci :

- -
var a = 5;
-var b = 10;
-console.log(`Quinze vaut ${a + b} et\npas ${2 * a + b}.`);
-// "Quinze vaut 15 et
-// pas 20."
- -

Pour plus d'informations, voir les Littéraux de modèles dans la Référence JavaScript.

- -

Internationalisation

- -

L'objet {{jsxref("Intl")}} est l'espace de noms pour l'API d'Internationalisation de l'ECMAScript, qui fournit des fonctionnalités de comparaison de chaînes de caractères, de formatage de nombres, et de formatage des dates et heures prenant en compte la langue. Les constructeurs pour les objets {{jsxref("Collator")}}, {{jsxref("NumberFormat")}} et {{jsxref("DateTimeFormat")}} sont des propriétés de l'objet Intl.

- -

Formatage date et heure

- -

L'objet {{jsxref("DateTimeFormat")}} est utile pour formater la date et l'heure. Ce qui suit formate une date en anglais telle qu'utilisée aux États-Unis (le résultat sera différent dans une autre zone horaire).

- -
var msParJour = 24 * 60 * 60 * 1000;
-
-// 17 juillet 2014 00:00:00 UTC.
-var _17juillet2014 = new Date(msParJour * (44 * 365 + 11 + 197));
-
-var options = { year: "2-digit", month: "2-digit", day: "2-digit",
-                hour: "2-digit", minute: "2-digit", timeZoneName: "short" };
-var dateHeureAmericaine = new Intl.DateTimeFormat("en-US", options).format;
-
-console.log(dateHeureAmericaine(_17juillet2014)); // 07/16/14, 5:00 PM PDT
-
- -

Formatage des nombres

- -

L'objet {{jsxref("NumberFormat")}} est utile pour formater les nombres, par exemple, les devises :

- -
var prixDeLEssence = new Intl.NumberFormat("en-US",
-                        { style: "currency", currency: "USD",
-                          minimumFractionDigits: 3 });
-
-console.log(prixDeLEssence.format(5.259)); // $5.259
-
-var decimalesHanRMBEnChine = new Intl.NumberFormat("zh-CN-u-nu-hanidec",
-                        { style: "currency", currency: "CNY" });
-
-console.log(decimalesHanRMBEnChine.format(1314.25)); // ¥ 一,三一四.二五
-
- -

Ordonnancement

- -

L'objet {{jsxref("Collator")}} est utile pour comparer et trier des chaînes de caractères.

- -

Par exemple, il y a en fait deux ordres de tri en allemand, annuaire et dictionnaire. Annuaire met l'accent sur le son, et c'est comme si "ä", "ö", etc. étaient étendus en "ae", "oe", etc. avant le tri :

- -
var noms = ['Hochberg', 'Hönigswald', 'Holzman'];
-
-var annuaireAllemand = new Intl.Collator('de-DE-u-co-phonebk');
-
-// Comme si tri de ['Hochberg', 'Hoenigswald', 'Holzman']:
-console.log(noms.sort(annuaireAllemand.compare).join(', '));
-// Affiche "Hochberg, Hönigswald, Holzman"
-
- -

Certains mots allemands se conjuguent avec des umlauts supplémentaires, de sorte que dans les dictionnaires, le fait d'ignorer les umlauts pour le tri  est perceptible (sauf lors du tri de mots ne différant que par des umlauts, comme schon avant schön).

- -
var dictionnaireAllemand = new Intl.Collator('de-DE-u-co-dict');
-
-// Comme si tri de ["Hochberg", "Honigswald", "Holzman"]:
-console.log(nom.sort(dictionnaireAllemand.compare).join(', '));
-// Affiche "Hochberg, Holzman, Hönigswald"
-
- -

Pour plus d'informations sur l'API {{jsxref("Intl")}}, voir aussi Introducing the JavaScript Internationalization API.

- -

{{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}

diff --git a/files/fr/web/javascript/guide/text_formatting/index.md b/files/fr/web/javascript/guide/text_formatting/index.md new file mode 100644 index 0000000000..0049f8f7ac --- /dev/null +++ b/files/fr/web/javascript/guide/text_formatting/index.md @@ -0,0 +1,254 @@ +--- +title: Formatage de texte +slug: Web/JavaScript/Guide/Text_formatting +tags: + - Guide + - JavaScript + - l10n:priority +translation_of: Web/JavaScript/Guide/Text_formatting +original_slug: Web/JavaScript/Guide/Formatage_du_texte +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}
+ +

Ce chapitre présente comment travailler avec les chaînes de caractères et le texte en JavaScript.

+ +

Les chaînes de caractères

+ +

Le type {{Glossary("String")}} de JavaScript est utilisé pour représenter des données textuelles. C'est un ensemble d'"éléments" de valeurs non signées sur 16 bits (unités de codage UTF-16). Chaque élément dans la chaîne de caractères occupe une position dans la chaîne de caractères. Le premier élément se trouve à l'indice 0, le suivant à l'indice 1 et ainsi de suite. La longueur d'une chaîne de caractères est le nombre d'éléments qu'elle contient. Vous pouvez créer des chaînes de caractères en utilisant des littéraux de chaîne de caractères ou des objets chaîne de caractères.

+ +

Les littéraux de chaînes de caractères

+ +

Vous pouvez créer des chaînes de caractères simple en utilisant des apostrophes simples ou doubles :

+ +
'machin'
+"truc"
+ +

Des chaînes plus avancées peuvent être créées en utilisant des séquences d'échappement.

+ +

Les séquences d'échappement hexadécimales

+ +

Le nombre situé après \x est interprété comme un nombre hexadécimal :

+ +
'\xA9' // "©"
+ +

Les séquences d'échappement Unicode

+ +

Les séquences d'échappement Unicode requièrent au moins quatres caractères hexadécimaux après \u.

+ +
'\u00A9' // "©"
+ +

L'échappement d'unités de codage Unicode

+ +

Nouveau dans ECMAScript 2015. Avec les échappements d'unités de codage Unicode, tout caractère peut être échappé en utilisant des nombres hexadécimaux, de sorte qu'il est possible de d'utiliser des unités de codage Unicode jusqu'à 0x10FFFF. Avec les échappements Unicode simples, il est souvent nécessaire d'écrire les moitiés de remplacement séparément pour obtenir le même résultat.

+ +

Voir aussi {{jsxref("String.fromCodePoint()")}} ou {{jsxref("String.prototype.codePointAt()")}}.

+ +
'\u{2F804}'
+
+// Le même avec des échappements Unicode simples
+'\uD87E\uDC04'
+
+ +

Les objets String

+ +

L'objet {{jsxref("String")}} est un conteneur autour du type de donnée primitif chaîne de caractères.

+ +
var s = new String('foo'); // crée un objet String
+console.log(s); // affiche : {'0': 'f', '1': 'o', '2': 'o'}
+typeof s; // retourne 'object'
+ +

Vous pouvez appeler chacune des méthodes de l'objet String avec une valeur littérale de chaîne de caractères : JavaScript convertira automatiquement le littéral en un objet String temporaire, appellera la méthode, puis supprimera l'objet String temporaire. Vous pouvez aussi utiliser la propriété String.length sur un littéral de chaîne de caractères.

+ +

Vous devriez utiliser des littéraux de chaîne de caractères, à moins que vous n'ayez spécifiquement besoin d'un objet String, parce que les objets String peuvent avoir un comportement contre-intuitif :

+ +
var s1 = '2 + 2'; // crée une valeur de chaîne de caractères
+var s2 = new String('2 + 2'); // crée un objet String
+eval(s1); // renvoie le nombre 4
+eval(s2); // renvoie la chaîne "2 + 2"
+ +

Un objet String possède une propriété, length, qui indique le nombre d'unités de codage UTF-16 dans la chaîne de caractères. Par exemple, le code suivant affecte à x la valeur 16, parce que la chaîne "Bonjour, Monde !" contient 16 caractères, chacun représenté par une unité de codage UTF-16. Vous pouvez accéder à chaque unité de codage en utilisant une syntaxe de tableau entre crochets. Vous ne pouvez pas changer les caractères, du fait que les chaînes sont des objets immuables (semblables à des tableaux) :

+ +
var machaine = 'Bonjour, Monde !';
+var x = machaine.length;
+machaine[0] = 'L'; // cela n'a aucun effet car les chaînes sont immuables
+machaine[0]; // cela renvoie "B"
+
+ +

Les caractères dont les valeurs scalaires sont supérieures à U+FFFF (comme certains rares caractères chinois/japonais/coréens/vietnamiens et certains emojis) sont stockés en UTF-16 via deux unités de codage de remplacement. Par exemple, une chaîne de caractères contenant le seul caractère U+1F600 ("Emoji grinning face") aura une longueur de 2. Le fait d'accéder aux unités de codage individuelles dans une telle chaîne de caractères en utilisant des crochets peut avoir des conséquences indésirables telles que la génération d'unité de codage de remplacement non conformes, en violation du standard Unicode. (Des exemples devraient être ajoutés à cette page après que le bug MDN 857438 sera corrigé. Voir aussi {{jsxref("String.fromCodePoint()")}} ou {{jsxref("String.prototype.codePointAt()")}}.

+ +

Un objet String a une grande variété de méthodes : par exemple, celles qui retournent une variation de la chaîne de caractères elle-même, telles que substring et toUpperCase.

+ +

Le tableau suivant résume les méthodes des objets {{jsxref("String")}}.

+ +

Méthodes de String

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MéthodeDescription
{{jsxref("String.charAt", "charAt")}}, {{jsxref("String.charCodeAt", "charCodeAt")}}, {{jsxref("String.codePointAt", "codePointAt")}}Retourne le caractère ou le code de caractère à la position spécifiée de la chaîne de caractères.
{{jsxref("String.indexOf", "indexOf")}}, {{jsxref("String.lastIndexOf", "lastIndexOf")}}Retourne la position de la sous-chaîne spécifiée dans la chaîne de caractères, ou la dernière position de la sous-chaîne spécifiée, respectivement.
{{jsxref("String.startsWith", "startsWith")}}, {{jsxref("String.endsWith", "endsWith")}}, {{jsxref("String.includes", "includes")}}Retourne le fait de savoir si la chaîne de caractères courante commence ou non par, finit ou non par, ou contient ou non, la chaîne spécifiée.
{{jsxref("String.concat", "concat")}}Combine le texte de deux chaînes de caractères et retourne une nouvelle chaîne de caractères.
{{jsxref("String.fromCharCode", "fromCharCode")}}, {{jsxref("String.fromCodePoint", "fromCodePoint")}},Construit une chaîne de caractères à partir de la séquence de valeurs Unicode fournie. Cette méthode est une méthode de la classe String et non une instance de String.
{{jsxref("String.split", "split")}}Découpe un objet String en un tableau de chaînes de caractères en découpant la chaîne de caractères en sous-chaînes.
{{jsxref("String.slice", "slice")}}Extrait une partie de la chaîne de caractères et retourne une nouvelle chaîne de caractères.
{{jsxref("String.substring", "substring")}}, {{jsxref("String.substr", "substr")}}Retourne le sous-ensemble spécifié de la chaîne de caractères, en spécifiant soit des indices de début et de fin, soit l'indice de début et une longueur.
{{jsxref("String.match", "match")}}, {{jsxref("String.matchAll", "matchAll")}}, {{jsxref("String.replace", "replace")}}, {{jsxref("String.search", "search")}}Ces fonctions utilisent des expressions rationnelles.
{{jsxref("String.toLowerCase", "toLowerCase")}}, {{jsxref("String.toUpperCase", "toUpperCase")}} +

Retourne la chaîne tout en minuscules ou tout en majuscules, respectivement.

+
{{jsxref("String.normalize", "normalize")}}Retourne la Forme Normalisée Unicode de la chaîne de caractères appelante.
{{jsxref("String.repeat", "repeat")}}Retourne une chaîne constituée des éléments de l'objet répétés le nombre de fois donné.
{{jsxref("String.trim", "trim")}}Retire les blancs en début et en fin de chaîne.
+ +

Les littéraux de modèle multi-lignes

+ +

Le littéraux de modèle sont des littéraux de chaîne de caractères permettant des expressions intégrées. Avec eux, vous pouvez utiliser des chaînes de caractères multi-lignes et des fonctionnalités d'interpolation de chaînes.

+ +

Les littéraux de gabarits sont délimités par des accents graves (ou backticks` ` en anglais), au lieu des apostrophes simples ou doubles. Les littéraux de modèle peuvent contenir des marque-places. Ceux-ci sont indiqués par le signe dollar et des accolades (${expression}).

+ +

Multi-lignes

+ +

Tout caractère de passage à la ligne inséré dans le source fait partie du littéral de modèle. En utilisant les chaînes de caractères normales, vous auriez eu à utiliser la syntaxe suivante afin d'avoir des chaînes de caractères multi-lignes :

+ +
console.log('chaîne ligne de texte 1\n\
+chaîne ligne de texte 2');
+// "chaîne ligne de texte 1
+// chaîne ligne de texte 2"
+ +

Pour obtenir le même effet avec des chaînes de caractères multi-lignes, vous pouvez maintenant écrire :

+ +
console.log(`chaîne ligne de texte 1
+chaîne ligne de texte 2`);
+// "chaîne ligne de texte 1
+// chaîne ligne de texte 2"
+ +

Expressions intégrées

+ +

Pour intégrer des expressions dans des chaînes normales, vous devriez utiliser la syntaxe suivante :

+ +
var a = 5;
+var b = 10;
+console.log('Quinze vaut ' + (a + b) + ' et\npas ' + (2 * a + b) + '.');
+// "Quinze vaut 15 et
+// pas 20."
+ +

Maintenant, avec les modèles, vous pouvez utiliser du sucre syntaxique rendant plus lisibles les substitutions comme celle-ci :

+ +
var a = 5;
+var b = 10;
+console.log(`Quinze vaut ${a + b} et\npas ${2 * a + b}.`);
+// "Quinze vaut 15 et
+// pas 20."
+ +

Pour plus d'informations, voir les Littéraux de modèles dans la Référence JavaScript.

+ +

Internationalisation

+ +

L'objet {{jsxref("Intl")}} est l'espace de noms pour l'API d'Internationalisation de l'ECMAScript, qui fournit des fonctionnalités de comparaison de chaînes de caractères, de formatage de nombres, et de formatage des dates et heures prenant en compte la langue. Les constructeurs pour les objets {{jsxref("Collator")}}, {{jsxref("NumberFormat")}} et {{jsxref("DateTimeFormat")}} sont des propriétés de l'objet Intl.

+ +

Formatage date et heure

+ +

L'objet {{jsxref("DateTimeFormat")}} est utile pour formater la date et l'heure. Ce qui suit formate une date en anglais telle qu'utilisée aux États-Unis (le résultat sera différent dans une autre zone horaire).

+ +
var msParJour = 24 * 60 * 60 * 1000;
+
+// 17 juillet 2014 00:00:00 UTC.
+var _17juillet2014 = new Date(msParJour * (44 * 365 + 11 + 197));
+
+var options = { year: "2-digit", month: "2-digit", day: "2-digit",
+                hour: "2-digit", minute: "2-digit", timeZoneName: "short" };
+var dateHeureAmericaine = new Intl.DateTimeFormat("en-US", options).format;
+
+console.log(dateHeureAmericaine(_17juillet2014)); // 07/16/14, 5:00 PM PDT
+
+ +

Formatage des nombres

+ +

L'objet {{jsxref("NumberFormat")}} est utile pour formater les nombres, par exemple, les devises :

+ +
var prixDeLEssence = new Intl.NumberFormat("en-US",
+                        { style: "currency", currency: "USD",
+                          minimumFractionDigits: 3 });
+
+console.log(prixDeLEssence.format(5.259)); // $5.259
+
+var decimalesHanRMBEnChine = new Intl.NumberFormat("zh-CN-u-nu-hanidec",
+                        { style: "currency", currency: "CNY" });
+
+console.log(decimalesHanRMBEnChine.format(1314.25)); // ¥ 一,三一四.二五
+
+ +

Ordonnancement

+ +

L'objet {{jsxref("Collator")}} est utile pour comparer et trier des chaînes de caractères.

+ +

Par exemple, il y a en fait deux ordres de tri en allemand, annuaire et dictionnaire. Annuaire met l'accent sur le son, et c'est comme si "ä", "ö", etc. étaient étendus en "ae", "oe", etc. avant le tri :

+ +
var noms = ['Hochberg', 'Hönigswald', 'Holzman'];
+
+var annuaireAllemand = new Intl.Collator('de-DE-u-co-phonebk');
+
+// Comme si tri de ['Hochberg', 'Hoenigswald', 'Holzman']:
+console.log(noms.sort(annuaireAllemand.compare).join(', '));
+// Affiche "Hochberg, Hönigswald, Holzman"
+
+ +

Certains mots allemands se conjuguent avec des umlauts supplémentaires, de sorte que dans les dictionnaires, le fait d'ignorer les umlauts pour le tri  est perceptible (sauf lors du tri de mots ne différant que par des umlauts, comme schon avant schön).

+ +
var dictionnaireAllemand = new Intl.Collator('de-DE-u-co-dict');
+
+// Comme si tri de ["Hochberg", "Honigswald", "Holzman"]:
+console.log(nom.sort(dictionnaireAllemand.compare).join(', '));
+// Affiche "Hochberg, Holzman, Hönigswald"
+
+ +

Pour plus d'informations sur l'API {{jsxref("Intl")}}, voir aussi Introducing the JavaScript Internationalization API.

+ +

{{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}

diff --git a/files/fr/web/javascript/guide/using_promises/index.html b/files/fr/web/javascript/guide/using_promises/index.html deleted file mode 100644 index 5f30035f51..0000000000 --- a/files/fr/web/javascript/guide/using_promises/index.html +++ /dev/null @@ -1,315 +0,0 @@ ---- -title: Utiliser les promesses -slug: Web/JavaScript/Guide/Using_promises -tags: - - Guide - - Intermédiaire - - JavaScript - - Promesses - - Promise -translation_of: Web/JavaScript/Guide/Using_promises -original_slug: Web/JavaScript/Guide/Utiliser_les_promesses ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Le_modèle_objet_JavaScript_en_détails", "Web/JavaScript/Guide/iterateurs_et_generateurs")}}
- -

Une promesse est un objet ({{jsxref("Promise")}}) qui représente la complétion ou l'échec d'une opération asynchrone. La plupart du temps, on « consomme » des promesses et c'est donc ce que nous verrons dans la première partie de ce guide pour ensuite expliquer comment les créer.

- -

En résumé, une promesse est un objet qui est renvoyé et auquel on attache des callbacks plutôt que de passer des callbacks à une fonction. Ainsi, au lieu d'avoir une fonction qui prend deux callbacks en arguments :

- -
function faireQqcALAncienne(successCallback, failureCallback){
-  console.log("C'est fait");
-  // réussir une fois sur deux
-  if (Math.random() > .5) {
-    successCallback("Réussite");
-  } else {
-    failureCallback("Échec");
-  }
-}
-
-function successCallback(résultat) {
-  console.log("L'opération a réussi avec le message : " + résultat);
-}
-
-
-function failureCallback(erreur) {
-  console.error("L'opération a échoué avec le message : " + erreur);
-}
-
-faireQqcALAncienne(successCallback, failureCallback);
-
-
- -

On aura une fonction qui renvoie une promesse et on attachera les callbacks sur cette promesse :

- -
function faireQqc() {
-  return new Promise((successCallback, failureCallback) => {
-    console.log("C'est fait");
-    // réussir une fois sur deux
-    if (Math.random() > .5) {
-      successCallback("Réussite");
-    } else {
-      failureCallback("Échec");
-    }
-  })
-}
-
-const promise = faireQqc();
-promise.then(successCallback, failureCallback);
-
- -

ou encore :

- -
faireQqc().then(successCallback, failureCallback);
-
- -

Cette dernière forme est ce qu'on appelle un appel de fonction asynchrone. Cette convention possède différents avantages dont le premier est le chaînage.

- -

Garanties

- -

À la différence des imbrications de callbacks, une promesse apporte certaines garanties :

- - - -

Chaînage des promesses

- -

Un besoin fréquent est d'exécuter deux ou plus d'opérations asynchrones les unes à la suite des autres, avec chaque opération qui démarre lorsque la précédente a réussi et en utilisant le résultat de l'étape précédente. Ceci peut être réalisé en créant une chaîne de promesses.

- -

La méthode then() renvoie une nouvelle promesse, différente de la première :

- -
const promise = faireQqc();
-const promise2 = promise.then(successCallback, failureCallback);
-
- -

ou encore :

- -
const promise2 = faireQqc().then(successCallback, failureCallback);
-
- -

La deuxième promesse (promise2) indique l'état de complétion, pas uniquement pour faireQqc() mais aussi pour le callback qui lui a été passé (successCallback ou failureCallback) qui peut aussi être une fonction asynchrone qui renvoie une promesse. Lorsque c'est le cas, tous les callbacks ajoutés à promise2 forment une file derrière la promesse renvoyée par successCallback ou failureCallback.

- -

Autrement dit, chaque promesse représente l'état de complétion d'une étape asynchrone au sein de cette succession d'étapes.

- -

Auparavant, l'enchaînement de plusieurs opérations asynchrones déclenchait une pyramide dantesque de callbacks :

- -
faireQqc(function(result) {
-  faireAutreChose(result, function(newResult) {
-    faireUnTroisiemeTruc(newResult, function(finalResult) {
-      console.log('Résultat final :' + finalResult);
-    }, failureCallback);
-  }, failureCallback);
-}, failureCallback);
-
- -

Grâce à des fonctions plus modernes et aux promesses, on attache les callbacks aux promesses qui sont renvoyées. On peut ainsi construire une chaîne de promesses :

- -
faireQqc().then(function(result) {
-  return faireAutreChose(result);
-})
-.then(function(newResult) {
-  return faireUnTroisiemeTruc(newResult);
-})
-.then(function(finalResult) {
-  console.log('Résultat final : ' + finalResult);
-})
-.catch(failureCallback);
-
- -

Les arguments passés à then sont optionnels. La forme catch(failureCallback) est un alias plus court pour then(null, failureCallback). Ces chaînes de promesses sont parfois construites avec des fonctions fléchées :

- -
faireQqc()
-.then(result => faireAutreChose(result))
-.then(newResult => faireUnTroisiemeTruc(newResult))
-.then(finalResult => {
-  console.log('Résultat final : ' + finalResult);
-})
-.catch(failureCallback);
-
- -
-

Attention : cela implique que les fonctions asynchrones renvoient toutes des promesses, sinon les callbacks ne pourront être chaînés et les erreurs ne seront pas interceptées (les fonctions fléchées ont une valeur de retour implicite si les accolades ne sont pas utilisées : () => x est synonyme de () => { return x; }).

-
- -

Chaînage après un catch

- -

Il est possible de chaîner de nouvelles actions après un rejet, c'est-à-dire un catch. C'est utile pour accomplir de nouvelles actions après qu'une action ait échoué dans la chaine. Par exemple :

- -
new Promise((resolve, reject) => {
-    console.log('Initial');
-
-    resolve();
-})
-.then(() => {
-    throw new Error('Something failed');
-
-    console.log('Do this');
-})
-.catch(() => {
-    console.error('Do that');
-})
-.then(() => {
-    console.log('Do this whatever happened before');
-});
-
- -

Cela va produire la sortie suivante :

- -
Initial
-Do that
-Do this whatever happened before
-
- -

Notez que le texte Do this n'est pas affiché car l'erreur Something failed a produit un rejet.

- -

Propagation des erreurs

- -

Dans les exemples précédents, failureCallback était présent trois fois dans la pyramide de callbacks et une seule fois, à la fin, dans la chaîne des promesses :

- -
faireQqc()
-.then(result => faireAutreChose(result))
-.then(newResult => faireUnTroisiemeTruc(newResult))
-.then(finalResult => console.log('Résultat final : ' + finalResult))
-.catch(failureCallback);
-
- -

En fait, dès qu'une exception est levée, la chaîne de promesses utilisera le premier catch() ou onRejected disponible. Ce fonctionnement est assez proche de ce qu'on peut trouver pour du code synchrone :

- -
try {
-  const result = syncFaireQqc();
-  const newResult = syncFaireQqcAutre(result);
-  const finalResult = syncFaireUnTroisiemeTruc(newResult);
-  console.log('Résultat final : ' + finalResult);
-} catch(error) {
-  failureCallback(error);
-}
-
- -

Cette symétrie entre le code asynchrone et le code synchrone atteint son paroxysme avec le couple d'opérateurs async/await d'ECMAScript 2017:

- -
async function toto() {
-  try {
-    const result = await faireQqc();
-    const newResult = await faireQqcAutre(result);
-    const finalResult = await faireUnTroisiemeTruc(newResult);
-    console.log('Résultat final : ' + finalResult);
-  } catch(error) {
-    failureCallback(error);
-  }
-}
-
- -

Ce fonctionnement est construit sur les promesses et faireQqc() est la même fonction que celle utilisée dans les exemples précédents.

- -

Les promesses permettent de résoudre les problèmes de cascades infernales de callbacks notamment en interceptant les différentes erreurs (exceptions et erreurs de programmation). Ceci est essentiel pour obtenir une composition fonctionnelle des opérations asynchrones.

- -

Évènements liés à la rupture d'une promesse

- -

Lorsqu'une promesse est rompue/rejetée, un des deux évènements suivants est envoyé au niveau de la portée globale ({{domxref("window")}} ou {{domxref("Worker")}} si le script est utilisé dans un worker) :

- -
-
{{domxref("Window.rejectionhandled_event","rejectionhandled")}}
-
Cet évènement est envoyé lorsqu'une promesse est rompue et après que le rejet ai été traité par la fonction reject associée à la promesse.
-
{{domxref("Window.unhandledrejection_event","unhandledrejection")}}
-
Cet évènement est envoyé lorsque la promesse est rompue et qu'aucune fonction n'a été définie pour gérer le rejet de la promesse.
-
- -

Dans les deux cas, l'évènement (dont le type est {{domxref("PromiseRejectionEvent")}}) aura deux propriétés :

- -
-
{{domxref("PromiseRejectionEvent.promise","promise")}}
-
La promesse qui a été rompue.
-
{{domxref("PromiseRejectionEvent.reason","reason")}}
-
La raison pour laquelle la promesse a été rompue.
-
- -

Gérer ces évènements permet d'avoir une ultime méthode pour gérer le rejet des promesses. Cela peut notamment s'avérer utile pour le débogage. Ces évènements sont déclenchés au niveau global et permettent ainsi d'intercepter les erreurs pour chaque contexte (fenêtre ou worker)

- -
window.addEventListener("unhandledrejection", event => {
-  // Examiner la ou les promesse(s) qui posent problème en debug
-  // Nettoyer ce qui doit l'être quand ça se produit en réel
-
-}, false);
- -

Envelopper les callbacks des API

- -

Il est possible de créer un objet  {{jsxref("Promise")}} grâce à son constructeur. Et même si, idéalement, cela ne devrait pas être nécessaire, certaines API fonctionnent toujours avec des callbacks passés en arguments. C'est notamment le cas de la méthode  {{domxref("WindowTimers.setTimeout", "setTimeout()")}} :

- -
setTimeout(() => saySomething("10 seconds passed"), 10 * 1000);
-
- -

Si on mélange des callbacks et des promesses, cela sera problématique. Si  saySomething échoue ou contient des erreurs, rien n'interceptera l'erreur.

- -

Pour ces fonctions, la meilleure pratique consiste à les envelopper dans des promesses au plus bas niveau possible et de ne plus les appeler directement :

- -
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
-
-wait(10 * 1000).then(() => saySomething("10 seconds")).catch(failureCallback);
-
- -

Le constructeur Promise prend en argument une fonction et nous permet de la convertir manuellement en une promesse. Ici, vu que setTimeout n'échoue pas vraiment, on laisse de côté la gestion de l'échec.

- -

Composition

- -

{{jsxref("Promise.resolve()")}} et {{jsxref("Promise.reject()")}} sont des méthodes qui permettent de créer des promesses déjà tenues ou rompues.

- -

{{jsxref("Promise.all()")}} et {{jsxref("Promise.race()")}} sont deux outils de composition qui permettent de mener des opérations asynchrones en parallèle.

- -

On peut lancer des opérations en parallèles et attendre qu'elles soient toutes finies de cette façon :

- -
Promise.all([func1(), func2(), func3()])
-.then(([resultat1, resultat2, resultat3]) => { /* où on utilise resultat1/2/3 */ });
- -

Il est possible de construire une composition séquentielle de la façon suivante :

- -
[func1, func2].reduce((p, f) => p.then(f), Promise.resolve());
-
- -

Dans ce fragment de code, on réduit un tableau de fonctions asynchrones en une chaîne de promesse équivalente à : Promise.resolve().then(func1).then(func2);

- -

On peut également accomplir cela avec une fonction de composition réutilisable  :

- -
const applyAsync = (acc, val) => acc.then(val);
-const composeAsync = (...funcs) => x => funcs.reduce(applyAsync, Promise.resolve(x));
- -

La fonction composeAsync accepte autant de fonctions que nécessaire comme arguments et renvoie une nouvelle fonction qui prend une valeur initiale pour la passer à travers ces étapes de compositions. Cette façon de faire garantit que les fonctions, qu'elles soient synchrones ou asynchrones, sont exécutées dans le bon ordre :

- -
const transformData = composeAsync(func1, asyncFunc1, asyncFunc2, func2);
-transformData(data);
- -

Avec ECMAScript 2017, on peut obtenir une composition séquentielle plus simplement avec les opérateurs await/async :

- -
let result;
-for(const f of [func1, func2, func3]) {
-  result = await f(result);
-} 
- -

Gestion du temps

- -

Pour éviter de mauvaises surprises, les fonctions passées à then() ne seront jamais appelées de façon synchrone, y compris lorsqu'il s'agit d'une promesse déjà résolue :

- -
Promise.resolve().then(() => console.log(2));
-console.log(1); // 1, 2
-
- -

En fait, la fonction passée à then() est placée dans une file de micro-tâches qui sont exécutées lorsque cette file est vidée à la fin de la boucle d'évènements JavaScript :

- -
var wait = ms => new Promise(resolve => setTimeout(resolve, ms));
-
-wait().then(() => console.log(4));
-Promise.resolve().then(() => console.log(2)).then(() => console.log(3));
-console.log(1); // 1, 2, 3, 4
-
- -

Voir aussi

- - - -

{{PreviousNext("Web/JavaScript/Guide/Le_modèle_objet_JavaScript_en_détails", "Web/JavaScript/Guide/iterateurs_et_generateurs")}}

diff --git a/files/fr/web/javascript/guide/using_promises/index.md b/files/fr/web/javascript/guide/using_promises/index.md new file mode 100644 index 0000000000..5f30035f51 --- /dev/null +++ b/files/fr/web/javascript/guide/using_promises/index.md @@ -0,0 +1,315 @@ +--- +title: Utiliser les promesses +slug: Web/JavaScript/Guide/Using_promises +tags: + - Guide + - Intermédiaire + - JavaScript + - Promesses + - Promise +translation_of: Web/JavaScript/Guide/Using_promises +original_slug: Web/JavaScript/Guide/Utiliser_les_promesses +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Le_modèle_objet_JavaScript_en_détails", "Web/JavaScript/Guide/iterateurs_et_generateurs")}}
+ +

Une promesse est un objet ({{jsxref("Promise")}}) qui représente la complétion ou l'échec d'une opération asynchrone. La plupart du temps, on « consomme » des promesses et c'est donc ce que nous verrons dans la première partie de ce guide pour ensuite expliquer comment les créer.

+ +

En résumé, une promesse est un objet qui est renvoyé et auquel on attache des callbacks plutôt que de passer des callbacks à une fonction. Ainsi, au lieu d'avoir une fonction qui prend deux callbacks en arguments :

+ +
function faireQqcALAncienne(successCallback, failureCallback){
+  console.log("C'est fait");
+  // réussir une fois sur deux
+  if (Math.random() > .5) {
+    successCallback("Réussite");
+  } else {
+    failureCallback("Échec");
+  }
+}
+
+function successCallback(résultat) {
+  console.log("L'opération a réussi avec le message : " + résultat);
+}
+
+
+function failureCallback(erreur) {
+  console.error("L'opération a échoué avec le message : " + erreur);
+}
+
+faireQqcALAncienne(successCallback, failureCallback);
+
+
+ +

On aura une fonction qui renvoie une promesse et on attachera les callbacks sur cette promesse :

+ +
function faireQqc() {
+  return new Promise((successCallback, failureCallback) => {
+    console.log("C'est fait");
+    // réussir une fois sur deux
+    if (Math.random() > .5) {
+      successCallback("Réussite");
+    } else {
+      failureCallback("Échec");
+    }
+  })
+}
+
+const promise = faireQqc();
+promise.then(successCallback, failureCallback);
+
+ +

ou encore :

+ +
faireQqc().then(successCallback, failureCallback);
+
+ +

Cette dernière forme est ce qu'on appelle un appel de fonction asynchrone. Cette convention possède différents avantages dont le premier est le chaînage.

+ +

Garanties

+ +

À la différence des imbrications de callbacks, une promesse apporte certaines garanties :

+ + + +

Chaînage des promesses

+ +

Un besoin fréquent est d'exécuter deux ou plus d'opérations asynchrones les unes à la suite des autres, avec chaque opération qui démarre lorsque la précédente a réussi et en utilisant le résultat de l'étape précédente. Ceci peut être réalisé en créant une chaîne de promesses.

+ +

La méthode then() renvoie une nouvelle promesse, différente de la première :

+ +
const promise = faireQqc();
+const promise2 = promise.then(successCallback, failureCallback);
+
+ +

ou encore :

+ +
const promise2 = faireQqc().then(successCallback, failureCallback);
+
+ +

La deuxième promesse (promise2) indique l'état de complétion, pas uniquement pour faireQqc() mais aussi pour le callback qui lui a été passé (successCallback ou failureCallback) qui peut aussi être une fonction asynchrone qui renvoie une promesse. Lorsque c'est le cas, tous les callbacks ajoutés à promise2 forment une file derrière la promesse renvoyée par successCallback ou failureCallback.

+ +

Autrement dit, chaque promesse représente l'état de complétion d'une étape asynchrone au sein de cette succession d'étapes.

+ +

Auparavant, l'enchaînement de plusieurs opérations asynchrones déclenchait une pyramide dantesque de callbacks :

+ +
faireQqc(function(result) {
+  faireAutreChose(result, function(newResult) {
+    faireUnTroisiemeTruc(newResult, function(finalResult) {
+      console.log('Résultat final :' + finalResult);
+    }, failureCallback);
+  }, failureCallback);
+}, failureCallback);
+
+ +

Grâce à des fonctions plus modernes et aux promesses, on attache les callbacks aux promesses qui sont renvoyées. On peut ainsi construire une chaîne de promesses :

+ +
faireQqc().then(function(result) {
+  return faireAutreChose(result);
+})
+.then(function(newResult) {
+  return faireUnTroisiemeTruc(newResult);
+})
+.then(function(finalResult) {
+  console.log('Résultat final : ' + finalResult);
+})
+.catch(failureCallback);
+
+ +

Les arguments passés à then sont optionnels. La forme catch(failureCallback) est un alias plus court pour then(null, failureCallback). Ces chaînes de promesses sont parfois construites avec des fonctions fléchées :

+ +
faireQqc()
+.then(result => faireAutreChose(result))
+.then(newResult => faireUnTroisiemeTruc(newResult))
+.then(finalResult => {
+  console.log('Résultat final : ' + finalResult);
+})
+.catch(failureCallback);
+
+ +
+

Attention : cela implique que les fonctions asynchrones renvoient toutes des promesses, sinon les callbacks ne pourront être chaînés et les erreurs ne seront pas interceptées (les fonctions fléchées ont une valeur de retour implicite si les accolades ne sont pas utilisées : () => x est synonyme de () => { return x; }).

+
+ +

Chaînage après un catch

+ +

Il est possible de chaîner de nouvelles actions après un rejet, c'est-à-dire un catch. C'est utile pour accomplir de nouvelles actions après qu'une action ait échoué dans la chaine. Par exemple :

+ +
new Promise((resolve, reject) => {
+    console.log('Initial');
+
+    resolve();
+})
+.then(() => {
+    throw new Error('Something failed');
+
+    console.log('Do this');
+})
+.catch(() => {
+    console.error('Do that');
+})
+.then(() => {
+    console.log('Do this whatever happened before');
+});
+
+ +

Cela va produire la sortie suivante :

+ +
Initial
+Do that
+Do this whatever happened before
+
+ +

Notez que le texte Do this n'est pas affiché car l'erreur Something failed a produit un rejet.

+ +

Propagation des erreurs

+ +

Dans les exemples précédents, failureCallback était présent trois fois dans la pyramide de callbacks et une seule fois, à la fin, dans la chaîne des promesses :

+ +
faireQqc()
+.then(result => faireAutreChose(result))
+.then(newResult => faireUnTroisiemeTruc(newResult))
+.then(finalResult => console.log('Résultat final : ' + finalResult))
+.catch(failureCallback);
+
+ +

En fait, dès qu'une exception est levée, la chaîne de promesses utilisera le premier catch() ou onRejected disponible. Ce fonctionnement est assez proche de ce qu'on peut trouver pour du code synchrone :

+ +
try {
+  const result = syncFaireQqc();
+  const newResult = syncFaireQqcAutre(result);
+  const finalResult = syncFaireUnTroisiemeTruc(newResult);
+  console.log('Résultat final : ' + finalResult);
+} catch(error) {
+  failureCallback(error);
+}
+
+ +

Cette symétrie entre le code asynchrone et le code synchrone atteint son paroxysme avec le couple d'opérateurs async/await d'ECMAScript 2017:

+ +
async function toto() {
+  try {
+    const result = await faireQqc();
+    const newResult = await faireQqcAutre(result);
+    const finalResult = await faireUnTroisiemeTruc(newResult);
+    console.log('Résultat final : ' + finalResult);
+  } catch(error) {
+    failureCallback(error);
+  }
+}
+
+ +

Ce fonctionnement est construit sur les promesses et faireQqc() est la même fonction que celle utilisée dans les exemples précédents.

+ +

Les promesses permettent de résoudre les problèmes de cascades infernales de callbacks notamment en interceptant les différentes erreurs (exceptions et erreurs de programmation). Ceci est essentiel pour obtenir une composition fonctionnelle des opérations asynchrones.

+ +

Évènements liés à la rupture d'une promesse

+ +

Lorsqu'une promesse est rompue/rejetée, un des deux évènements suivants est envoyé au niveau de la portée globale ({{domxref("window")}} ou {{domxref("Worker")}} si le script est utilisé dans un worker) :

+ +
+
{{domxref("Window.rejectionhandled_event","rejectionhandled")}}
+
Cet évènement est envoyé lorsqu'une promesse est rompue et après que le rejet ai été traité par la fonction reject associée à la promesse.
+
{{domxref("Window.unhandledrejection_event","unhandledrejection")}}
+
Cet évènement est envoyé lorsque la promesse est rompue et qu'aucune fonction n'a été définie pour gérer le rejet de la promesse.
+
+ +

Dans les deux cas, l'évènement (dont le type est {{domxref("PromiseRejectionEvent")}}) aura deux propriétés :

+ +
+
{{domxref("PromiseRejectionEvent.promise","promise")}}
+
La promesse qui a été rompue.
+
{{domxref("PromiseRejectionEvent.reason","reason")}}
+
La raison pour laquelle la promesse a été rompue.
+
+ +

Gérer ces évènements permet d'avoir une ultime méthode pour gérer le rejet des promesses. Cela peut notamment s'avérer utile pour le débogage. Ces évènements sont déclenchés au niveau global et permettent ainsi d'intercepter les erreurs pour chaque contexte (fenêtre ou worker)

+ +
window.addEventListener("unhandledrejection", event => {
+  // Examiner la ou les promesse(s) qui posent problème en debug
+  // Nettoyer ce qui doit l'être quand ça se produit en réel
+
+}, false);
+ +

Envelopper les callbacks des API

+ +

Il est possible de créer un objet  {{jsxref("Promise")}} grâce à son constructeur. Et même si, idéalement, cela ne devrait pas être nécessaire, certaines API fonctionnent toujours avec des callbacks passés en arguments. C'est notamment le cas de la méthode  {{domxref("WindowTimers.setTimeout", "setTimeout()")}} :

+ +
setTimeout(() => saySomething("10 seconds passed"), 10 * 1000);
+
+ +

Si on mélange des callbacks et des promesses, cela sera problématique. Si  saySomething échoue ou contient des erreurs, rien n'interceptera l'erreur.

+ +

Pour ces fonctions, la meilleure pratique consiste à les envelopper dans des promesses au plus bas niveau possible et de ne plus les appeler directement :

+ +
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
+
+wait(10 * 1000).then(() => saySomething("10 seconds")).catch(failureCallback);
+
+ +

Le constructeur Promise prend en argument une fonction et nous permet de la convertir manuellement en une promesse. Ici, vu que setTimeout n'échoue pas vraiment, on laisse de côté la gestion de l'échec.

+ +

Composition

+ +

{{jsxref("Promise.resolve()")}} et {{jsxref("Promise.reject()")}} sont des méthodes qui permettent de créer des promesses déjà tenues ou rompues.

+ +

{{jsxref("Promise.all()")}} et {{jsxref("Promise.race()")}} sont deux outils de composition qui permettent de mener des opérations asynchrones en parallèle.

+ +

On peut lancer des opérations en parallèles et attendre qu'elles soient toutes finies de cette façon :

+ +
Promise.all([func1(), func2(), func3()])
+.then(([resultat1, resultat2, resultat3]) => { /* où on utilise resultat1/2/3 */ });
+ +

Il est possible de construire une composition séquentielle de la façon suivante :

+ +
[func1, func2].reduce((p, f) => p.then(f), Promise.resolve());
+
+ +

Dans ce fragment de code, on réduit un tableau de fonctions asynchrones en une chaîne de promesse équivalente à : Promise.resolve().then(func1).then(func2);

+ +

On peut également accomplir cela avec une fonction de composition réutilisable  :

+ +
const applyAsync = (acc, val) => acc.then(val);
+const composeAsync = (...funcs) => x => funcs.reduce(applyAsync, Promise.resolve(x));
+ +

La fonction composeAsync accepte autant de fonctions que nécessaire comme arguments et renvoie une nouvelle fonction qui prend une valeur initiale pour la passer à travers ces étapes de compositions. Cette façon de faire garantit que les fonctions, qu'elles soient synchrones ou asynchrones, sont exécutées dans le bon ordre :

+ +
const transformData = composeAsync(func1, asyncFunc1, asyncFunc2, func2);
+transformData(data);
+ +

Avec ECMAScript 2017, on peut obtenir une composition séquentielle plus simplement avec les opérateurs await/async :

+ +
let result;
+for(const f of [func1, func2, func3]) {
+  result = await f(result);
+} 
+ +

Gestion du temps

+ +

Pour éviter de mauvaises surprises, les fonctions passées à then() ne seront jamais appelées de façon synchrone, y compris lorsqu'il s'agit d'une promesse déjà résolue :

+ +
Promise.resolve().then(() => console.log(2));
+console.log(1); // 1, 2
+
+ +

En fait, la fonction passée à then() est placée dans une file de micro-tâches qui sont exécutées lorsque cette file est vidée à la fin de la boucle d'évènements JavaScript :

+ +
var wait = ms => new Promise(resolve => setTimeout(resolve, ms));
+
+wait().then(() => console.log(4));
+Promise.resolve().then(() => console.log(2)).then(() => console.log(3));
+console.log(1); // 1, 2, 3, 4
+
+ +

Voir aussi

+ + + +

{{PreviousNext("Web/JavaScript/Guide/Le_modèle_objet_JavaScript_en_détails", "Web/JavaScript/Guide/iterateurs_et_generateurs")}}

diff --git a/files/fr/web/javascript/guide/working_with_objects/index.html b/files/fr/web/javascript/guide/working_with_objects/index.html deleted file mode 100644 index f02ca6ff02..0000000000 --- a/files/fr/web/javascript/guide/working_with_objects/index.html +++ /dev/null @@ -1,532 +0,0 @@ ---- -title: Utiliser les objets -slug: Web/JavaScript/Guide/Working_with_Objects -tags: - - Beginner - - Comparing object - - Document - - Guide - - JavaScript - - Object - - l10n:priority -translation_of: Web/JavaScript/Guide/Working_with_Objects -original_slug: Web/JavaScript/Guide/Utiliser_les_objets ---- -
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Keyed_collections", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}
- -

JavaScript est conçu autour d'un paradigme simple, basé sur les objets. Un objet est un ensemble de propriétés et une propriété est une association entre un nom (aussi appelé clé) et une valeur. La valeur d'une propriété peut être une fonction, auquel cas la propriété peut être appelée « méthode ». En plus des objets natifs fournis par l'environnement, il est possible de construire ses propres objets. Ce chapitre aborde la manipulation d'objets, l'utilisation des propriétés, fonctions et méthodes, il explique également comment créer ses objets.

- -

Un aperçu des objets

- -

À l'instar de nombreux autres langages de programmation, on peut comparer les objets JavaScript aux objets du monde réel.

- -

En JavaScript, un objet est une entité à part entière qui possède des propriétés et un type. Si on effectue cette comparaison avec une tasse par exemple, on pourra dire qu'une tasse est un objet avec des propriétés. Ces propriétés pourront être la couleur, la forme, le poids, le matériau qui la constitue, etc. De la même façon, un objet JavaScript possède des propriétés, chacune définissant une caractéristique.

- -

Les objets et les propriétés

- -

Un objet JavaScript possède donc plusieurs propriétés qui lui sont associées. Une propriété peut être vue comme une variable attachée à l'objet. Les propriétés d'un objet sont des variables tout ce qu'il y a de plus classiques, exception faite qu'elles sont attachées à des objets. Les propriétés d'un objet représentent ses caractéristiques et on peut y accéder avec une notation utilisant le point « . », de la façon suivante :

- -
nomObjet.nomPropriete
- -

Comme pour les variables JavaScript en général, le nom de l'objet (qui peut être une variable) et le nom des propriétés sont sensibles à la casse (une lettre minuscule ne sera pas équivalente à une lettre majuscule). On peut définir une propriété en lui affectant une valeur. Ainsi, si on crée un objet maVoiture et qu'on lui donne les propriétés fabricant, modèle, et année :

- -
-let maVoiture = new Object();
-maVoiture.fabricant = "Ford";
-maVoiture.modele = "Mustang";
-maVoiture.annee = 1969;
-
- -

L'exemple précédent peut également s'écrire avec la syntaxe littérale pour initialiser les objets : on fournit une liste, délimitée par des virgules, qui contient des paires de noms et de valeurs décrivant les propriétés et où le tout est encadré d'accolades ({}) :

- -
-let maVoiture = {
-  make: 'Ford',
-  model: 'Mustang',
-  year: 1969
-};
-
- -

Les propriétés d'un objet qui n'ont pas été affectées auront la valeur undefined (et non null).

- -
maVoiture.color; // undefined
- -

On peut aussi définir ou accéder à des propriétés JavaScript en utilisant une notation avec les crochets (voir la page sur les accesseurs de propriétés pour plus de détails). Les objets sont parfois appelés « tableaux associatifs ». Cela peut se comprendre, car chaque propriété est associée avec une chaîne de caractères qui permet d'y accéder. Ainsi, par exemple, on peut accéder aux propriétés de l'objet maVoiture de la façon suivante :

- -
-maVoiture["fabricant"] = "Ford";
-maVoiture["modèle"] = "Mustang";
-maVoiture["année"] = 1969;
-
- -

Le nom d'une propriété d'un objet peut être n'importe quelle chaîne JavaScript valide (ou n'importe quelle valeur qui puisse être convertie en une chaîne de caractères), y compris la chaîne vide. Cependant, n'importe quel nom de propriété qui n'est pas un identifiant valide (par exemple si le nom d'une propriété contient un tiret, un espace ou débute par un chiffre) devra être utilisé avec la notation à crochets. Cette notation s'avère également utile quand les noms des propriétés sont déterminés de façon dynamique (c'est-à-dire qu'on ne sait pas le nom de la propriété avant l'exécution). Par exemple :

- -
-// on crée quatre variables avec une même instruction
-let monObj = new Object();
-let str = "maChaîne";
-let rand = Math.random();
-let obj = new Object();
-
-monObj.type              = "Syntaxe point";
-monObj["date created"]   = "Chaîne avec un espace";
-monObj[str]              = "Une valeur qui est une chaîne";
-monObj[rand]             = "Nombre aléatoire";
-monObj[obj]              = "Objet";
-monObj[""]               = "Une chaîne vide";
-
-console.log(monObj);
-
- -

On notera que les valeurs utilisées entre les crochets sont automatiquement converties en chaînes de caractères grâce à la méthode toString() sauf si ces valeurs sont des symboles (cf. Symbol). En effet, les noms des propriétés pour les objets JavaScript peuvent être des chaînes de caractères ou des symboles. Ainsi, dans l'exemple précédent, lorsqu'on ajoute la clé obj sur monObj, le moteur JavaScript appelle la méthode obj.toString() et utilise la chaîne de caractères renvoyée par cette méthode comme nom pour la propriété.

- -

On peut également accéder aux propriétés d'un objet en utilisant une valeur qui est une chaîne de caractères enregistrée dans une variable :

- -
-let nomPropriété = "fabricant";
-maVoiture[nomPropriété] = "Ford";
-
-nomPropriété = "modèle";
-maVoiture[nomPropriété] = "Mustang";
-
- -

La notation avec les crochets peut être utilisée dans une boucle for...in afin de parcourir les propriétés énumérables d'un objet. Pour illustrer comment cela fonctionne, on définit la fonction suivante qui affiche les propriétés d'un objet qu'on lui a passé en argument avec le nom associé :

- -
-function afficherProps(obj, nomObjet) {
-  let resultat = "";
-  for (let i in obj) {
-    if (obj.hasOwnProperty(i)) {
-        resultat += `${nomObjet}.${i} = ${obj[i]}\n`;
-    }
-  }
-  return resultat;
-}
-
- -

Si on appelle la fonction avec afficherProps(maVoiture, "maVoiture"), cela affichera le contenu suivant dans la console :

- -
-maVoiture.fabricant = Ford
-maVoiture.modele = Mustang
-maVoiture.annee = 1969
-
- -

Lister les propriétés d'un objet

- -

À partir d'ECMAScript 5, il existe trois méthodes natives pour lister/parcourir les propriétés d'un objet :

- - - -

Avant ECMAScript 5, il n'existait aucune méthode native pour lister l'ensemble des propriétés d'un objet. Cependant, on pouvait utiliser le code suivant pour y parvenir :

- -
-function listerToutesLesProprietes(o){
-  let objectToInspect;
-  let resultat = [];
-
-  for(objectToInspect = o;
-      objectToInspect !== null;
-      objectToInspect = Object.getPrototypeOf(objectToInspect)){
-    resultat = resultat.concat(Object.getOwnPropertyNames(objectToInspect));
-  }
-  return resultat;
-}
-
- -

Cela peut être utile pour révéler les propriétés « cachées » où leur nom est réutilisé dans la chaîne de prototypes. Pour lister les propriétés accessibles, il suffit de retirer les duplicatas du tableau.

- -

Créer de nouveaux objets

- -

Un environnement JavaScript possède certains objets natifs prédéfinis. En plus de ces objets, il est possible de créer ses propres objets. Pour cela, on peut utiliser un initialisateur d'objet. On peut aussi créer un constructeur puis instancier un objet avec cette fonction en utilisant l'opérateur new.

- -

Utiliser les initialisateurs d'objets

- -

On peut créer des objets avec une fonction qui est un constructeur, mais on peut aussi créer des objets avec des initialisateurs d'objets. On appelle parfois cette syntaxe la notation littérale.

- -

La syntaxe utilisée avec les initialisateurs d'objets est la suivante :

- -
-let obj = { 
-  propriete_1:   valeur_1,   // propriete_# peut être un identifiant
-            2:   valeur_2,   // ou un nombre
-            // ...,
-  "propriete n": valeur_n
-  }; // ou une chaîne
-
- -

où on a obj le nom de l'objet qu'on souhaite créer et chaque propriete_i un identifiant (que ce soit un nom, un nombre ou une chaîne de caractères) et chaque valeur_i une expression dont la valeur sera affectée à la propriété propriete_i. S'il n'est pas nécessaire d'utiliser l'objet obj par la suite, il n'est pas nécessaire de réaliser l'affectation à une variable (attention alors à l'encadrer dans des parenthèses pour que le littéral objet soit bien interprété comme une instruction et non pas comme un bloc.)

- -

Les initialisateurs d'objets sont des expressions et chaque initialisateur entraîne la création d'un nouvel objet dans l'instruction pour laquelle il est exécuté. Des initialisateurs d'objets identiques créeront des objets distincts qui ne seront pas équivalents. Les objets sont créés de la même façon qu'avec new Object(), les objets créés à partir d'une expression littérale seront des instances d'Object.

- -

L'instruction suivante crée un objet et l'affecte à une variable x si et seulement si l'expression cond est vraie :

- -
if (cond) let x = {emplacement: "le monde"};
-
- -

Dans l'exemple suivant, on crée un objet maHonda avec trois propriétés. La propriété moteur est également un objet avec ses propres propriétés.

- -
-let maHonda = {
-  couleur: "rouge",
-  roue: 4,
-  moteur: {
-    cylindres: 4,
-    taille: 2.2
-  }
-};
-
- -

De la même façon, on pourra utiliser des initialisateurs pour créer des tableaux. Pour plus d'informations à ce sujet, voir les littéraux de tableaux.

- -

Utiliser les constructeurs

- -

On peut aussi créer des objets d'une autre façon, en suivant deux étapes :

- -
    -
  1. On définit une fonction qui sera un constructeur définissant le type de l'objet. La convention, pour nommer les constructeurs, est d'utiliser une majuscule comme première lettre pour l'identifiant de la fonction.
  2. -
  3. On crée une instance de l'objet avec new.
  4. -
- -

Pour définir le type d'un objet, on crée une fonction qui définit le nom de ce type et les propriétés et méthodes des instances. Ainsi, si on souhaite créer un type d'objet pour représenter des voitures, on pourra nommer ce type voiture, et il pourra avoir des propriétés pour le fabricant, le modèle et l'année. Pour ce faire, on pourra écrire la fonction suivante :

- -
-function Voiture(fabricant, modele, annee) {
-  this.fabricant = fabricant;
-  this.modele = modele;
-  this.annee = annee;
-}
-
- -

On voit ici qu'on utilise le mot-clé this pour affecter des valeurs aux propriétés d'un objet en fonction des valeurs passées en arguments de la fonction.

- -

On peut désormais créer un objet maVoiture de la façon suivante :

- -
-let maVoiture = new Voiture("Eagle", "Talon TSi", 1993);
-
- -

Cette instruction crée un objet maVoiture et lui affecte les valeurs fournies pour ses propriétés. On obtient donc maVoiture.fabricant qui sera la chaîne de caractères "Eagle", maVoiture.annee qui sera l'entier 1993, et ainsi de suite.

- -

Grâce à ce constructeur, on peut ensuite créer autant d'objets Voiture que nécessaire. Par exemple :

- -
-let voitureMorgan = new Voiture("Audi", "A3", 2005);
-let voitureMax = new Voiture("Mazda", "Miata", 1990);
-
- -

Un objet peut avoir une propriété qui est elle-même un objet. Ainsi, si on définit un type d'objet personne de cette façon :

- -
-function Personne(nom, age, sexe) {
-  this.nom = nom;
-  this.age = age;
-  this.sexe = sexe;
-}
-
- -

et qu'on instancie deux nouveaux objets personne avec

- -
-let max = new Personne("Max Gun", 33, "M");
-let morgan = new Personne("Morgan Sousbrouille", 39, "M");
-
- -

On pourra réécrire la fonction de définition pour le type Voiture pour inclure une propriété proprietaire qui est représentée par un objet personne :

- -
-function Voiture(fabricant, modele, annee, proprietaire) {
-  this.fabricant = fabricant;
-  this.modele = modele;
-  this.annee = annee;
-  this.proprietaire = proprietaire;
-}
-
- -

Pour instancier des nouveaux objets, on pourra donc utiliser :

- -
-let voiture1 = new Voiture("Mazda", "Miata", 1993, max);
-let voiture2 = new Voiture("Audi", "A3", 2005, morgan);
-
- -

On notera que le dernier argument n'est pas une chaîne de caractères ou une valeur numérique mais bien un objet. Les objets max et morgan sont passés en arguments pour représenter les propriétaires. Ainsi, si on veut obtenir le nom du propriétaire pour voiture2, on peut accéder à la propriété de la façon suivante :

- -
-voiture2.proprietaire.nom
-
- -

Il est toujours possible d'ajouter une propriété à un objet défini précédemment. Par exemple, on peut ajouter une propriété à l'objet voiture1 avec l'instruction :

- -
voiture1.couleur = "noir";
-
- -

Ici, on ajoute une propriété couleur à voiture1, et on lui affecte une valeur "noir". Cependant, cela n'affecte pas les autres objets voiture. Pour ajouter une nouvelle propriété à tous les objets, il faudra ajouter la propriété au constructeur voiture.

- -

Utiliser la méthode Object.create()

- -

Les objets peuvent également être créés en utilisant la méthode Object.create(). Cette méthode peut s'avérer très utile, car elle permet de choisir le prototype pour l'objet qu'on souhaite créer, sans avoir à définir un constructeur.

- -
-// Propriétés pour animal et encapsulation des méthodes
-let Animal = {
-  type: "Invertébrés",        // Valeur par défaut  value of properties
-  afficherType : function() {  // Une méthode pour afficher le type Animal
-    console.log(this.type);
-  }
-}
-
-// On crée un nouveau type d'animal, animal1
-let animal1 = Object.create(Animal);
-animal1.afficherType(); // affichera Invertébrés
-
-// On crée un type d'animal "Poisson"
-let poisson = Object.create(Animal);
-poisson.type = "Poisson";
-poisson.afficherType(); // affichera Poisson
-
- -

L'héritage

- -

Tous les objets JavaScript héritent d'un autre objet. L'objet dont on hérite est appelé prototype et les propriétés héritées peuvent être accédées via l'objet prototype du constructeur. Pour plus d'informations sur le fonctionnement de l'héritage, voir la page sur l'héritage et la chaîne de prototypes.

- -

Indexer les propriétés d'un objet

- -

Il est possible d'accéder à une propriété via son nom et via son indice (ordinal). Si on définit une propriété grâce à un nom, on accédera toujours à la valeur via le nom. De même, si on définit une propriété grâce à un indice, on y accèdera toujours via son indice.

- -

Cette restriction s'applique lorsqu'on crée un objet et ses propriétés via un constructeur et lorsqu'on déclare les propriétés explicitement (par exemple avec maVoiture.couleur = "rouge"). Si on définit une propriété d'un objet avec maVoiture[5] = "25 kmh", on pourra faire référence à cette propriété grâce à maVoiture[5].

- -

Il existe une exception à cette règle lorsqu'on manipule des objets "semblables à des tableaux" provenant d'API Web telles que l'objet forms. Pour ces objets semblables à des tableaux, on peut accéder à une propriété de l'objet grâce à son nom (si l'attribut name est utilisé sur l'élément HTML) ou grâce à son index selon l'ordre dans le document. Ainsi, si on souhaite cibler un élément <form> du document possédant un attribut name qui vaut monForm et que cet élément est le deuxième élément du document, on pourra y accéder avec document.forms[1], document.forms["monForm"] ou encore avec document.forms.monForm.

- -

Définir des propriétés pour un type d'objet

- -

On peut ajouter une propriété à un type précédemment défini en utilisant la propriété prototype. Cela permettra de définir une propriété qui sera partagée par tous les objets d'un même type plutôt qu'elle ne soit définie que pour un seul objet. Le code suivant permet d'ajouter une propriété couleur à tous les objets de type voiture. On affecte ensuite une valeur à cette propriété pour l'objet voiture1.

- -
-Voiture.prototype.couleur = null;
-voiture1.couleur = "noir";
-
- -

Pour plus d'informations, voir l'article sur la propriété prototype de l'objet Function de la référence JavaScript.

- -

Définir des méthodes

- -

Une méthode est une fonction associée à un objet. Autrement dit, une méthode est une propriété d'un objet qui est une fonction. Les méthodes sont définies comme des fonctions normales et sont affectées à des propriétés d'un objet. Voir la page sur les définitions de méthodes pour plus d'informations. Par exemple :

- -
-nomObjet.nomMethode = nomFonction;
-
-let monObj = {
-  maMethode: function(params) {
-    // …faire quelque chose
-  }
-
-  // la forme suivante fonctionne aussi
-
-  monAutreMethode(params) {
-    // …faire autre chose
-  }
-};
-
- -

avec nomObjet qui est un objet existant, nomMethode est le nom de la propriété à laquelle on souhaite affecter la méthode et nomFonction le nom de la fonction.

- -

On peut ensuite appeler la méthode sur l'objet :

- -
-object.nomMethode(parametres);
-
- -

On peut définir des méthodes pour un type d'objet en incluant la définition de la méthode dans le constructeur. Par exemple, on peut définir une fonction qui mettrait en forme et qui afficherait les propriétés d'un objet voiture. Par exemple :

- -
-function afficheVoiture() {
-  let resultat = `Une belle ${this.modele}, fabriquée en ${this.annee} par ${this.fabricant}`;
-  console.log(résultat);
-}
-
- -

On peut ensuite ajouter cette fonction comme méthode dans le constructeur avec cette instruction :

- -
-this.afficheVoiture = afficheVoiture;
-
- -

La définition complète de Voiture serait donc :

- -
-function Voiture(fabricant, modele, annee, proprietaire) {
-  this.fabricant = fabricant;
-  this.modele = modele;
-  this.annee = annee;
-  this.proprietaire = proprietaire;
-  this.afficheVoiture = afficheVoiture;
-}
-
- -

On pourra donc ensuite appeler la méthode afficheVoiture pour chaque objet de ce type :

- -
voiture1.afficheVoiture();
-voiture2.afficheVoiture();
-
- -

Utiliser this pour les références aux objets

- -

JavaScript possède un mot-clé spécial this, qui peut être utilisé à l'intérieur d'une méthode pour faire référence à l'objet courant.

- -

Par exemple, supposons qu'on ait deux objets, responsable et stagiaire. Chaque objet possède son propre nom, age et poste. Dans la fonction direBonjour(), on remarque qu'on utilise this.nom. Lorsqu'on ajoute cette méthode aux deux objets, on peut alors appeler cette fonction depuis les deux objets et celle-ci affichera 'Bonjour, mon nom est ' suivi de la valeur de la propriété nom rattaché à l'objet indiqué.

- -
-const responsable = {
- nom: "Jean",
- age: 27,
- poste: "Ingénieur logiciel"
-};
-
-const stagiaire = {
- nom: "Ben",
- age: 21,
- poste: "Stagiaire ingénieur logiciel"
-};
-
-function direBonjour() {
- console.log('Bonjour, mon nom est', this.nom)
-};
-
-// on ajoute direBonjour aux deux objets
-responsable.direBonjour = direBonjour;
-stagiaire.direBonjour = direBonjour;
-
-responsable.direBonjour(); // Bonjour, mon nom est John'
-stagiaire.direBonjour();   // Bonjour, mon nom est Ben'
-
- -

Ici, this fait référence à l'objet courant. On peut également créer une fonction direMonAge() qui affiche une phrase indiquant l'age.

- -
-function direMonAge(){
-  console.log("J'ai " + this.age + " ans.");
-};
-
-responsable.direMonAge = direMonAge;
-responsable.direMonAge(); // J'ai 27 ans.
-
- -

Définir des accesseurs et des mutateurs (getters et setters)

- -

Un accesseur (getter) est une méthode qui permet de récupérer la valeur d'une propriété donnée. Un mutateur (setter) est une méthode qui permet de définir la valeur d'une propriété donnée. Il est possible de définir des accesseurs et des mutateurs sur chaque objet (qu'il soit natif ou défini par l'utilisateur) qui supporte l'ajout de nouvelles propriétés.

- -

Les accesseurs et mutateurs peuvent être :

- - - -

Lorsqu'on définit des accesseurs et des mutateurs en utilisant la syntaxe littérale des initialisateurs d'objet, il suffit d'ajouter un préfixe get devant une fonction pour un accesseur et un préfixe set devant une fonction pour un mutateur. La méthode pour l'accesseur ne doit pas utiliser de paramètre tandis que la méthode pour le mutateur doit utiliser un seul paramètre (la nouvelle valeur à définir). Ainsi :

- -
-let 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 <-- À ce moment, la méthode get b() est invoquée
-o.c = 50;         //   <-- À ce moment, la méthode set c(x) est invoquée
-console.log(o.a); // 25
-
- -

Les propriétés de l'objet o sont :

- - - -

On notera que les noms des fonctions pour les accesseurs et les mutateurs définis dans un initialisateur d'objet avec la forme [gs]et propriete() ne sont pas les noms des accesseurs/mutateurs eux-mêmes malgré ce que pourrait laisser croire la syntaxe.

- -

Les accesseurs et mutateurs peuvent également être ajoutés à un objet après sa création via la méthode Object.defineProperties() (ou Object.defineProperty()). Le premier paramètre de cette méthode est l'objet sur lequel on souhaite ajouter les fonctions. Le deuxième paramètre est un objet dont les noms des propriétés sont les noms des accesseurs et/ou des mutateurs et les valeurs de ces propriétés sont les objets qui définissent les fonctions correspondantes. Voici un exemple qui définit un accesseur et un mutateur pour obtenir un résultat équivalent à l'exemple précédent :

- -
-let o = { a: 0 };
-
-Object.defineProperties(o, {
- 'b': { get: function() { return this.a + 1; } },
- 'c': { set: function(x) { this.a = x / 2; } }
-});
-
-o.c = 10; // Exécute le mutateur qui affecte 10 / 2 (5) à la propriété 'a'
-console.log(o.b); // Exécute l'accesseur qui renvoie a + 1, soit 6
-
- -

Le choix de l'une ou l'autre de ces formes dépend de votre style et du type de tâche à réaliser. Si vous utilisez déjà un initialisateur d'objet lors de la définition d'un prototype, vous choisirez probablement la première forme, plus concise et plus naturelle. Toutefois, si vous avez besoin d'ajouter des accesseurs/mutateurs plus tard, parce que vous n'avez pas écrit le prototype ou la définition de l'objet, seule la seconde forme sera possible. Cette dernière représente mieux la nature dynamique de JavaScript mais peut rendre la lecture et la compréhension du code plus difficiles.

- -

Supprimer des propriétés

- -

Il est possible de retirer des propriétés propres (celles qui ne sont pas héritées) grâce à l'opérateur delete. Le code suivant montre comment retirer une propriété :

- -
-// On crée un nouvel objet, monObj, avec deux propriétés a et b.
-let monObj = new Object;
-monObj.a = 5;
-monObj.b = 12;
-
-// On retire la propriété a, monObj a donc uniquement la propriété b
-delete monObj.a;
-console.log("a" in monObj) // produit "false"
-
- -

Il est aussi possible de supprimer une propriété de l'objet global avec delete si aucun mot-clé comme var, let ou const n'avait été utilisé :

- -
-g = 17;
-delete g;
-
- -

Comparer des objets

- -

En JavaScript, les objets fonctionnent par référence. Deux objets distincts ne sont jamais égaux, même s'ils ont les mêmes valeurs pour les mêmes propriétés. On aura une équivalence uniquement si on compare deux références vers un seul et même objet donné.

- -
-// Deux variables avec deux objets distincts
-// qui ont les mêmes propriétés
-let fruit = {nom: "pomme"};
-let fruit2 = {nom: "pomme"};
-
-fruit == fruit2  // renvoie false
-fruit === fruit2 // renvoie false
- -
-// Deux variables référençant un même objet
-let fruit = {nom: "pomme"};
-let fruit2 = fruit;  // On affecte la même référence
-
-// dans ce cas fruit et fruit2 pointent vers le même objet
-fruit == fruit2  // renvoie true
-fruit === fruit2 // renvoie true
-
-fruit.nom = "raisin";
-console.log(fruit2); // affiche {nom: "raisin"} et non {nom: "pomme"}
-
- -

Pour plus d'informations sur les opérateurs de comparaisons, voir cet article.

- -

Voir aussi

- - - -

{{PreviousNext("Web/JavaScript/Guide/Keyed_collections", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}

diff --git a/files/fr/web/javascript/guide/working_with_objects/index.md b/files/fr/web/javascript/guide/working_with_objects/index.md new file mode 100644 index 0000000000..f02ca6ff02 --- /dev/null +++ b/files/fr/web/javascript/guide/working_with_objects/index.md @@ -0,0 +1,532 @@ +--- +title: Utiliser les objets +slug: Web/JavaScript/Guide/Working_with_Objects +tags: + - Beginner + - Comparing object + - Document + - Guide + - JavaScript + - Object + - l10n:priority +translation_of: Web/JavaScript/Guide/Working_with_Objects +original_slug: Web/JavaScript/Guide/Utiliser_les_objets +--- +
{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Keyed_collections", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}
+ +

JavaScript est conçu autour d'un paradigme simple, basé sur les objets. Un objet est un ensemble de propriétés et une propriété est une association entre un nom (aussi appelé clé) et une valeur. La valeur d'une propriété peut être une fonction, auquel cas la propriété peut être appelée « méthode ». En plus des objets natifs fournis par l'environnement, il est possible de construire ses propres objets. Ce chapitre aborde la manipulation d'objets, l'utilisation des propriétés, fonctions et méthodes, il explique également comment créer ses objets.

+ +

Un aperçu des objets

+ +

À l'instar de nombreux autres langages de programmation, on peut comparer les objets JavaScript aux objets du monde réel.

+ +

En JavaScript, un objet est une entité à part entière qui possède des propriétés et un type. Si on effectue cette comparaison avec une tasse par exemple, on pourra dire qu'une tasse est un objet avec des propriétés. Ces propriétés pourront être la couleur, la forme, le poids, le matériau qui la constitue, etc. De la même façon, un objet JavaScript possède des propriétés, chacune définissant une caractéristique.

+ +

Les objets et les propriétés

+ +

Un objet JavaScript possède donc plusieurs propriétés qui lui sont associées. Une propriété peut être vue comme une variable attachée à l'objet. Les propriétés d'un objet sont des variables tout ce qu'il y a de plus classiques, exception faite qu'elles sont attachées à des objets. Les propriétés d'un objet représentent ses caractéristiques et on peut y accéder avec une notation utilisant le point « . », de la façon suivante :

+ +
nomObjet.nomPropriete
+ +

Comme pour les variables JavaScript en général, le nom de l'objet (qui peut être une variable) et le nom des propriétés sont sensibles à la casse (une lettre minuscule ne sera pas équivalente à une lettre majuscule). On peut définir une propriété en lui affectant une valeur. Ainsi, si on crée un objet maVoiture et qu'on lui donne les propriétés fabricant, modèle, et année :

+ +
+let maVoiture = new Object();
+maVoiture.fabricant = "Ford";
+maVoiture.modele = "Mustang";
+maVoiture.annee = 1969;
+
+ +

L'exemple précédent peut également s'écrire avec la syntaxe littérale pour initialiser les objets : on fournit une liste, délimitée par des virgules, qui contient des paires de noms et de valeurs décrivant les propriétés et où le tout est encadré d'accolades ({}) :

+ +
+let maVoiture = {
+  make: 'Ford',
+  model: 'Mustang',
+  year: 1969
+};
+
+ +

Les propriétés d'un objet qui n'ont pas été affectées auront la valeur undefined (et non null).

+ +
maVoiture.color; // undefined
+ +

On peut aussi définir ou accéder à des propriétés JavaScript en utilisant une notation avec les crochets (voir la page sur les accesseurs de propriétés pour plus de détails). Les objets sont parfois appelés « tableaux associatifs ». Cela peut se comprendre, car chaque propriété est associée avec une chaîne de caractères qui permet d'y accéder. Ainsi, par exemple, on peut accéder aux propriétés de l'objet maVoiture de la façon suivante :

+ +
+maVoiture["fabricant"] = "Ford";
+maVoiture["modèle"] = "Mustang";
+maVoiture["année"] = 1969;
+
+ +

Le nom d'une propriété d'un objet peut être n'importe quelle chaîne JavaScript valide (ou n'importe quelle valeur qui puisse être convertie en une chaîne de caractères), y compris la chaîne vide. Cependant, n'importe quel nom de propriété qui n'est pas un identifiant valide (par exemple si le nom d'une propriété contient un tiret, un espace ou débute par un chiffre) devra être utilisé avec la notation à crochets. Cette notation s'avère également utile quand les noms des propriétés sont déterminés de façon dynamique (c'est-à-dire qu'on ne sait pas le nom de la propriété avant l'exécution). Par exemple :

+ +
+// on crée quatre variables avec une même instruction
+let monObj = new Object();
+let str = "maChaîne";
+let rand = Math.random();
+let obj = new Object();
+
+monObj.type              = "Syntaxe point";
+monObj["date created"]   = "Chaîne avec un espace";
+monObj[str]              = "Une valeur qui est une chaîne";
+monObj[rand]             = "Nombre aléatoire";
+monObj[obj]              = "Objet";
+monObj[""]               = "Une chaîne vide";
+
+console.log(monObj);
+
+ +

On notera que les valeurs utilisées entre les crochets sont automatiquement converties en chaînes de caractères grâce à la méthode toString() sauf si ces valeurs sont des symboles (cf. Symbol). En effet, les noms des propriétés pour les objets JavaScript peuvent être des chaînes de caractères ou des symboles. Ainsi, dans l'exemple précédent, lorsqu'on ajoute la clé obj sur monObj, le moteur JavaScript appelle la méthode obj.toString() et utilise la chaîne de caractères renvoyée par cette méthode comme nom pour la propriété.

+ +

On peut également accéder aux propriétés d'un objet en utilisant une valeur qui est une chaîne de caractères enregistrée dans une variable :

+ +
+let nomPropriété = "fabricant";
+maVoiture[nomPropriété] = "Ford";
+
+nomPropriété = "modèle";
+maVoiture[nomPropriété] = "Mustang";
+
+ +

La notation avec les crochets peut être utilisée dans une boucle for...in afin de parcourir les propriétés énumérables d'un objet. Pour illustrer comment cela fonctionne, on définit la fonction suivante qui affiche les propriétés d'un objet qu'on lui a passé en argument avec le nom associé :

+ +
+function afficherProps(obj, nomObjet) {
+  let resultat = "";
+  for (let i in obj) {
+    if (obj.hasOwnProperty(i)) {
+        resultat += `${nomObjet}.${i} = ${obj[i]}\n`;
+    }
+  }
+  return resultat;
+}
+
+ +

Si on appelle la fonction avec afficherProps(maVoiture, "maVoiture"), cela affichera le contenu suivant dans la console :

+ +
+maVoiture.fabricant = Ford
+maVoiture.modele = Mustang
+maVoiture.annee = 1969
+
+ +

Lister les propriétés d'un objet

+ +

À partir d'ECMAScript 5, il existe trois méthodes natives pour lister/parcourir les propriétés d'un objet :

+ + + +

Avant ECMAScript 5, il n'existait aucune méthode native pour lister l'ensemble des propriétés d'un objet. Cependant, on pouvait utiliser le code suivant pour y parvenir :

+ +
+function listerToutesLesProprietes(o){
+  let objectToInspect;
+  let resultat = [];
+
+  for(objectToInspect = o;
+      objectToInspect !== null;
+      objectToInspect = Object.getPrototypeOf(objectToInspect)){
+    resultat = resultat.concat(Object.getOwnPropertyNames(objectToInspect));
+  }
+  return resultat;
+}
+
+ +

Cela peut être utile pour révéler les propriétés « cachées » où leur nom est réutilisé dans la chaîne de prototypes. Pour lister les propriétés accessibles, il suffit de retirer les duplicatas du tableau.

+ +

Créer de nouveaux objets

+ +

Un environnement JavaScript possède certains objets natifs prédéfinis. En plus de ces objets, il est possible de créer ses propres objets. Pour cela, on peut utiliser un initialisateur d'objet. On peut aussi créer un constructeur puis instancier un objet avec cette fonction en utilisant l'opérateur new.

+ +

Utiliser les initialisateurs d'objets

+ +

On peut créer des objets avec une fonction qui est un constructeur, mais on peut aussi créer des objets avec des initialisateurs d'objets. On appelle parfois cette syntaxe la notation littérale.

+ +

La syntaxe utilisée avec les initialisateurs d'objets est la suivante :

+ +
+let obj = { 
+  propriete_1:   valeur_1,   // propriete_# peut être un identifiant
+            2:   valeur_2,   // ou un nombre
+            // ...,
+  "propriete n": valeur_n
+  }; // ou une chaîne
+
+ +

où on a obj le nom de l'objet qu'on souhaite créer et chaque propriete_i un identifiant (que ce soit un nom, un nombre ou une chaîne de caractères) et chaque valeur_i une expression dont la valeur sera affectée à la propriété propriete_i. S'il n'est pas nécessaire d'utiliser l'objet obj par la suite, il n'est pas nécessaire de réaliser l'affectation à une variable (attention alors à l'encadrer dans des parenthèses pour que le littéral objet soit bien interprété comme une instruction et non pas comme un bloc.)

+ +

Les initialisateurs d'objets sont des expressions et chaque initialisateur entraîne la création d'un nouvel objet dans l'instruction pour laquelle il est exécuté. Des initialisateurs d'objets identiques créeront des objets distincts qui ne seront pas équivalents. Les objets sont créés de la même façon qu'avec new Object(), les objets créés à partir d'une expression littérale seront des instances d'Object.

+ +

L'instruction suivante crée un objet et l'affecte à une variable x si et seulement si l'expression cond est vraie :

+ +
if (cond) let x = {emplacement: "le monde"};
+
+ +

Dans l'exemple suivant, on crée un objet maHonda avec trois propriétés. La propriété moteur est également un objet avec ses propres propriétés.

+ +
+let maHonda = {
+  couleur: "rouge",
+  roue: 4,
+  moteur: {
+    cylindres: 4,
+    taille: 2.2
+  }
+};
+
+ +

De la même façon, on pourra utiliser des initialisateurs pour créer des tableaux. Pour plus d'informations à ce sujet, voir les littéraux de tableaux.

+ +

Utiliser les constructeurs

+ +

On peut aussi créer des objets d'une autre façon, en suivant deux étapes :

+ +
    +
  1. On définit une fonction qui sera un constructeur définissant le type de l'objet. La convention, pour nommer les constructeurs, est d'utiliser une majuscule comme première lettre pour l'identifiant de la fonction.
  2. +
  3. On crée une instance de l'objet avec new.
  4. +
+ +

Pour définir le type d'un objet, on crée une fonction qui définit le nom de ce type et les propriétés et méthodes des instances. Ainsi, si on souhaite créer un type d'objet pour représenter des voitures, on pourra nommer ce type voiture, et il pourra avoir des propriétés pour le fabricant, le modèle et l'année. Pour ce faire, on pourra écrire la fonction suivante :

+ +
+function Voiture(fabricant, modele, annee) {
+  this.fabricant = fabricant;
+  this.modele = modele;
+  this.annee = annee;
+}
+
+ +

On voit ici qu'on utilise le mot-clé this pour affecter des valeurs aux propriétés d'un objet en fonction des valeurs passées en arguments de la fonction.

+ +

On peut désormais créer un objet maVoiture de la façon suivante :

+ +
+let maVoiture = new Voiture("Eagle", "Talon TSi", 1993);
+
+ +

Cette instruction crée un objet maVoiture et lui affecte les valeurs fournies pour ses propriétés. On obtient donc maVoiture.fabricant qui sera la chaîne de caractères "Eagle", maVoiture.annee qui sera l'entier 1993, et ainsi de suite.

+ +

Grâce à ce constructeur, on peut ensuite créer autant d'objets Voiture que nécessaire. Par exemple :

+ +
+let voitureMorgan = new Voiture("Audi", "A3", 2005);
+let voitureMax = new Voiture("Mazda", "Miata", 1990);
+
+ +

Un objet peut avoir une propriété qui est elle-même un objet. Ainsi, si on définit un type d'objet personne de cette façon :

+ +
+function Personne(nom, age, sexe) {
+  this.nom = nom;
+  this.age = age;
+  this.sexe = sexe;
+}
+
+ +

et qu'on instancie deux nouveaux objets personne avec

+ +
+let max = new Personne("Max Gun", 33, "M");
+let morgan = new Personne("Morgan Sousbrouille", 39, "M");
+
+ +

On pourra réécrire la fonction de définition pour le type Voiture pour inclure une propriété proprietaire qui est représentée par un objet personne :

+ +
+function Voiture(fabricant, modele, annee, proprietaire) {
+  this.fabricant = fabricant;
+  this.modele = modele;
+  this.annee = annee;
+  this.proprietaire = proprietaire;
+}
+
+ +

Pour instancier des nouveaux objets, on pourra donc utiliser :

+ +
+let voiture1 = new Voiture("Mazda", "Miata", 1993, max);
+let voiture2 = new Voiture("Audi", "A3", 2005, morgan);
+
+ +

On notera que le dernier argument n'est pas une chaîne de caractères ou une valeur numérique mais bien un objet. Les objets max et morgan sont passés en arguments pour représenter les propriétaires. Ainsi, si on veut obtenir le nom du propriétaire pour voiture2, on peut accéder à la propriété de la façon suivante :

+ +
+voiture2.proprietaire.nom
+
+ +

Il est toujours possible d'ajouter une propriété à un objet défini précédemment. Par exemple, on peut ajouter une propriété à l'objet voiture1 avec l'instruction :

+ +
voiture1.couleur = "noir";
+
+ +

Ici, on ajoute une propriété couleur à voiture1, et on lui affecte une valeur "noir". Cependant, cela n'affecte pas les autres objets voiture. Pour ajouter une nouvelle propriété à tous les objets, il faudra ajouter la propriété au constructeur voiture.

+ +

Utiliser la méthode Object.create()

+ +

Les objets peuvent également être créés en utilisant la méthode Object.create(). Cette méthode peut s'avérer très utile, car elle permet de choisir le prototype pour l'objet qu'on souhaite créer, sans avoir à définir un constructeur.

+ +
+// Propriétés pour animal et encapsulation des méthodes
+let Animal = {
+  type: "Invertébrés",        // Valeur par défaut  value of properties
+  afficherType : function() {  // Une méthode pour afficher le type Animal
+    console.log(this.type);
+  }
+}
+
+// On crée un nouveau type d'animal, animal1
+let animal1 = Object.create(Animal);
+animal1.afficherType(); // affichera Invertébrés
+
+// On crée un type d'animal "Poisson"
+let poisson = Object.create(Animal);
+poisson.type = "Poisson";
+poisson.afficherType(); // affichera Poisson
+
+ +

L'héritage

+ +

Tous les objets JavaScript héritent d'un autre objet. L'objet dont on hérite est appelé prototype et les propriétés héritées peuvent être accédées via l'objet prototype du constructeur. Pour plus d'informations sur le fonctionnement de l'héritage, voir la page sur l'héritage et la chaîne de prototypes.

+ +

Indexer les propriétés d'un objet

+ +

Il est possible d'accéder à une propriété via son nom et via son indice (ordinal). Si on définit une propriété grâce à un nom, on accédera toujours à la valeur via le nom. De même, si on définit une propriété grâce à un indice, on y accèdera toujours via son indice.

+ +

Cette restriction s'applique lorsqu'on crée un objet et ses propriétés via un constructeur et lorsqu'on déclare les propriétés explicitement (par exemple avec maVoiture.couleur = "rouge"). Si on définit une propriété d'un objet avec maVoiture[5] = "25 kmh", on pourra faire référence à cette propriété grâce à maVoiture[5].

+ +

Il existe une exception à cette règle lorsqu'on manipule des objets "semblables à des tableaux" provenant d'API Web telles que l'objet forms. Pour ces objets semblables à des tableaux, on peut accéder à une propriété de l'objet grâce à son nom (si l'attribut name est utilisé sur l'élément HTML) ou grâce à son index selon l'ordre dans le document. Ainsi, si on souhaite cibler un élément <form> du document possédant un attribut name qui vaut monForm et que cet élément est le deuxième élément du document, on pourra y accéder avec document.forms[1], document.forms["monForm"] ou encore avec document.forms.monForm.

+ +

Définir des propriétés pour un type d'objet

+ +

On peut ajouter une propriété à un type précédemment défini en utilisant la propriété prototype. Cela permettra de définir une propriété qui sera partagée par tous les objets d'un même type plutôt qu'elle ne soit définie que pour un seul objet. Le code suivant permet d'ajouter une propriété couleur à tous les objets de type voiture. On affecte ensuite une valeur à cette propriété pour l'objet voiture1.

+ +
+Voiture.prototype.couleur = null;
+voiture1.couleur = "noir";
+
+ +

Pour plus d'informations, voir l'article sur la propriété prototype de l'objet Function de la référence JavaScript.

+ +

Définir des méthodes

+ +

Une méthode est une fonction associée à un objet. Autrement dit, une méthode est une propriété d'un objet qui est une fonction. Les méthodes sont définies comme des fonctions normales et sont affectées à des propriétés d'un objet. Voir la page sur les définitions de méthodes pour plus d'informations. Par exemple :

+ +
+nomObjet.nomMethode = nomFonction;
+
+let monObj = {
+  maMethode: function(params) {
+    // …faire quelque chose
+  }
+
+  // la forme suivante fonctionne aussi
+
+  monAutreMethode(params) {
+    // …faire autre chose
+  }
+};
+
+ +

avec nomObjet qui est un objet existant, nomMethode est le nom de la propriété à laquelle on souhaite affecter la méthode et nomFonction le nom de la fonction.

+ +

On peut ensuite appeler la méthode sur l'objet :

+ +
+object.nomMethode(parametres);
+
+ +

On peut définir des méthodes pour un type d'objet en incluant la définition de la méthode dans le constructeur. Par exemple, on peut définir une fonction qui mettrait en forme et qui afficherait les propriétés d'un objet voiture. Par exemple :

+ +
+function afficheVoiture() {
+  let resultat = `Une belle ${this.modele}, fabriquée en ${this.annee} par ${this.fabricant}`;
+  console.log(résultat);
+}
+
+ +

On peut ensuite ajouter cette fonction comme méthode dans le constructeur avec cette instruction :

+ +
+this.afficheVoiture = afficheVoiture;
+
+ +

La définition complète de Voiture serait donc :

+ +
+function Voiture(fabricant, modele, annee, proprietaire) {
+  this.fabricant = fabricant;
+  this.modele = modele;
+  this.annee = annee;
+  this.proprietaire = proprietaire;
+  this.afficheVoiture = afficheVoiture;
+}
+
+ +

On pourra donc ensuite appeler la méthode afficheVoiture pour chaque objet de ce type :

+ +
voiture1.afficheVoiture();
+voiture2.afficheVoiture();
+
+ +

Utiliser this pour les références aux objets

+ +

JavaScript possède un mot-clé spécial this, qui peut être utilisé à l'intérieur d'une méthode pour faire référence à l'objet courant.

+ +

Par exemple, supposons qu'on ait deux objets, responsable et stagiaire. Chaque objet possède son propre nom, age et poste. Dans la fonction direBonjour(), on remarque qu'on utilise this.nom. Lorsqu'on ajoute cette méthode aux deux objets, on peut alors appeler cette fonction depuis les deux objets et celle-ci affichera 'Bonjour, mon nom est ' suivi de la valeur de la propriété nom rattaché à l'objet indiqué.

+ +
+const responsable = {
+ nom: "Jean",
+ age: 27,
+ poste: "Ingénieur logiciel"
+};
+
+const stagiaire = {
+ nom: "Ben",
+ age: 21,
+ poste: "Stagiaire ingénieur logiciel"
+};
+
+function direBonjour() {
+ console.log('Bonjour, mon nom est', this.nom)
+};
+
+// on ajoute direBonjour aux deux objets
+responsable.direBonjour = direBonjour;
+stagiaire.direBonjour = direBonjour;
+
+responsable.direBonjour(); // Bonjour, mon nom est John'
+stagiaire.direBonjour();   // Bonjour, mon nom est Ben'
+
+ +

Ici, this fait référence à l'objet courant. On peut également créer une fonction direMonAge() qui affiche une phrase indiquant l'age.

+ +
+function direMonAge(){
+  console.log("J'ai " + this.age + " ans.");
+};
+
+responsable.direMonAge = direMonAge;
+responsable.direMonAge(); // J'ai 27 ans.
+
+ +

Définir des accesseurs et des mutateurs (getters et setters)

+ +

Un accesseur (getter) est une méthode qui permet de récupérer la valeur d'une propriété donnée. Un mutateur (setter) est une méthode qui permet de définir la valeur d'une propriété donnée. Il est possible de définir des accesseurs et des mutateurs sur chaque objet (qu'il soit natif ou défini par l'utilisateur) qui supporte l'ajout de nouvelles propriétés.

+ +

Les accesseurs et mutateurs peuvent être :

+ + + +

Lorsqu'on définit des accesseurs et des mutateurs en utilisant la syntaxe littérale des initialisateurs d'objet, il suffit d'ajouter un préfixe get devant une fonction pour un accesseur et un préfixe set devant une fonction pour un mutateur. La méthode pour l'accesseur ne doit pas utiliser de paramètre tandis que la méthode pour le mutateur doit utiliser un seul paramètre (la nouvelle valeur à définir). Ainsi :

+ +
+let 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 <-- À ce moment, la méthode get b() est invoquée
+o.c = 50;         //   <-- À ce moment, la méthode set c(x) est invoquée
+console.log(o.a); // 25
+
+ +

Les propriétés de l'objet o sont :

+ + + +

On notera que les noms des fonctions pour les accesseurs et les mutateurs définis dans un initialisateur d'objet avec la forme [gs]et propriete() ne sont pas les noms des accesseurs/mutateurs eux-mêmes malgré ce que pourrait laisser croire la syntaxe.

+ +

Les accesseurs et mutateurs peuvent également être ajoutés à un objet après sa création via la méthode Object.defineProperties() (ou Object.defineProperty()). Le premier paramètre de cette méthode est l'objet sur lequel on souhaite ajouter les fonctions. Le deuxième paramètre est un objet dont les noms des propriétés sont les noms des accesseurs et/ou des mutateurs et les valeurs de ces propriétés sont les objets qui définissent les fonctions correspondantes. Voici un exemple qui définit un accesseur et un mutateur pour obtenir un résultat équivalent à l'exemple précédent :

+ +
+let o = { a: 0 };
+
+Object.defineProperties(o, {
+ 'b': { get: function() { return this.a + 1; } },
+ 'c': { set: function(x) { this.a = x / 2; } }
+});
+
+o.c = 10; // Exécute le mutateur qui affecte 10 / 2 (5) à la propriété 'a'
+console.log(o.b); // Exécute l'accesseur qui renvoie a + 1, soit 6
+
+ +

Le choix de l'une ou l'autre de ces formes dépend de votre style et du type de tâche à réaliser. Si vous utilisez déjà un initialisateur d'objet lors de la définition d'un prototype, vous choisirez probablement la première forme, plus concise et plus naturelle. Toutefois, si vous avez besoin d'ajouter des accesseurs/mutateurs plus tard, parce que vous n'avez pas écrit le prototype ou la définition de l'objet, seule la seconde forme sera possible. Cette dernière représente mieux la nature dynamique de JavaScript mais peut rendre la lecture et la compréhension du code plus difficiles.

+ +

Supprimer des propriétés

+ +

Il est possible de retirer des propriétés propres (celles qui ne sont pas héritées) grâce à l'opérateur delete. Le code suivant montre comment retirer une propriété :

+ +
+// On crée un nouvel objet, monObj, avec deux propriétés a et b.
+let monObj = new Object;
+monObj.a = 5;
+monObj.b = 12;
+
+// On retire la propriété a, monObj a donc uniquement la propriété b
+delete monObj.a;
+console.log("a" in monObj) // produit "false"
+
+ +

Il est aussi possible de supprimer une propriété de l'objet global avec delete si aucun mot-clé comme var, let ou const n'avait été utilisé :

+ +
+g = 17;
+delete g;
+
+ +

Comparer des objets

+ +

En JavaScript, les objets fonctionnent par référence. Deux objets distincts ne sont jamais égaux, même s'ils ont les mêmes valeurs pour les mêmes propriétés. On aura une équivalence uniquement si on compare deux références vers un seul et même objet donné.

+ +
+// Deux variables avec deux objets distincts
+// qui ont les mêmes propriétés
+let fruit = {nom: "pomme"};
+let fruit2 = {nom: "pomme"};
+
+fruit == fruit2  // renvoie false
+fruit === fruit2 // renvoie false
+ +
+// Deux variables référençant un même objet
+let fruit = {nom: "pomme"};
+let fruit2 = fruit;  // On affecte la même référence
+
+// dans ce cas fruit et fruit2 pointent vers le même objet
+fruit == fruit2  // renvoie true
+fruit === fruit2 // renvoie true
+
+fruit.nom = "raisin";
+console.log(fruit2); // affiche {nom: "raisin"} et non {nom: "pomme"}
+
+ +

Pour plus d'informations sur les opérateurs de comparaisons, voir cet article.

+ +

Voir aussi

+ + + +

{{PreviousNext("Web/JavaScript/Guide/Keyed_collections", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}

diff --git a/files/fr/web/javascript/index.html b/files/fr/web/javascript/index.html deleted file mode 100644 index bb77718a93..0000000000 --- a/files/fr/web/javascript/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: JavaScript -slug: Web/JavaScript -tags: - - JavaScript - - Landing - - Landing page - - Learn -translation_of: Web/JavaScript ---- -
{{JsSidebar}}
- -

JavaScript (souvent abrégé en « JS ») est un langage de script léger, orienté objet, principalement connu comme le langage de script des pages web. Mais il est aussi utilisé dans de nombreux environnements extérieurs aux navigateurs web tels que Node.js, Apache CouchDB voire Adobe Acrobat. Le code JavaScript est interprété ou compilé à la volée (JIT). C'est un langage à objets utilisant le concept de prototype, disposant d'un typage faible et dynamique qui permet de programmer suivant plusieurs paradigmes de programmation : fonctionnelle, impérative et orientée objet. Apprenez-en plus sur JavaScript.

- -

Cette section de MDN est dédiée au langage JavaScript. Pour des informations sur l'utilisation de JavaScript avec les API spécifiques des navigateurs web pour les pages web, veuillez consulter les sections sur les API Web (Web API en anglais) et le DOM.

- -

Le standard qui spécifie JavaScript est ECMAScript. En 2012, tous les navigateurs modernes supportent complètement ECMAScript 5.1. Les anciens navigateurs supportent au minimum ECMAScript 3. Une sixième version majeure du standard a été finalisée et publiée le 17 juin 2015. Cette version s'intitule officiellement ECMAScript 2015 mais est encore fréquemment appelée ECMAScript 6 ou ES6. Étant donné que les standards ECMAScript sont désormais édités sur un rythme annuel, cette documentation fait référence à la dernière version en cours de rédaction, actuellement c'est ECMAScript 2020.

- -

JavaScript ne doit pas être confondu avec le langage de programmation Java. Java et JavaScript sont deux marques déposées par Oracle dans de nombreux pays mais ces deux langages de programmation ont chacun une syntaxe, une sémantique et des usages différents.

- -
-

Vous cherchez à devenir un développeur web front-end ?

-

Nous avons élaboré un cours qui comprend toutes les informations essentielles dont vous avez besoin pour atteindre votre objectif.

-

Commencer

-
- -

Tutoriels

- -

Apprenez comment programmer en JavaScript.

- -

Ressources pour commencer

- -

Si vous souhaitez apprendre JavaScript et que vous débutez en programmation ou en JavaScript, la section JavaScript de la zone d'apprentissage de MDN (learning area) est le meilleur endroit où commencer. Cette section contient les modules suivants :

- -
-
Les premiers pas en JavaScript
-
Cet ensemble de chapitres répond à des questions telles que « qu'est-ce que JavaScript ? », « à quoi ressemble-t-il ? », « que puis-je faire avec ? » et présente des éléments clés du langage tels que les variables, les chaînes de caractères, les nombres et les tableaux.
-
Les principaux blocs de JavaScript
-
On poursuit ici la présentation des fonctionnalités importantes de JavaScript, notamment celle des blocs de codes fréquemment utilisés comme les instructions conditionnelles, les boucles, les fonctions et les évènements.
-
Une introduction aux objets JavaScript
-
JavaScript est un langage de programmation « orienté objet » et ce concept est primordial pour utiliser JavaScript au mieux, écrire du code plus efficace et comprendre son fonctionnement. Ce module présente les bases de ces concepts.
-
La programmation asynchrone en JavaScript
-
Dans cet article, on aborde les fonctionnalités asynchrones de JavaScript, en quoi elles sont importantes et la façon dont elles peuvent être utilisées lors d'opérations bloquantes comme la récupération de ressources provenant d'un serveur.
-
Les API Web utilisées côté client
-
Lorsqu'on écrit du JavaScript pour un site web ou une application, il est rapidement nécessaire de manipuler les API : des interfaces qui permettent de manipuler différents aspects du navigateur, des données provenant d'autres sites ou services, etc. Dans ce module, nous verrons ce que sont les API, et comment utiliser les API les plus fréquemment utilisées.
-
- -

Guide JavaScript

- -
-
Guide JavaScript
-
Un guide détaillé de JavaScript, destiné aux personnes qui ont déjà développé en JavaScript ou avec un autre langage.
-
- -

Niveau intermédiaire

- -
-
Comprendre les frameworks JavaScript côté client
-
Les frameworks JavaScript font partie de l'écosystème du développement web côté client. Les outils qu'ils fournissent permettent de construire des applications dynamiques sur des bases robustes. Dans ce module, on présente les notions principales de leur fonctionnement et comment ces outils peuvent rejoindre votre panoplie. Des tutoriels sur les frameworks les plus répandus suivront cet article.
-
Une réintroduction à JavaScript
-
Un aperçu pour ceux qui pensent s'y connaître en JavaScript.
-
Structures de données JavaScript
-
Aperçu des structures de données disponibles en JavaScript.
-
Égalité, comparaison et similarité
-
JavaScript propose trois opérations de comparaison de valeurs différentes : l'égalité stricte à l'aide de ===, l'égalité souple à l'aide de == et la méthode Object.is().
-
Closures
-
-

Une closure est la combinaison d'une fonction et de l'environnement lexical dans lequel cette fonction a été déclarée.

-
-
- -

Niveau avancé

- -
-
Héritage et chaîne de prototypes
-
Cette page explique l'héritage à base de prototype, un concept souvent incompris et sous-estimé.
-
Le mode strict
-
Une variante plus restreinte de JavaScript (par exemple, on ne peut pas utiliser de variable avant de l'avoir définie). Elle permet d'obtenir de meilleures performances et de faciliter le débogage.
-
Les tableaux typés en JavaScript
-
Les tableaux typés permettent d'accéder à des données binaires brutes, de façon organisée.
-
La gestion de la mémoire en JavaScript
-
Cet article décrit le cycle de vie des objets et de la mémoire en JavaScript, ainsi que le mécanisme du ramasse-miettes.
-
Gestion de la concurrence et boucle des événements
-
Le modèle de concurrence utilisé par JavaScript est basé sur une « boucle d'événements »
-
- -

Référence

- -

Parcourez la documentation complète de la référence JavaScript.

- -
-
Les objets standard
-
Apprenez à connaître les objets natifs standard tels que Array, Boolean, Date, Error, Function, JSON, Math, Number, Object, RegExp, String, Map, Set, WeakMap, WeakSet, et d'autres.
-
Les expressions et les opérateurs
-
Apprenez à connaître comment fonctionnent les opérateurs JavaScript comme instanceof, typeof, new, this et bien d'autres notions comme la précédence des opérateurs.
-
Les instructions et les déclarations
-
Apprenez à connaître comment utiliser do...while, for...in, for...of, try...catch, let, var, const, if...else, switch et les autres mots-clés et instructions JavaScript.
-
Les fonctions
-
Apprenez à utiliser les fonctions en JavaScript pour développer vos applications.
-
- -

Outils & ressources

- -

Voici une liste d'outils utiles pour écrire et déboguer du code JavaScript.

- -
-
Outils de développement de Firefox
-
Console web, profileur JavaScript, débogueur, et plus.
-
Invites de commande JavaScript
-
Un interpréteur de commandes JavaScript vous permet de tester rapidement des extraits de code JavaScript.
-
Apprendre le JavaScript (en anglais)
-
Une excellente ressource pour les développeurs web en herbe - Apprenez JavaScript dans un environnement interactif, avec des leçons courtes et des tests interactifs, guidés par une évaluation automatique. Les 40 premières leçons sont gratuites, et le cours complet est disponible moyennant un petit paiement unique.
-
TogetherJS
-
La collaboration rendue facile. En ajoutant TogetherJS à votre site, vos utilisateurs peuvent s'entraider sur un site web en temps réel !
-
Stack Overflow
-
Questions Stack Overflow portant le tag « JavaScript ».
-
JSFiddle
-
Modifiez votre code JavaScript, CSS, HTML et obtenez des résultats en direct. Utilisez des ressources externes et collaborez avec votre équipe en ligne.
-
Plunker
-
Plunker est une communauté en ligne pour créer, collaborer et partager vos idées de développement web. Modifiez vos fichiers JavaScript, CSS, HTML et obtenez des résultats en direct et la structure des fichiers.
-
JSBin
-
JS Bin est un outil de débogage collaboratif open-source pour le développement web.
-
Codepen
-
Codepen est un autre outil de développement web collaboratif utilisé comme un terrain de jeu pour des résultats en direct.
-
StackBlitz
-
StackBlitz est un autre terrain de jeu/outil de débogage en ligne, qui peut héberger et déployer des applications full-stack utilisant React, Angular, etc.
-
RunJS
-
RunJS est un outil de bureau de type bac-à-sable/ardoise, qui fournit des résultats en direct et un accès aux API Node.JS et à celles du navigateur.
-
diff --git a/files/fr/web/javascript/index.md b/files/fr/web/javascript/index.md new file mode 100644 index 0000000000..bb77718a93 --- /dev/null +++ b/files/fr/web/javascript/index.md @@ -0,0 +1,129 @@ +--- +title: JavaScript +slug: Web/JavaScript +tags: + - JavaScript + - Landing + - Landing page + - Learn +translation_of: Web/JavaScript +--- +
{{JsSidebar}}
+ +

JavaScript (souvent abrégé en « JS ») est un langage de script léger, orienté objet, principalement connu comme le langage de script des pages web. Mais il est aussi utilisé dans de nombreux environnements extérieurs aux navigateurs web tels que Node.js, Apache CouchDB voire Adobe Acrobat. Le code JavaScript est interprété ou compilé à la volée (JIT). C'est un langage à objets utilisant le concept de prototype, disposant d'un typage faible et dynamique qui permet de programmer suivant plusieurs paradigmes de programmation : fonctionnelle, impérative et orientée objet. Apprenez-en plus sur JavaScript.

+ +

Cette section de MDN est dédiée au langage JavaScript. Pour des informations sur l'utilisation de JavaScript avec les API spécifiques des navigateurs web pour les pages web, veuillez consulter les sections sur les API Web (Web API en anglais) et le DOM.

+ +

Le standard qui spécifie JavaScript est ECMAScript. En 2012, tous les navigateurs modernes supportent complètement ECMAScript 5.1. Les anciens navigateurs supportent au minimum ECMAScript 3. Une sixième version majeure du standard a été finalisée et publiée le 17 juin 2015. Cette version s'intitule officiellement ECMAScript 2015 mais est encore fréquemment appelée ECMAScript 6 ou ES6. Étant donné que les standards ECMAScript sont désormais édités sur un rythme annuel, cette documentation fait référence à la dernière version en cours de rédaction, actuellement c'est ECMAScript 2020.

+ +

JavaScript ne doit pas être confondu avec le langage de programmation Java. Java et JavaScript sont deux marques déposées par Oracle dans de nombreux pays mais ces deux langages de programmation ont chacun une syntaxe, une sémantique et des usages différents.

+ +
+

Vous cherchez à devenir un développeur web front-end ?

+

Nous avons élaboré un cours qui comprend toutes les informations essentielles dont vous avez besoin pour atteindre votre objectif.

+

Commencer

+
+ +

Tutoriels

+ +

Apprenez comment programmer en JavaScript.

+ +

Ressources pour commencer

+ +

Si vous souhaitez apprendre JavaScript et que vous débutez en programmation ou en JavaScript, la section JavaScript de la zone d'apprentissage de MDN (learning area) est le meilleur endroit où commencer. Cette section contient les modules suivants :

+ +
+
Les premiers pas en JavaScript
+
Cet ensemble de chapitres répond à des questions telles que « qu'est-ce que JavaScript ? », « à quoi ressemble-t-il ? », « que puis-je faire avec ? » et présente des éléments clés du langage tels que les variables, les chaînes de caractères, les nombres et les tableaux.
+
Les principaux blocs de JavaScript
+
On poursuit ici la présentation des fonctionnalités importantes de JavaScript, notamment celle des blocs de codes fréquemment utilisés comme les instructions conditionnelles, les boucles, les fonctions et les évènements.
+
Une introduction aux objets JavaScript
+
JavaScript est un langage de programmation « orienté objet » et ce concept est primordial pour utiliser JavaScript au mieux, écrire du code plus efficace et comprendre son fonctionnement. Ce module présente les bases de ces concepts.
+
La programmation asynchrone en JavaScript
+
Dans cet article, on aborde les fonctionnalités asynchrones de JavaScript, en quoi elles sont importantes et la façon dont elles peuvent être utilisées lors d'opérations bloquantes comme la récupération de ressources provenant d'un serveur.
+
Les API Web utilisées côté client
+
Lorsqu'on écrit du JavaScript pour un site web ou une application, il est rapidement nécessaire de manipuler les API : des interfaces qui permettent de manipuler différents aspects du navigateur, des données provenant d'autres sites ou services, etc. Dans ce module, nous verrons ce que sont les API, et comment utiliser les API les plus fréquemment utilisées.
+
+ +

Guide JavaScript

+ +
+
Guide JavaScript
+
Un guide détaillé de JavaScript, destiné aux personnes qui ont déjà développé en JavaScript ou avec un autre langage.
+
+ +

Niveau intermédiaire

+ +
+
Comprendre les frameworks JavaScript côté client
+
Les frameworks JavaScript font partie de l'écosystème du développement web côté client. Les outils qu'ils fournissent permettent de construire des applications dynamiques sur des bases robustes. Dans ce module, on présente les notions principales de leur fonctionnement et comment ces outils peuvent rejoindre votre panoplie. Des tutoriels sur les frameworks les plus répandus suivront cet article.
+
Une réintroduction à JavaScript
+
Un aperçu pour ceux qui pensent s'y connaître en JavaScript.
+
Structures de données JavaScript
+
Aperçu des structures de données disponibles en JavaScript.
+
Égalité, comparaison et similarité
+
JavaScript propose trois opérations de comparaison de valeurs différentes : l'égalité stricte à l'aide de ===, l'égalité souple à l'aide de == et la méthode Object.is().
+
Closures
+
+

Une closure est la combinaison d'une fonction et de l'environnement lexical dans lequel cette fonction a été déclarée.

+
+
+ +

Niveau avancé

+ +
+
Héritage et chaîne de prototypes
+
Cette page explique l'héritage à base de prototype, un concept souvent incompris et sous-estimé.
+
Le mode strict
+
Une variante plus restreinte de JavaScript (par exemple, on ne peut pas utiliser de variable avant de l'avoir définie). Elle permet d'obtenir de meilleures performances et de faciliter le débogage.
+
Les tableaux typés en JavaScript
+
Les tableaux typés permettent d'accéder à des données binaires brutes, de façon organisée.
+
La gestion de la mémoire en JavaScript
+
Cet article décrit le cycle de vie des objets et de la mémoire en JavaScript, ainsi que le mécanisme du ramasse-miettes.
+
Gestion de la concurrence et boucle des événements
+
Le modèle de concurrence utilisé par JavaScript est basé sur une « boucle d'événements »
+
+ +

Référence

+ +

Parcourez la documentation complète de la référence JavaScript.

+ +
+
Les objets standard
+
Apprenez à connaître les objets natifs standard tels que Array, Boolean, Date, Error, Function, JSON, Math, Number, Object, RegExp, String, Map, Set, WeakMap, WeakSet, et d'autres.
+
Les expressions et les opérateurs
+
Apprenez à connaître comment fonctionnent les opérateurs JavaScript comme instanceof, typeof, new, this et bien d'autres notions comme la précédence des opérateurs.
+
Les instructions et les déclarations
+
Apprenez à connaître comment utiliser do...while, for...in, for...of, try...catch, let, var, const, if...else, switch et les autres mots-clés et instructions JavaScript.
+
Les fonctions
+
Apprenez à utiliser les fonctions en JavaScript pour développer vos applications.
+
+ +

Outils & ressources

+ +

Voici une liste d'outils utiles pour écrire et déboguer du code JavaScript.

+ +
+
Outils de développement de Firefox
+
Console web, profileur JavaScript, débogueur, et plus.
+
Invites de commande JavaScript
+
Un interpréteur de commandes JavaScript vous permet de tester rapidement des extraits de code JavaScript.
+
Apprendre le JavaScript (en anglais)
+
Une excellente ressource pour les développeurs web en herbe - Apprenez JavaScript dans un environnement interactif, avec des leçons courtes et des tests interactifs, guidés par une évaluation automatique. Les 40 premières leçons sont gratuites, et le cours complet est disponible moyennant un petit paiement unique.
+
TogetherJS
+
La collaboration rendue facile. En ajoutant TogetherJS à votre site, vos utilisateurs peuvent s'entraider sur un site web en temps réel !
+
Stack Overflow
+
Questions Stack Overflow portant le tag « JavaScript ».
+
JSFiddle
+
Modifiez votre code JavaScript, CSS, HTML et obtenez des résultats en direct. Utilisez des ressources externes et collaborez avec votre équipe en ligne.
+
Plunker
+
Plunker est une communauté en ligne pour créer, collaborer et partager vos idées de développement web. Modifiez vos fichiers JavaScript, CSS, HTML et obtenez des résultats en direct et la structure des fichiers.
+
JSBin
+
JS Bin est un outil de débogage collaboratif open-source pour le développement web.
+
Codepen
+
Codepen est un autre outil de développement web collaboratif utilisé comme un terrain de jeu pour des résultats en direct.
+
StackBlitz
+
StackBlitz est un autre terrain de jeu/outil de débogage en ligne, qui peut héberger et déployer des applications full-stack utilisant React, Angular, etc.
+
RunJS
+
RunJS est un outil de bureau de type bac-à-sable/ardoise, qui fournit des résultats en direct et un accès aux API Node.JS et à celles du navigateur.
+
diff --git a/files/fr/web/javascript/inheritance_and_the_prototype_chain/index.html b/files/fr/web/javascript/inheritance_and_the_prototype_chain/index.html deleted file mode 100644 index 1b21ea0232..0000000000 --- a/files/fr/web/javascript/inheritance_and_the_prototype_chain/index.html +++ /dev/null @@ -1,574 +0,0 @@ ---- -title: Héritage et chaîne de prototype -slug: Web/JavaScript/Inheritance_and_the_prototype_chain -tags: - - Guide - - Héritage - - Intermédiaire - - JavaScript - - OOP -translation_of: Web/JavaScript/Inheritance_and_the_prototype_chain -original_slug: Web/JavaScript/Héritage_et_chaîne_de_prototypes ---- -
{{jsSidebar("Advanced")}}
- -

JavaScript peut prêter à confusion losqu'on est habitué à manipuler des langages de programmation manipulant les classes (tels que Java ou C++). En effet, JavaScript est un langage dynamique et ne possède pas de concept de classe à part entière (le mot-clé class a certes été ajouté avec ES2015 mais il s'agit uniquement de sucre syntaxique, JavaScript continue de reposer sur l'héritage prototypique).

- -

En ce qui concerne l'héritage, JavaScript n'utilise qu'une seule structure : les objets. Chaque objet possède une propriété privée qui contient un lien vers un autre objet appelé le prototype. Ce prototype possède également son prototype et ainsi de suite, jusqu'à ce qu'un objet ait {{jsxref("null")}} comme prototype. Par définition, null ne possède pas de prototype et est ainsi le dernier maillon de la chaîne de prototype.

- -

La majorité des objets JavaScript sont des instances de {{jsxref("Object")}} qui est l'avant dernier maillon de la chaîne de prototype.

- -

Bien que cette confusion (entre classe et prototype) soit souvent avancée comme l'une des faiblesses de JavaScript, le modèle prototypique est plus puissant que le modèle classique et il est notamment possible de construire un modèle classique à partir d'un modèle prototypique.

- -

Héritage et chaîne de prototype

- -

Propriété héritées

- -

Les objets JavaScript sont des ensembles dynamiques de propriétés (les propriétés directement rattachées à un objet sont appelées propriétés en propre (own properties)). Les objets JavaScript possèdent également un lien vers un objet qui est leur prototype. Lorsqu'on tente d'accéder aux propriétés d'un objet, la propriété sera recherchée d'abord sur l'objet même, puis sur son prototype, puis sur le prototype du prototype et ainsi de suite jusqu'à ce qu'elle soit trouvée ou que la fin de la chaîne de prototype ait été atteinte.

- -
-

Note : Dans la spécification ECMAScript, on utilise la notation unObjet.[[Prototype]] pour faire référence au prototype de unObjet. Depuis ECMAScript 2015, on peut accéder à [[Prototype]] grâce aux accesseurs {{jsxref("Object.getPrototypeOf()")}} et {{jsxref("Object.setPrototypeOf()")}}. Cela est équivalent à la propriété JavaScript __proto__ qui était non-standard avant ES2015 mais qui était de fait implémentée par la majorité des navigateurs.

- -

Cette propriété ne devrait pas être confondue avec la propriété func.prototype des fonctions qui définissent le [[Prototype]] à affecter aux instances des objets créés par cette fonction lorsqu'elle est utilisée comme constructeur. La propriété Object.prototype représente le prototype de {{jsxref("Object")}}.

-
- -

Voici ce qui se produit lorsqu'on tente d'accéder à une propriété :

- -
// On commence par créer un objet o pour lequel la fonction f sera
-// son constructeur et lui créera deux propriétés en propre
-// a et b :
-let f = function () {
-   this.a = 1;
-   this.b = 2;
-}
-let o = new f(); // {a: 1, b: 2}
-
-// on ajoute des propriétés au prototype de la fonction
-// f
-f.prototype.b = 3;
-f.prototype.c = 4;
-
-// Note : on ne définit pas le prototype de f avec f.prototype = {b:3,c:4};
-// car cela briserait la chaîne de prototype
-
-// o.[[Prototype]] possède les propriétés b and c.
-// o.[[Prototype]].[[Prototype]] est Object.prototype.
-// Enfin, o.[[Prototype]].[[Prototype]].[[Prototype]] vaut null.
-// On a alors atteint la fin de la chaîne de prototype car,
-// par définition, null n'a pas de [[Prototype]].
-// Ainsi, la chaîne complète est ici :
-// {a: 1, b: 2} ---> {b: 3, c: 4} ---> Object.prototype ---> null
-
-console.log(o.a); // 1
-// Existe-t-il une propriété 'a' en propre sur o ? Oui, elle vaut 1.
-
-console.log(o.b); // 2
-// Existe-t-il une propriété 'b' en propre sur o ? Oui, elle vaut 2.
-// Le prototype possède également une propriété 'b' mais elle n'est pas
-// utilisée.
-// C'est ce qu'on appelle l'ombrage (shadowing en anglais)
-
-console.log(o.c); // 4
-// Existe-t-il une propriété 'c' en propre sur o ? Non, on vérifie le
-// prototype.
-// Existe-t-il une propriété 'c' en propre sur o.[[Prototype]] ?
-// Oui, elle vaut 4.
-
-console.log(o.d); // undefined
-// Existe-t-il une propriété 'd' en propre sur o ? Non, on vérifie le
-// prototype.
-// Existe-t-il une propriété 'd' en propre sur o.[[Prototype]] ? Non, on vérifie le
-// prototype.
-// o.[[Prototype]].[[Prototype]] est Object.prototype et ne contient pas
-// de propriété 'd' par défaut. On vérifie son prototype.
-// o.[[Prototype]].[[Prototype]].[[Prototype]] est null, on arrête la recherche
-// aucune propriété n'est trouvée, le moteur renvoie undefined.
-
- -

Lorsquon définit une propriété sur un objet, cela définit une propriété en propre. La seule exception se produit lorsqu'on définit un accesseur et/ou un mutateur sur une propriété héritée.

- -

Méthodes héritées

- -

JavaScript ne possède pas de méthodes au sens des langages de classe. En effet, en JavaScript, toute fonction associée à un objet est également une propriété. Une fonction héritée se comportera comme n'importe quelle autre propriété (y compris pour l'ombrage mentionné ci-avant où on pourra parler de surcharge).

- -

Lorsqu'une fonction héritée est exécutée, la valeur de this pointe vers l'objet hérité et non vers l'objet prototype qui possède la fonction comme propriété en propre.

- -
var o = {
-  a: 2,
-  m: function() {
-    return this.a + 1;
-  }
-};
-
-console.log(o.m()); // 3
-// Quand on appelle o.m ici, 'this' fera référence à o
-
-var p = Object.create(o);
-// p est un objet qui hérite de o
-
-p.a = 4; // on crée une propriété 'a' en propre sur p
-console.log(p.m()); // 5
-// lorsque p.m est appelée, 'this' fait référence à p.
-// Ainsi quand p hérite de m via o,
-// 'this.a' signifie p.a, soit la propriété 'a' de p
-
-
-
- -

Utiliser les prototypes avec JavaScript

- -

Regardons un peu plus en détail ce qui se déroule en arrière-plan.

- -
-

Note : Pour tous les exempls suivants, nous vous invitons à ouvrir la "console" de votre navigateur pour y copier/coller/éditer les fragments de code. Pour savoir comment lancer cette console, vous pouvez lire la documentation des navigateurs : Firefox, Chrome, Edge.

-
- -

En JavaScript, comme mentionné ci-dessus, les fonctions peuvent avoir des propriétés. Toutes les fonctions ont une propriété spéciale intitulée prototype.

- -
function faireUnTruc(){}
-console.log( faireUnTruc.prototype ); // Object {...}
-// Peu importe comment vous déclarez la fonction.
-// une fonction en JavaScript aura toujours une propriété
-// prototype par défaut.
-var faireUnTruc= function(){};
-console.log(faireUnTruc.prototype); // Object {...}
-
- -

Comme mentionné avant, faireUnTruc() possède une propriété par défaut prototype. Après avoir exécuté ce code dans une console, la console devrait afficher un objet semblable à :

- -
{
-    constructor: ƒ faireUnTruc(),
-    __proto__: {
-        constructor: ƒ Object(),
-        hasOwnProperty: ƒ hasOwnProperty(),
-        isPrototypeOf: ƒ isPrototypeOf(),
-        propertyIsEnumerable: ƒ propertyIsEnumerable(),
-        toLocaleString: ƒ toLocaleString(),
-        toString: ƒ toString(),
-        valueOf: ƒ valueOf()
-    }
-}
- -

On peut ajouter des propriétés au prototype de faireUnTruc() comme suit :

- -
function faireUnTruc(){}
-faireUnTruc.prototype.toto = "truc";
-console.log( faireUnTruc.prototype );
- -

Produira le résultat suivant :

- -
{
-    toto: "truc",
-    constructor: ƒ faireUnTruc(),
-    __proto__: {
-        constructor: ƒ Object(),
-        hasOwnProperty: ƒ hasOwnProperty(),
-        isPrototypeOf: ƒ isPrototypeOf(),
-        propertyIsEnumerable: ƒ propertyIsEnumerable(),
-        toLocaleString: ƒ toLocaleString(),
-        toString: ƒ toString(),
-        valueOf: ƒ valueOf()
-    }
-}
-
- -

On peut utiliser l'opérateur new afin de créer une instance de faireUnTruc() basée sur ce prototype. Pour utiliser l'opérateur new, il suffira d'appeler la fonction et de précéder cet appel avec le mot-clé new. Lorsqu'on appelle une fonction avec un opérateur new, celle-ci renvoie un objet qui est une instance de la fonction. On peut ensuite ajouter des propriétés sur cet objet.

- -

Voyons le code qui suit :

- -
function faireUnTruc(){}
-faireUnTruc.prototype.toto = "truc"; // on ajoute une propriété au prototype
-var uneInstance = new faireUnTruc();
-uneInstance.prop = "une valeur"; // on ajoute une propriété sur l'objet
-console.log(uneInstance);
- -

Exécuté, ce code produira le résultat suivant dans la console :

- -
{
-    prop: "une valeur",
-    __proto__: {
-        toto: "truc",
-        constructor: ƒ faireUnTruc(),
-        __proto__: {
-            constructor: ƒ Object(),
-            hasOwnProperty: ƒ hasOwnProperty(),
-            isPrototypeOf: ƒ isPrototypeOf(),
-            propertyIsEnumerable: ƒ propertyIsEnumerable(),
-            toLocaleString: ƒ toLocaleString(),
-            toString: ƒ toString(),
-            valueOf: ƒ valueOf()
-        }
-    }
-}
- -

Comme nous l'avons vu avant, la valeur de __proto__ pour uneInstance est faireUnTruc.prototype. Mais quel est l'intérêt ? Lorsqu'on accède à une propriété de uneInstance, le moteur contrôle d'abord si uneInstance possède cette propriété.

- -

Si uneInstance ne possède pas cette propriété, le moteur contrôlera la propriété sur la propriété __proto__ de uneInstance (c'est-à-dire faireUnTruc.prototype). Si la propriété __proto__ de uneInstance possède la propriété qu'on recherche, ce sera celle-ci qui sera utilisée.

- -

Si __proto__ de unTruc ne possède pas la propriété recherchée, le moteur contrôle la propriété __proto__ de la propriété __proto__ de uneInstance. Par défaut, la propriété __proto__ de n'importe quel propriété prototyped'une fonction est  window.Object.prototype. Ainsi, la propriété __proto__ de la propriété __proto__ de  uneInstance (c'est-à-dire __proto__ de faireUnTruc.prototype (c'est-à-dire. Object.prototype)) est contrôlée pour vérifier si la propriété y est présente.

- -

Si la propriété n'est pas trouvée sur la propriété __proto__ de la propriété __proto__ de uneInstance, c'est la proriété __proto__ de la propriété __proto__ de la propriété __proto__ de uneInstance qui est contrôlée. Cependant il y a un problème car la propriété __proto__ de la propriété __proto__ de la propriété __proto__ de unTruc n'existe pas. Autrement dit, toute la chaîne de prototype a été parcouru et on ne peut pas remonter d'un cran sur un autre __proto__ et le moteur peut conclure que la propriété n'existe pas pour cet objet et renvoyer undefined.

- -

Regardons ce qui se produit dans la console avec un peu de code :

- -
function faireUnTruc(){}
-faireUnTruc.prototype.toto = "truc";
-var uneInstance = new faireUnTruc();
-uneInstance.prop = "une valeur";
-console.log("uneInstance.prop: " + uneInstance.prop);
-console.log("uneInstance.toto: " + uneInstance.toto);
-console.log("faireUnTruc.prop: " + faireUnTruc.prop);
-console.log("faireUnTruc.toto: " + faireUnTruc.toto);
-console.log("faireUnTruc.prototype.prop: " + faireUnTruc.prototype.prop);
-console.log("faireUnTruc.prototype.toto:  " + faireUnTruc.prototype.toto);
- -

Le résultat est le suivant :

- -
uneInstance.prop: une valeur
-uneInstance.toto: truc
-faireUnTruc.prop: undefined
-faireUnTruc.toto: undefined
-faireUnTruc.prototype.prop: undefined
-faireUnTruc.prototype.toto: truc
- -

Les différentes façons de créer des objets et les impacts sur la chaîne de prototype

- -

Objets créés avec les raccourcis syntaxiques (littéraux)

- -
var o = {a: 1};
-
-// Le nouvel objet possède Object.prototype comme [[Prototype]]
-// o ne possède pas de propriété 'hasOwnProperty' en propre
-// hasOwnProperty est une propriété en propre de Object.prototype.
-// o hérite de hasOwnProperty via Object.prototype
-// Object.prototype possède null comme prototype.
-// o ---> Object.prototype ---> null
-
-var b = ['coucou', 'ça va', '?'];
-
-// Les tableaux (Array) héritent de Array.prototype
-// (qui possède les méthodes indexOf, forEach, etc.)
-// La chaîne de prototype est donc :
-// b ---> Array.prototype ---> Object.prototype ---> null
-
-function f() {
-  return 2;
-}
-
-// Les fonctions héritent de Function.prototype
-// (qui possède les méthodes call, bind, etc.)
-// La chaîne de prototype est donc
-// f ---> Function.prototype ---> Object.prototype ---> null
-
- -

Objets créés avec un constructeur

- -

En JavaScript, un constructeur est juste une fonction que l'on invoque avec l'opérateur new.

- -
function Graphe() {
-  this.sommets = [];
-  this.arêtes = [];
-}
-
-Graphe.prototype = {
-  ajoutSommet: function(v) {
-    this.sommets.push(v);
-  }
-};
-
-var g = new Graphe();
-// g est un objet qui possède les propriétés 'sommets' and 'arêtes' en propre.
-// g.[[Prototype]] est la valeur de Graphe.prototype lorsque "new Graphe()" est exécuté.
-
- -

Objets créés avec Object.create()

- -

ECMAScript 5 a introduit une nouvelle méthode : {{jsxref("Object.create()")}}. Appeler cette méthode crée un nouvel objet et le prototype de cet objet est le premier argument de cette fonction :

- -
var a = {a: 1};
-// a ---> Object.prototype ---> null
-
-var b = Object.create(a);
-// b ---> a ---> Object.prototype ---> null
-console.log(b.a); // 1 (héritée)
-
-var c = Object.create(b);
-// c ---> b ---> a ---> Object.prototype ---> null
-
-var d = Object.create(null);
-// d ---> null
-console.log(d.hasOwnProperty);
-// undefined, car d n'hérite pas de Object.prototype
-
- -

Suppression des propriétés avec delete

- -

L'opérateur delete permet de supprimer une propriété directement rattachée à un objet. En revanche, il n'empêchera pas l'exploration de la chaîne de prototype :

- -
let a = {toto: 1};
-let b = Object.create(a);
-
-console.log(b.toto); // Affiche 1 car c'est une propriété disponible via le prototype
-b.toto = 5;
-console.log(b.toto); // Affiche 5, désormais cette propriété existe sur l'objet
-
-delete b.toto;
-console.log(b.toto); // Affiche 1 : la propriété n'est plus disponible sur l'objet mais
-                     // on peut toujours la récupérer via le prototype
- -

Objets créés avec le mot-clé class

- -

ECMAScript 2015 introduit plusieurs mots-clés destinés à créer du sucre syntaxique pour manipuler des classes. Ces mots-clés sont {{jsxref("Instructions/class", "class")}}, {{jsxref("Classes/constructor", "constructor")}}, {{jsxref("Classes/static", "static")}}, {{jsxref("Classes/extends", "extends")}} et {{jsxref("Opérateurs/super", "super")}}.

- -
'use strict';
-
-class Polygone {
-  constructor(hauteur, largeur) {
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-}
-
-class Carré extends Polygone {
-  constructor(longueurCôté) {
-    super(longueurCôté, longueurCôté);
-  }
-  get aire() {
-    return this.hauteur * this.largeur;
-  }
-  set longueurCôté(nouvelleLongueur) {
-    this.hauteur = nouvelleLongueur;
-    this.largeur = nouvelleLongueur;
-  }
-}
-
-var carré = new Carré(2);
-
- -

Performance

- -

Le temps de recherche des propriétés sera plus élevé si ces propriétés sont situées plus loin dans la chaîne de prototype. Tenter d'accéder à ces propriétés éloignées pourra avoir un impact négatif sur les performances. De plus, tenter d'accéder à des propriétés inexistantes entraîntera toujours le parcours de l'ensemble de la chaîne de prototype.

- -

Lorsqu'on parcourt les propriétés d'un objet, toutes les propriétés énumérables situées sur la chaîne de prototype seront parcourues. Pour vérifier si un objet possède une propriété en propre plus que via sa chaîne de prototype, on devra utiliser la méthode hasOwnProperty() qui est héritée grâce à Object.prototype. Prenons un exemple concret avec le cas du graphe traité dans un exemple précédent :

- -
console.log(g.hasOwnProperty('arêtes'));
-// true
-
-console.log(g.hasOwnProperty('nononon'));
-// false
-
-console.log(g.hasOwnProperty('ajoutSommet'));
-// false
-
-console.log(g.__proto__.hasOwnProperty('ajoutSommet'));
-// true
-
- -
-

Note : Tester si une propriété vaut {{jsxref("undefined")}} ne suffit pas à vérifier la présence de la propriété sur un objet : une propriété peut très bien exister sur un objet mais valoir undefined.

-
- -

Mauvaise pratique : étendre les prototypes natifs

- -

On peut parfois voir du code qui étend Object.prototype ou l'un des prototypes natifs.

- -

Cette technique est intitulée monkey patching et brise l'encapsulation. Bien qu'elle soit utilisée par certains frameworks, il n'existe pas de raison suffisante pour étendre les objets natifs avec des fonctionnalités non-standard.

- -

La seule raison qui peut prévaloir pour l'extension de prototypes natifs est l'ajout de fonctionnalités JavaScript apparues avec les nouvelles versions des spécifications et moteurs afin d'en disposer dans de plus anciens environnements.

- -

Résumé des méthodes pour étendre la chaîne de prototype

- -

Voici un tableau avec les quatre outils qui permettent d'étendre une chaîne de prototypes avec chacun leurs avantages et leurs inconvénients. Tous les exemples mentionnés permettent de créer le même objet inst (et affichant donc le même résultat dans la console) mais de façon différente.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NomExemplesAvantagesInconvénients
Initialisation -
-function toto(){}
-toto.prototype = {
-  toto_prop: "toto val"
-};
-function truc(){}
-var proto = new toto;
-proto.truc_prop = "truc val";
-truc.prototype = proto;
-var inst = new truc();
-console.log(inst.toto_prop);
-console.log(inst.truc_prop);
-
-
Prise en charge par l'ensemble des navigateurs. Cette méthode est très rapide, standard et facilement optimisable. -

Afin d'utiliser cette méthode, il faut que la fonction ait été initialisée. Pendant cette initialisation, le constructeur peut enregistrer des informations uniques qui doivent être générées pour chaque objet.

- -

Toutefois, il est possible que ces informations uniques ne soient générées qu'une seule fois.

- -

De plus, l'initialisation du constructeur peut ajouter des méthodes non souhaitées sur l'objet.

- -

Cela dit, ces problèmes ne se révèlent que rarement.

-
Object.create() -
-function toto(){}
-toto.prototype = {
-  toto_prop: "toto val"
-};
-function truc(){}
-var proto = Object.create(
-  toto.prototype
-);
-proto.truc_prop = "truc val";
-truc.prototype = proto;
-var inst = new truc();
-console.log(inst.toto_prop);
-console.log(inst.truc_prop);
-
- -
-function toto(){}
-toto.prototype = {
-  toto_prop: "toto val"
-};
-function truc(){}
-var proto = Object.create(
-  toto.prototype,
-  {
-    truc_prop: {
-      value: "truc val"
-    }
-  }
-);
-truc.prototype = proto;
-var inst = new truc();
-console.log(inst.toto_prop);
-console.log(inst.truc_prop)
-
Prise en charge par la majorité des navigateurs actuels. Elle permet de définir directement __proto__ en une seule fois et le navigateur peut mieux optimiser l'objet. Elle permet aussi de créer des objets sans prototype avec Object.create(null). -

Cette méthode n'est pas prise en charge par IE8 et les versions antérieures. Toutefois, Microsoft ayant mis un terme au support des systèmes qui utilisent ces navigateurs, ce ne devrait pas être un problème pour la plupart des navigation.

- -

De plus, la lenteur de l'initialisation de l'objet peut être causer des soucis de performances lorsqu'on utilise un deuxième argument car descripteur de propriété possède un objet rattaché. Lorsqu'on gère des centaines de milliers de descripteurs, cela peut entraîner un certain lag.

-
-

Object.setPrototypeOf()

-
-
-function toto(){}
-toto.prototype = {
-  toto_prop: "toto val"
-};
-function truc(){}
-var proto = {
-  truc_prop: "truc val"
-};
-Object.setPrototypeOf(
-  proto, toto.prototype
-);
-truc.prototype = proto;
-var inst = new truc();
-console.log(inst.toto_prop);
-console.log(inst.truc_prop);
-
- -
-function toto(){}
-toto.prototype = {
-  toto_prop: "toto val"
-};
-function truc(){}
-var proto;
-proto=Object.setPrototypeOf(
-  { truc_prop: "truc val" },
-  toto.prototype
-);
-truc.prototype = proto;
-var inst = new truc();
-console.log(inst.toto_prop);
-console.log(inst.truc_prop)
-
Prise en charge par l'ensemble des navigateurs actuels. Elle permet de manipuler dynamiquement le prototype d'un objet et également de rattacher un prototype à un objet qui n'aurait pas de prototype.Cette méthode devrait être dépréciée et possède des performances faibles. En effet, les moteurs tenteront d'optimiser la connaissance de la structure du prototype et cette méthode viendra à l'enconte de ces hypothèses et certains navigateurs pourront même recompiler le code pour le faire fonctionner selon les spécifications. Cette méthode n'est pas prise en charge par IE8 et les versions antérieures.
__proto__ -
-function toto(){}
-toto.prototype = {
-  toto_prop: "toto val"
-};
-function truc(){}
-var proto = {
-  truc_prop: "truc val",
-  __proto__: toto.prototype
-};
-truc.prototype = proto;
-var inst = new truc();
-console.log(inst.toto_prop);
-console.log(inst.truc_prop);
-
- -
-var inst = {
-  __proto__: {
-    truc_prop: "truc val",
-    __proto__: {
-      toto_prop: "toto val",
-      __proto__: Object.prototype
-    }
-  }
-};
-console.log(inst.toto_prop);
-console.log(inst.truc_prop)
-
Prise en charge par l'ensemble des navigateurs actuels (y compris IE11 et ultérieurs). Défiinir __proto__ sur quelque chose qui n'est pas un objet échouera silencieusement.Cette méthode est dépréciée et n'est pas performante car les moteurs tentent d'optimiser les prototypes. Aussi, le modifier ainsi dynamiquement bloque ces optimisations et peut causer la recompilation du code pour qu'il fonctionne selon les spécifications. Cette méthode n'est pas prise en charge par IE10 et les versions antérieures.
- -

prototype et Object.getPrototypeOf()

- -

JavaScript peut prêter à confusion pour les développeurs utilisant Java ou C++. JavaScript est un langage dynamique et les structures peuvent évoluer lors de l'exécution.

- -

Vous avez peut-être remarqué que la fonction A possède une propriété spéciale intitulée prototype. Cette propriété spéciale fonctionne avec l'opérateur new Elle permet de copier la référence  l'objet prototype sur la propriété interne [[Prototype]] de la nouvelle instance créée. Ainsi, avec var a1 = new A(), Le moteur JavaScript définira a1.[[Prototype]] = A.prototype. Quand on tente d'accéder à une des propriétés de l'instance, JavaScript vérifie la présence sur l'instance puis analyse son prototype [[Prototype]]. Cela signifie que tout ce qui est défini sur prototype est effectivement partagé par l'ensemble des instances et on peut même modifier prototype en cours de route afin de modifier indirectement l'ensemble des instances.

- -

Dans l'exemple précédent, si on avait eu var a1 = new A(); var a2 = new A(); alors a1.faireUnTruc aurait fait référence à Object.getPrototypeOf(a1).faireUntruc qui est identique à A.prototype.faireUnTruc. Autrement dit Object.getPrototypeOf(a1).faireUnTruc == Object.getPrototypeOf(a2).faireUnTruc == A.prototype.faireUnTruc.

- -

Autrement dit prototype peut être utilisé pour les types et Object.getPrototypeOf() pour les instances.

- -

[[Prototype]] est analysé de façon récursive. Ainsi, a1.faireUnTruc correspondra à chercher Object.getPrototypeOf(a1).faireUnTruc puis Object.getPrototypeOf(Object.getPrototypeOf(a1)).faireUnTruc etc., jusqu'à ce qu'elle soit trouvée ou que Object.getPrototypeOfrenvoie null.

- -

Ainsi, quand on appelle :

- -
var o = new Toto();
- -

Le moteur JavaScript effectue les étapes suivantes :

- -
var o = new Object();
-o.[[Prototype]] = Toto.prototype;
-Toto.call(o);
- -

(ou quelque chose qui y ressemble) et si on écrit ensuite :

- -
o.unePropriété;
- -

Le moteur vérifie si o possède une propriété unePropriété en propre. Si ce n'est pas le cas, il vérifie Object.getPrototypeOf(o).unePropriété et ainsi de suite.

- -

Conclusion

- -

Il est essentiel de comprendre le modèle d'héritage prototypique avant d'écrire du code complexe qui repose sur ces notions. Il est également préférable d'avoir une idée de la longueur de la chaîne de prototype utilisée pour les différents objets et de fragmenter cette chaîne si besoin afin d'éviter des écueils de performances. Enfin, on veillera à ne pas étendre les prototypes natifs sauf afin d'émuler des nouvelles fonctionnalités qui ne seraient pas disponibles dans l'environnement utilisé.

diff --git a/files/fr/web/javascript/inheritance_and_the_prototype_chain/index.md b/files/fr/web/javascript/inheritance_and_the_prototype_chain/index.md new file mode 100644 index 0000000000..1b21ea0232 --- /dev/null +++ b/files/fr/web/javascript/inheritance_and_the_prototype_chain/index.md @@ -0,0 +1,574 @@ +--- +title: Héritage et chaîne de prototype +slug: Web/JavaScript/Inheritance_and_the_prototype_chain +tags: + - Guide + - Héritage + - Intermédiaire + - JavaScript + - OOP +translation_of: Web/JavaScript/Inheritance_and_the_prototype_chain +original_slug: Web/JavaScript/Héritage_et_chaîne_de_prototypes +--- +
{{jsSidebar("Advanced")}}
+ +

JavaScript peut prêter à confusion losqu'on est habitué à manipuler des langages de programmation manipulant les classes (tels que Java ou C++). En effet, JavaScript est un langage dynamique et ne possède pas de concept de classe à part entière (le mot-clé class a certes été ajouté avec ES2015 mais il s'agit uniquement de sucre syntaxique, JavaScript continue de reposer sur l'héritage prototypique).

+ +

En ce qui concerne l'héritage, JavaScript n'utilise qu'une seule structure : les objets. Chaque objet possède une propriété privée qui contient un lien vers un autre objet appelé le prototype. Ce prototype possède également son prototype et ainsi de suite, jusqu'à ce qu'un objet ait {{jsxref("null")}} comme prototype. Par définition, null ne possède pas de prototype et est ainsi le dernier maillon de la chaîne de prototype.

+ +

La majorité des objets JavaScript sont des instances de {{jsxref("Object")}} qui est l'avant dernier maillon de la chaîne de prototype.

+ +

Bien que cette confusion (entre classe et prototype) soit souvent avancée comme l'une des faiblesses de JavaScript, le modèle prototypique est plus puissant que le modèle classique et il est notamment possible de construire un modèle classique à partir d'un modèle prototypique.

+ +

Héritage et chaîne de prototype

+ +

Propriété héritées

+ +

Les objets JavaScript sont des ensembles dynamiques de propriétés (les propriétés directement rattachées à un objet sont appelées propriétés en propre (own properties)). Les objets JavaScript possèdent également un lien vers un objet qui est leur prototype. Lorsqu'on tente d'accéder aux propriétés d'un objet, la propriété sera recherchée d'abord sur l'objet même, puis sur son prototype, puis sur le prototype du prototype et ainsi de suite jusqu'à ce qu'elle soit trouvée ou que la fin de la chaîne de prototype ait été atteinte.

+ +
+

Note : Dans la spécification ECMAScript, on utilise la notation unObjet.[[Prototype]] pour faire référence au prototype de unObjet. Depuis ECMAScript 2015, on peut accéder à [[Prototype]] grâce aux accesseurs {{jsxref("Object.getPrototypeOf()")}} et {{jsxref("Object.setPrototypeOf()")}}. Cela est équivalent à la propriété JavaScript __proto__ qui était non-standard avant ES2015 mais qui était de fait implémentée par la majorité des navigateurs.

+ +

Cette propriété ne devrait pas être confondue avec la propriété func.prototype des fonctions qui définissent le [[Prototype]] à affecter aux instances des objets créés par cette fonction lorsqu'elle est utilisée comme constructeur. La propriété Object.prototype représente le prototype de {{jsxref("Object")}}.

+
+ +

Voici ce qui se produit lorsqu'on tente d'accéder à une propriété :

+ +
// On commence par créer un objet o pour lequel la fonction f sera
+// son constructeur et lui créera deux propriétés en propre
+// a et b :
+let f = function () {
+   this.a = 1;
+   this.b = 2;
+}
+let o = new f(); // {a: 1, b: 2}
+
+// on ajoute des propriétés au prototype de la fonction
+// f
+f.prototype.b = 3;
+f.prototype.c = 4;
+
+// Note : on ne définit pas le prototype de f avec f.prototype = {b:3,c:4};
+// car cela briserait la chaîne de prototype
+
+// o.[[Prototype]] possède les propriétés b and c.
+// o.[[Prototype]].[[Prototype]] est Object.prototype.
+// Enfin, o.[[Prototype]].[[Prototype]].[[Prototype]] vaut null.
+// On a alors atteint la fin de la chaîne de prototype car,
+// par définition, null n'a pas de [[Prototype]].
+// Ainsi, la chaîne complète est ici :
+// {a: 1, b: 2} ---> {b: 3, c: 4} ---> Object.prototype ---> null
+
+console.log(o.a); // 1
+// Existe-t-il une propriété 'a' en propre sur o ? Oui, elle vaut 1.
+
+console.log(o.b); // 2
+// Existe-t-il une propriété 'b' en propre sur o ? Oui, elle vaut 2.
+// Le prototype possède également une propriété 'b' mais elle n'est pas
+// utilisée.
+// C'est ce qu'on appelle l'ombrage (shadowing en anglais)
+
+console.log(o.c); // 4
+// Existe-t-il une propriété 'c' en propre sur o ? Non, on vérifie le
+// prototype.
+// Existe-t-il une propriété 'c' en propre sur o.[[Prototype]] ?
+// Oui, elle vaut 4.
+
+console.log(o.d); // undefined
+// Existe-t-il une propriété 'd' en propre sur o ? Non, on vérifie le
+// prototype.
+// Existe-t-il une propriété 'd' en propre sur o.[[Prototype]] ? Non, on vérifie le
+// prototype.
+// o.[[Prototype]].[[Prototype]] est Object.prototype et ne contient pas
+// de propriété 'd' par défaut. On vérifie son prototype.
+// o.[[Prototype]].[[Prototype]].[[Prototype]] est null, on arrête la recherche
+// aucune propriété n'est trouvée, le moteur renvoie undefined.
+
+ +

Lorsquon définit une propriété sur un objet, cela définit une propriété en propre. La seule exception se produit lorsqu'on définit un accesseur et/ou un mutateur sur une propriété héritée.

+ +

Méthodes héritées

+ +

JavaScript ne possède pas de méthodes au sens des langages de classe. En effet, en JavaScript, toute fonction associée à un objet est également une propriété. Une fonction héritée se comportera comme n'importe quelle autre propriété (y compris pour l'ombrage mentionné ci-avant où on pourra parler de surcharge).

+ +

Lorsqu'une fonction héritée est exécutée, la valeur de this pointe vers l'objet hérité et non vers l'objet prototype qui possède la fonction comme propriété en propre.

+ +
var o = {
+  a: 2,
+  m: function() {
+    return this.a + 1;
+  }
+};
+
+console.log(o.m()); // 3
+// Quand on appelle o.m ici, 'this' fera référence à o
+
+var p = Object.create(o);
+// p est un objet qui hérite de o
+
+p.a = 4; // on crée une propriété 'a' en propre sur p
+console.log(p.m()); // 5
+// lorsque p.m est appelée, 'this' fait référence à p.
+// Ainsi quand p hérite de m via o,
+// 'this.a' signifie p.a, soit la propriété 'a' de p
+
+
+
+ +

Utiliser les prototypes avec JavaScript

+ +

Regardons un peu plus en détail ce qui se déroule en arrière-plan.

+ +
+

Note : Pour tous les exempls suivants, nous vous invitons à ouvrir la "console" de votre navigateur pour y copier/coller/éditer les fragments de code. Pour savoir comment lancer cette console, vous pouvez lire la documentation des navigateurs : Firefox, Chrome, Edge.

+
+ +

En JavaScript, comme mentionné ci-dessus, les fonctions peuvent avoir des propriétés. Toutes les fonctions ont une propriété spéciale intitulée prototype.

+ +
function faireUnTruc(){}
+console.log( faireUnTruc.prototype ); // Object {...}
+// Peu importe comment vous déclarez la fonction.
+// une fonction en JavaScript aura toujours une propriété
+// prototype par défaut.
+var faireUnTruc= function(){};
+console.log(faireUnTruc.prototype); // Object {...}
+
+ +

Comme mentionné avant, faireUnTruc() possède une propriété par défaut prototype. Après avoir exécuté ce code dans une console, la console devrait afficher un objet semblable à :

+ +
{
+    constructor: ƒ faireUnTruc(),
+    __proto__: {
+        constructor: ƒ Object(),
+        hasOwnProperty: ƒ hasOwnProperty(),
+        isPrototypeOf: ƒ isPrototypeOf(),
+        propertyIsEnumerable: ƒ propertyIsEnumerable(),
+        toLocaleString: ƒ toLocaleString(),
+        toString: ƒ toString(),
+        valueOf: ƒ valueOf()
+    }
+}
+ +

On peut ajouter des propriétés au prototype de faireUnTruc() comme suit :

+ +
function faireUnTruc(){}
+faireUnTruc.prototype.toto = "truc";
+console.log( faireUnTruc.prototype );
+ +

Produira le résultat suivant :

+ +
{
+    toto: "truc",
+    constructor: ƒ faireUnTruc(),
+    __proto__: {
+        constructor: ƒ Object(),
+        hasOwnProperty: ƒ hasOwnProperty(),
+        isPrototypeOf: ƒ isPrototypeOf(),
+        propertyIsEnumerable: ƒ propertyIsEnumerable(),
+        toLocaleString: ƒ toLocaleString(),
+        toString: ƒ toString(),
+        valueOf: ƒ valueOf()
+    }
+}
+
+ +

On peut utiliser l'opérateur new afin de créer une instance de faireUnTruc() basée sur ce prototype. Pour utiliser l'opérateur new, il suffira d'appeler la fonction et de précéder cet appel avec le mot-clé new. Lorsqu'on appelle une fonction avec un opérateur new, celle-ci renvoie un objet qui est une instance de la fonction. On peut ensuite ajouter des propriétés sur cet objet.

+ +

Voyons le code qui suit :

+ +
function faireUnTruc(){}
+faireUnTruc.prototype.toto = "truc"; // on ajoute une propriété au prototype
+var uneInstance = new faireUnTruc();
+uneInstance.prop = "une valeur"; // on ajoute une propriété sur l'objet
+console.log(uneInstance);
+ +

Exécuté, ce code produira le résultat suivant dans la console :

+ +
{
+    prop: "une valeur",
+    __proto__: {
+        toto: "truc",
+        constructor: ƒ faireUnTruc(),
+        __proto__: {
+            constructor: ƒ Object(),
+            hasOwnProperty: ƒ hasOwnProperty(),
+            isPrototypeOf: ƒ isPrototypeOf(),
+            propertyIsEnumerable: ƒ propertyIsEnumerable(),
+            toLocaleString: ƒ toLocaleString(),
+            toString: ƒ toString(),
+            valueOf: ƒ valueOf()
+        }
+    }
+}
+ +

Comme nous l'avons vu avant, la valeur de __proto__ pour uneInstance est faireUnTruc.prototype. Mais quel est l'intérêt ? Lorsqu'on accède à une propriété de uneInstance, le moteur contrôle d'abord si uneInstance possède cette propriété.

+ +

Si uneInstance ne possède pas cette propriété, le moteur contrôlera la propriété sur la propriété __proto__ de uneInstance (c'est-à-dire faireUnTruc.prototype). Si la propriété __proto__ de uneInstance possède la propriété qu'on recherche, ce sera celle-ci qui sera utilisée.

+ +

Si __proto__ de unTruc ne possède pas la propriété recherchée, le moteur contrôle la propriété __proto__ de la propriété __proto__ de uneInstance. Par défaut, la propriété __proto__ de n'importe quel propriété prototyped'une fonction est  window.Object.prototype. Ainsi, la propriété __proto__ de la propriété __proto__ de  uneInstance (c'est-à-dire __proto__ de faireUnTruc.prototype (c'est-à-dire. Object.prototype)) est contrôlée pour vérifier si la propriété y est présente.

+ +

Si la propriété n'est pas trouvée sur la propriété __proto__ de la propriété __proto__ de uneInstance, c'est la proriété __proto__ de la propriété __proto__ de la propriété __proto__ de uneInstance qui est contrôlée. Cependant il y a un problème car la propriété __proto__ de la propriété __proto__ de la propriété __proto__ de unTruc n'existe pas. Autrement dit, toute la chaîne de prototype a été parcouru et on ne peut pas remonter d'un cran sur un autre __proto__ et le moteur peut conclure que la propriété n'existe pas pour cet objet et renvoyer undefined.

+ +

Regardons ce qui se produit dans la console avec un peu de code :

+ +
function faireUnTruc(){}
+faireUnTruc.prototype.toto = "truc";
+var uneInstance = new faireUnTruc();
+uneInstance.prop = "une valeur";
+console.log("uneInstance.prop: " + uneInstance.prop);
+console.log("uneInstance.toto: " + uneInstance.toto);
+console.log("faireUnTruc.prop: " + faireUnTruc.prop);
+console.log("faireUnTruc.toto: " + faireUnTruc.toto);
+console.log("faireUnTruc.prototype.prop: " + faireUnTruc.prototype.prop);
+console.log("faireUnTruc.prototype.toto:  " + faireUnTruc.prototype.toto);
+ +

Le résultat est le suivant :

+ +
uneInstance.prop: une valeur
+uneInstance.toto: truc
+faireUnTruc.prop: undefined
+faireUnTruc.toto: undefined
+faireUnTruc.prototype.prop: undefined
+faireUnTruc.prototype.toto: truc
+ +

Les différentes façons de créer des objets et les impacts sur la chaîne de prototype

+ +

Objets créés avec les raccourcis syntaxiques (littéraux)

+ +
var o = {a: 1};
+
+// Le nouvel objet possède Object.prototype comme [[Prototype]]
+// o ne possède pas de propriété 'hasOwnProperty' en propre
+// hasOwnProperty est une propriété en propre de Object.prototype.
+// o hérite de hasOwnProperty via Object.prototype
+// Object.prototype possède null comme prototype.
+// o ---> Object.prototype ---> null
+
+var b = ['coucou', 'ça va', '?'];
+
+// Les tableaux (Array) héritent de Array.prototype
+// (qui possède les méthodes indexOf, forEach, etc.)
+// La chaîne de prototype est donc :
+// b ---> Array.prototype ---> Object.prototype ---> null
+
+function f() {
+  return 2;
+}
+
+// Les fonctions héritent de Function.prototype
+// (qui possède les méthodes call, bind, etc.)
+// La chaîne de prototype est donc
+// f ---> Function.prototype ---> Object.prototype ---> null
+
+ +

Objets créés avec un constructeur

+ +

En JavaScript, un constructeur est juste une fonction que l'on invoque avec l'opérateur new.

+ +
function Graphe() {
+  this.sommets = [];
+  this.arêtes = [];
+}
+
+Graphe.prototype = {
+  ajoutSommet: function(v) {
+    this.sommets.push(v);
+  }
+};
+
+var g = new Graphe();
+// g est un objet qui possède les propriétés 'sommets' and 'arêtes' en propre.
+// g.[[Prototype]] est la valeur de Graphe.prototype lorsque "new Graphe()" est exécuté.
+
+ +

Objets créés avec Object.create()

+ +

ECMAScript 5 a introduit une nouvelle méthode : {{jsxref("Object.create()")}}. Appeler cette méthode crée un nouvel objet et le prototype de cet objet est le premier argument de cette fonction :

+ +
var a = {a: 1};
+// a ---> Object.prototype ---> null
+
+var b = Object.create(a);
+// b ---> a ---> Object.prototype ---> null
+console.log(b.a); // 1 (héritée)
+
+var c = Object.create(b);
+// c ---> b ---> a ---> Object.prototype ---> null
+
+var d = Object.create(null);
+// d ---> null
+console.log(d.hasOwnProperty);
+// undefined, car d n'hérite pas de Object.prototype
+
+ +

Suppression des propriétés avec delete

+ +

L'opérateur delete permet de supprimer une propriété directement rattachée à un objet. En revanche, il n'empêchera pas l'exploration de la chaîne de prototype :

+ +
let a = {toto: 1};
+let b = Object.create(a);
+
+console.log(b.toto); // Affiche 1 car c'est une propriété disponible via le prototype
+b.toto = 5;
+console.log(b.toto); // Affiche 5, désormais cette propriété existe sur l'objet
+
+delete b.toto;
+console.log(b.toto); // Affiche 1 : la propriété n'est plus disponible sur l'objet mais
+                     // on peut toujours la récupérer via le prototype
+ +

Objets créés avec le mot-clé class

+ +

ECMAScript 2015 introduit plusieurs mots-clés destinés à créer du sucre syntaxique pour manipuler des classes. Ces mots-clés sont {{jsxref("Instructions/class", "class")}}, {{jsxref("Classes/constructor", "constructor")}}, {{jsxref("Classes/static", "static")}}, {{jsxref("Classes/extends", "extends")}} et {{jsxref("Opérateurs/super", "super")}}.

+ +
'use strict';
+
+class Polygone {
+  constructor(hauteur, largeur) {
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+}
+
+class Carré extends Polygone {
+  constructor(longueurCôté) {
+    super(longueurCôté, longueurCôté);
+  }
+  get aire() {
+    return this.hauteur * this.largeur;
+  }
+  set longueurCôté(nouvelleLongueur) {
+    this.hauteur = nouvelleLongueur;
+    this.largeur = nouvelleLongueur;
+  }
+}
+
+var carré = new Carré(2);
+
+ +

Performance

+ +

Le temps de recherche des propriétés sera plus élevé si ces propriétés sont situées plus loin dans la chaîne de prototype. Tenter d'accéder à ces propriétés éloignées pourra avoir un impact négatif sur les performances. De plus, tenter d'accéder à des propriétés inexistantes entraîntera toujours le parcours de l'ensemble de la chaîne de prototype.

+ +

Lorsqu'on parcourt les propriétés d'un objet, toutes les propriétés énumérables situées sur la chaîne de prototype seront parcourues. Pour vérifier si un objet possède une propriété en propre plus que via sa chaîne de prototype, on devra utiliser la méthode hasOwnProperty() qui est héritée grâce à Object.prototype. Prenons un exemple concret avec le cas du graphe traité dans un exemple précédent :

+ +
console.log(g.hasOwnProperty('arêtes'));
+// true
+
+console.log(g.hasOwnProperty('nononon'));
+// false
+
+console.log(g.hasOwnProperty('ajoutSommet'));
+// false
+
+console.log(g.__proto__.hasOwnProperty('ajoutSommet'));
+// true
+
+ +
+

Note : Tester si une propriété vaut {{jsxref("undefined")}} ne suffit pas à vérifier la présence de la propriété sur un objet : une propriété peut très bien exister sur un objet mais valoir undefined.

+
+ +

Mauvaise pratique : étendre les prototypes natifs

+ +

On peut parfois voir du code qui étend Object.prototype ou l'un des prototypes natifs.

+ +

Cette technique est intitulée monkey patching et brise l'encapsulation. Bien qu'elle soit utilisée par certains frameworks, il n'existe pas de raison suffisante pour étendre les objets natifs avec des fonctionnalités non-standard.

+ +

La seule raison qui peut prévaloir pour l'extension de prototypes natifs est l'ajout de fonctionnalités JavaScript apparues avec les nouvelles versions des spécifications et moteurs afin d'en disposer dans de plus anciens environnements.

+ +

Résumé des méthodes pour étendre la chaîne de prototype

+ +

Voici un tableau avec les quatre outils qui permettent d'étendre une chaîne de prototypes avec chacun leurs avantages et leurs inconvénients. Tous les exemples mentionnés permettent de créer le même objet inst (et affichant donc le même résultat dans la console) mais de façon différente.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NomExemplesAvantagesInconvénients
Initialisation +
+function toto(){}
+toto.prototype = {
+  toto_prop: "toto val"
+};
+function truc(){}
+var proto = new toto;
+proto.truc_prop = "truc val";
+truc.prototype = proto;
+var inst = new truc();
+console.log(inst.toto_prop);
+console.log(inst.truc_prop);
+
+
Prise en charge par l'ensemble des navigateurs. Cette méthode est très rapide, standard et facilement optimisable. +

Afin d'utiliser cette méthode, il faut que la fonction ait été initialisée. Pendant cette initialisation, le constructeur peut enregistrer des informations uniques qui doivent être générées pour chaque objet.

+ +

Toutefois, il est possible que ces informations uniques ne soient générées qu'une seule fois.

+ +

De plus, l'initialisation du constructeur peut ajouter des méthodes non souhaitées sur l'objet.

+ +

Cela dit, ces problèmes ne se révèlent que rarement.

+
Object.create() +
+function toto(){}
+toto.prototype = {
+  toto_prop: "toto val"
+};
+function truc(){}
+var proto = Object.create(
+  toto.prototype
+);
+proto.truc_prop = "truc val";
+truc.prototype = proto;
+var inst = new truc();
+console.log(inst.toto_prop);
+console.log(inst.truc_prop);
+
+ +
+function toto(){}
+toto.prototype = {
+  toto_prop: "toto val"
+};
+function truc(){}
+var proto = Object.create(
+  toto.prototype,
+  {
+    truc_prop: {
+      value: "truc val"
+    }
+  }
+);
+truc.prototype = proto;
+var inst = new truc();
+console.log(inst.toto_prop);
+console.log(inst.truc_prop)
+
Prise en charge par la majorité des navigateurs actuels. Elle permet de définir directement __proto__ en une seule fois et le navigateur peut mieux optimiser l'objet. Elle permet aussi de créer des objets sans prototype avec Object.create(null). +

Cette méthode n'est pas prise en charge par IE8 et les versions antérieures. Toutefois, Microsoft ayant mis un terme au support des systèmes qui utilisent ces navigateurs, ce ne devrait pas être un problème pour la plupart des navigation.

+ +

De plus, la lenteur de l'initialisation de l'objet peut être causer des soucis de performances lorsqu'on utilise un deuxième argument car descripteur de propriété possède un objet rattaché. Lorsqu'on gère des centaines de milliers de descripteurs, cela peut entraîner un certain lag.

+
+

Object.setPrototypeOf()

+
+
+function toto(){}
+toto.prototype = {
+  toto_prop: "toto val"
+};
+function truc(){}
+var proto = {
+  truc_prop: "truc val"
+};
+Object.setPrototypeOf(
+  proto, toto.prototype
+);
+truc.prototype = proto;
+var inst = new truc();
+console.log(inst.toto_prop);
+console.log(inst.truc_prop);
+
+ +
+function toto(){}
+toto.prototype = {
+  toto_prop: "toto val"
+};
+function truc(){}
+var proto;
+proto=Object.setPrototypeOf(
+  { truc_prop: "truc val" },
+  toto.prototype
+);
+truc.prototype = proto;
+var inst = new truc();
+console.log(inst.toto_prop);
+console.log(inst.truc_prop)
+
Prise en charge par l'ensemble des navigateurs actuels. Elle permet de manipuler dynamiquement le prototype d'un objet et également de rattacher un prototype à un objet qui n'aurait pas de prototype.Cette méthode devrait être dépréciée et possède des performances faibles. En effet, les moteurs tenteront d'optimiser la connaissance de la structure du prototype et cette méthode viendra à l'enconte de ces hypothèses et certains navigateurs pourront même recompiler le code pour le faire fonctionner selon les spécifications. Cette méthode n'est pas prise en charge par IE8 et les versions antérieures.
__proto__ +
+function toto(){}
+toto.prototype = {
+  toto_prop: "toto val"
+};
+function truc(){}
+var proto = {
+  truc_prop: "truc val",
+  __proto__: toto.prototype
+};
+truc.prototype = proto;
+var inst = new truc();
+console.log(inst.toto_prop);
+console.log(inst.truc_prop);
+
+ +
+var inst = {
+  __proto__: {
+    truc_prop: "truc val",
+    __proto__: {
+      toto_prop: "toto val",
+      __proto__: Object.prototype
+    }
+  }
+};
+console.log(inst.toto_prop);
+console.log(inst.truc_prop)
+
Prise en charge par l'ensemble des navigateurs actuels (y compris IE11 et ultérieurs). Défiinir __proto__ sur quelque chose qui n'est pas un objet échouera silencieusement.Cette méthode est dépréciée et n'est pas performante car les moteurs tentent d'optimiser les prototypes. Aussi, le modifier ainsi dynamiquement bloque ces optimisations et peut causer la recompilation du code pour qu'il fonctionne selon les spécifications. Cette méthode n'est pas prise en charge par IE10 et les versions antérieures.
+ +

prototype et Object.getPrototypeOf()

+ +

JavaScript peut prêter à confusion pour les développeurs utilisant Java ou C++. JavaScript est un langage dynamique et les structures peuvent évoluer lors de l'exécution.

+ +

Vous avez peut-être remarqué que la fonction A possède une propriété spéciale intitulée prototype. Cette propriété spéciale fonctionne avec l'opérateur new Elle permet de copier la référence  l'objet prototype sur la propriété interne [[Prototype]] de la nouvelle instance créée. Ainsi, avec var a1 = new A(), Le moteur JavaScript définira a1.[[Prototype]] = A.prototype. Quand on tente d'accéder à une des propriétés de l'instance, JavaScript vérifie la présence sur l'instance puis analyse son prototype [[Prototype]]. Cela signifie que tout ce qui est défini sur prototype est effectivement partagé par l'ensemble des instances et on peut même modifier prototype en cours de route afin de modifier indirectement l'ensemble des instances.

+ +

Dans l'exemple précédent, si on avait eu var a1 = new A(); var a2 = new A(); alors a1.faireUnTruc aurait fait référence à Object.getPrototypeOf(a1).faireUntruc qui est identique à A.prototype.faireUnTruc. Autrement dit Object.getPrototypeOf(a1).faireUnTruc == Object.getPrototypeOf(a2).faireUnTruc == A.prototype.faireUnTruc.

+ +

Autrement dit prototype peut être utilisé pour les types et Object.getPrototypeOf() pour les instances.

+ +

[[Prototype]] est analysé de façon récursive. Ainsi, a1.faireUnTruc correspondra à chercher Object.getPrototypeOf(a1).faireUnTruc puis Object.getPrototypeOf(Object.getPrototypeOf(a1)).faireUnTruc etc., jusqu'à ce qu'elle soit trouvée ou que Object.getPrototypeOfrenvoie null.

+ +

Ainsi, quand on appelle :

+ +
var o = new Toto();
+ +

Le moteur JavaScript effectue les étapes suivantes :

+ +
var o = new Object();
+o.[[Prototype]] = Toto.prototype;
+Toto.call(o);
+ +

(ou quelque chose qui y ressemble) et si on écrit ensuite :

+ +
o.unePropriété;
+ +

Le moteur vérifie si o possède une propriété unePropriété en propre. Si ce n'est pas le cas, il vérifie Object.getPrototypeOf(o).unePropriété et ainsi de suite.

+ +

Conclusion

+ +

Il est essentiel de comprendre le modèle d'héritage prototypique avant d'écrire du code complexe qui repose sur ces notions. Il est également préférable d'avoir une idée de la longueur de la chaîne de prototype utilisée pour les différents objets et de fragmenter cette chaîne si besoin afin d'éviter des écueils de performances. Enfin, on veillera à ne pas étendre les prototypes natifs sauf afin d'émuler des nouvelles fonctionnalités qui ne seraient pas disponibles dans l'environnement utilisé.

diff --git a/files/fr/web/javascript/javascript_technologies_overview/index.html b/files/fr/web/javascript/javascript_technologies_overview/index.html deleted file mode 100644 index 7e9491ec06..0000000000 --- a/files/fr/web/javascript/javascript_technologies_overview/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Survol des technologies JavaScript -slug: Web/JavaScript/JavaScript_technologies_overview -tags: - - Beginner - - DOM - - JavaScript -translation_of: Web/JavaScript/JavaScript_technologies_overview ---- -
{{JsSidebar("Introductory")}}
- -

Introduction

- -

HTML est utilisé pour définir la structure et le contenu d'une page web, CSS permet de définir la mise en forme, le style graphique avec lequel afficher le contenu. JavaScript permet quant à lui d'ajouter des fonctionnalités d'interaction pour créer des applications web riches en contenu.

- -

Cependant, le terme « JavaScript » au sens large regroupe divers éléments très différents : le langage cœur (ECMAScript) d'une part et les API Web d'autre part et notamment le DOM (Document Object Model, ou Modèle d'Objet du Document).

- -

JavaScript, le langage (ECMAScript)

- -

Le langage JavaScript (au sens strict) est standardisé par le comité ECMA TC39 sous la forme d'un langage intitulé ECMAScript.

- -

Ce langage est aussi utilisé dans des environnements différents des navigateurs web, comme par exemple dans node.js.

- -

Quelles sont les caractéristiques d'ECMAScript?

- -

Entre autres choses, ECMAScript définit :

- - - -

Support des navigateurs

- -

En octobre 2016, les versions actuelles des principaux navigateurs web supportent ECMAScript 5.1 et ECMAScript 2015 (aussi appelé ES6) mais certaines anciennes versions n'implémentent que ECMAScript 5.

- -

Futur

- -

La sixième édition majeure d'ECMAScript a été officiellement approuvée et publiée en tant que standard le 17 juin 2015 par l'assemblée générale ECMA. Depuis cette édition, les éditions ECMAScript sont publiées à un rythme annuel.

- -

API d'internationalisation

- -

La spécification ECMAScript pour l'API d'internationalisation est un ajout à la spécification du langage ECMAScript, également standardisée par ECMA TC39. L'API d'internationalisation ajoute la collation (c'est-à-dire la comparaison entre chaînes de caractères), le formatage de nombres, dates et heures dans les applications JavaScript en prenant en compte la locale de l'utilisateur pour fournir le meilleur format. Le standard initial a été aprouvé en décembre 2012 ; le statut de son implémentation dans les différents navigateurs est disponible sur la page de l'objet {{jsxref("Intl")}}. La spécification d'internationalisation est également ratifiée annuellement et les navigateurs améliorent leur implémentation au fur et à mesure.

- -

Les API du DOM (Document Object Model)

- -

WebIDL

- -

La spécification WebIDL fournit le lien entre les technologies DOM et ECMAScript.

- -

Le cœur du DOM

- -

Le Modèle d'Objet du Document (Document Object Model ou DOM en anglais) est une convention multi-plateforme, indépendante du langage utilisée pour représenter et interagir avec les objets dans les documents HTML, XHTML et XML. Les objets de l'arbre du DOM peuvent être accédés et manipulés en utilisant des méthodes sur les objets. Les fonctionnalités principales du DOM sont standardisées par le {{Glossary("W3C")}}. Il définit les interfaces offertes par les documents HTML et XML sans cibler un langage de manipulation précis. Parmi les éléments définis par le DOM, on peut trouver:

- - - -

Du point de vue d'ECMAScript, les objets définis dans la spécification DOM sont appelés des « objets hôtes ».

- -

Le DOM HTML

- -

HTML, le langage de balisage du Web, est spécifié en termes de DOM. Comme une couche au-dessus des concepts abstraits définis dans DOM Core, HTML définit également la signification des éléments. Le DOM HTML inclut des choses telles que la propriété className sur des éléments HTML, or des API telles que {{domxref("document.body")}}.
-
- La spécification HTML définit aussi les restrictions sur les documents ; par exemple, elle requiert que tous les enfants d'un élément {{HTMLRef("ul")}} (une liste non-ordonnée) soient des éléments {{HTMLRef("li")}}, puisqu'ils représentent les éléments d'une liste. En général, cela interdit aussi l'utilisation d'éléments et d'attributs qui ne sont pas définis dans un certain standard.
-
- Si vous cherchez la documentation sur l'objet {{domxref("Document")}}, l'objet {{domxref("Window")}} ou sur les autres éléments du DOM, vous pouvez lire la documentation relative au DOM.

- -

D'autres API fréquemment utilisées

- - diff --git a/files/fr/web/javascript/javascript_technologies_overview/index.md b/files/fr/web/javascript/javascript_technologies_overview/index.md new file mode 100644 index 0000000000..7e9491ec06 --- /dev/null +++ b/files/fr/web/javascript/javascript_technologies_overview/index.md @@ -0,0 +1,85 @@ +--- +title: Survol des technologies JavaScript +slug: Web/JavaScript/JavaScript_technologies_overview +tags: + - Beginner + - DOM + - JavaScript +translation_of: Web/JavaScript/JavaScript_technologies_overview +--- +
{{JsSidebar("Introductory")}}
+ +

Introduction

+ +

HTML est utilisé pour définir la structure et le contenu d'une page web, CSS permet de définir la mise en forme, le style graphique avec lequel afficher le contenu. JavaScript permet quant à lui d'ajouter des fonctionnalités d'interaction pour créer des applications web riches en contenu.

+ +

Cependant, le terme « JavaScript » au sens large regroupe divers éléments très différents : le langage cœur (ECMAScript) d'une part et les API Web d'autre part et notamment le DOM (Document Object Model, ou Modèle d'Objet du Document).

+ +

JavaScript, le langage (ECMAScript)

+ +

Le langage JavaScript (au sens strict) est standardisé par le comité ECMA TC39 sous la forme d'un langage intitulé ECMAScript.

+ +

Ce langage est aussi utilisé dans des environnements différents des navigateurs web, comme par exemple dans node.js.

+ +

Quelles sont les caractéristiques d'ECMAScript?

+ +

Entre autres choses, ECMAScript définit :

+ + + +

Support des navigateurs

+ +

En octobre 2016, les versions actuelles des principaux navigateurs web supportent ECMAScript 5.1 et ECMAScript 2015 (aussi appelé ES6) mais certaines anciennes versions n'implémentent que ECMAScript 5.

+ +

Futur

+ +

La sixième édition majeure d'ECMAScript a été officiellement approuvée et publiée en tant que standard le 17 juin 2015 par l'assemblée générale ECMA. Depuis cette édition, les éditions ECMAScript sont publiées à un rythme annuel.

+ +

API d'internationalisation

+ +

La spécification ECMAScript pour l'API d'internationalisation est un ajout à la spécification du langage ECMAScript, également standardisée par ECMA TC39. L'API d'internationalisation ajoute la collation (c'est-à-dire la comparaison entre chaînes de caractères), le formatage de nombres, dates et heures dans les applications JavaScript en prenant en compte la locale de l'utilisateur pour fournir le meilleur format. Le standard initial a été aprouvé en décembre 2012 ; le statut de son implémentation dans les différents navigateurs est disponible sur la page de l'objet {{jsxref("Intl")}}. La spécification d'internationalisation est également ratifiée annuellement et les navigateurs améliorent leur implémentation au fur et à mesure.

+ +

Les API du DOM (Document Object Model)

+ +

WebIDL

+ +

La spécification WebIDL fournit le lien entre les technologies DOM et ECMAScript.

+ +

Le cœur du DOM

+ +

Le Modèle d'Objet du Document (Document Object Model ou DOM en anglais) est une convention multi-plateforme, indépendante du langage utilisée pour représenter et interagir avec les objets dans les documents HTML, XHTML et XML. Les objets de l'arbre du DOM peuvent être accédés et manipulés en utilisant des méthodes sur les objets. Les fonctionnalités principales du DOM sont standardisées par le {{Glossary("W3C")}}. Il définit les interfaces offertes par les documents HTML et XML sans cibler un langage de manipulation précis. Parmi les éléments définis par le DOM, on peut trouver:

+ + + +

Du point de vue d'ECMAScript, les objets définis dans la spécification DOM sont appelés des « objets hôtes ».

+ +

Le DOM HTML

+ +

HTML, le langage de balisage du Web, est spécifié en termes de DOM. Comme une couche au-dessus des concepts abstraits définis dans DOM Core, HTML définit également la signification des éléments. Le DOM HTML inclut des choses telles que la propriété className sur des éléments HTML, or des API telles que {{domxref("document.body")}}.
+
+ La spécification HTML définit aussi les restrictions sur les documents ; par exemple, elle requiert que tous les enfants d'un élément {{HTMLRef("ul")}} (une liste non-ordonnée) soient des éléments {{HTMLRef("li")}}, puisqu'ils représentent les éléments d'une liste. En général, cela interdit aussi l'utilisation d'éléments et d'attributs qui ne sont pas définis dans un certain standard.
+
+ Si vous cherchez la documentation sur l'objet {{domxref("Document")}}, l'objet {{domxref("Window")}} ou sur les autres éléments du DOM, vous pouvez lire la documentation relative au DOM.

+ +

D'autres API fréquemment utilisées

+ + diff --git a/files/fr/web/javascript/language_resources/index.html b/files/fr/web/javascript/language_resources/index.html deleted file mode 100644 index 7e47a0d08b..0000000000 --- a/files/fr/web/javascript/language_resources/index.html +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: ECMAScript -slug: Web/JavaScript/Language_Resources -tags: - - Avancé - - JavaScript -translation_of: Web/JavaScript/Language_Resources ---- -
{{JsSidebar}}
- -

ECMAScript est un langage de script qui forme la base de JavaScript. ECMAScript est standardisé par l'organisation ECMA International grâce aux spécifications ECMA-262 et ECMA-402. Les standards ECMAScript suivants ont été approuvés ou sont en cours de rédaction:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NomLienDate de publicationDescription
Éditions actuelles
ECMA-262 10e éditionBrouillon de travail2019Spécification du langage ECMAScript 2019
ECMA-262, 9e éditionPDF, HTML
- Brouillon de travail, dépôt
2018Spécification du langage ECMAScript 2018
ECMA-402 5e éditionBrouillon de la spécification, dépôt2018Spécification pour l'API d'internationalisation ECMAScript 2018
Éditions historiques/obsolètes
ECMA-262PDFJuin 1997ECMAScript : un langage de programmation générique, multi-plateforme. C'est la première version du standard ECMAScript.
ECMA-262, 2e éditionPDFAoût 1998Spécification du langage ECMAScript. C'est la deuxième révision du standard. Elle correspond aussi au standard ISO 16262.
ECMA-262 3e éditionPDFDécembre 1999Spécification du langage ECMAScript. C'est la troisième révision du standard. Elle correspond à JavaScript 1.5.
- Voir aussi l'errata à ce propos.
ECMA-262 5e éditionPDFDécembre 2009Spécification du langage ECMAScript. C'est la cinquième révision du standard.
- Voir aussi l'errata pour ES5 et la prise en charge d'ECMAScript 5 par Mozilla
ECMA-357PDFJuin 2004ECMAScript pour XML (E4X).
- Voir aussi l'errata pour E4X.
ECMA-262, édition 5.1PDF, HTMLJuin 2011Cette version correspond complètement à la troisième édition du standard international ISO/IEC 16262:2011.
- Elle inclut les correctifs lié à l'errata pour ES5, elle ne contient pas de nouvelles fonctionnalités.
ECMA-402 1ère éditionPDF, HTMLDécembre 2012Spécification pour l'API d'internationalisation ECMAScript
ECMA-262 6e éditionPDF, HTMLJuin 2015Spécification 2015 pour le langage ECMAScript (sixième édition)
ECMA-402 2e éditionPDFJuin 2015Spécification pour l'API d'internationalisation ECMAScript 2015
ECMA-262 7e éditionHTMLJuin 2016Spécification 2016 pour le langage ECMAScript (septième édition)
ECMA-402 3e éditionHTMLJuin 2016Spécification pour l'API d'internationalisation ECMAScript 2016
ECMA-262 8e éditionHTMLJuin 2017Spécification 2017 pour le langage ECMAScript (huitième édition)
ECMA-402 4e éditionHTMLJuin 2017Spécification pour l'API d'internationalisation ECMAScript 2017
- -

ES.Next est un nom dynamique qui fait toujours référence à la prochaine version d'ECMAScript, en cours de rédaction. Les fonctionnalités d'ES.Next sont plutôt considérées comme des propositions car la spécification n'a pas encore été finalisée.

- -

Pour plus d'informations sur l'histoire d'ECMAScript, voir la page Wikipédia sur ECMAScript.

- -

Il est possible de participer ou de suivre les travaux concernant la prochaine révision de la spécification sur le langage ECMAScript, appelée « Harmony », ainsi que pour la spécification de l'API d'internationalisation grâce au wiki public et à la liste de diffusion es-discuss accessibles depuis ecmascript.org.

- -

Implémentations

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/language_resources/index.md b/files/fr/web/javascript/language_resources/index.md new file mode 100644 index 0000000000..7e47a0d08b --- /dev/null +++ b/files/fr/web/javascript/language_resources/index.md @@ -0,0 +1,151 @@ +--- +title: ECMAScript +slug: Web/JavaScript/Language_Resources +tags: + - Avancé + - JavaScript +translation_of: Web/JavaScript/Language_Resources +--- +
{{JsSidebar}}
+ +

ECMAScript est un langage de script qui forme la base de JavaScript. ECMAScript est standardisé par l'organisation ECMA International grâce aux spécifications ECMA-262 et ECMA-402. Les standards ECMAScript suivants ont été approuvés ou sont en cours de rédaction:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NomLienDate de publicationDescription
Éditions actuelles
ECMA-262 10e éditionBrouillon de travail2019Spécification du langage ECMAScript 2019
ECMA-262, 9e éditionPDF, HTML
+ Brouillon de travail, dépôt
2018Spécification du langage ECMAScript 2018
ECMA-402 5e éditionBrouillon de la spécification, dépôt2018Spécification pour l'API d'internationalisation ECMAScript 2018
Éditions historiques/obsolètes
ECMA-262PDFJuin 1997ECMAScript : un langage de programmation générique, multi-plateforme. C'est la première version du standard ECMAScript.
ECMA-262, 2e éditionPDFAoût 1998Spécification du langage ECMAScript. C'est la deuxième révision du standard. Elle correspond aussi au standard ISO 16262.
ECMA-262 3e éditionPDFDécembre 1999Spécification du langage ECMAScript. C'est la troisième révision du standard. Elle correspond à JavaScript 1.5.
+ Voir aussi l'errata à ce propos.
ECMA-262 5e éditionPDFDécembre 2009Spécification du langage ECMAScript. C'est la cinquième révision du standard.
+ Voir aussi l'errata pour ES5 et la prise en charge d'ECMAScript 5 par Mozilla
ECMA-357PDFJuin 2004ECMAScript pour XML (E4X).
+ Voir aussi l'errata pour E4X.
ECMA-262, édition 5.1PDF, HTMLJuin 2011Cette version correspond complètement à la troisième édition du standard international ISO/IEC 16262:2011.
+ Elle inclut les correctifs lié à l'errata pour ES5, elle ne contient pas de nouvelles fonctionnalités.
ECMA-402 1ère éditionPDF, HTMLDécembre 2012Spécification pour l'API d'internationalisation ECMAScript
ECMA-262 6e éditionPDF, HTMLJuin 2015Spécification 2015 pour le langage ECMAScript (sixième édition)
ECMA-402 2e éditionPDFJuin 2015Spécification pour l'API d'internationalisation ECMAScript 2015
ECMA-262 7e éditionHTMLJuin 2016Spécification 2016 pour le langage ECMAScript (septième édition)
ECMA-402 3e éditionHTMLJuin 2016Spécification pour l'API d'internationalisation ECMAScript 2016
ECMA-262 8e éditionHTMLJuin 2017Spécification 2017 pour le langage ECMAScript (huitième édition)
ECMA-402 4e éditionHTMLJuin 2017Spécification pour l'API d'internationalisation ECMAScript 2017
+ +

ES.Next est un nom dynamique qui fait toujours référence à la prochaine version d'ECMAScript, en cours de rédaction. Les fonctionnalités d'ES.Next sont plutôt considérées comme des propositions car la spécification n'a pas encore été finalisée.

+ +

Pour plus d'informations sur l'histoire d'ECMAScript, voir la page Wikipédia sur ECMAScript.

+ +

Il est possible de participer ou de suivre les travaux concernant la prochaine révision de la spécification sur le langage ECMAScript, appelée « Harmony », ainsi que pour la spécification de l'API d'internationalisation grâce au wiki public et à la liste de diffusion es-discuss accessibles depuis ecmascript.org.

+ +

Implémentations

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/memory_management/index.html b/files/fr/web/javascript/memory_management/index.html deleted file mode 100644 index 1e42785cde..0000000000 --- a/files/fr/web/javascript/memory_management/index.html +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Gestion de la mémoire -slug: Web/JavaScript/Memory_Management -tags: - - JavaScript - - Mémoire - - Performance -translation_of: Web/JavaScript/Memory_Management -original_slug: Web/JavaScript/Gestion_de_la_mémoire ---- -
{{JsSidebar("Advanced")}}
- -

Les langages de bas niveau, tels que C, possèdent des primitives permettant de gérer la mémoire : malloc() et free() par exemple. En revanche, lorsqu'on utilise JavaScript, la mémoire est allouée lors de la création des objets puis libérée « automatiquement » lorsque ceux-ci ne sont plus utilisés. Cette libération automatique est appelée garbage collection en anglais ou ramasse-miettes. Le fait que ce processus soit automatique est souvent source de confusion et donne parfois l'impression que JavaScript (ou d'autres langages de haut niveau) ne permet pas de gérer la mémoire : nous allons voir que ce n'est pas le cas.

- -

Le cycle de vie de la mémoire

- -

Quel que soit le langage de programmation, le cycle de vie de la mémoire ressemblera à :

- -
    -
  1. Allouer la mémoire dont on a besoin
  2. -
  3. Utiliser cette mémoire allouée (lecture, écriture)
  4. -
  5. Libérer la mémoire allouée lorsqu'on n'en a plus besoin
  6. -
- -

Le deuxième point est explicite, au niveau du code, pour tous les langages de programmation. Le premier et le troisième points sont explicites pour les langages de bas niveau mais souvent implicites pour les langages de haut niveau tels que JavaScript.

- -

Allocation de la mémoire en JavaScript

- -

Initialisation des valeurs

- -

Afin de simplifier l'écriture de code, JavaScript alloue la mémoire lors de la déclaration des variables :

- -
// alloue de la mémoire pour un nombre
-var n = 123;
-// alloue de la mémoire pour une chaîne de caractères
-var s = "azerty";
-
-// alloue de la mémoire pour un objet et les valeurs qu'il contient
-var o = {
-  a: 1,
-  b: null
-};
-
-// alloue de la mémoire pour un tableau et les valeurs qu'il contient
-var a = [1, null, "abra"];
-
-// alloue de la mémoire pour une fonction
-// une fonction est un objet qui peut être appelé
-function f(a) {
-  return a + 2;
-}
-
-// les expressions de fonction allouent aussi de la mémoire
-unElement.addEventListener('click', function(){
-  unElement.style.backgroundColor = 'blue';
-}, false);
-
- -

Allocation par appels de fonctions

- -

Certains appels de fonctions entraînent l'allocation mémoire d'un objet.

- -
// Alloue la mémoire pour un objet date
-var d = new Date();
-
-// Alloue de la mémoire pour un objet représentant un élément du DOM
-var e = document.createElement('div');
-
- -

Certaines méthodes allouent de la mémoire pour des nouveaux objets ou de nouvelles valeurs.

- -
var s = "azerty";
-var s2 = s.substr(0, 3); // s2 est une nouvelle chaîne de caractères
-// Les chaînes étant immuables, JavaScript peut choisir
-// de ne pas allouer de mémoire mais seulement
-// de stocker l'intervalle [0, 3].
-
-var a = ["ouais ouais", "nan nan"];
-var a2 = ["génération", "nan nan"];
-var a3 = a.concat(a2);
-// nouveau tableau de 4 éléments
-// (résultat de la concaténation de a et a2)
-
- -

Utilisation des variables

- -

Utiliser des variables revient à lire et écrire la mémoire allouée. Cela peut être effectué lorsqu'on lit ou modifie la valeur d'une variable ou d'une propriété d'un objet ou encore lorsqu'on passe un argument à une fonction.

- -

Libérer la mémoire qui n'est plus nécessaire

- -

La plupart des problèmes concernant la gestion de la mémoire surviennent à cet endroit. Le plus difficile est de savoir « quand » la mémoire allouée n'est plus utilisée. Pour les langages « bas niveau », il faut donc que le développeur détermine quelle partie de la mémoire n'est plus utilisée à tel endroit du code et la libère.

- -

Les interpréteurs des langages de haut niveau intègrent un composant logiciel, appelé « ramasse-miettes » qui a pour but de surveiller l'utilisation de la mémoire afin de déterminer quand une partie de la mémoire allouée n'est plus utilisée afin de la libérer automatiquement. Ce procédé ne peut être qu'une approximation car savoir si tel ou tel fragment de mémoire est nécessaire est un problème indécidable (autrement dit, ce problème ne peut être résolu par un algorithme).

- -

Le ramasse-miettes ou garbage collection

- -

Comme on vient de le voir, savoir si de la mémoire peut être libérée demeure un problème indécidable. Les ramasses-miettes ne sont donc que des solutions restreintes pour ce problème. La section qui suit détaille les notions importantes pour comprendre ce mécanisme, ainsi que ses limitations.

- -

Références

- -

Le concept principal utilisé par les algorithmes de ramasse-miettes est celui de référence. Dans ce contexte, un objet en référence un autre lorsqu'il a accès à lui (implicitement ou explicitement). Ainsi, un objet JavaScript référencera son prototype (référence implicite) et ses propriétés (référence explicite).

- -

Dans ce contexte, la notion d'objet s'étend et dépasse celle utilisée pour décrire les objets JavaScript, elle contiendra notamment les portées de fonctions (ou la portée globale).

- -

Compter les références

- -

L'algorithme le plus simple consiste à faire l'équivalence entre « un objet n'est plus nécessaire » et « un objet n'a pas d'objet le référençant ». Ainsi un objet peut être « ramassé » par le ramasse-miettes quand il n'y a plus de références pointant vers lui.

- -

Exemple

- -
var o = {
-  a: {
-    b: 2
-  }
-};
-// 2 objets sont créés. L'un est référencé par l'autre en tant que propriété.
-// L'autre est référencé car assigné à la variable 'o'.
-// Aucun des deux ne peut être ramassé par le ramasse-miettes.
-
-
-var o2 = o; // la variable 'o2' est le deuxième élément qui
-            // référence l'objet o
-o = 1;      // désormais, l'objet qui était dans 'o' possède
-            // une seule référence de o2 vers lui
-
-var oa = o2.a; // référence la propriété 'a' de l'objet
-               // cet objet a donc 2 références : une
-               // par une propriété, l'autre par la variable 'oa'
-
-o2 = "yo"; // L'objet 'o' ne possède plus de références vers lui
-           // Il peut être ramassé.
-           // Cependant sa propriété 'a' est toujours référencé.
-           // La mémoire ne peut donc pas être libérée.
-
-oa = null; // la propriété 'a' ne possède plus de références
-           // vers elle. L'objet peut être ramassé et la mémoire
-           // libérée.
-
- -

Une limitation : les cycles

- -

Cet algorithme est limité car il ne peut pas gérer les cycles (exemple : A référence B et B référence A, ce qui forme un cycle). Avec les cycles, des objets pourraient très bien ne plus être nécessaires et cependant il serait impossible de les ramasser pour libérer la mémoire en utilisant l'algorithme précédent car chaque objet serait référencé au moins une fois et aucun ne pourrait être « ramassé ». Les références circulaires peuvent parfois entraîner des fuites mémoire.

- -
function f() {
-  var o = {};
-  var o2 = {};
-  o.a = o2; // o référence o2
-  o2.a = o; // o2 référence o
-
-  return "azerty";
-}
-
-f();
-
- -

Exemple réel

- -

Les navigateurs Internet Explorer 6 et 7 utilisent cet algorithme pour gérer les objets du DOM. Certains codes peuvent donc entraîner des fuites de mémoires, en voici un exemple :

- -
var div;
-window.onload = function() {
-  div = document.getElementById("monElementDiv");
-  div.referenceCirculaire = div;
-  div.desDonnees = new Array(10000).join("*");
-};
-
- -

Dans cet exemple, l'élément du DOM monElementDiv possède une référence circulaire vers lui-même via la propriété referenceCirculaire. Si la propriété n'est pas retirée ou modifiée de façon explicite, un ramasse-miettes qui compte les références aura toujours au moins une référence comptée, ce qui gardera l'élément DOM en mémoire et ce même s'il a été retiré de l'arbre du DOM. Si l'élément du DOM contient beaucoup de données (ce qui est illustré ici avec la propriétés desDonnées), la mémoire consommée par ces données ne sera jamais libérée.

- -

Algorithme « marquer et balayer » (mark-and-sweep)

- -

Cet algorithme réduit la définition « un objet n'est plus nécessaire » à « un objet ne peut être atteint ».

- -

L'utilisation de cet algorithme implique de savoir quels sont les objets racines (en JavaScript, la racine est l'objet global). De façon périodique, le ramasse-miettes commencera par ces racines, listera tous les objets référencés par ces racines, puis les objets référencés par eux etc. Le ramasse-miettes pourra ainsi construire une liste de tous les objets accessibles et collecter ceux qui ne sont plus accessibles.

- -

Cet algorithme est meilleur que le précédent car la proposition « un objet possède 0 référence » implique « un objet ne peut être atteint ». En revanche, la réciproque n'est pas vraie comme nous avons pu le voir avec les cycles.

- -

En 2012, l'ensemble des navigateurs web modernes disposent d'un ramasse-miettes implémentant cet algorithme mark-and-sweep. L'ensemble des améliorations apportées dans ce domaine de JavaScript représentent des améliorations basées sur cet algorithme, ce ne sont pas de nouveaux algorithmes ou une nouvelle définition pour les objets à supprimer.

- -

Les cycles ne posent plus problème

- -

Dans l'exemple ci-dessus, après le retour de la fonction, les deux objets ne sont plus référencés par quelque chose d'accessible depuis l'objet global. L'algorithme les marquera donc comme « non-accessibles ».

- -

Limitation : libérer la mémoire manuellement

- -

On pourrait parfois avoir envie de décider quand libérer la mémoire. En 2019, il n'est pas possible de déclencher le ramasse miettes en JavaScript.

- -

Node.js

- -

Node.js propose certaines options et outils pour configurer et déboguer des problèmes mémoires. Ces fonctionnalités peuvent ne pas être disponibles dans les environnements navigateur.

- -

Options d'exécution

- -

La quantité de mémoire pour la mémoire du tas (heap) peut être augmentée avec une option :

- -
node --max-old-space-size=6000 index.js
- -

On peut également exposer le ramasse-miettes afin de déboguer des problèmes mémoires. Cela s'active via une option et s'utilise avec le débogueur Chrome :

- -
node --expose-gc --inspect index.js
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/memory_management/index.md b/files/fr/web/javascript/memory_management/index.md new file mode 100644 index 0000000000..1e42785cde --- /dev/null +++ b/files/fr/web/javascript/memory_management/index.md @@ -0,0 +1,208 @@ +--- +title: Gestion de la mémoire +slug: Web/JavaScript/Memory_Management +tags: + - JavaScript + - Mémoire + - Performance +translation_of: Web/JavaScript/Memory_Management +original_slug: Web/JavaScript/Gestion_de_la_mémoire +--- +
{{JsSidebar("Advanced")}}
+ +

Les langages de bas niveau, tels que C, possèdent des primitives permettant de gérer la mémoire : malloc() et free() par exemple. En revanche, lorsqu'on utilise JavaScript, la mémoire est allouée lors de la création des objets puis libérée « automatiquement » lorsque ceux-ci ne sont plus utilisés. Cette libération automatique est appelée garbage collection en anglais ou ramasse-miettes. Le fait que ce processus soit automatique est souvent source de confusion et donne parfois l'impression que JavaScript (ou d'autres langages de haut niveau) ne permet pas de gérer la mémoire : nous allons voir que ce n'est pas le cas.

+ +

Le cycle de vie de la mémoire

+ +

Quel que soit le langage de programmation, le cycle de vie de la mémoire ressemblera à :

+ +
    +
  1. Allouer la mémoire dont on a besoin
  2. +
  3. Utiliser cette mémoire allouée (lecture, écriture)
  4. +
  5. Libérer la mémoire allouée lorsqu'on n'en a plus besoin
  6. +
+ +

Le deuxième point est explicite, au niveau du code, pour tous les langages de programmation. Le premier et le troisième points sont explicites pour les langages de bas niveau mais souvent implicites pour les langages de haut niveau tels que JavaScript.

+ +

Allocation de la mémoire en JavaScript

+ +

Initialisation des valeurs

+ +

Afin de simplifier l'écriture de code, JavaScript alloue la mémoire lors de la déclaration des variables :

+ +
// alloue de la mémoire pour un nombre
+var n = 123;
+// alloue de la mémoire pour une chaîne de caractères
+var s = "azerty";
+
+// alloue de la mémoire pour un objet et les valeurs qu'il contient
+var o = {
+  a: 1,
+  b: null
+};
+
+// alloue de la mémoire pour un tableau et les valeurs qu'il contient
+var a = [1, null, "abra"];
+
+// alloue de la mémoire pour une fonction
+// une fonction est un objet qui peut être appelé
+function f(a) {
+  return a + 2;
+}
+
+// les expressions de fonction allouent aussi de la mémoire
+unElement.addEventListener('click', function(){
+  unElement.style.backgroundColor = 'blue';
+}, false);
+
+ +

Allocation par appels de fonctions

+ +

Certains appels de fonctions entraînent l'allocation mémoire d'un objet.

+ +
// Alloue la mémoire pour un objet date
+var d = new Date();
+
+// Alloue de la mémoire pour un objet représentant un élément du DOM
+var e = document.createElement('div');
+
+ +

Certaines méthodes allouent de la mémoire pour des nouveaux objets ou de nouvelles valeurs.

+ +
var s = "azerty";
+var s2 = s.substr(0, 3); // s2 est une nouvelle chaîne de caractères
+// Les chaînes étant immuables, JavaScript peut choisir
+// de ne pas allouer de mémoire mais seulement
+// de stocker l'intervalle [0, 3].
+
+var a = ["ouais ouais", "nan nan"];
+var a2 = ["génération", "nan nan"];
+var a3 = a.concat(a2);
+// nouveau tableau de 4 éléments
+// (résultat de la concaténation de a et a2)
+
+ +

Utilisation des variables

+ +

Utiliser des variables revient à lire et écrire la mémoire allouée. Cela peut être effectué lorsqu'on lit ou modifie la valeur d'une variable ou d'une propriété d'un objet ou encore lorsqu'on passe un argument à une fonction.

+ +

Libérer la mémoire qui n'est plus nécessaire

+ +

La plupart des problèmes concernant la gestion de la mémoire surviennent à cet endroit. Le plus difficile est de savoir « quand » la mémoire allouée n'est plus utilisée. Pour les langages « bas niveau », il faut donc que le développeur détermine quelle partie de la mémoire n'est plus utilisée à tel endroit du code et la libère.

+ +

Les interpréteurs des langages de haut niveau intègrent un composant logiciel, appelé « ramasse-miettes » qui a pour but de surveiller l'utilisation de la mémoire afin de déterminer quand une partie de la mémoire allouée n'est plus utilisée afin de la libérer automatiquement. Ce procédé ne peut être qu'une approximation car savoir si tel ou tel fragment de mémoire est nécessaire est un problème indécidable (autrement dit, ce problème ne peut être résolu par un algorithme).

+ +

Le ramasse-miettes ou garbage collection

+ +

Comme on vient de le voir, savoir si de la mémoire peut être libérée demeure un problème indécidable. Les ramasses-miettes ne sont donc que des solutions restreintes pour ce problème. La section qui suit détaille les notions importantes pour comprendre ce mécanisme, ainsi que ses limitations.

+ +

Références

+ +

Le concept principal utilisé par les algorithmes de ramasse-miettes est celui de référence. Dans ce contexte, un objet en référence un autre lorsqu'il a accès à lui (implicitement ou explicitement). Ainsi, un objet JavaScript référencera son prototype (référence implicite) et ses propriétés (référence explicite).

+ +

Dans ce contexte, la notion d'objet s'étend et dépasse celle utilisée pour décrire les objets JavaScript, elle contiendra notamment les portées de fonctions (ou la portée globale).

+ +

Compter les références

+ +

L'algorithme le plus simple consiste à faire l'équivalence entre « un objet n'est plus nécessaire » et « un objet n'a pas d'objet le référençant ». Ainsi un objet peut être « ramassé » par le ramasse-miettes quand il n'y a plus de références pointant vers lui.

+ +

Exemple

+ +
var o = {
+  a: {
+    b: 2
+  }
+};
+// 2 objets sont créés. L'un est référencé par l'autre en tant que propriété.
+// L'autre est référencé car assigné à la variable 'o'.
+// Aucun des deux ne peut être ramassé par le ramasse-miettes.
+
+
+var o2 = o; // la variable 'o2' est le deuxième élément qui
+            // référence l'objet o
+o = 1;      // désormais, l'objet qui était dans 'o' possède
+            // une seule référence de o2 vers lui
+
+var oa = o2.a; // référence la propriété 'a' de l'objet
+               // cet objet a donc 2 références : une
+               // par une propriété, l'autre par la variable 'oa'
+
+o2 = "yo"; // L'objet 'o' ne possède plus de références vers lui
+           // Il peut être ramassé.
+           // Cependant sa propriété 'a' est toujours référencé.
+           // La mémoire ne peut donc pas être libérée.
+
+oa = null; // la propriété 'a' ne possède plus de références
+           // vers elle. L'objet peut être ramassé et la mémoire
+           // libérée.
+
+ +

Une limitation : les cycles

+ +

Cet algorithme est limité car il ne peut pas gérer les cycles (exemple : A référence B et B référence A, ce qui forme un cycle). Avec les cycles, des objets pourraient très bien ne plus être nécessaires et cependant il serait impossible de les ramasser pour libérer la mémoire en utilisant l'algorithme précédent car chaque objet serait référencé au moins une fois et aucun ne pourrait être « ramassé ». Les références circulaires peuvent parfois entraîner des fuites mémoire.

+ +
function f() {
+  var o = {};
+  var o2 = {};
+  o.a = o2; // o référence o2
+  o2.a = o; // o2 référence o
+
+  return "azerty";
+}
+
+f();
+
+ +

Exemple réel

+ +

Les navigateurs Internet Explorer 6 et 7 utilisent cet algorithme pour gérer les objets du DOM. Certains codes peuvent donc entraîner des fuites de mémoires, en voici un exemple :

+ +
var div;
+window.onload = function() {
+  div = document.getElementById("monElementDiv");
+  div.referenceCirculaire = div;
+  div.desDonnees = new Array(10000).join("*");
+};
+
+ +

Dans cet exemple, l'élément du DOM monElementDiv possède une référence circulaire vers lui-même via la propriété referenceCirculaire. Si la propriété n'est pas retirée ou modifiée de façon explicite, un ramasse-miettes qui compte les références aura toujours au moins une référence comptée, ce qui gardera l'élément DOM en mémoire et ce même s'il a été retiré de l'arbre du DOM. Si l'élément du DOM contient beaucoup de données (ce qui est illustré ici avec la propriétés desDonnées), la mémoire consommée par ces données ne sera jamais libérée.

+ +

Algorithme « marquer et balayer » (mark-and-sweep)

+ +

Cet algorithme réduit la définition « un objet n'est plus nécessaire » à « un objet ne peut être atteint ».

+ +

L'utilisation de cet algorithme implique de savoir quels sont les objets racines (en JavaScript, la racine est l'objet global). De façon périodique, le ramasse-miettes commencera par ces racines, listera tous les objets référencés par ces racines, puis les objets référencés par eux etc. Le ramasse-miettes pourra ainsi construire une liste de tous les objets accessibles et collecter ceux qui ne sont plus accessibles.

+ +

Cet algorithme est meilleur que le précédent car la proposition « un objet possède 0 référence » implique « un objet ne peut être atteint ». En revanche, la réciproque n'est pas vraie comme nous avons pu le voir avec les cycles.

+ +

En 2012, l'ensemble des navigateurs web modernes disposent d'un ramasse-miettes implémentant cet algorithme mark-and-sweep. L'ensemble des améliorations apportées dans ce domaine de JavaScript représentent des améliorations basées sur cet algorithme, ce ne sont pas de nouveaux algorithmes ou une nouvelle définition pour les objets à supprimer.

+ +

Les cycles ne posent plus problème

+ +

Dans l'exemple ci-dessus, après le retour de la fonction, les deux objets ne sont plus référencés par quelque chose d'accessible depuis l'objet global. L'algorithme les marquera donc comme « non-accessibles ».

+ +

Limitation : libérer la mémoire manuellement

+ +

On pourrait parfois avoir envie de décider quand libérer la mémoire. En 2019, il n'est pas possible de déclencher le ramasse miettes en JavaScript.

+ +

Node.js

+ +

Node.js propose certaines options et outils pour configurer et déboguer des problèmes mémoires. Ces fonctionnalités peuvent ne pas être disponibles dans les environnements navigateur.

+ +

Options d'exécution

+ +

La quantité de mémoire pour la mémoire du tas (heap) peut être augmentée avec une option :

+ +
node --max-old-space-size=6000 index.js
+ +

On peut également exposer le ramasse-miettes afin de déboguer des problèmes mémoires. Cela s'active via une option et s'utilise avec le débogueur Chrome :

+ +
node --expose-gc --inspect index.js
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/about/index.html b/files/fr/web/javascript/reference/about/index.html deleted file mode 100644 index 4f2bfd5e74..0000000000 --- a/files/fr/web/javascript/reference/about/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: À propos de cette référence -slug: Web/JavaScript/Reference/About -tags: - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/About -original_slug: Web/JavaScript/Reference/A_propos ---- -
{{JsSidebar}}
- -

La référence JavaScript regroupe les différentes notions autour du langage JavaScript. L'ensemble du langage y est détaillé. Si vous développez une application JavaScript, vous pourrez utiliser ces différentes pages (d'où le titre de « référence »). Si vous apprenez JavaScript ou que vous souhaitez comprendre comment fonctionnent certains de ses composants, vous pouvez lire le Guide JavaScript.

- -

Le langage JavaScript a été conçu pour être utilisé dans un environnement dans lequel il s'intègre : un navigateur, des scripts côté serveur, etc. De façon générale, cette référence ne cible pas un environnement en particulier et tente de rester le plus « agnostique » possible.

- -

Où trouver des informations sur JavaScript

- -

La documentation JavaScript sur les fonctionnalités essentielles du langage (qui correspondent à ECMAScript pour la plupart) se trouve dans les sections suivantes :

- - - -

Si vous découvrez JavaScript, vous pouvez débuter votre lecture avec le guide. Une fois les fondamentaux acquis, vous pourrez utiliser la référence pour obtenir plus d'informations sur les différents objets et éléments du langage.

- -

Structure de cette référence

- -

La référence JavaScript s'organise autour de différents chapitres :

- -
-
Les objets natifs standards
-
Ce chapitre aborde l'ensemble des objets natifs standards JavaScript, ainsi que leurs méthodes et propriétés.
-
Les instructions et déclarations
-
Les applications JavaScript sont composées d'instructions organisées grâce à une syntaxe. Une instruction peut s'étaler sur plusieurs lignes et plusieurs instructions peuvent être présentes sur une ligne si elles sont séparées par des points-virugles.
-
Les expressions et opérateurs
-
Ce chapitre traite des opérateurs présents en JavaScript ainsi que des expressions et des mots-clés du langage.
-
Les fonctions
-
Ce chapitre aborde les concepts sur les fonctions en JavaScript.
-
Les classes
-
Ce chapitre présente les classes, un sucre syntaxique pour les objets ajouté avec ECMAScript 2015.
-
Les erreurs
-
Un chapitre sur les erreurs, les exceptions et les avertissements utilisées en JavaScript.
-
Les nouveautés en JavaScript
-
Ce chapitre aborde les différentes versions de JavaScript et les changements qui ont eu lieu.
-
- -

D'autres pages de la référence

- - diff --git a/files/fr/web/javascript/reference/about/index.md b/files/fr/web/javascript/reference/about/index.md new file mode 100644 index 0000000000..4f2bfd5e74 --- /dev/null +++ b/files/fr/web/javascript/reference/about/index.md @@ -0,0 +1,54 @@ +--- +title: À propos de cette référence +slug: Web/JavaScript/Reference/About +tags: + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/About +original_slug: Web/JavaScript/Reference/A_propos +--- +
{{JsSidebar}}
+ +

La référence JavaScript regroupe les différentes notions autour du langage JavaScript. L'ensemble du langage y est détaillé. Si vous développez une application JavaScript, vous pourrez utiliser ces différentes pages (d'où le titre de « référence »). Si vous apprenez JavaScript ou que vous souhaitez comprendre comment fonctionnent certains de ses composants, vous pouvez lire le Guide JavaScript.

+ +

Le langage JavaScript a été conçu pour être utilisé dans un environnement dans lequel il s'intègre : un navigateur, des scripts côté serveur, etc. De façon générale, cette référence ne cible pas un environnement en particulier et tente de rester le plus « agnostique » possible.

+ +

Où trouver des informations sur JavaScript

+ +

La documentation JavaScript sur les fonctionnalités essentielles du langage (qui correspondent à ECMAScript pour la plupart) se trouve dans les sections suivantes :

+ + + +

Si vous découvrez JavaScript, vous pouvez débuter votre lecture avec le guide. Une fois les fondamentaux acquis, vous pourrez utiliser la référence pour obtenir plus d'informations sur les différents objets et éléments du langage.

+ +

Structure de cette référence

+ +

La référence JavaScript s'organise autour de différents chapitres :

+ +
+
Les objets natifs standards
+
Ce chapitre aborde l'ensemble des objets natifs standards JavaScript, ainsi que leurs méthodes et propriétés.
+
Les instructions et déclarations
+
Les applications JavaScript sont composées d'instructions organisées grâce à une syntaxe. Une instruction peut s'étaler sur plusieurs lignes et plusieurs instructions peuvent être présentes sur une ligne si elles sont séparées par des points-virugles.
+
Les expressions et opérateurs
+
Ce chapitre traite des opérateurs présents en JavaScript ainsi que des expressions et des mots-clés du langage.
+
Les fonctions
+
Ce chapitre aborde les concepts sur les fonctions en JavaScript.
+
Les classes
+
Ce chapitre présente les classes, un sucre syntaxique pour les objets ajouté avec ECMAScript 2015.
+
Les erreurs
+
Un chapitre sur les erreurs, les exceptions et les avertissements utilisées en JavaScript.
+
Les nouveautés en JavaScript
+
Ce chapitre aborde les différentes versions de JavaScript et les changements qui ont eu lieu.
+
+ +

D'autres pages de la référence

+ + diff --git a/files/fr/web/javascript/reference/classes/constructor/index.html b/files/fr/web/javascript/reference/classes/constructor/index.html deleted file mode 100644 index f488f06dc5..0000000000 --- a/files/fr/web/javascript/reference/classes/constructor/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: constructor -slug: Web/JavaScript/Reference/Classes/constructor -tags: - - Classes - - ECMAScript 2015 - - JavaScript - - Language feature -translation_of: Web/JavaScript/Reference/Classes/constructor -browser-compat: javascript.classes.constructor ---- -
{{jsSidebar("Classes")}}
- -

La méthode constructor est une méthode qui est utilisée pour créer et initialiser un objet lorsqu'on utilise le mot clé class.

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

Syntaxe

- -
constructor() { ... }
-constructor(argument0) { ... }
-constructor(argument0, argument1) { ... }
-constructor(argument0, argument1, ... , argumentN) { ... }
- -

Description

- -

Un constructeur vous permet de fournir toute initialisation personnalisée qui doit être effectuée avant que toute autre méthode puisse être appelée sur un objet instancié.

- -
class Person {
-  constructor(name) {
-    this.name = name;
-  }
-
-  introduce() {
-    console.log(`Hello, my name is ${this.name}`);
-  }
-}
-
-const otto = new Person('Otto');
-
-otto.introduce();
- -

Si vous ne fournissez pas votre propre constructeur, alors un constructeur par défaut sera fourni pour vous. Si votre classe est une classe de base, le constructeur par défaut est vide :

- -
constructor() {}
- -

Si votre classe est une classe dérivée, le constructeur par défaut appelle le constructeur parent, en transmettant tous les arguments qui ont été fournis :

- -
constructor(...args) {
-  super(...args);
-}
- -

Cela permet à un code comme celui-ci de fonctionner :

- -
class ValidationError extends Error {
-  printCustomerMessage() {
-    return `La validation a échoué :-( (détails : ${this.message})`;
-  }
-}
-
-try {
-  throw new ValidationError("Numéro de téléphone invalide");
-} catch (error) {
-   if (error instanceof ValidationError) {
-    console.log(error.name); // Il s'agit d'une erreur au lieu de ValidationError !
-    console.log(error.printCustomerMessage());
-  } else {
-    console.log('Erreur inconnue', error);
-    throw error;
-  }
-}
- -

La classe ValidationError n'a pas besoin d'un constructeur explicite, car elle n'a pas besoin de faire d'initialisation personnalisée. Le constructeur par défaut se charge alors d'initialiser le parent Error à partir de l'argument qui lui est fourni.

- -

Cependant, si vous fournissez votre propre constructeur, et que votre classe dérive d'une certaine classe parente, alors vous devez appeler explicitement le constructeur de la classe parente en utilisant super. Par exemple :

- -
class ValidationError extends Error {
-  constructor(message) {
-    super(message);  // appelle le constructeur de la classe parent
-    this.name = 'ValidationError';
-    this.code = '42';
-  }
-
-  printCustomerMessage() {
-     return `La validation a échoué :-( (détails : ${this.message}, code : ${this.code})`;
-  }
-}
-
-try {
-  throw new ValidationError("Numéro de téléphone invalide");
-} catch (error) {
-   if (error instanceof ValidationError) {
-    console.log(error.name); // Maintenant, c'est une ValidationError !
-    console.log(error.printCustomerMessage());
-  } else {
-    console.log('Unknown error', error);
-    throw error;
-  }
-}
- -

Il ne peut y avoir qu'une seule méthode spéciale portant le nom « constructor » dans une classe. Avoir plus d'une occurrence d'une méthode constructor dans une classe lancera une erreur SyntaxError.

- -

Exemples

- -

Utilisation de la méthode du constructor

- -

Cet extrait de code est tiré de l'échantillon de classes (démo en direct).

- -
class Square extends Polygon {
-  constructor(length) {
-    // Ici, on appelle le constructeur de la classe parente avec des longueurs
-    // fournies pour la largeur et la hauteur du polygone.
-    super(length, length);
-    // NOTE : Dans les classes dérivées, `super()` doit être appelé avant de pouvoir
-    // utiliser `this`. Si vous ne le faites pas, cela provoquera une ReferenceError.
-    this.name = 'Carré';
-  }
-
-  get area() {
-    return this.height * this.width;
-  }
-
-  set area(value) {
-    this.height = value**0.5;
-    this.width = value**0.5;
-  }
-}
- -

Un autre exemple

- -

Ici, le prototype de la classe Square est modifié — mais le constructeur de sa classe de base Polygon est toujours appelé lorsqu'une nouvelle instance d'un carré est créée.

- -
class Polygon {
-    constructor() {
-        this.name = "Polygone";
-    }
-}
-
-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); // Polygone
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/classes/constructor/index.md b/files/fr/web/javascript/reference/classes/constructor/index.md new file mode 100644 index 0000000000..f488f06dc5 --- /dev/null +++ b/files/fr/web/javascript/reference/classes/constructor/index.md @@ -0,0 +1,172 @@ +--- +title: constructor +slug: Web/JavaScript/Reference/Classes/constructor +tags: + - Classes + - ECMAScript 2015 + - JavaScript + - Language feature +translation_of: Web/JavaScript/Reference/Classes/constructor +browser-compat: javascript.classes.constructor +--- +
{{jsSidebar("Classes")}}
+ +

La méthode constructor est une méthode qui est utilisée pour créer et initialiser un objet lorsqu'on utilise le mot clé class.

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

Syntaxe

+ +
constructor() { ... }
+constructor(argument0) { ... }
+constructor(argument0, argument1) { ... }
+constructor(argument0, argument1, ... , argumentN) { ... }
+ +

Description

+ +

Un constructeur vous permet de fournir toute initialisation personnalisée qui doit être effectuée avant que toute autre méthode puisse être appelée sur un objet instancié.

+ +
class Person {
+  constructor(name) {
+    this.name = name;
+  }
+
+  introduce() {
+    console.log(`Hello, my name is ${this.name}`);
+  }
+}
+
+const otto = new Person('Otto');
+
+otto.introduce();
+ +

Si vous ne fournissez pas votre propre constructeur, alors un constructeur par défaut sera fourni pour vous. Si votre classe est une classe de base, le constructeur par défaut est vide :

+ +
constructor() {}
+ +

Si votre classe est une classe dérivée, le constructeur par défaut appelle le constructeur parent, en transmettant tous les arguments qui ont été fournis :

+ +
constructor(...args) {
+  super(...args);
+}
+ +

Cela permet à un code comme celui-ci de fonctionner :

+ +
class ValidationError extends Error {
+  printCustomerMessage() {
+    return `La validation a échoué :-( (détails : ${this.message})`;
+  }
+}
+
+try {
+  throw new ValidationError("Numéro de téléphone invalide");
+} catch (error) {
+   if (error instanceof ValidationError) {
+    console.log(error.name); // Il s'agit d'une erreur au lieu de ValidationError !
+    console.log(error.printCustomerMessage());
+  } else {
+    console.log('Erreur inconnue', error);
+    throw error;
+  }
+}
+ +

La classe ValidationError n'a pas besoin d'un constructeur explicite, car elle n'a pas besoin de faire d'initialisation personnalisée. Le constructeur par défaut se charge alors d'initialiser le parent Error à partir de l'argument qui lui est fourni.

+ +

Cependant, si vous fournissez votre propre constructeur, et que votre classe dérive d'une certaine classe parente, alors vous devez appeler explicitement le constructeur de la classe parente en utilisant super. Par exemple :

+ +
class ValidationError extends Error {
+  constructor(message) {
+    super(message);  // appelle le constructeur de la classe parent
+    this.name = 'ValidationError';
+    this.code = '42';
+  }
+
+  printCustomerMessage() {
+     return `La validation a échoué :-( (détails : ${this.message}, code : ${this.code})`;
+  }
+}
+
+try {
+  throw new ValidationError("Numéro de téléphone invalide");
+} catch (error) {
+   if (error instanceof ValidationError) {
+    console.log(error.name); // Maintenant, c'est une ValidationError !
+    console.log(error.printCustomerMessage());
+  } else {
+    console.log('Unknown error', error);
+    throw error;
+  }
+}
+ +

Il ne peut y avoir qu'une seule méthode spéciale portant le nom « constructor » dans une classe. Avoir plus d'une occurrence d'une méthode constructor dans une classe lancera une erreur SyntaxError.

+ +

Exemples

+ +

Utilisation de la méthode du constructor

+ +

Cet extrait de code est tiré de l'échantillon de classes (démo en direct).

+ +
class Square extends Polygon {
+  constructor(length) {
+    // Ici, on appelle le constructeur de la classe parente avec des longueurs
+    // fournies pour la largeur et la hauteur du polygone.
+    super(length, length);
+    // NOTE : Dans les classes dérivées, `super()` doit être appelé avant de pouvoir
+    // utiliser `this`. Si vous ne le faites pas, cela provoquera une ReferenceError.
+    this.name = 'Carré';
+  }
+
+  get area() {
+    return this.height * this.width;
+  }
+
+  set area(value) {
+    this.height = value**0.5;
+    this.width = value**0.5;
+  }
+}
+ +

Un autre exemple

+ +

Ici, le prototype de la classe Square est modifié — mais le constructeur de sa classe de base Polygon est toujours appelé lorsqu'une nouvelle instance d'un carré est créée.

+ +
class Polygon {
+    constructor() {
+        this.name = "Polygone";
+    }
+}
+
+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); // Polygone
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/classes/extends/index.html b/files/fr/web/javascript/reference/classes/extends/index.html deleted file mode 100644 index 8e3af50594..0000000000 --- a/files/fr/web/javascript/reference/classes/extends/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: extends -slug: Web/JavaScript/Reference/Classes/extends -tags: - - ECMAScript 2015 - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Classes/extends ---- -
{{jsSidebar("Classes")}}
- -

Le mot-clé extends est utilisé dans les déclarations et expressions de classes afin de signifier qu'un type représenté par une classe hérite d'un autre type.

- - - -
{{EmbedInteractiveExample("pages/js/classes-extends.html", "taller")}}
- -

Syntaxe

- -
class ClasseFille extends ClasseParente { ... }
-
- -

Description

- -

Le mot-clé extends peut être utilisé pour créer des sous-classes de classes existantes (natives ou non).

- -

La propriété .prototype d'une classe fille (aussi appelée une extension) doit être un {{jsxref("Object")}} ou {{jsxref("null")}}.

- -

Exemples

- -

Utiliser extends

- -

Ce fragment de code est tiré de cet exemple et crée une classe Carré qui hérite de Polygone :

- -
class Carré extends Polygone {
-  constructor(longueur) {
-    // On utilise le constructeur de la classe parente
-    // avec le mot-clé super
-    super(longueur, longueur);
-    // Pour les classes dérivées, super() doit être appelé avant de
-    // pouvoir utiliser 'this' sinon cela provoque une exception
-    // ReferenceError
-    this.nom = 'Carré';
-  }
-
-  get aire() {
-    return this.hauteur * this.largeur;
-  }
-
-}
- -

Utiliser extends avec des objets natifs

- -

Dans l'exemple suivant, on crée l'équivalent d'une sous-classe pour {{jsxref("Date")}} :

- -
class maDate extends Date {
-  constructor() {
-    super();
-  }
-
-  getFormattedDate() {
-    var mois = ['Jan','Fév','Mar','Avr','Mai','Juin','Juil','Août','Sep','Oct','Nov','Déc'];
-    return this.getDate() + "-" + mois[this.getMonth()] + "-" + this.getFullYear();
-  }
-}
- -

Ces exemples sont extraits de ces deux pages : démonstration, source.

- -

Étendre null

- -

Étendre {{jsxref("null")}} se fait comme avec une classe normale sauf que l'objet prototype n'hérite pas de {{jsxref("Object.prototype")}}.

- -
class extensionNull extends null {
-  constructor() {}
-}
-
-Object.getPrototypeOf(extensionNull); // Function.prototype
-Object.getPrototypeOf(extensionNull.prototype); // null
-
-new extensionNull(); // ReferenceError
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'extends')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-class-definitions', 'extends')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/classes/extends/index.md b/files/fr/web/javascript/reference/classes/extends/index.md new file mode 100644 index 0000000000..8e3af50594 --- /dev/null +++ b/files/fr/web/javascript/reference/classes/extends/index.md @@ -0,0 +1,114 @@ +--- +title: extends +slug: Web/JavaScript/Reference/Classes/extends +tags: + - ECMAScript 2015 + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Classes/extends +--- +
{{jsSidebar("Classes")}}
+ +

Le mot-clé extends est utilisé dans les déclarations et expressions de classes afin de signifier qu'un type représenté par une classe hérite d'un autre type.

+ + + +
{{EmbedInteractiveExample("pages/js/classes-extends.html", "taller")}}
+ +

Syntaxe

+ +
class ClasseFille extends ClasseParente { ... }
+
+ +

Description

+ +

Le mot-clé extends peut être utilisé pour créer des sous-classes de classes existantes (natives ou non).

+ +

La propriété .prototype d'une classe fille (aussi appelée une extension) doit être un {{jsxref("Object")}} ou {{jsxref("null")}}.

+ +

Exemples

+ +

Utiliser extends

+ +

Ce fragment de code est tiré de cet exemple et crée une classe Carré qui hérite de Polygone :

+ +
class Carré extends Polygone {
+  constructor(longueur) {
+    // On utilise le constructeur de la classe parente
+    // avec le mot-clé super
+    super(longueur, longueur);
+    // Pour les classes dérivées, super() doit être appelé avant de
+    // pouvoir utiliser 'this' sinon cela provoque une exception
+    // ReferenceError
+    this.nom = 'Carré';
+  }
+
+  get aire() {
+    return this.hauteur * this.largeur;
+  }
+
+}
+ +

Utiliser extends avec des objets natifs

+ +

Dans l'exemple suivant, on crée l'équivalent d'une sous-classe pour {{jsxref("Date")}} :

+ +
class maDate extends Date {
+  constructor() {
+    super();
+  }
+
+  getFormattedDate() {
+    var mois = ['Jan','Fév','Mar','Avr','Mai','Juin','Juil','Août','Sep','Oct','Nov','Déc'];
+    return this.getDate() + "-" + mois[this.getMonth()] + "-" + this.getFullYear();
+  }
+}
+ +

Ces exemples sont extraits de ces deux pages : démonstration, source.

+ +

Étendre null

+ +

Étendre {{jsxref("null")}} se fait comme avec une classe normale sauf que l'objet prototype n'hérite pas de {{jsxref("Object.prototype")}}.

+ +
class extensionNull extends null {
+  constructor() {}
+}
+
+Object.getPrototypeOf(extensionNull); // Function.prototype
+Object.getPrototypeOf(extensionNull.prototype); // null
+
+new extensionNull(); // ReferenceError
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'extends')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-class-definitions', 'extends')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/classes/index.html b/files/fr/web/javascript/reference/classes/index.html deleted file mode 100644 index 33721a3faa..0000000000 --- a/files/fr/web/javascript/reference/classes/index.html +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Classes -slug: Web/JavaScript/Reference/Classes -tags: - - Classes - - ECMAScript 2015 - - Intermédiaire - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Classes ---- -
{{JsSidebar("Classes")}}
- -

Les classes JavaScript ont été introduites avec ECMAScript 2015. Elles sont un « sucre syntaxique » par rapport à l'héritage prototypal. En effet, cette syntaxe n'introduit pas un nouveau modèle d'héritage dans JavaScript ! Elle fournit uniquement une syntaxe plus simple pour créer des objets et manipuler l'héritage.

- -

Définir des classes

- -

En réalité, les classes sont juste des fonctions spéciales. Ainsi, les classes sont définies de la même façon que les fonctions : par déclaration, ou par expression.

- -

Les déclarations de classes

- -

Pour utiliser une déclaration de classe simple, on utilisera le mot-clé class, suivi par le nom de la classe que l'on déclare (ici « Rectangle »).

- -
class Rectangle {
-  constructor(hauteur, largeur) {
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-}
- -

Remontée des déclarations (hoisting)

- -

Les déclarations de fonctions sont remontées dans le code. En revanche, ce n'est pas le cas pour les déclarations de classes. Ainsi, il est nécessaire de déclarer la classe avant de l'instancier. Dans le cas contraire, on obtient une {{jsxref("ReferenceError")}} :

- -
const p = new Rectangle(); // ReferenceError
-
-class Rectangle {}
-
- -

Les expressions de classes

- -

Il est possible d'utiliser des expressions de classes, nommées ou anonymes. Si on utilise un nom dans l'expression, ce nom ne sera accessible que depuis le corps de la classe via la propriété {{jsxref("Function.name", "name")}} (cette valeur ne sera pas directement accessible pour les instances).

- -
// anonyme
-let Rectangle = class {
-  constructor(hauteur, largeur) {
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-};
-
-// nommée
-let Rectangle = class Rectangle {
-  constructor(hauteur, largeur) {
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-};
-
- -
-

Note : Les mêmes règles s'appliquent aux expressions de classes en ce qui concerne la remontée (hoisting) des classes (cf. le paragraphe précédent sur les remontées des déclarations de classe).

-
- -

Corps d'une classe et définition des méthodes

- -

Le corps d'une classe est la partie contenue entre les accolades. C'est dans cette partie que l'on définit les propriétés d'une classe comme ses méthodes et son constructeur.

- -

Mode strict

- -

Le corps des classes, pour les expressions et pour les déclarations de classes, est exécuté en mode strict (autrement dit, le constructeur, les méthodes statiques, le prototype, les accesseurs (getters) et mutateurs (setters) sont exécutés en mode strict).

- -

Constructeur

- -

La méthode constructor est une méthode spéciale qui permet de créer et d'initialiser les objet créés avec une classe. Il ne peut y avoir qu'une seule méthode avec le nom "constructor" pour une classe donnée. Si la classe contient plusieurs occurences d'une méthode constructor, cela provoquera une exception {{jsxref("SyntaxError")}}.

- -

Le constructeur ainsi déclaré peut utiliser le mot-clé super afin d'appeler le constructeur de la classe parente.

- -

Méthodes de prototype

- -

Voir aussi les définitions de méthode.

- -
class Rectangle {
-  constructor(hauteur, largeur) {
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-
-  get area() {
-    return this.calcArea();
-  }
-
-  calcArea() {
-    return this.largeur * this.hauteur;
-  }
-}
-
-const carré = new Rectangle(10, 10);
-
-console.log(carré.area);
- -

Méthodes statiques

- -

Le mot-clé static permet de définir une méthode statique pour une classe. Les méthodes statiques sont appelées par rapport à la classe entière et non par rapport à une instance donnée (ces méthodes ne peuvent pas être appelées « depuis » une instance). Ces méthodes sont généralement utilisées sous formes d'utilitaires au sein d'applications.

- -
class Point {
-  constructor(x, y) {
-    this.x = x;
-    this.y = y;
-  }
-
-  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);
-
-console.log(Point.distance(p1, p2));
- -

Gestion de this pour le prototype et les méthodes statiques

- -

Lorsqu'une méthode statique ou une méthode liée au prototype est appelée sans valeur this, celle-ci vaudra undefined au sein de la fonction. Il n'y aura pas d'autodétermination de this (autoboxing en anglais). On aura le même résultat si on invoque ces fonctions dans du code non-strict car les fonctions liées aux classes sont exécutées en mode strict.

- -
class Animal {
-  crie() {
-    return this;
-  }
-  static mange() {
-    return this;
-  }
-}
-
-let obj = new Animal();
-obj.crie(); // Animal {}
-let crie = obj.crie;
-crie(); // undefined
-
-Animal.mange(); // class Animal
-let mange = Animal.mange;
-mange(); // undefined
- -

Si on écrit le code avec des fonctions traditionnelles plutôt qu'avec des classes et qu'on utilise le mode non-strict, l'autodétermination de this sera faite en fonction du contexte dans lequel la fonction a été appelée. Si la valeur initiale est undefined, this correspondra à l'objet global.

- -

L'autodétermination de this n'a pas lieu en mode strict, la valeur this est passée telle quelle.

- -
function Animal() { }
-
-Animal.prototype.crie = function() {
-  return this;
-}
-
-Animal.mange = function() {
-  return this;
-}
-
-let obj = new Animal();
-let crie = obj.crie;
-crie(); // l'objet global
-
-let mange = Animal.mange;
-mange(); // l'objet global
-
- -

Propriétés des instances

- -

Les propriétés des instances doivent être définies dans les méthodes de la classe :

- -
class Rectangle {
-  constructor(hauteur, largeur) {
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-}
- -

Les propriétés statiques ou les données relatives au prototype doivent être définies en dehors de la déclaration comportant le corps de la classe :

- -
Rectangle.largeurStatique = 20;
-Rectangle.prototype.largeurProto = 25;
- -

Déclarations de champs

- -

{{SeeCompatTable}}

- -
-

Attention : Les déclarations de champs publics et privés sont une fonctionnalité expérimentale actuellement proposée pour être intégrée dans le standard ECMAScript. Elle n'est pas implémentée par la majorité des navigateurs mais on peut émuler cette fonctionnalité en utilisant un système de compilation tel que Babel.

-
- -

Déclarations de champs publics

- -

En utilisant la syntaxe pour la déclaration des champs, on peut réécrire l'exemple précédent de la façon suivante :

- -
class Rectangle {
-  hauteur = 0;
-  largeur;
-  constructor(hauteur, largeur) {
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-}
- -

En déclarant les champs en préalable, il est plus facile de comprendre la classe dans son ensemble. De plus, on s'assure que les champs soient toujours présents.

- -

Comme on peut le voir dans cet exemple, les champs peuvent éventuellement être déclarés avec une valeur par défaut.

- -

Déclarations de champs privés

- -

En utilisant des champs privés, on peut revoir la définition de la façon suivante :

- -
class Rectangle {
-  #hauteur = 0;
-  #largeur;
-  constructor(hauteur, largeur){
-    this.#hauteur = hauteur;
-    this.#largeur = largeur;
-  }
-}
- -

Si on utilise les champs privés hors de la classe, cela génèrera une erreur. Ces champs ne peuvent être lus ou modifiés que depuis le corps de la classe. En évitant d'exposer des éléments à l'extérieur, on s'assure que les portions de code qui consomment cette classe n'utilise pas ses détails internes et on peut alors maintenir la classe dans son ensemble et modifier les détails internes si besoin.

- -
-

Note : Les champs privés doivent nécessairement être déclarés en premier dans les déclarations de champ.

-
- -

Il n'est pas possible de créer des champs privés a posteriori au moment où on leur affecterait une valeur. Autrement dit, il est possible de déclarer une variable normale au moment voulu lorsqu'on lui affecte une valeur tandis que pour les champs privés, ces derniers doivent être déclarés (éventuellement initialisés) en amont, au début du corps de la classe.

- -

Créer une sous-classe avec extends

- -

Le mot-clé extends, utilisé dans les déclarations ou les expressions de classes, permet de créer une classe qui hérite d'une autre classe (on parle aussi de « sous-classe » ou de « classe-fille »).

- -
class Animal {
-  constructor(nom) {
-    this.nom = nom;
-  }
-
-  parle() {
-    console.log(`${this.nom} fait du bruit.`);
-  }
-}
-
-class Chien extends Animal {
-  constructor(nom) {
-    super(nom); // appelle le constructeur parent avec le paramètre
-  }
-  parle() {
-    console.log(`${this.nom} aboie.`);
-  }
-}
- -

Si on déclare un constructeur dans une classe fille, on doit utiliser super() avant this.

- -

On peut également étendre des classes plus traditionnelles basées sur des constructeurs fonctionnels :

- -
function Animal (nom) {
-  this.nom = nom;
-}
-Animal.prototype.crie = function () {
-  console.log(`${this.nom} fait du bruit.`);
-}
-
-class Chien extends Animal {
-  crie() {
-    super.crie();
-    console.log(`${this.nom} aboie.`);
-  }
-}
-
-let c = new Chien('Ida');
-c.crie();
-// Ida fait du bruit.
-// Ida aboie.
- -

En revanche, les classes ne permettent pas d'étendre des objets classiques non-constructibles. Si on souhaite créer un lien d'héritage en un objet et une classe, on utilisera {{jsxref("Object.setPrototypeOf()")}} :

- -
const Animal = {
-  crie() {
-    console.log(`${this.nom} fait du bruit.`);
-  }
-};
-
-class Chien {
-  constructor(nom) {
-    this.nom = nom;
-  }
-  crie() {
-    super.crie();
-    console.log(`${this.nom} aboie.`);
-  }
-}
-Object.setPrototypeOf(Chien.prototype, Animal);
-
-let d = new Chien('Ida');
-d.crie();
-// Ida fait du bruit
-// Ida aboie.
- -

Le symbole species

- -

Lorsqu'on souhaite renvoyer des objets {{jsxref("Array")}} avec une sous-classe MonArray, on peut utiliser symbole species pour surcharger le constructeur par défaut.

- -

Par exemple, si, lorsqu'on utilise des méthodes comme {{jsxref("Array.map","map()")}} qui renvoient le constructeur par défaut et qu'on veut qu'elles renvoient Array plutôt que MonArray, on utilisera {{jsxref("Symbol.species")}} :

- -
class MonArray extends Array {
-  // On surcharge species
-  // avec le constructeur Array du parent
-  static get [Symbol.species]() { return Array; }
-}
-let a = new MonArray(1,2,3);
-let mapped = a.map(x => x * x);
-
-console.log(mapped instanceof MonArray); // false
-console.log(mapped instanceof Array);    // true
- -

Utiliser super pour la classe parente

- -

Le mot-clé super est utilisé pour appeler les fonctions rattachées à un objet parent.

- -
class Chat {
-  constructor(nom) {
-    this.nom = nom;
-  }
-
-  parler() {
-    console.log(`${this.nom} fait du bruit.`);
-  }
-}
-
-class Lion extends Chat {
-  parler() {
-    super.parler();
-    console.log(`${this.nom} rugit.`);
-  }
-}
-
- -

Les mix-ins

- -

Les sous-classes abstraites ou mix-ins sont des modèles (templates) pour des classes. Une classe ECMAScript ne peut avoir qu'une seule classe parente et il n'est donc pas possible, par exemple, d'hériter de plusieurs classes dont une classe abstraite. La fonctionnalité dont on souhaite disposer doit être fournie par la classe parente.

- -

Une fonction peut prendre une classe parente en entrée et renvoyer une classe fille qui étend cette classe parente. Cela peut permettre d'émuler les mix-ins avec ECMAScript.

- -
let calculetteMixin = Base => class extends Base {
-  calc() { }
-};
-
-let aleatoireMixin = Base => class extends Base {
-  randomiseur() { }
-};
-
- -

Une classe utilisant ces mix-ins peut alors être écrite de cette façon :

- -
class Toto { }
-class Truc extends calculetteMixin(aleatoireMixin(Toto)) { }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2016')}}
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2017')}}
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Utilisation via l'éditeur multiligne dans Firefox

- -

Une classe ne peut pas être redéfinie. Si vous testez votre code via l'éditeur multiligne JavaScript de Firefox (Outils > Développement web > Editeur multiligne JavaScript) et que vous exécutez à plusieurs reprises votre code avec la définition d'une classe, vous obtiendrez une exception SyntaxError : redeclaration of let <class-name>.

- -

Pour relancer une définition, il faut utiliser le menu Exécuter > Recharger et exécuter. À ce sujet, voir le bug {{bug("1428672")}}.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/classes/index.md b/files/fr/web/javascript/reference/classes/index.md new file mode 100644 index 0000000000..33721a3faa --- /dev/null +++ b/files/fr/web/javascript/reference/classes/index.md @@ -0,0 +1,411 @@ +--- +title: Classes +slug: Web/JavaScript/Reference/Classes +tags: + - Classes + - ECMAScript 2015 + - Intermédiaire + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Classes +--- +
{{JsSidebar("Classes")}}
+ +

Les classes JavaScript ont été introduites avec ECMAScript 2015. Elles sont un « sucre syntaxique » par rapport à l'héritage prototypal. En effet, cette syntaxe n'introduit pas un nouveau modèle d'héritage dans JavaScript ! Elle fournit uniquement une syntaxe plus simple pour créer des objets et manipuler l'héritage.

+ +

Définir des classes

+ +

En réalité, les classes sont juste des fonctions spéciales. Ainsi, les classes sont définies de la même façon que les fonctions : par déclaration, ou par expression.

+ +

Les déclarations de classes

+ +

Pour utiliser une déclaration de classe simple, on utilisera le mot-clé class, suivi par le nom de la classe que l'on déclare (ici « Rectangle »).

+ +
class Rectangle {
+  constructor(hauteur, largeur) {
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+}
+ +

Remontée des déclarations (hoisting)

+ +

Les déclarations de fonctions sont remontées dans le code. En revanche, ce n'est pas le cas pour les déclarations de classes. Ainsi, il est nécessaire de déclarer la classe avant de l'instancier. Dans le cas contraire, on obtient une {{jsxref("ReferenceError")}} :

+ +
const p = new Rectangle(); // ReferenceError
+
+class Rectangle {}
+
+ +

Les expressions de classes

+ +

Il est possible d'utiliser des expressions de classes, nommées ou anonymes. Si on utilise un nom dans l'expression, ce nom ne sera accessible que depuis le corps de la classe via la propriété {{jsxref("Function.name", "name")}} (cette valeur ne sera pas directement accessible pour les instances).

+ +
// anonyme
+let Rectangle = class {
+  constructor(hauteur, largeur) {
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+};
+
+// nommée
+let Rectangle = class Rectangle {
+  constructor(hauteur, largeur) {
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+};
+
+ +
+

Note : Les mêmes règles s'appliquent aux expressions de classes en ce qui concerne la remontée (hoisting) des classes (cf. le paragraphe précédent sur les remontées des déclarations de classe).

+
+ +

Corps d'une classe et définition des méthodes

+ +

Le corps d'une classe est la partie contenue entre les accolades. C'est dans cette partie que l'on définit les propriétés d'une classe comme ses méthodes et son constructeur.

+ +

Mode strict

+ +

Le corps des classes, pour les expressions et pour les déclarations de classes, est exécuté en mode strict (autrement dit, le constructeur, les méthodes statiques, le prototype, les accesseurs (getters) et mutateurs (setters) sont exécutés en mode strict).

+ +

Constructeur

+ +

La méthode constructor est une méthode spéciale qui permet de créer et d'initialiser les objet créés avec une classe. Il ne peut y avoir qu'une seule méthode avec le nom "constructor" pour une classe donnée. Si la classe contient plusieurs occurences d'une méthode constructor, cela provoquera une exception {{jsxref("SyntaxError")}}.

+ +

Le constructeur ainsi déclaré peut utiliser le mot-clé super afin d'appeler le constructeur de la classe parente.

+ +

Méthodes de prototype

+ +

Voir aussi les définitions de méthode.

+ +
class Rectangle {
+  constructor(hauteur, largeur) {
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+
+  get area() {
+    return this.calcArea();
+  }
+
+  calcArea() {
+    return this.largeur * this.hauteur;
+  }
+}
+
+const carré = new Rectangle(10, 10);
+
+console.log(carré.area);
+ +

Méthodes statiques

+ +

Le mot-clé static permet de définir une méthode statique pour une classe. Les méthodes statiques sont appelées par rapport à la classe entière et non par rapport à une instance donnée (ces méthodes ne peuvent pas être appelées « depuis » une instance). Ces méthodes sont généralement utilisées sous formes d'utilitaires au sein d'applications.

+ +
class Point {
+  constructor(x, y) {
+    this.x = x;
+    this.y = y;
+  }
+
+  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);
+
+console.log(Point.distance(p1, p2));
+ +

Gestion de this pour le prototype et les méthodes statiques

+ +

Lorsqu'une méthode statique ou une méthode liée au prototype est appelée sans valeur this, celle-ci vaudra undefined au sein de la fonction. Il n'y aura pas d'autodétermination de this (autoboxing en anglais). On aura le même résultat si on invoque ces fonctions dans du code non-strict car les fonctions liées aux classes sont exécutées en mode strict.

+ +
class Animal {
+  crie() {
+    return this;
+  }
+  static mange() {
+    return this;
+  }
+}
+
+let obj = new Animal();
+obj.crie(); // Animal {}
+let crie = obj.crie;
+crie(); // undefined
+
+Animal.mange(); // class Animal
+let mange = Animal.mange;
+mange(); // undefined
+ +

Si on écrit le code avec des fonctions traditionnelles plutôt qu'avec des classes et qu'on utilise le mode non-strict, l'autodétermination de this sera faite en fonction du contexte dans lequel la fonction a été appelée. Si la valeur initiale est undefined, this correspondra à l'objet global.

+ +

L'autodétermination de this n'a pas lieu en mode strict, la valeur this est passée telle quelle.

+ +
function Animal() { }
+
+Animal.prototype.crie = function() {
+  return this;
+}
+
+Animal.mange = function() {
+  return this;
+}
+
+let obj = new Animal();
+let crie = obj.crie;
+crie(); // l'objet global
+
+let mange = Animal.mange;
+mange(); // l'objet global
+
+ +

Propriétés des instances

+ +

Les propriétés des instances doivent être définies dans les méthodes de la classe :

+ +
class Rectangle {
+  constructor(hauteur, largeur) {
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+}
+ +

Les propriétés statiques ou les données relatives au prototype doivent être définies en dehors de la déclaration comportant le corps de la classe :

+ +
Rectangle.largeurStatique = 20;
+Rectangle.prototype.largeurProto = 25;
+ +

Déclarations de champs

+ +

{{SeeCompatTable}}

+ +
+

Attention : Les déclarations de champs publics et privés sont une fonctionnalité expérimentale actuellement proposée pour être intégrée dans le standard ECMAScript. Elle n'est pas implémentée par la majorité des navigateurs mais on peut émuler cette fonctionnalité en utilisant un système de compilation tel que Babel.

+
+ +

Déclarations de champs publics

+ +

En utilisant la syntaxe pour la déclaration des champs, on peut réécrire l'exemple précédent de la façon suivante :

+ +
class Rectangle {
+  hauteur = 0;
+  largeur;
+  constructor(hauteur, largeur) {
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+}
+ +

En déclarant les champs en préalable, il est plus facile de comprendre la classe dans son ensemble. De plus, on s'assure que les champs soient toujours présents.

+ +

Comme on peut le voir dans cet exemple, les champs peuvent éventuellement être déclarés avec une valeur par défaut.

+ +

Déclarations de champs privés

+ +

En utilisant des champs privés, on peut revoir la définition de la façon suivante :

+ +
class Rectangle {
+  #hauteur = 0;
+  #largeur;
+  constructor(hauteur, largeur){
+    this.#hauteur = hauteur;
+    this.#largeur = largeur;
+  }
+}
+ +

Si on utilise les champs privés hors de la classe, cela génèrera une erreur. Ces champs ne peuvent être lus ou modifiés que depuis le corps de la classe. En évitant d'exposer des éléments à l'extérieur, on s'assure que les portions de code qui consomment cette classe n'utilise pas ses détails internes et on peut alors maintenir la classe dans son ensemble et modifier les détails internes si besoin.

+ +
+

Note : Les champs privés doivent nécessairement être déclarés en premier dans les déclarations de champ.

+
+ +

Il n'est pas possible de créer des champs privés a posteriori au moment où on leur affecterait une valeur. Autrement dit, il est possible de déclarer une variable normale au moment voulu lorsqu'on lui affecte une valeur tandis que pour les champs privés, ces derniers doivent être déclarés (éventuellement initialisés) en amont, au début du corps de la classe.

+ +

Créer une sous-classe avec extends

+ +

Le mot-clé extends, utilisé dans les déclarations ou les expressions de classes, permet de créer une classe qui hérite d'une autre classe (on parle aussi de « sous-classe » ou de « classe-fille »).

+ +
class Animal {
+  constructor(nom) {
+    this.nom = nom;
+  }
+
+  parle() {
+    console.log(`${this.nom} fait du bruit.`);
+  }
+}
+
+class Chien extends Animal {
+  constructor(nom) {
+    super(nom); // appelle le constructeur parent avec le paramètre
+  }
+  parle() {
+    console.log(`${this.nom} aboie.`);
+  }
+}
+ +

Si on déclare un constructeur dans une classe fille, on doit utiliser super() avant this.

+ +

On peut également étendre des classes plus traditionnelles basées sur des constructeurs fonctionnels :

+ +
function Animal (nom) {
+  this.nom = nom;
+}
+Animal.prototype.crie = function () {
+  console.log(`${this.nom} fait du bruit.`);
+}
+
+class Chien extends Animal {
+  crie() {
+    super.crie();
+    console.log(`${this.nom} aboie.`);
+  }
+}
+
+let c = new Chien('Ida');
+c.crie();
+// Ida fait du bruit.
+// Ida aboie.
+ +

En revanche, les classes ne permettent pas d'étendre des objets classiques non-constructibles. Si on souhaite créer un lien d'héritage en un objet et une classe, on utilisera {{jsxref("Object.setPrototypeOf()")}} :

+ +
const Animal = {
+  crie() {
+    console.log(`${this.nom} fait du bruit.`);
+  }
+};
+
+class Chien {
+  constructor(nom) {
+    this.nom = nom;
+  }
+  crie() {
+    super.crie();
+    console.log(`${this.nom} aboie.`);
+  }
+}
+Object.setPrototypeOf(Chien.prototype, Animal);
+
+let d = new Chien('Ida');
+d.crie();
+// Ida fait du bruit
+// Ida aboie.
+ +

Le symbole species

+ +

Lorsqu'on souhaite renvoyer des objets {{jsxref("Array")}} avec une sous-classe MonArray, on peut utiliser symbole species pour surcharger le constructeur par défaut.

+ +

Par exemple, si, lorsqu'on utilise des méthodes comme {{jsxref("Array.map","map()")}} qui renvoient le constructeur par défaut et qu'on veut qu'elles renvoient Array plutôt que MonArray, on utilisera {{jsxref("Symbol.species")}} :

+ +
class MonArray extends Array {
+  // On surcharge species
+  // avec le constructeur Array du parent
+  static get [Symbol.species]() { return Array; }
+}
+let a = new MonArray(1,2,3);
+let mapped = a.map(x => x * x);
+
+console.log(mapped instanceof MonArray); // false
+console.log(mapped instanceof Array);    // true
+ +

Utiliser super pour la classe parente

+ +

Le mot-clé super est utilisé pour appeler les fonctions rattachées à un objet parent.

+ +
class Chat {
+  constructor(nom) {
+    this.nom = nom;
+  }
+
+  parler() {
+    console.log(`${this.nom} fait du bruit.`);
+  }
+}
+
+class Lion extends Chat {
+  parler() {
+    super.parler();
+    console.log(`${this.nom} rugit.`);
+  }
+}
+
+ +

Les mix-ins

+ +

Les sous-classes abstraites ou mix-ins sont des modèles (templates) pour des classes. Une classe ECMAScript ne peut avoir qu'une seule classe parente et il n'est donc pas possible, par exemple, d'hériter de plusieurs classes dont une classe abstraite. La fonctionnalité dont on souhaite disposer doit être fournie par la classe parente.

+ +

Une fonction peut prendre une classe parente en entrée et renvoyer une classe fille qui étend cette classe parente. Cela peut permettre d'émuler les mix-ins avec ECMAScript.

+ +
let calculetteMixin = Base => class extends Base {
+  calc() { }
+};
+
+let aleatoireMixin = Base => class extends Base {
+  randomiseur() { }
+};
+
+ +

Une classe utilisant ces mix-ins peut alors être écrite de cette façon :

+ +
class Toto { }
+class Truc extends calculetteMixin(aleatoireMixin(Toto)) { }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2016')}}
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2017')}}
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Utilisation via l'éditeur multiligne dans Firefox

+ +

Une classe ne peut pas être redéfinie. Si vous testez votre code via l'éditeur multiligne JavaScript de Firefox (Outils > Développement web > Editeur multiligne JavaScript) et que vous exécutez à plusieurs reprises votre code avec la définition d'une classe, vous obtiendrez une exception SyntaxError : redeclaration of let <class-name>.

+ +

Pour relancer une définition, il faut utiliser le menu Exécuter > Recharger et exécuter. À ce sujet, voir le bug {{bug("1428672")}}.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/classes/private_class_fields/index.html b/files/fr/web/javascript/reference/classes/private_class_fields/index.html deleted file mode 100644 index 9d1187b01d..0000000000 --- a/files/fr/web/javascript/reference/classes/private_class_fields/index.html +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: Variables de classe privés -slug: Web/JavaScript/Reference/Classes/Private_class_fields -tags: - - Classe - - Fonctionnalité du langage - - JavaScript -translation_of: Web/JavaScript/Reference/Classes/Private_class_fields ---- -
{{JsSidebar("Classes")}}
- -
Les propriétés de classe sont publiques par défaut et peuvent être lues et modifiées à l'extérieur de la classe. Cependant, une proposition expérimentale, permettant de définir des variables privées dans une classe avec le préfixe #, est disponible.
- -

Syntaxe

- -
class ClassWithPrivateField {
-  #privateField
-}
-
-class ClassWithPrivateMethod {
-  #privateMethod() {
-    return 'hello world'
- }
-}
-
-class ClassWithPrivateStaticField {
-  static #PRIVATE_STATIC_FIELD
-}
-
- -

Exemples

- -

Champs privés statiques

- -

Les champs privés sont accessibles depuis le constructeur et depuis l'intérieur de la déclaration de la classe elle-même.

- -

La limitation des variables statiques ne pouvant être appelées que par des méthodes statiques tient toujours.

- -
class ClassWithPrivateStaticField {
-  static #PRIVATE_STATIC_FIELD
-
-  static publicStaticMethod() {
-    ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42
-    return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD
-  }
-}
-
-console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42)
- -

Les champs statiques privés sont ajoutés au constructeur de la classe au moment de l'évaluation de classe..

- -

Il y a une restriction de provenance sur les champs statiques privés. Seule la classe qui a défini un champ statique privé peut y accéder.

- -

Ceci peut conduire à un comportement inattendu lors de l'utilisation de this.

- -
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)
-
- -

Champs d'instance privés

- -

Les champs d'instance privés sont déclarés avec des noms à # (prononcés "noms à hash", "hash names" en anglais), qui sont des identifieurs préfixés par #. Le # fait partie du nom lui-même. Il est utilisé tant pour la déclaration que pour l'accès.

- -

L'encapsulation est forcée par le langage. C'est une erreur de syntaxe que de faire référence aux noms à # en dehors de leur portée.

- -
class ClassWithPrivateField {
-  #privateField
-
-  constructor() {
-    this.#privateField = 42
-    this.#randomField = 666 // Erreur de syntaxe
-  }
-}
-
-const instance = new ClassWithPrivateField()
-instance.#privateField === 42 // Erreur de syntaxe
-
- -

Méthodes Privées

- -

Méthodes statiques privées

- -

Comme leur équivalents publics, les méthodes statiques privées sont appelées dans la classe elle-même, pas dans les instances de la classe. Comme les champs statiques privés, elles ne sont accessibles que depuis l'intérieur de la déclaration de la classe.

- -

Les méthodes statiques privées peuvent être des fonctions génératrices, asynchrones et génératrices asynchrones.

- -
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);
-
- -

Cela peut conduire à un comportement inattendu lors de l'utilisation de this. Dans l'exemple suivant, this fait référence à la classe Derived (pas à la classe Base) lorsqu'on essaie d'appeler Derived.publicStaticMethod2(), et fait ainsi apparaître la même "restriction de provenance" que mentionné ci-dessus :

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

Méthodes d'instance privées

- -

Les méthodes d'instance privées sont des méthodes disponibles dans les instances de classe privées, dont l'accès est restreint de la même manière que les champs d'instance privés.

- -
class ClassWithPrivateMethod {
-  #privateMethod() {
-    return 'hello world'
-  }
-
-  getPrivateMessage() {
-      return this.#privateMethod()
-  }
-}
-
-const instance = new ClassWithPrivateMethod()
-console.log(instance.getPrivateMessage())
-// expected output: "hello worl​d"
- -

Les méthodes d'instance privées peuvent être des fonctions génératrices, asynchones ou génératrices asynchrones. Des accesseurs (getters) et des mutateurs (setters) privés sont aussi posibles :

- -
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✨"
-
- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}
- -

Compatibilité des navigateurs

- - - -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/classes/private_class_fields/index.md b/files/fr/web/javascript/reference/classes/private_class_fields/index.md new file mode 100644 index 0000000000..9d1187b01d --- /dev/null +++ b/files/fr/web/javascript/reference/classes/private_class_fields/index.md @@ -0,0 +1,207 @@ +--- +title: Variables de classe privés +slug: Web/JavaScript/Reference/Classes/Private_class_fields +tags: + - Classe + - Fonctionnalité du langage + - JavaScript +translation_of: Web/JavaScript/Reference/Classes/Private_class_fields +--- +
{{JsSidebar("Classes")}}
+ +
Les propriétés de classe sont publiques par défaut et peuvent être lues et modifiées à l'extérieur de la classe. Cependant, une proposition expérimentale, permettant de définir des variables privées dans une classe avec le préfixe #, est disponible.
+ +

Syntaxe

+ +
class ClassWithPrivateField {
+  #privateField
+}
+
+class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world'
+ }
+}
+
+class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+}
+
+ +

Exemples

+ +

Champs privés statiques

+ +

Les champs privés sont accessibles depuis le constructeur et depuis l'intérieur de la déclaration de la classe elle-même.

+ +

La limitation des variables statiques ne pouvant être appelées que par des méthodes statiques tient toujours.

+ +
class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+
+  static publicStaticMethod() {
+    ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42
+    return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD
+  }
+}
+
+console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42)
+ +

Les champs statiques privés sont ajoutés au constructeur de la classe au moment de l'évaluation de classe..

+ +

Il y a une restriction de provenance sur les champs statiques privés. Seule la classe qui a défini un champ statique privé peut y accéder.

+ +

Ceci peut conduire à un comportement inattendu lors de l'utilisation de this.

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

Champs d'instance privés

+ +

Les champs d'instance privés sont déclarés avec des noms à # (prononcés "noms à hash", "hash names" en anglais), qui sont des identifieurs préfixés par #. Le # fait partie du nom lui-même. Il est utilisé tant pour la déclaration que pour l'accès.

+ +

L'encapsulation est forcée par le langage. C'est une erreur de syntaxe que de faire référence aux noms à # en dehors de leur portée.

+ +
class ClassWithPrivateField {
+  #privateField
+
+  constructor() {
+    this.#privateField = 42
+    this.#randomField = 666 // Erreur de syntaxe
+  }
+}
+
+const instance = new ClassWithPrivateField()
+instance.#privateField === 42 // Erreur de syntaxe
+
+ +

Méthodes Privées

+ +

Méthodes statiques privées

+ +

Comme leur équivalents publics, les méthodes statiques privées sont appelées dans la classe elle-même, pas dans les instances de la classe. Comme les champs statiques privés, elles ne sont accessibles que depuis l'intérieur de la déclaration de la classe.

+ +

Les méthodes statiques privées peuvent être des fonctions génératrices, asynchrones et génératrices asynchrones.

+ +
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);
+
+ +

Cela peut conduire à un comportement inattendu lors de l'utilisation de this. Dans l'exemple suivant, this fait référence à la classe Derived (pas à la classe Base) lorsqu'on essaie d'appeler Derived.publicStaticMethod2(), et fait ainsi apparaître la même "restriction de provenance" que mentionné ci-dessus :

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

Méthodes d'instance privées

+ +

Les méthodes d'instance privées sont des méthodes disponibles dans les instances de classe privées, dont l'accès est restreint de la même manière que les champs d'instance privés.

+ +
class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world'
+  }
+
+  getPrivateMessage() {
+      return this.#privateMethod()
+  }
+}
+
+const instance = new ClassWithPrivateMethod()
+console.log(instance.getPrivateMessage())
+// expected output: "hello worl​d"
+ +

Les méthodes d'instance privées peuvent être des fonctions génératrices, asynchones ou génératrices asynchrones. Des accesseurs (getters) et des mutateurs (setters) privés sont aussi posibles :

+ +
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✨"
+
+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}
+ +

Compatibilité des navigateurs

+ + + +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/classes/public_class_fields/index.html b/files/fr/web/javascript/reference/classes/public_class_fields/index.html deleted file mode 100644 index 80b3096c8a..0000000000 --- a/files/fr/web/javascript/reference/classes/public_class_fields/index.html +++ /dev/null @@ -1,265 +0,0 @@ ---- -title: Champs de classe publics -slug: Web/JavaScript/Reference/Classes/Public_class_fields -tags: - - Classes - - Fonctionnalité du langage - - JavaScript -translation_of: Web/JavaScript/Reference/Classes/Public_class_fields -original_slug: Web/JavaScript/Reference/Classes/Class_fields ---- -
{{JsSidebar("Classes")}}{{SeeCompatTable}}
- -
-

Note : Cette page décrit des fonctionnalités expérimentales.

- -

Les déclarations de champs, tant publics que privés, sont une fonctionnalité expérimentale (étape 3) proposée au TC39, le comité des standards JavaScript.

- -

La prise en charge dans les navigateurs est limitée, mais cette fonctionnalité peut être utilisée à travers une étape de contruction avec des systèmes tels que Babel. Voir l'information de compatibilité ci-dessous.

-
- -

Les champs publics, tant statiques que d'instance, sont des propriétés qui peuvent être écrites, et qui sont énumérables et configurables. En tant que telles, à la différence de leurs contreparties privées, elles participent à l'héritage du prototype.

- -

Syntaxe

- -
class ClasseAvecChampDInstance {
-  champDInstance = 'champ d\'instance'
-}
-
-class ClasseAvecChampStatique {
-  static champStatique = 'champ statique'
-}
-
-class ClasseAvecMethodeDInstancePublique {
-  methodePublique() {
-    return 'hello world'
-  }
-}
-
- -

Exemples

- -

Champs statiques publics

- -

Les champs statiques publics sont utiles lorsque vous voulez qu'un champ n'existe qu'une seule fois par classe, pas dans chaque instance que vous créez. Cela est utile pour des caches, une configuration fixe, ou tout autres données dont vous n'avez pas besoin qu'elles soient répliquées à travers les instances.

- -

Les champs statiques publics sont déclarés en utilisant le mot-clé static. Ils sont ajoutés au constructeur de la classe au moment de l'évaluation de la classe en utilisant {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}}. On y accède à nouveau à partir du constructeur de la classe.

- -
class ClasseAvecChampStatique {
-  static champStatique = 'champ statique'
-}
-
-console.log(ClasseAvecChampStatique.champStatique)
-// affichage attendu : "champ statique"​
-
- -

Les champs sans initialiseur sont initialisés à undefined.

- -
class ClasseAvecChampStatique {
-  static champStatique
-}
-
-console.assert(ClasseAvecChampStatique.hasOwnProperty('champStatique'))
-console.log(ClasseAvecChampStatique.champStatique)
-// affichage attendu : "undefined"
- -

Les champs statiques publics ne sont pas réinitialisés dans les sous-classes, mais on peut y accéder via la chaîne de prototypes.

- -
class ClasseAvecChampStatique {
-  static champStatiqueDeBase = 'champ de base'
-}
-
-class SousClasseAvecChampStatique extends ClasseAvecChampStatique {
-  static sousChampStatique = 'champ de la sous-classe'
-}
-
-console.log(SousClasseAvecChampStatique.sousChampStatique)
-// affichage attendu : "champ de la sous-classe"
-
-console.log(SousClasseAvecChampStatique.champStatiqueDeBase)
-// affichage attendu : "champ de base"
- -

Lors de l'initialisation des champs, this fait référence au constructeur de la classe. Vous pouvez aussi le référencer par son nom, et utiliser super pour obtenir le constructeur de la superclasse (s'il en existe un) :

- -
class ClasseAvecChampStatique {
-  static champStatiqueDeBase = 'champ statique de base'
-  static autreChampStatiqueDeBase = this.champStatiqueDeBase
-
-  static methodeStatiqueDeBase() { return 'affichage de la méthode statique de base' }
-}
-
-class SousClasseAvecChampStatique extends ClasseAvecChampStatique {
-  static sousChampStatique = super.methodeStatiqueDeBase()
-}
-
-console.log(ClasseAvecChampStatique.autreChampStatiqueDeBase)
-// affichage attendu : "champ statique de base"
-
-console.log(SousClasseAvecChampStatique.sousChampStatique)
-// affichage attendu : "affichage de la méthode statique de base"
-
- -

Champs d'instance publics

- -

Les champs d'instance publics existent dans chaque instance créée d'une classe. En déclarant un champ public, vous pouvez vous assurer que le champ est toujours présent, et que la définition de la classe est davantage auto-documentée.

- -

Les champs d'instance publics sont ajoutés grâce à {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}}, soit au moment de la construction dans la classe de base (avant que le corps du constructeur ne soit exécuté), soit juste après le retour de super() dans une sous-classe.

- -
class ClasseAvecChampDInstance {
-  champDInstance = 'champ d\'instance'
-}
-
-const instance = new ClasseAvecChampDInstance()
-console.log(instance.champDInstance)
-// affichage attendu : "champ d'instance"
- -

Les champs sans initialiseur sont initialisés à undefined.

- -
class ClasseAvecChampDInstance {
-  champdDInstance
-}
-
-const instance = new ClasseAvecChampDInstance()
-console.assert(instance.hasOwnProperty('champDInstance'))
-console.log(instance.champDInstance);
-// affichage attendu : "undefined"
- -

À l'instar des propriétés, les noms de champ peuvent être calculés :

- -
const PREFIXE = 'prefixe';
-
-class ClasseAvecNomDeChampCalcule {
-    [`${PREFIXE}Champ`] = 'champ préfixé'
-}
-
-const instance = new ClasseAvecNomDeChampCalcule()
-console.log(instance.prefixeChamp)
-// affichage attendu : "champ préfixé"
- -

Lors de l'initialisation des champs, this fait référence à l'instance en cours de construction. Tout comme dans les méthodes d'instance publiques, si vous êtes dans une sous-classe, vous pouvez accéder au prototype de la superclasse en utilisant super.

- -
class ClasseAvecChampDInstance {
-  champDInstanceDeBase = 'champ de base'
-  autreChampDInstanceDeBase = this.champDInstanceDeBase
-  methodeDInstanceDeBase() { return 'affichage de la méthode de base' }
-}
-
-class SousClasseAvecChampDInstance extends ClasseAvecChampDInstance {
-  sousChampDInstance = super.methodeDInstanceDeBase()
-}
-
-const base = new ClasseAvecChampDInstance()
-const sous = new SousClasseAvecChampDInstance()
-
-console.log(base.autreChampDInstanceDeBase)
-// affichage attendu : "champ de base"
-
-console.log(sous.sousChampDInstance)
-// affichage attendu : "affichage de la méthode de base"
- -

Méthodes publiques

- -

Méthodes statiques publiques

- -

Le mot-clé static définit une méthode statique pour une classe. Les méthodes statiques ne sont pas appelées dans les instances de la classe. A la place, elles le sont dans la classe elle-même. Ce sont souvent des méthodes utilitaires, comme des fonctions pour créer ou cloner des objets.

- -
class ClasseAvecMethodeStatique {
-  static methodeStatique() {
-    return 'la méthode statique a été appelée.';
-  }
-}
-
-console.log(ClasseAvecMethodeStatique.methodeStatique());
-// affichage attendu : "la méthode statique a été appelée."
- -

Les méthodes statiques sont ajoutées au constructeur de la classe grâce à {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}} au moment de l'évaluation de la classe. Ces méthodes peuvent être écrites, ne sont pas énumérables et sont configurables.

- -

Méthodes d'instance publiques

- -

Comme leur nom l'implique, les méthodes d'instance publiques sont des fonctions disponibles dans les instances de la classe.

- -
class ClasseAvecMethodeDInstancePublique {
-  methodePublique() {
-    return 'hello world'
-  }
-}
-
-const instance = new ClasseAvecMethodeDInstancePublique()
-console.log(instance.methodePublique())
-// affichage attendu : "hello worl​d"
- -

Les méthodes d'instance publiques sont ajoutées au prototype au moment de l'évaluation de la classe en utilisant {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}}. Elles peuvent être écrites, ne sont pas énumérables et sont configurables.

- -

Vous pouvez utiliser des fonctions génératrices, asynchrones et génératrices asynchrones.

- -
class ClasseAvecMethodesFantaisie {
-  *methodeGeneratrice() { }
-  async methodeAsynchrone() { }
-  async *methodeGeneratriceAsynchrone() { }
-}
- -

A l'intérieur des méthodes d'instance, this fait référence à l'instance elle-même. Dans les sous-classes, super vous donne accès au prototype de la superclasse, ce qui vous permet d'appeler les méthodes de la superclasse.

- -
class ClasseDeBase {
-  msg = 'hello world'
-  methodePubliqueDeBase() {
-    return this.msg
-  }
-}
-
-class SousClasse extends ClasseDeBase {
-  sousMethodePublique() {
-    return super.methodePubliqueDeBase()
-  }
-}
-
-const instance = new SousClasse()
-console.log(instance.sousMethodePublique())
-// affichage attendu : "hello worl​d"
-
- -

Les accesseurs et les mutateurs sont des méthodes spéciales qui sont liées à une propriété de classe, et sont appelées lorsqu'on accède à cette propriété ou qu'on la définit. Utilisez la syntaxe get et set pour déclarer un accesseur ou un mutateur publique d'une instance.

- -
class ClasseAvecGetSet {
-  #msg = 'hello world'
-  get msg() {
-    return this.#msg
-  }
-  set msg(x) {
-    this.#msg = `hello ${x}`
-  }
-}
-
-const instance = new ClasseAvecGetSet();
-console.log(instance.msg);
-// affichage attendu : "hello worl​d"
-
-instance.msg = 'gâteau';
-console.log(instance.msg);
-// affichage attendu : "hello gâteau"
-
- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/classes/public_class_fields/index.md b/files/fr/web/javascript/reference/classes/public_class_fields/index.md new file mode 100644 index 0000000000..80b3096c8a --- /dev/null +++ b/files/fr/web/javascript/reference/classes/public_class_fields/index.md @@ -0,0 +1,265 @@ +--- +title: Champs de classe publics +slug: Web/JavaScript/Reference/Classes/Public_class_fields +tags: + - Classes + - Fonctionnalité du langage + - JavaScript +translation_of: Web/JavaScript/Reference/Classes/Public_class_fields +original_slug: Web/JavaScript/Reference/Classes/Class_fields +--- +
{{JsSidebar("Classes")}}{{SeeCompatTable}}
+ +
+

Note : Cette page décrit des fonctionnalités expérimentales.

+ +

Les déclarations de champs, tant publics que privés, sont une fonctionnalité expérimentale (étape 3) proposée au TC39, le comité des standards JavaScript.

+ +

La prise en charge dans les navigateurs est limitée, mais cette fonctionnalité peut être utilisée à travers une étape de contruction avec des systèmes tels que Babel. Voir l'information de compatibilité ci-dessous.

+
+ +

Les champs publics, tant statiques que d'instance, sont des propriétés qui peuvent être écrites, et qui sont énumérables et configurables. En tant que telles, à la différence de leurs contreparties privées, elles participent à l'héritage du prototype.

+ +

Syntaxe

+ +
class ClasseAvecChampDInstance {
+  champDInstance = 'champ d\'instance'
+}
+
+class ClasseAvecChampStatique {
+  static champStatique = 'champ statique'
+}
+
+class ClasseAvecMethodeDInstancePublique {
+  methodePublique() {
+    return 'hello world'
+  }
+}
+
+ +

Exemples

+ +

Champs statiques publics

+ +

Les champs statiques publics sont utiles lorsque vous voulez qu'un champ n'existe qu'une seule fois par classe, pas dans chaque instance que vous créez. Cela est utile pour des caches, une configuration fixe, ou tout autres données dont vous n'avez pas besoin qu'elles soient répliquées à travers les instances.

+ +

Les champs statiques publics sont déclarés en utilisant le mot-clé static. Ils sont ajoutés au constructeur de la classe au moment de l'évaluation de la classe en utilisant {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}}. On y accède à nouveau à partir du constructeur de la classe.

+ +
class ClasseAvecChampStatique {
+  static champStatique = 'champ statique'
+}
+
+console.log(ClasseAvecChampStatique.champStatique)
+// affichage attendu : "champ statique"​
+
+ +

Les champs sans initialiseur sont initialisés à undefined.

+ +
class ClasseAvecChampStatique {
+  static champStatique
+}
+
+console.assert(ClasseAvecChampStatique.hasOwnProperty('champStatique'))
+console.log(ClasseAvecChampStatique.champStatique)
+// affichage attendu : "undefined"
+ +

Les champs statiques publics ne sont pas réinitialisés dans les sous-classes, mais on peut y accéder via la chaîne de prototypes.

+ +
class ClasseAvecChampStatique {
+  static champStatiqueDeBase = 'champ de base'
+}
+
+class SousClasseAvecChampStatique extends ClasseAvecChampStatique {
+  static sousChampStatique = 'champ de la sous-classe'
+}
+
+console.log(SousClasseAvecChampStatique.sousChampStatique)
+// affichage attendu : "champ de la sous-classe"
+
+console.log(SousClasseAvecChampStatique.champStatiqueDeBase)
+// affichage attendu : "champ de base"
+ +

Lors de l'initialisation des champs, this fait référence au constructeur de la classe. Vous pouvez aussi le référencer par son nom, et utiliser super pour obtenir le constructeur de la superclasse (s'il en existe un) :

+ +
class ClasseAvecChampStatique {
+  static champStatiqueDeBase = 'champ statique de base'
+  static autreChampStatiqueDeBase = this.champStatiqueDeBase
+
+  static methodeStatiqueDeBase() { return 'affichage de la méthode statique de base' }
+}
+
+class SousClasseAvecChampStatique extends ClasseAvecChampStatique {
+  static sousChampStatique = super.methodeStatiqueDeBase()
+}
+
+console.log(ClasseAvecChampStatique.autreChampStatiqueDeBase)
+// affichage attendu : "champ statique de base"
+
+console.log(SousClasseAvecChampStatique.sousChampStatique)
+// affichage attendu : "affichage de la méthode statique de base"
+
+ +

Champs d'instance publics

+ +

Les champs d'instance publics existent dans chaque instance créée d'une classe. En déclarant un champ public, vous pouvez vous assurer que le champ est toujours présent, et que la définition de la classe est davantage auto-documentée.

+ +

Les champs d'instance publics sont ajoutés grâce à {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}}, soit au moment de la construction dans la classe de base (avant que le corps du constructeur ne soit exécuté), soit juste après le retour de super() dans une sous-classe.

+ +
class ClasseAvecChampDInstance {
+  champDInstance = 'champ d\'instance'
+}
+
+const instance = new ClasseAvecChampDInstance()
+console.log(instance.champDInstance)
+// affichage attendu : "champ d'instance"
+ +

Les champs sans initialiseur sont initialisés à undefined.

+ +
class ClasseAvecChampDInstance {
+  champdDInstance
+}
+
+const instance = new ClasseAvecChampDInstance()
+console.assert(instance.hasOwnProperty('champDInstance'))
+console.log(instance.champDInstance);
+// affichage attendu : "undefined"
+ +

À l'instar des propriétés, les noms de champ peuvent être calculés :

+ +
const PREFIXE = 'prefixe';
+
+class ClasseAvecNomDeChampCalcule {
+    [`${PREFIXE}Champ`] = 'champ préfixé'
+}
+
+const instance = new ClasseAvecNomDeChampCalcule()
+console.log(instance.prefixeChamp)
+// affichage attendu : "champ préfixé"
+ +

Lors de l'initialisation des champs, this fait référence à l'instance en cours de construction. Tout comme dans les méthodes d'instance publiques, si vous êtes dans une sous-classe, vous pouvez accéder au prototype de la superclasse en utilisant super.

+ +
class ClasseAvecChampDInstance {
+  champDInstanceDeBase = 'champ de base'
+  autreChampDInstanceDeBase = this.champDInstanceDeBase
+  methodeDInstanceDeBase() { return 'affichage de la méthode de base' }
+}
+
+class SousClasseAvecChampDInstance extends ClasseAvecChampDInstance {
+  sousChampDInstance = super.methodeDInstanceDeBase()
+}
+
+const base = new ClasseAvecChampDInstance()
+const sous = new SousClasseAvecChampDInstance()
+
+console.log(base.autreChampDInstanceDeBase)
+// affichage attendu : "champ de base"
+
+console.log(sous.sousChampDInstance)
+// affichage attendu : "affichage de la méthode de base"
+ +

Méthodes publiques

+ +

Méthodes statiques publiques

+ +

Le mot-clé static définit une méthode statique pour une classe. Les méthodes statiques ne sont pas appelées dans les instances de la classe. A la place, elles le sont dans la classe elle-même. Ce sont souvent des méthodes utilitaires, comme des fonctions pour créer ou cloner des objets.

+ +
class ClasseAvecMethodeStatique {
+  static methodeStatique() {
+    return 'la méthode statique a été appelée.';
+  }
+}
+
+console.log(ClasseAvecMethodeStatique.methodeStatique());
+// affichage attendu : "la méthode statique a été appelée."
+ +

Les méthodes statiques sont ajoutées au constructeur de la classe grâce à {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}} au moment de l'évaluation de la classe. Ces méthodes peuvent être écrites, ne sont pas énumérables et sont configurables.

+ +

Méthodes d'instance publiques

+ +

Comme leur nom l'implique, les méthodes d'instance publiques sont des fonctions disponibles dans les instances de la classe.

+ +
class ClasseAvecMethodeDInstancePublique {
+  methodePublique() {
+    return 'hello world'
+  }
+}
+
+const instance = new ClasseAvecMethodeDInstancePublique()
+console.log(instance.methodePublique())
+// affichage attendu : "hello worl​d"
+ +

Les méthodes d'instance publiques sont ajoutées au prototype au moment de l'évaluation de la classe en utilisant {{jsxref("Global_Objects/Object/defineProperty", "Object.defineProperty()")}}. Elles peuvent être écrites, ne sont pas énumérables et sont configurables.

+ +

Vous pouvez utiliser des fonctions génératrices, asynchrones et génératrices asynchrones.

+ +
class ClasseAvecMethodesFantaisie {
+  *methodeGeneratrice() { }
+  async methodeAsynchrone() { }
+  async *methodeGeneratriceAsynchrone() { }
+}
+ +

A l'intérieur des méthodes d'instance, this fait référence à l'instance elle-même. Dans les sous-classes, super vous donne accès au prototype de la superclasse, ce qui vous permet d'appeler les méthodes de la superclasse.

+ +
class ClasseDeBase {
+  msg = 'hello world'
+  methodePubliqueDeBase() {
+    return this.msg
+  }
+}
+
+class SousClasse extends ClasseDeBase {
+  sousMethodePublique() {
+    return super.methodePubliqueDeBase()
+  }
+}
+
+const instance = new SousClasse()
+console.log(instance.sousMethodePublique())
+// affichage attendu : "hello worl​d"
+
+ +

Les accesseurs et les mutateurs sont des méthodes spéciales qui sont liées à une propriété de classe, et sont appelées lorsqu'on accède à cette propriété ou qu'on la définit. Utilisez la syntaxe get et set pour déclarer un accesseur ou un mutateur publique d'une instance.

+ +
class ClasseAvecGetSet {
+  #msg = 'hello world'
+  get msg() {
+    return this.#msg
+  }
+  set msg(x) {
+    this.#msg = `hello ${x}`
+  }
+}
+
+const instance = new ClasseAvecGetSet();
+console.log(instance.msg);
+// affichage attendu : "hello worl​d"
+
+instance.msg = 'gâteau';
+console.log(instance.msg);
+// affichage attendu : "hello gâteau"
+
+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/classes/static/index.html b/files/fr/web/javascript/reference/classes/static/index.html deleted file mode 100644 index f93abc7411..0000000000 --- a/files/fr/web/javascript/reference/classes/static/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: static -slug: Web/JavaScript/Reference/Classes/static -tags: - - Classes - - ECMAScript 2015 - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Classes/static ---- -
{{jsSidebar("Classes")}}
- -

Le mot-clé static permet de définir une méthode statique d'une classe. Les méthodes statiques ne sont pas disponibles sur les instances d'une classe mais sont appelées sur la classe elle-même. Les méthodes statiques sont généralement des fonctions utilitaires (qui peuvent permettre de créer ou de cloner des objets par exemple).

- -
{{EmbedInteractiveExample("pages/js/classes-static.html")}}
- -

Syntaxe

- -
static nomMéthode() { ... }
- -

Description

- -

Les méthodes statiques sont utilisées lorsque la méthode ne s'applique qu'à la classe elle-même et pas à ses instances. Les méthodes statiques sont généralement utilisées pour créer des fonctions utilitaires.

- -

Exemples

- -

Exemple classique

- -

Dans l'exemple qui suit, on illustre :

- - - -
class Triple {
-  static triple(n) {
-    if (n === undefined) {
-      n = 1;
-    }
-    return n * 3;
-  }
-}
-
-class SuperTriple extends Triple {
-  static triple(n) {
-    return super.triple(n) * super.triple(n);
-  }
-}
-
-console.log(Triple.triple());       // 3
-console.log(Triple.triple(6));      // 18
-console.log(SuperTriple.triple(4)); // 144
-var tp = new Triple();
-console.log(SuperTriple.triple(4)); // 144 (pas d'impact de l'affectation du parent)
-console.log(tp.triple()); // tp.triple n'est pas une fonction
-
- -

Utilisation depuis une autre méthode statique

- -

Afin d'appeler une autre méthode statique dans une méthode statique, on pourra utiliser {{jsxref("Opérateurs/L_opérateur_this","this")}}.

- -
class StaticMethodCall {
-  static staticMethod() {
-    return 'Méthode statique appelée';
-  }
-  static anotherStaticMethod() {
-    return this.staticMethod() + ' depuis une autre statique';
-  }
-}
-StaticMethodCall.staticMethod();
-// 'Méthode statique appelée'
-StaticMethodCall.anotherStaticMethod();
-// 'Méthode statique appelée depuis une autre statique'
- -

Depuis les constructeurs de classes et les autres méthodes

- -

Les méthodes statiques ne sont pas directement accessibles via le mot-clé this. Il faut les appeler avec le nom de la classe qui préfixe le nom de la méthode statique NomDeClasse.MéthodeStatique() (comme pour les autres appels en dehors de la classe) ou avec la propriété constructor  : this.constructor.MéthodeStatique().

- -
class StaticMethodCall{
-  constructor(){
-    console.log(StaticMethodCall.staticMethod());
-    // 'appel de la méthode statique'
-
-    console.log(this.constructor.staticMethod());
-    // 'appel de la méthode statique'
-  }
-
-  static  staticMethod(){
-    return 'appel de la méthode statique.';
-  }
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/classes/static/index.md b/files/fr/web/javascript/reference/classes/static/index.md new file mode 100644 index 0000000000..f93abc7411 --- /dev/null +++ b/files/fr/web/javascript/reference/classes/static/index.md @@ -0,0 +1,127 @@ +--- +title: static +slug: Web/JavaScript/Reference/Classes/static +tags: + - Classes + - ECMAScript 2015 + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Classes/static +--- +
{{jsSidebar("Classes")}}
+ +

Le mot-clé static permet de définir une méthode statique d'une classe. Les méthodes statiques ne sont pas disponibles sur les instances d'une classe mais sont appelées sur la classe elle-même. Les méthodes statiques sont généralement des fonctions utilitaires (qui peuvent permettre de créer ou de cloner des objets par exemple).

+ +
{{EmbedInteractiveExample("pages/js/classes-static.html")}}
+ +

Syntaxe

+ +
static nomMéthode() { ... }
+ +

Description

+ +

Les méthodes statiques sont utilisées lorsque la méthode ne s'applique qu'à la classe elle-même et pas à ses instances. Les méthodes statiques sont généralement utilisées pour créer des fonctions utilitaires.

+ +

Exemples

+ +

Exemple classique

+ +

Dans l'exemple qui suit, on illustre :

+ + + +
class Triple {
+  static triple(n) {
+    if (n === undefined) {
+      n = 1;
+    }
+    return n * 3;
+  }
+}
+
+class SuperTriple extends Triple {
+  static triple(n) {
+    return super.triple(n) * super.triple(n);
+  }
+}
+
+console.log(Triple.triple());       // 3
+console.log(Triple.triple(6));      // 18
+console.log(SuperTriple.triple(4)); // 144
+var tp = new Triple();
+console.log(SuperTriple.triple(4)); // 144 (pas d'impact de l'affectation du parent)
+console.log(tp.triple()); // tp.triple n'est pas une fonction
+
+ +

Utilisation depuis une autre méthode statique

+ +

Afin d'appeler une autre méthode statique dans une méthode statique, on pourra utiliser {{jsxref("Opérateurs/L_opérateur_this","this")}}.

+ +
class StaticMethodCall {
+  static staticMethod() {
+    return 'Méthode statique appelée';
+  }
+  static anotherStaticMethod() {
+    return this.staticMethod() + ' depuis une autre statique';
+  }
+}
+StaticMethodCall.staticMethod();
+// 'Méthode statique appelée'
+StaticMethodCall.anotherStaticMethod();
+// 'Méthode statique appelée depuis une autre statique'
+ +

Depuis les constructeurs de classes et les autres méthodes

+ +

Les méthodes statiques ne sont pas directement accessibles via le mot-clé this. Il faut les appeler avec le nom de la classe qui préfixe le nom de la méthode statique NomDeClasse.MéthodeStatique() (comme pour les autres appels en dehors de la classe) ou avec la propriété constructor  : this.constructor.MéthodeStatique().

+ +
class StaticMethodCall{
+  constructor(){
+    console.log(StaticMethodCall.staticMethod());
+    // 'appel de la méthode statique'
+
+    console.log(this.constructor.staticMethod());
+    // 'appel de la méthode statique'
+  }
+
+  static  staticMethod(){
+    return 'appel de la méthode statique.';
+  }
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.html b/files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.html deleted file mode 100644 index 54f3bd85dd..0000000000 --- a/files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.html +++ /dev/null @@ -1,293 +0,0 @@ ---- -title: Fonctionnalités dépréciées -slug: Web/JavaScript/Reference/Deprecated_and_obsolete_features -tags: - - Deprecated - - JavaScript - - Obsolete - - Reference -translation_of: Web/JavaScript/Reference/Deprecated_and_obsolete_features -original_slug: JavaScript/Reference/Annexes/Fonctionnalités_dépréciées ---- -
{{JsSidebar("More")}}
- -

Cette page liste les fonctionnalités de JavaScript qui sont dépréciées (deprecated) (c'est-à-dire que ces fonctionnalités sont toujours disponibles mais qu'il est prévu de les retirer) et les fonctionnalités obsolètes (celles qui ne sont plus utilisables).

- -

Fonctionnalités dépréciées

- -

Ces fonctionnalités dépréciées peuvent toujours être utilisées mais avec une grande attention car elles pourront être supprimées complètements à l'avenir. En règle général, il faut les retirer du code qui les utilise.

- -

Propriétés de RegExp

- -

Les propriétés suivantes sont dépréciées. Cela n'affecte pas le comportement de {{jsxref("Objets_globaux/String/replace", "replace", "Specifying_a_string_as_a_parameter")}} lorsqu'on utilise une chaîne de caractères en paramètre de remplacement :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriétéDescription
{{jsxref("RegExp.n", "$1-$9")}} -

Les sous-chaînes correspondantes s'il y en a.
- Attention : Utiliser ces propriétés peut causer certains problèmes car les extensions des navigateurs peuvent les modifier. À éviter !

-
{{jsxref("RegExp.input", "$_")}}Voir input.
{{jsxref("RegExp.multiline", "$*")}}Voir multiline.
{{jsxref("RegExp.lastMatch", "$&")}}Voir lastMatch.
{{jsxref("RegExp.lastMatch", "$&")}}Voir lastParen.
{{jsxref("RegExp.leftContext", "$`")}}Voir leftContext.
{{jsxref("RegExp.rightContext", "$'")}}Voir rightContext.
{{jsxref("RegExp.input", "input")}}La chaîne par rapport à laquelle on recherche une correspondance grâce à l'expression rationnelle.
{{jsxref("RegExp.lastMatch", "lastMatch")}}Les derniers caractères correspondants.
{{jsxref("RegExp.lastParen", "lastParen")}}La dernière sous-chaîne (groupe entre parenthèses) correspondante si elle existe.
{{jsxref("RegExp.leftContext", "leftContext")}}La sous-chaîne qui précède la correspondance la plus récente.
{{jsxref("RegExp.rightContext", "rightContext")}}La sous-chaîne qui suit la correspondance la plus récente.
- -

Les propriétés qui suivent sont désormais des propriétés des instances de RegExp et ne sont plus des propriétés de l'objet RegExp :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriétéDescription
{{jsxref("RegExp.global", "global")}}Permet d'utiliser une expression rationnelle pour relever l'ensemble des correspondances ou uniquement la première.
{{jsxref("RegExp.ignoreCase", "ignoreCase")}}Définit si la casse doit être ignorée ou non lors de la recherche d'une correspondance.
{{jsxref("RegExp.lastIndex", "lastIndex")}}L'index à partir duquel chercher la prochaine correspondance.
{{jsxref("RegExp.multiline", "multiline")}}Définit si la recherche doit s'effectuer sur une seule ligne ou plusieurs.
{{jsxref("RegExp.source", "source")}}Le texte du motif.
- -

Méthodes de RegExp

- - - -

Propriétés de Function

- - - -

Générateur historique

- - - -

Itérateur

- - - -

Méthode d'Object

- - - -

Méthodes de Date

- - - -

Fonctions

- - - -

Proxy

- - - -

Séquences d'échappement

- - - -

Méthodes de String

- - - -

Fonctionnalités obsolètes

- -

Ces fonctionnalités sont obsolètes et ont intégralement été retirées de JavaScript. Elles ne peuvent plus être utilisées.

- -

Object

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropriétéDescription
{{jsxref("Objets_globaux/Object/count", "__count__")}}Renvoie le nombre de propriétés énumérables d'un objet défini par l'utillisateur.
{{jsxref("Objets_globaux/Object/Parent", "__parent__")}}Pointe vers le contexte d'un objet.
{{jsxref("Global_Objects/Object/eval", "Object.prototype.eval()")}}Évalue une chaine de caractères étant du code JavaScript, dans le contexte de l'objet indiqué.
{{jsxref("Object.observe()")}}Observe les modifications apportées à un objet de façon asynchrone.
{{jsxref("Object.unobserve()")}}Retire les observateurs ajoutés à un objet.
{{jsxref("Object.getNotifier()")}}Crée un objet qui permet de déclencher un changement de façon synthétique.
- -

Function

- - - - - - - - - - - - -
PropriétéDescription
{{jsxref("Objets_globaux/Function/arity", "arity")}}Nombre d'arguments déclarés pour une fonction.
- -

Array

- - - - - - - - - - - - - - - - -
PropriétéDescription
{{jsxref("Array.observe()")}}Observe les modifications apportées à un tableau de façon asynchrone.
{{jsxref("Array.unobserve()")}}Retire les observateurs ajoutés à un tableau.
- -

Number

- - - -

ParallelArray

- - - -

Instructions

- - - -

E4X

- -

Voir la page E4X pour plus d'informations.

- -

Sharp variables

- -

Voir la page sur les variables « Sharp » en JavaScript pour plus d'informations.

diff --git a/files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.md b/files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.md new file mode 100644 index 0000000000..54f3bd85dd --- /dev/null +++ b/files/fr/web/javascript/reference/deprecated_and_obsolete_features/index.md @@ -0,0 +1,293 @@ +--- +title: Fonctionnalités dépréciées +slug: Web/JavaScript/Reference/Deprecated_and_obsolete_features +tags: + - Deprecated + - JavaScript + - Obsolete + - Reference +translation_of: Web/JavaScript/Reference/Deprecated_and_obsolete_features +original_slug: JavaScript/Reference/Annexes/Fonctionnalités_dépréciées +--- +
{{JsSidebar("More")}}
+ +

Cette page liste les fonctionnalités de JavaScript qui sont dépréciées (deprecated) (c'est-à-dire que ces fonctionnalités sont toujours disponibles mais qu'il est prévu de les retirer) et les fonctionnalités obsolètes (celles qui ne sont plus utilisables).

+ +

Fonctionnalités dépréciées

+ +

Ces fonctionnalités dépréciées peuvent toujours être utilisées mais avec une grande attention car elles pourront être supprimées complètements à l'avenir. En règle général, il faut les retirer du code qui les utilise.

+ +

Propriétés de RegExp

+ +

Les propriétés suivantes sont dépréciées. Cela n'affecte pas le comportement de {{jsxref("Objets_globaux/String/replace", "replace", "Specifying_a_string_as_a_parameter")}} lorsqu'on utilise une chaîne de caractères en paramètre de remplacement :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropriétéDescription
{{jsxref("RegExp.n", "$1-$9")}} +

Les sous-chaînes correspondantes s'il y en a.
+ Attention : Utiliser ces propriétés peut causer certains problèmes car les extensions des navigateurs peuvent les modifier. À éviter !

+
{{jsxref("RegExp.input", "$_")}}Voir input.
{{jsxref("RegExp.multiline", "$*")}}Voir multiline.
{{jsxref("RegExp.lastMatch", "$&")}}Voir lastMatch.
{{jsxref("RegExp.lastMatch", "$&")}}Voir lastParen.
{{jsxref("RegExp.leftContext", "$`")}}Voir leftContext.
{{jsxref("RegExp.rightContext", "$'")}}Voir rightContext.
{{jsxref("RegExp.input", "input")}}La chaîne par rapport à laquelle on recherche une correspondance grâce à l'expression rationnelle.
{{jsxref("RegExp.lastMatch", "lastMatch")}}Les derniers caractères correspondants.
{{jsxref("RegExp.lastParen", "lastParen")}}La dernière sous-chaîne (groupe entre parenthèses) correspondante si elle existe.
{{jsxref("RegExp.leftContext", "leftContext")}}La sous-chaîne qui précède la correspondance la plus récente.
{{jsxref("RegExp.rightContext", "rightContext")}}La sous-chaîne qui suit la correspondance la plus récente.
+ +

Les propriétés qui suivent sont désormais des propriétés des instances de RegExp et ne sont plus des propriétés de l'objet RegExp :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropriétéDescription
{{jsxref("RegExp.global", "global")}}Permet d'utiliser une expression rationnelle pour relever l'ensemble des correspondances ou uniquement la première.
{{jsxref("RegExp.ignoreCase", "ignoreCase")}}Définit si la casse doit être ignorée ou non lors de la recherche d'une correspondance.
{{jsxref("RegExp.lastIndex", "lastIndex")}}L'index à partir duquel chercher la prochaine correspondance.
{{jsxref("RegExp.multiline", "multiline")}}Définit si la recherche doit s'effectuer sur une seule ligne ou plusieurs.
{{jsxref("RegExp.source", "source")}}Le texte du motif.
+ +

Méthodes de RegExp

+ + + +

Propriétés de Function

+ + + +

Générateur historique

+ + + +

Itérateur

+ + + +

Méthode d'Object

+ + + +

Méthodes de Date

+ + + +

Fonctions

+ + + +

Proxy

+ + + +

Séquences d'échappement

+ + + +

Méthodes de String

+ + + +

Fonctionnalités obsolètes

+ +

Ces fonctionnalités sont obsolètes et ont intégralement été retirées de JavaScript. Elles ne peuvent plus être utilisées.

+ +

Object

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropriétéDescription
{{jsxref("Objets_globaux/Object/count", "__count__")}}Renvoie le nombre de propriétés énumérables d'un objet défini par l'utillisateur.
{{jsxref("Objets_globaux/Object/Parent", "__parent__")}}Pointe vers le contexte d'un objet.
{{jsxref("Global_Objects/Object/eval", "Object.prototype.eval()")}}Évalue une chaine de caractères étant du code JavaScript, dans le contexte de l'objet indiqué.
{{jsxref("Object.observe()")}}Observe les modifications apportées à un objet de façon asynchrone.
{{jsxref("Object.unobserve()")}}Retire les observateurs ajoutés à un objet.
{{jsxref("Object.getNotifier()")}}Crée un objet qui permet de déclencher un changement de façon synthétique.
+ +

Function

+ + + + + + + + + + + + +
PropriétéDescription
{{jsxref("Objets_globaux/Function/arity", "arity")}}Nombre d'arguments déclarés pour une fonction.
+ +

Array

+ + + + + + + + + + + + + + + + +
PropriétéDescription
{{jsxref("Array.observe()")}}Observe les modifications apportées à un tableau de façon asynchrone.
{{jsxref("Array.unobserve()")}}Retire les observateurs ajoutés à un tableau.
+ +

Number

+ + + +

ParallelArray

+ + + +

Instructions

+ + + +

E4X

+ +

Voir la page E4X pour plus d'informations.

+ +

Sharp variables

+ +

Voir la page sur les variables « Sharp » en JavaScript pour plus d'informations.

diff --git a/files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html b/files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html deleted file mode 100644 index 22c6e16c0b..0000000000 --- a/files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Le protocole itérateur historique -slug: >- - Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol -tags: - - JavaScript - - Legacy Iterator -translation_of: >- - Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol -original_slug: Web/JavaScript/Guide/Le_protocole_itérateur_historique ---- -
{{JSSideBar("More")}}
- -

Attention : Ce protocole historique était une fonctionnalité spécifique à SpiderMonkey et est supprimé à partir de Firefox 58. Pour utiliser des itérations par la suite, veuillez utiliser des boucles for..of ainsi que le protocole itérateur.

- -

Le protocole itérateur obsolète, spécifique à Firefox

- -

Avant la version 26, Firefox implémentait un autre protocole d'itération semblable à celui défini par ES2015.

- -

Un objet est un itérateur historique lorsqu'il implémente une méthode next() avec la sémantique suivante et lorsqu'il renvoie une exception {{jsxref("Objets_globaux/StopIteration", "StopIteration")}} à la fin de l'itération :

- - - - - - - - - - - - -
PropriétéValeur
next -

Une fonction sans argument qui renvoie une valeur.

-
- -

Les différences entre le protocole historique et celui d'ES2015

- - - -

Un exemple simple utilisant l'ancien protocole

- -

Exemple

- -
function créerItérateur(tableau){
-    var nextIndex = 0;
-
-    return {
-       next: function(){
-           if(nextIndex < tableau.length){
-               return tableau[nextIndex++];
-           else
-               throw new StopIteration();
-       }
-    }
-}
-
-var it = créerItérateur(['yo', 'ya']);
-
-console.log(it.next()); // 'yo'
-console.log(it.next()); // 'ya'
-try{
-    console.log(it.next());
-}
-catch(e){
-    if(e instanceof StopIteration){
-         // fin de l'itération
-    }
-}
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.md b/files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.md new file mode 100644 index 0000000000..22c6e16c0b --- /dev/null +++ b/files/fr/web/javascript/reference/deprecated_and_obsolete_features/the_legacy_iterator_protocol/index.md @@ -0,0 +1,80 @@ +--- +title: Le protocole itérateur historique +slug: >- + Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol +tags: + - JavaScript + - Legacy Iterator +translation_of: >- + Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol +original_slug: Web/JavaScript/Guide/Le_protocole_itérateur_historique +--- +
{{JSSideBar("More")}}
+ +

Attention : Ce protocole historique était une fonctionnalité spécifique à SpiderMonkey et est supprimé à partir de Firefox 58. Pour utiliser des itérations par la suite, veuillez utiliser des boucles for..of ainsi que le protocole itérateur.

+ +

Le protocole itérateur obsolète, spécifique à Firefox

+ +

Avant la version 26, Firefox implémentait un autre protocole d'itération semblable à celui défini par ES2015.

+ +

Un objet est un itérateur historique lorsqu'il implémente une méthode next() avec la sémantique suivante et lorsqu'il renvoie une exception {{jsxref("Objets_globaux/StopIteration", "StopIteration")}} à la fin de l'itération :

+ + + + + + + + + + + + +
PropriétéValeur
next +

Une fonction sans argument qui renvoie une valeur.

+
+ +

Les différences entre le protocole historique et celui d'ES2015

+ + + +

Un exemple simple utilisant l'ancien protocole

+ +

Exemple

+ +
function créerItérateur(tableau){
+    var nextIndex = 0;
+
+    return {
+       next: function(){
+           if(nextIndex < tableau.length){
+               return tableau[nextIndex++];
+           else
+               throw new StopIteration();
+       }
+    }
+}
+
+var it = créerItérateur(['yo', 'ya']);
+
+console.log(it.next()); // 'yo'
+console.log(it.next()); // 'ya'
+try{
+    console.log(it.next());
+}
+catch(e){
+    if(e instanceof StopIteration){
+         // fin de l'itération
+    }
+}
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/already_has_pragma/index.html b/files/fr/web/javascript/reference/errors/already_has_pragma/index.html deleted file mode 100644 index 506c6bc246..0000000000 --- a/files/fr/web/javascript/reference/errors/already_has_pragma/index.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: 'Warning: -file- is being assigned a //# sourceMappingURL, but already has one' -slug: Web/JavaScript/Reference/Errors/Already_has_pragma -tags: - - Avertissement - - Erreurs - - JavaScript -translation_of: Web/JavaScript/Reference/Errors/Already_has_pragma -original_slug: Web/JavaScript/Reference/Erreurs/Already_has_pragma ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: -fichier- is being assigned a //# sourceMappingURL, but already has one.
- -

Type d'erreur

- -

Un avertissement. L'exécution du script JavaScript n'est pas interrompue.

- -

Quel est le problème ?

- -

Un fichier source map a été défini plus d'une fois pour un fichier source JavaScript donné.

- -

La plupart du temps, les fichiers sources des scripts JavaScript sont fusionnés et minifiés afin que les transferts de fichiers du serveur vers le navigateur soient plus efficaces. Grâce aux fichiers de correspondance des sources (source maps), il est possible d'indiquer au débogueur le code original correspondant. Il existe deux méthodes pour déclarer une correspondance de sources : en utilisant un commentaire ou définissant un en-tête pour le fichier JavaScript.

- -

Exemples

- -

Voici une correspondance de source déclarée via un commentaire dans le fichier :

- -
//# sourceMappingURL=http://exemple.com/chemin/vers/la/sourcemap.map
- -

Une autre méthode consiste à indiquer la source originale dans l'en-tête du fichier JavaScript :

- -
X-SourceMap: /chemin/vers/le/fichier.js.map
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/already_has_pragma/index.md b/files/fr/web/javascript/reference/errors/already_has_pragma/index.md new file mode 100644 index 0000000000..506c6bc246 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/already_has_pragma/index.md @@ -0,0 +1,42 @@ +--- +title: 'Warning: -file- is being assigned a //# sourceMappingURL, but already has one' +slug: Web/JavaScript/Reference/Errors/Already_has_pragma +tags: + - Avertissement + - Erreurs + - JavaScript +translation_of: Web/JavaScript/Reference/Errors/Already_has_pragma +original_slug: Web/JavaScript/Reference/Erreurs/Already_has_pragma +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: -fichier- is being assigned a //# sourceMappingURL, but already has one.
+ +

Type d'erreur

+ +

Un avertissement. L'exécution du script JavaScript n'est pas interrompue.

+ +

Quel est le problème ?

+ +

Un fichier source map a été défini plus d'une fois pour un fichier source JavaScript donné.

+ +

La plupart du temps, les fichiers sources des scripts JavaScript sont fusionnés et minifiés afin que les transferts de fichiers du serveur vers le navigateur soient plus efficaces. Grâce aux fichiers de correspondance des sources (source maps), il est possible d'indiquer au débogueur le code original correspondant. Il existe deux méthodes pour déclarer une correspondance de sources : en utilisant un commentaire ou définissant un en-tête pour le fichier JavaScript.

+ +

Exemples

+ +

Voici une correspondance de source déclarée via un commentaire dans le fichier :

+ +
//# sourceMappingURL=http://exemple.com/chemin/vers/la/sourcemap.map
+ +

Une autre méthode consiste à indiquer la source originale dans l'en-tête du fichier JavaScript :

+ +
X-SourceMap: /chemin/vers/le/fichier.js.map
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/array_sort_argument/index.html b/files/fr/web/javascript/reference/errors/array_sort_argument/index.html deleted file mode 100644 index 6f7c3d07f2..0000000000 --- a/files/fr/web/javascript/reference/errors/array_sort_argument/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 'TypeError: invalid Array.prototype.sort argument' -slug: Web/JavaScript/Reference/Errors/Array_sort_argument -tags: - - Erreurs - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Errors/Array_sort_argument -original_slug: Web/JavaScript/Reference/Erreurs/Array_sort_argument ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: argument is not a function object (Edge)
-TypeError: invalid Array.prototype.sort argument (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Que s'est-il passé ?

- -

L'argument passé à {{jsxref("Array.prototype.sort()")}} devrait être {{jsxref("undefined")}} ou être une fonction comparant ses opérandes.

- -

Exemples

- -

Cas invalides

- -
[1, 3, 2].sort(5);  // TypeError
-
-var cmp = { asc: (x, y) => x >= y, dsc : (x, y) => x <= y };
-[1, 3, 2].sort(cmp[this.key] || 'asc');  // TypeError
-
- -

Cas valides

- -
[1, 3, 2].sort();   // [1, 2, 3]
-
-var cmp = { asc: (x, y) => x >= y, dsc : (x, y) => x <= y };
-[1, 3, 2].sort(cmp[this.key || 'asc']); // [1, 2, 3]
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/array_sort_argument/index.md b/files/fr/web/javascript/reference/errors/array_sort_argument/index.md new file mode 100644 index 0000000000..6f7c3d07f2 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/array_sort_argument/index.md @@ -0,0 +1,48 @@ +--- +title: 'TypeError: invalid Array.prototype.sort argument' +slug: Web/JavaScript/Reference/Errors/Array_sort_argument +tags: + - Erreurs + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Errors/Array_sort_argument +original_slug: Web/JavaScript/Reference/Erreurs/Array_sort_argument +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: argument is not a function object (Edge)
+TypeError: invalid Array.prototype.sort argument (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Que s'est-il passé ?

+ +

L'argument passé à {{jsxref("Array.prototype.sort()")}} devrait être {{jsxref("undefined")}} ou être une fonction comparant ses opérandes.

+ +

Exemples

+ +

Cas invalides

+ +
[1, 3, 2].sort(5);  // TypeError
+
+var cmp = { asc: (x, y) => x >= y, dsc : (x, y) => x <= y };
+[1, 3, 2].sort(cmp[this.key] || 'asc');  // TypeError
+
+ +

Cas valides

+ +
[1, 3, 2].sort();   // [1, 2, 3]
+
+var cmp = { asc: (x, y) => x >= y, dsc : (x, y) => x <= y };
+[1, 3, 2].sort(cmp[this.key || 'asc']); // [1, 2, 3]
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/bad_octal/index.html b/files/fr/web/javascript/reference/errors/bad_octal/index.html deleted file mode 100644 index 4b14545161..0000000000 --- a/files/fr/web/javascript/reference/errors/bad_octal/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: 'SyntaxError: "x" is not a legal ECMA-262 octal constant' -slug: Web/JavaScript/Reference/Errors/Bad_octal -tags: - - Erreurs - - JavaScript - - Mode strict - - Reference - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Bad_octal -original_slug: Web/JavaScript/Reference/Erreurs/Bad_octal ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: SyntaxError: 08 is not a legal ECMA-262 octal constant.
-Warning: SyntaxError: 09 is not a legal ECMA-262 octal constant.
-
- -

Type d'erreur

- -

Un avertissement, l'exécution du script JavaScript ne sera pas interrompue.

- -

Quel est le problème ?

- -

Les littéraux de nombres décimaux peuvent démarrer par un zéro suivi d'un autre chiffre. Si tous les chiffres après le 0 de tête sont inférieurs à 8, le nombre est interprété comme un nombre en notation octale. Or, cela ne peut pas être le cas avec 08 et 09 et JavaScript produit un avertissement.

- -

Les littéraux en notation octale et les séquences d'échappement octales sont désormais dépréciées (il y a aura donc un avertissement complémentaire sur la dépréciation de ces notations). Avec ECMAScript 6 et les versions ultérieures, la syntaxe utilise un zéro initial, suivi de la lettre latine « o » en majuscule ou en minuscule ((0o ou 0O). Pour plus d'informations à ce sujet, voir la page sur la grammaire lexicale JavaScript.

- -

Exemples

- -

Nombres invalides en notation octale

- -
08;
-09;
-// SyntaxError: 08 is not a legal ECMA-262 octal constant
-// SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated
- -

Nombres valides en notation octale

- -

On utilisera un zéro suivi de la lettre « o » pour indiquer un nombre exprimé en notation octale :

- -
0O755;
-0o644;
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/bad_octal/index.md b/files/fr/web/javascript/reference/errors/bad_octal/index.md new file mode 100644 index 0000000000..4b14545161 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/bad_octal/index.md @@ -0,0 +1,53 @@ +--- +title: 'SyntaxError: "x" is not a legal ECMA-262 octal constant' +slug: Web/JavaScript/Reference/Errors/Bad_octal +tags: + - Erreurs + - JavaScript + - Mode strict + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_octal +original_slug: Web/JavaScript/Reference/Erreurs/Bad_octal +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: SyntaxError: 08 is not a legal ECMA-262 octal constant.
+Warning: SyntaxError: 09 is not a legal ECMA-262 octal constant.
+
+ +

Type d'erreur

+ +

Un avertissement, l'exécution du script JavaScript ne sera pas interrompue.

+ +

Quel est le problème ?

+ +

Les littéraux de nombres décimaux peuvent démarrer par un zéro suivi d'un autre chiffre. Si tous les chiffres après le 0 de tête sont inférieurs à 8, le nombre est interprété comme un nombre en notation octale. Or, cela ne peut pas être le cas avec 08 et 09 et JavaScript produit un avertissement.

+ +

Les littéraux en notation octale et les séquences d'échappement octales sont désormais dépréciées (il y a aura donc un avertissement complémentaire sur la dépréciation de ces notations). Avec ECMAScript 6 et les versions ultérieures, la syntaxe utilise un zéro initial, suivi de la lettre latine « o » en majuscule ou en minuscule ((0o ou 0O). Pour plus d'informations à ce sujet, voir la page sur la grammaire lexicale JavaScript.

+ +

Exemples

+ +

Nombres invalides en notation octale

+ +
08;
+09;
+// SyntaxError: 08 is not a legal ECMA-262 octal constant
+// SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated
+ +

Nombres valides en notation octale

+ +

On utilisera un zéro suivi de la lettre « o » pour indiquer un nombre exprimé en notation octale :

+ +
0O755;
+0o644;
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/bad_radix/index.html b/files/fr/web/javascript/reference/errors/bad_radix/index.html deleted file mode 100644 index c620439cae..0000000000 --- a/files/fr/web/javascript/reference/errors/bad_radix/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: 'RangeError: radix must be an integer' -slug: Web/JavaScript/Reference/Errors/Bad_radix -tags: - - Erreurs - - JavaScript - - RangeError -translation_of: Web/JavaScript/Reference/Errors/Bad_radix -original_slug: Web/JavaScript/Reference/Erreurs/Bad_radix ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
RangeError: invalid argument (Edge)
-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)
-
- -

Type d'erreur

- -

{{jsxref("RangeError")}}

- -

Quel est le problème ?

- -

C'est le paramètre utilisé avec la méthode {{jsxref("Number.prototype.toString()")}} ou avec la méthode {{jsxref("BigInt.prototype.toString()")}} pour indiquer la base de conversion qui est en cause. Ce paramètre, optionnel, doit être un nombre entier, compris entre 2 et 36 qui inique la base du système numérique dans lequel on veut représenter les valeurs numériques.

- -

Pourquoi limiter la base à 36 ? Lorsqu'une base est supérieure à 10, on utilise les caractères de l'alphabet pour représenter les chiffres. Or, l'alphabet latin ne possède que 26 caractères. En utilisant donc les 10 chiffres arabes et ces caractères, on possède 36 caractères pour représenter les chiffres d'un nombre.

- -

Généralement, on emploie cette méthode avec des bases fréquemment utilisées :

- - - -

Examples

- -

Exemples invalides

- -
(42).toString(0);
-(42).toString(1);
-(42).toString(37);
-(42).toString(150);
-// On ne peut pas utiliser une telle
-// chaîne pour du formatage :
-(12071989).toString("MM-dd-yyyy");
-
- -

Exemples valides

- -
(42).toString(2);     // "101010" (binary)
-(13).toString(8);     // "15"     (octal)
-(0x42).toString(10);  // "66"     (decimal)
-(100000).toString(16) // "186a0"  (hexadecimal)
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/bad_radix/index.md b/files/fr/web/javascript/reference/errors/bad_radix/index.md new file mode 100644 index 0000000000..c620439cae --- /dev/null +++ b/files/fr/web/javascript/reference/errors/bad_radix/index.md @@ -0,0 +1,64 @@ +--- +title: 'RangeError: radix must be an integer' +slug: Web/JavaScript/Reference/Errors/Bad_radix +tags: + - Erreurs + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Bad_radix +original_slug: Web/JavaScript/Reference/Erreurs/Bad_radix +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
RangeError: invalid argument (Edge)
+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)
+
+ +

Type d'erreur

+ +

{{jsxref("RangeError")}}

+ +

Quel est le problème ?

+ +

C'est le paramètre utilisé avec la méthode {{jsxref("Number.prototype.toString()")}} ou avec la méthode {{jsxref("BigInt.prototype.toString()")}} pour indiquer la base de conversion qui est en cause. Ce paramètre, optionnel, doit être un nombre entier, compris entre 2 et 36 qui inique la base du système numérique dans lequel on veut représenter les valeurs numériques.

+ +

Pourquoi limiter la base à 36 ? Lorsqu'une base est supérieure à 10, on utilise les caractères de l'alphabet pour représenter les chiffres. Or, l'alphabet latin ne possède que 26 caractères. En utilisant donc les 10 chiffres arabes et ces caractères, on possède 36 caractères pour représenter les chiffres d'un nombre.

+ +

Généralement, on emploie cette méthode avec des bases fréquemment utilisées :

+ + + +

Examples

+ +

Exemples invalides

+ +
(42).toString(0);
+(42).toString(1);
+(42).toString(37);
+(42).toString(150);
+// On ne peut pas utiliser une telle
+// chaîne pour du formatage :
+(12071989).toString("MM-dd-yyyy");
+
+ +

Exemples valides

+ +
(42).toString(2);     // "101010" (binary)
+(13).toString(8);     // "15"     (octal)
+(0x42).toString(10);  // "66"     (decimal)
+(100000).toString(16) // "186a0"  (hexadecimal)
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/bad_regexp_flag/index.html b/files/fr/web/javascript/reference/errors/bad_regexp_flag/index.html deleted file mode 100644 index 9f1632d1a0..0000000000 --- a/files/fr/web/javascript/reference/errors/bad_regexp_flag/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: 'SyntaxError: invalid regular expression flag "x"' -slug: Web/JavaScript/Reference/Errors/Bad_regexp_flag -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag -original_slug: Web/JavaScript/Reference/Erreurs/Bad_regexp_flag ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Syntax error in regular expression (Edge)
-SyntaxError: invalid regular expression flag "x" (Firefox)
-SyntaxError: Invalid regular expression flags (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Un marqueur (flag) invalide est utilisé dans une expression rationnelle. Un littéral d'expression rationnelle se compose d'un motif entouré de deux barres obliques, les marqueurs sont ajoutés après la seconde barre oblique. On peut également les indiquer dans le deuxième paramètre du constructeur {{jsxref("RegExp")}}. Les marqueurs d'une expression rationnelle peuvent être utilisés séparément ou combinés, dans n'importe quel ordre. Il existe uniquement cinq marqueurs autorisés en ECMAScript.

- -

Pour ajouter un marqueur sur une expression rationnelle, on utilisera cette syntaxe :

- -
var re = /motif/marqueurs;
-
- -

ou encore :

- -
var re = new RegExp('motif', 'marqueurs');
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Marqueurs autorisés pour les expressions rationnelles
MarqueurDescription
gRecherche globale.
iRecherche non-sensible à la casse.
mRecherche sur plusieurs lignes.
uUnicode : le motif est interprété comme une suite de codets Unicode.
yLa recherche effectuée est « adhérente » et recherche une correspondance à la position indiquée dans la chaîne cible (cf. {{jsxref("RegExp.sticky", "sticky")}}).
- -

Exemples

- -

Seuls cinq marqueurs d'expression rationnelle sont valides :

- -
/toto/truc;
-
-// SyntaxError: invalid regular expression flag "t"
-
- -

Peut-être souhaitiez-vous créer une expression rationnelle ? Une expression qui contient deux barres obliques est interprétée comme un littéral d'expression rationnelle :

- -
let obj = {
-  url: /docs/Web
-};
-
-// SyntaxError: invalid regular expression flag "W"
-
- -

Peut-être souhaitiez-vous créer une chaîne de caractères ? Dans ce cas, il faut ajouter des quotes (simples ou doubles) afin de former un littéral de chaîne de caractères :

- -
let obj = {
-  url: '/docs/Web'
-};
- -

Marqueurs valides

- -

Voir le tableau ci-avant pour la liste des marqueurs autorisés pour manipuler les expressions rationnelles en JavaScript.

- -
/toto/g;
-/toto/gim;
-/toto/uy;
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/bad_regexp_flag/index.md b/files/fr/web/javascript/reference/errors/bad_regexp_flag/index.md new file mode 100644 index 0000000000..9f1632d1a0 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/bad_regexp_flag/index.md @@ -0,0 +1,107 @@ +--- +title: 'SyntaxError: invalid regular expression flag "x"' +slug: Web/JavaScript/Reference/Errors/Bad_regexp_flag +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag +original_slug: Web/JavaScript/Reference/Erreurs/Bad_regexp_flag +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Syntax error in regular expression (Edge)
+SyntaxError: invalid regular expression flag "x" (Firefox)
+SyntaxError: Invalid regular expression flags (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Un marqueur (flag) invalide est utilisé dans une expression rationnelle. Un littéral d'expression rationnelle se compose d'un motif entouré de deux barres obliques, les marqueurs sont ajoutés après la seconde barre oblique. On peut également les indiquer dans le deuxième paramètre du constructeur {{jsxref("RegExp")}}. Les marqueurs d'une expression rationnelle peuvent être utilisés séparément ou combinés, dans n'importe quel ordre. Il existe uniquement cinq marqueurs autorisés en ECMAScript.

+ +

Pour ajouter un marqueur sur une expression rationnelle, on utilisera cette syntaxe :

+ +
var re = /motif/marqueurs;
+
+ +

ou encore :

+ +
var re = new RegExp('motif', 'marqueurs');
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Marqueurs autorisés pour les expressions rationnelles
MarqueurDescription
gRecherche globale.
iRecherche non-sensible à la casse.
mRecherche sur plusieurs lignes.
uUnicode : le motif est interprété comme une suite de codets Unicode.
yLa recherche effectuée est « adhérente » et recherche une correspondance à la position indiquée dans la chaîne cible (cf. {{jsxref("RegExp.sticky", "sticky")}}).
+ +

Exemples

+ +

Seuls cinq marqueurs d'expression rationnelle sont valides :

+ +
/toto/truc;
+
+// SyntaxError: invalid regular expression flag "t"
+
+ +

Peut-être souhaitiez-vous créer une expression rationnelle ? Une expression qui contient deux barres obliques est interprétée comme un littéral d'expression rationnelle :

+ +
let obj = {
+  url: /docs/Web
+};
+
+// SyntaxError: invalid regular expression flag "W"
+
+ +

Peut-être souhaitiez-vous créer une chaîne de caractères ? Dans ce cas, il faut ajouter des quotes (simples ou doubles) afin de former un littéral de chaîne de caractères :

+ +
let obj = {
+  url: '/docs/Web'
+};
+ +

Marqueurs valides

+ +

Voir le tableau ci-avant pour la liste des marqueurs autorisés pour manipuler les expressions rationnelles en JavaScript.

+ +
/toto/g;
+/toto/gim;
+/toto/uy;
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/bad_return_or_yield/index.html b/files/fr/web/javascript/reference/errors/bad_return_or_yield/index.html deleted file mode 100644 index 787f099067..0000000000 --- a/files/fr/web/javascript/reference/errors/bad_return_or_yield/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: 'SyntaxError: return not in function' -slug: Web/JavaScript/Reference/Errors/Bad_return_or_yield -tags: - - Erreurs - - JavaScript - - Reference - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Bad_return_or_yield -original_slug: Web/JavaScript/Reference/Erreurs/Bad_return_or_yield ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: 'return' statement outside of function (Edge)
-SyntaxError: return not in function (Firefox)
-SyntaxError: yield not in function (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}.

- -

Quel est le problème ?

- -

Une instruction return ou yield est utilisée en dehors d'une fonction. Il est possible que des accolades soient manquantes. Les mots-clés return et yield doivent être utilisés dans une fonction car ils permettent de terminer ou d'arrêter/reprendre l'exécution d'une fonction et de définir une valeur qui doit être renvoyée à l'appelant de la fonction.

- -

Exemples

- -
var encouragement = function(score) {
-  if (score === 147)
-    return "Super !";
-  };
-  if (score > 100) {
-    return "Un record!";
-  }
-}
-
-// SyntaxError: return not in function
- -

À première vue, les accolades semblent correctes mais en regardant de plus près, on voit qu'il manque une accolade ouvrante ("{") après la première instruction if. La version correcte serait :

- -
var encouragement = function(score) {
-  if (score === 147) {
-    return "Maximum!";
-  }
-  if (score > 100) {
-    return "Century!";
-  }
-};
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/bad_return_or_yield/index.md b/files/fr/web/javascript/reference/errors/bad_return_or_yield/index.md new file mode 100644 index 0000000000..787f099067 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/bad_return_or_yield/index.md @@ -0,0 +1,58 @@ +--- +title: 'SyntaxError: return not in function' +slug: Web/JavaScript/Reference/Errors/Bad_return_or_yield +tags: + - Erreurs + - JavaScript + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_return_or_yield +original_slug: Web/JavaScript/Reference/Erreurs/Bad_return_or_yield +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: 'return' statement outside of function (Edge)
+SyntaxError: return not in function (Firefox)
+SyntaxError: yield not in function (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}.

+ +

Quel est le problème ?

+ +

Une instruction return ou yield est utilisée en dehors d'une fonction. Il est possible que des accolades soient manquantes. Les mots-clés return et yield doivent être utilisés dans une fonction car ils permettent de terminer ou d'arrêter/reprendre l'exécution d'une fonction et de définir une valeur qui doit être renvoyée à l'appelant de la fonction.

+ +

Exemples

+ +
var encouragement = function(score) {
+  if (score === 147)
+    return "Super !";
+  };
+  if (score > 100) {
+    return "Un record!";
+  }
+}
+
+// SyntaxError: return not in function
+ +

À première vue, les accolades semblent correctes mais en regardant de plus près, on voit qu'il manque une accolade ouvrante ("{") après la première instruction if. La version correcte serait :

+ +
var encouragement = function(score) {
+  if (score === 147) {
+    return "Maximum!";
+  }
+  if (score > 100) {
+    return "Century!";
+  }
+};
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.html b/files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.html deleted file mode 100644 index 35fcf07a52..0000000000 --- a/files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 'TypeError: X.prototype.y called on incompatible type' -slug: Web/JavaScript/Reference/Errors/Called_on_incompatible_type -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Called_on_incompatible_type -original_slug: Web/JavaScript/Reference/Erreurs/Called_on_incompatible_type ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: 'this' is not a Set object (Edge)
-TypeError: Function.prototype.toString called on incompatible object (Firefox)
-TypeError: Function.prototype.bind called on incompatible target (Firefox)
-TypeError: Method Set.prototype.add called on incompatible receiver undefined (Chrome)
-TypeError: Bind must be called on a function (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

Lorsque cette erreur est levée, cela signifie qu'une fonction (d'un objet donné) est appelé avec une valeur this qui ne correspond pas au type attendu par la fonction.

- -

Cela peut se produire lorsqu'on utilise les méthodes {{jsxref("Function.prototype.call()")}} ou {{jsxref("Function.prototype.apply()")}} et qu'on fournit un argument this dont le type n'est pas celui attendu.

- -

Cela peut également se produire quand on fournit une fonction (sous la forme d'un objet) comme argument d'une autre fonction. Dans ce cas, l'objet ne sera pas capturé comme valeur this pour la fonction. Pour contourner ce problème, on peut fournir une fonction lambda qui effectue l'appel ou utiliser la fonction {{jsxref("Function.prototype.bind()")}} afin que this soit l'objet attendu.

- -

Exemples

- -

Exemples invalides

- -
var monSet = new Set;
-['truc', 'bidule'].forEach(monSet.add);
-// monSet.add est une fonction mais
-// "monSet" n'est pas capturé en tant que this.
-
-var maFonction = function () {
-  console.log(this);
-};
-['truc', 'bidule'].forEach(maFonction.bind);
-// maFonction.bind est une fonction
-// mais "maFonction" n'est pas capturé en tant
-// que this.
-
-
- -

Exemples valides

- -
var monSet = new Set;
-['truc', 'bidule'].forEach(monSet.add.bind(monSet));
-// Cela fonctionne car on lie "monSet" avec this.
-
-var maFonction = function () {
-  console.log(this)
-};
-['truc', 'bidule'].forEach(x => maFonction.bind(x));
-// Cela fonctionne car on utilise
-// la fonction "bind" ce qui permet de
-// créer une fonction lambda qui propage
-// l'argument.
-
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.md b/files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.md new file mode 100644 index 0000000000..35fcf07a52 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/called_on_incompatible_type/index.md @@ -0,0 +1,76 @@ +--- +title: 'TypeError: X.prototype.y called on incompatible type' +slug: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +original_slug: Web/JavaScript/Reference/Erreurs/Called_on_incompatible_type +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: 'this' is not a Set object (Edge)
+TypeError: Function.prototype.toString called on incompatible object (Firefox)
+TypeError: Function.prototype.bind called on incompatible target (Firefox)
+TypeError: Method Set.prototype.add called on incompatible receiver undefined (Chrome)
+TypeError: Bind must be called on a function (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

Lorsque cette erreur est levée, cela signifie qu'une fonction (d'un objet donné) est appelé avec une valeur this qui ne correspond pas au type attendu par la fonction.

+ +

Cela peut se produire lorsqu'on utilise les méthodes {{jsxref("Function.prototype.call()")}} ou {{jsxref("Function.prototype.apply()")}} et qu'on fournit un argument this dont le type n'est pas celui attendu.

+ +

Cela peut également se produire quand on fournit une fonction (sous la forme d'un objet) comme argument d'une autre fonction. Dans ce cas, l'objet ne sera pas capturé comme valeur this pour la fonction. Pour contourner ce problème, on peut fournir une fonction lambda qui effectue l'appel ou utiliser la fonction {{jsxref("Function.prototype.bind()")}} afin que this soit l'objet attendu.

+ +

Exemples

+ +

Exemples invalides

+ +
var monSet = new Set;
+['truc', 'bidule'].forEach(monSet.add);
+// monSet.add est une fonction mais
+// "monSet" n'est pas capturé en tant que this.
+
+var maFonction = function () {
+  console.log(this);
+};
+['truc', 'bidule'].forEach(maFonction.bind);
+// maFonction.bind est une fonction
+// mais "maFonction" n'est pas capturé en tant
+// que this.
+
+
+ +

Exemples valides

+ +
var monSet = new Set;
+['truc', 'bidule'].forEach(monSet.add.bind(monSet));
+// Cela fonctionne car on lie "monSet" avec this.
+
+var maFonction = function () {
+  console.log(this)
+};
+['truc', 'bidule'].forEach(x => maFonction.bind(x));
+// Cela fonctionne car on utilise
+// la fonction "bind" ce qui permet de
+// créer une fonction lambda qui propage
+// l'argument.
+
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html b/files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html deleted file mode 100644 index 1ac434163b..0000000000 --- a/files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: 'ReferenceError: can''t access lexical declaration`X'' before initialization' -slug: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init -tags: - - Erreur - - JavaScript - - Reference - - ReferenceError -translation_of: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init -original_slug: Web/JavaScript/Reference/Erreurs/Cant_access_lexical_declaration_before_init ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
ReferenceError: Use before delaration (Edge)
-ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
-ReferenceError: 'x' is not defined (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("ReferenceError")}}

- -

Quel est le problème ?

- -

Il y a eu un accès à une variable déclarée avec let ou const avant que celle-ci ait été initialisée. Cela peut se produire dans n'importe quelle instruction de bloc avec une variable déclarée avec let ou const et qui est utilisée avant son initialisation.

- -

Exemple

- -

Exemples invalides

- -

Dans l'exemple qui suit, la variable toto est redéclarée dans le bloc avec un second let et elle n'est donc pas initialisée.

- -
function test(){
-   let toto = 33;
-   if (true) {
-      let toto = (toto + 55);
-      // ReferenceError: can't access lexical
-      // declaration `toto` before initialization
-   }
-}
-test();
-
- -

Exemples valides

- -

Afin que toto puisse être modifiée au sein de l'instruction if, on enlèvera la redéclaration dans ce bloc :

- -
function test(){
-   let toto = 33;
-   if (true) {
-      toto = (toto + 55);
-   }
-}
-test();
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.md b/files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.md new file mode 100644 index 0000000000..1ac434163b --- /dev/null +++ b/files/fr/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.md @@ -0,0 +1,63 @@ +--- +title: 'ReferenceError: can''t access lexical declaration`X'' before initialization' +slug: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +tags: + - Erreur + - JavaScript + - Reference + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +original_slug: Web/JavaScript/Reference/Erreurs/Cant_access_lexical_declaration_before_init +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
ReferenceError: Use before delaration (Edge)
+ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
+ReferenceError: 'x' is not defined (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("ReferenceError")}}

+ +

Quel est le problème ?

+ +

Il y a eu un accès à une variable déclarée avec let ou const avant que celle-ci ait été initialisée. Cela peut se produire dans n'importe quelle instruction de bloc avec une variable déclarée avec let ou const et qui est utilisée avant son initialisation.

+ +

Exemple

+ +

Exemples invalides

+ +

Dans l'exemple qui suit, la variable toto est redéclarée dans le bloc avec un second let et elle n'est donc pas initialisée.

+ +
function test(){
+   let toto = 33;
+   if (true) {
+      let toto = (toto + 55);
+      // ReferenceError: can't access lexical
+      // declaration `toto` before initialization
+   }
+}
+test();
+
+ +

Exemples valides

+ +

Afin que toto puisse être modifiée au sein de l'instruction if, on enlèvera la redéclaration dans ce bloc :

+ +
function test(){
+   let toto = 33;
+   if (true) {
+      toto = (toto + 55);
+   }
+}
+test();
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/cant_access_property/index.html b/files/fr/web/javascript/reference/errors/cant_access_property/index.html deleted file mode 100644 index e9ea7c5e0c..0000000000 --- a/files/fr/web/javascript/reference/errors/cant_access_property/index.html +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: 'TypeError: can''t access property "x" of "y"' -slug: Web/JavaScript/Reference/Errors/Cant_access_property -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Cant_access_property -original_slug: Web/JavaScript/Reference/Erreurs/Cant_access_property ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Unable to get property {x} of undefined or null reference (Edge)
-TypeError: can't access property {x} of {y} (Firefox)
-TypeError: {y} is undefined, can't access property {x} of it (Firefox)
-TypeError: {y} is null, can't access property {x} of it (Firefox)
-
-Exemples
-TypeError: x is undefined, can't access property "prop" of it
-TypeError: x is null, can't access property "prop" of it
-TypeError: can't access property "prop" of undefined
-TypeError: can't access property "prop" of null
-
- -

Types d'erreur

- -

{{jsxref("TypeError")}}.

- -

Quel est le problème ?

- -

On a tenté d'accéder à une propriété sur la valeur {{jsxref("undefined")}} ou {{jsxref("null")}}.

- -

Exemples

- -

Cas invalides

- -
// undefined et null ne possèdent aucune propriété et aucune méthode substring
-var toto = undefined;
-toto.substring(1); // TypeError: x is undefined, can't access property "substring" of it
-
-var toto = null;
-toto.substring(1); // TypeError: x is null, can't access property "substring" of it
-
- -

Corriger le problème

- -

Pour détecter le cas où la valeur utilisée est undefined ou null, on peut utiliser l'opérateur typeof. Par exemple :

- -
if (typeof toto !== 'undefined') {
-  // On sait alors que toto est bien défini et on peut utiliser ses propriétés s'il en a.
-}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/cant_access_property/index.md b/files/fr/web/javascript/reference/errors/cant_access_property/index.md new file mode 100644 index 0000000000..e9ea7c5e0c --- /dev/null +++ b/files/fr/web/javascript/reference/errors/cant_access_property/index.md @@ -0,0 +1,60 @@ +--- +title: 'TypeError: can''t access property "x" of "y"' +slug: Web/JavaScript/Reference/Errors/Cant_access_property +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_access_property +original_slug: Web/JavaScript/Reference/Erreurs/Cant_access_property +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: can't access property {x} of {y} (Firefox)
+TypeError: {y} is undefined, can't access property {x} of it (Firefox)
+TypeError: {y} is null, can't access property {x} of it (Firefox)
+
+Exemples
+TypeError: x is undefined, can't access property "prop" of it
+TypeError: x is null, can't access property "prop" of it
+TypeError: can't access property "prop" of undefined
+TypeError: can't access property "prop" of null
+
+ +

Types d'erreur

+ +

{{jsxref("TypeError")}}.

+ +

Quel est le problème ?

+ +

On a tenté d'accéder à une propriété sur la valeur {{jsxref("undefined")}} ou {{jsxref("null")}}.

+ +

Exemples

+ +

Cas invalides

+ +
// undefined et null ne possèdent aucune propriété et aucune méthode substring
+var toto = undefined;
+toto.substring(1); // TypeError: x is undefined, can't access property "substring" of it
+
+var toto = null;
+toto.substring(1); // TypeError: x is null, can't access property "substring" of it
+
+ +

Corriger le problème

+ +

Pour détecter le cas où la valeur utilisée est undefined ou null, on peut utiliser l'opérateur typeof. Par exemple :

+ +
if (typeof toto !== 'undefined') {
+  // On sait alors que toto est bien défini et on peut utiliser ses propriétés s'il en a.
+}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/cant_assign_to_property/index.html b/files/fr/web/javascript/reference/errors/cant_assign_to_property/index.html deleted file mode 100644 index 29b72aaa47..0000000000 --- a/files/fr/web/javascript/reference/errors/cant_assign_to_property/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 'TypeError: can''t assign to property "x" on "y": not an object' -slug: Web/JavaScript/Reference/Errors/Cant_assign_to_property -tags: - - Error - - Errors - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Cant_assign_to_property -original_slug: Web/JavaScript/Reference/Erreurs/Cant_assign_to_property ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: can't assign to property "x" on {y}: not an object (Firefox)
-TypeError: Cannot create property 'x' on {y} (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}.

- -

Quel est le problème ?

- -

En mode strict, une exception {{jsxref("TypeError")}} est déclenchée lorsqu'on tente de créer une propriété sur une valeur primitive telle qu'un symbole, une chaîne de caractères, un nombre ou un booleén.

- -

Le problème peut être lié à une valeur qui se trouve à un endroit inattendu ou qu'un équivalent objet d'une valeur primitive est attendu (ex. {{jsxref("String")}} pour la chaîne de caractères ou {{jsxref("Number")}} pour un nombre).

- -

Exemples

- -

Exemple invalide

- -
'use strict';
-
-var foo = "my string";
-// The following line does nothing if not in strict mode.
-foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
-
- -

Exemple valide

- -

On pourra corriger le problème en convertissant la valeur primitive en sont équivalent objet avec un constructeur (ici {{jsxref("String")}} pour .

- -
'use strict';
-
-var foo = new String("my string");
-foo.bar = {};
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/cant_assign_to_property/index.md b/files/fr/web/javascript/reference/errors/cant_assign_to_property/index.md new file mode 100644 index 0000000000..29b72aaa47 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/cant_assign_to_property/index.md @@ -0,0 +1,56 @@ +--- +title: 'TypeError: can''t assign to property "x" on "y": not an object' +slug: Web/JavaScript/Reference/Errors/Cant_assign_to_property +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_assign_to_property +original_slug: Web/JavaScript/Reference/Erreurs/Cant_assign_to_property +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: can't assign to property "x" on {y}: not an object (Firefox)
+TypeError: Cannot create property 'x' on {y} (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}.

+ +

Quel est le problème ?

+ +

En mode strict, une exception {{jsxref("TypeError")}} est déclenchée lorsqu'on tente de créer une propriété sur une valeur primitive telle qu'un symbole, une chaîne de caractères, un nombre ou un booleén.

+ +

Le problème peut être lié à une valeur qui se trouve à un endroit inattendu ou qu'un équivalent objet d'une valeur primitive est attendu (ex. {{jsxref("String")}} pour la chaîne de caractères ou {{jsxref("Number")}} pour un nombre).

+ +

Exemples

+ +

Exemple invalide

+ +
'use strict';
+
+var foo = "my string";
+// The following line does nothing if not in strict mode.
+foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
+
+ +

Exemple valide

+ +

On pourra corriger le problème en convertissant la valeur primitive en sont équivalent objet avec un constructeur (ici {{jsxref("String")}} pour .

+ +
'use strict';
+
+var foo = new String("my string");
+foo.bar = {};
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html b/files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html deleted file mode 100644 index 674ffd0138..0000000000 --- a/files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: 'TypeError: can''t define property "x": "obj" is not extensible' -slug: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible -original_slug: Web/JavaScript/Reference/Erreurs/Cant_define_property_object_not_extensible ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
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)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

La plupart du temps, un objet est extensible, ce qui signifie qu'on peut lui ajouter de nouvelles propriétés. Cependant, dans ce cas, on a utilisé la méthode {{jsxref("Object.preventExtensions()")}} afin de marquer l'objet comme non-extensible. Celui-ci ne pourra donc pas recevoir de nouvelles propriétés en plus de celles dont il dispose déjà.

- -

Exemples

- -

En mode strict, si on essaie d'ajouter une nouvelle propriété sur un objet non-extensible, on obtient une exception TypeError. En mode non-strict, l'ajout de la nouvelle propriété est ignoré silencieusement.

- -
'use strict';
-
-var obj = {};
-Object.preventExtensions(obj);
-
-obj.x = 'toto';
-// TypeError: can't define property "x": "obj" is not extensible
-
- -

Pour le mode strict ete le mode non-strict, un appel à {{jsxref("Object.defineProperty()")}} déclenchera une exception lorsqu'on utilisera cette méthode pour ajouter une nouvelle propriété à un objet non-extenssible.

- -
var obj = { };
-Object.preventExtensions(obj);
-
-Object.defineProperty(obj,
-  'x', { value: "toto" }
-);
-// TypeError: can't define property "x": "obj" is not extensible
-
- -

Pour corriger cet erreur, il faut retirer l'appel à {{jsxref("Object.preventExtensions()")}} pour que l'objet soit extensible, soit ajouter la propriété avant que l'objet devienne non-extensible, soit retirer l'ajout de cette propriété si elle n'est pas nécessaire.

- -
'use strict';
-
-var obj = {};
-obj.x = 'toto'; // On ajoute la propriété avant de
-               // bloquer l'ajout d'autres propriétés
-
-Object.preventExtensions(obj);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.md b/files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.md new file mode 100644 index 0000000000..674ffd0138 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.md @@ -0,0 +1,66 @@ +--- +title: 'TypeError: can''t define property "x": "obj" is not extensible' +slug: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +original_slug: Web/JavaScript/Reference/Erreurs/Cant_define_property_object_not_extensible +--- +
{{jsSidebar("Errors")}}
+ +

Message

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

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

La plupart du temps, un objet est extensible, ce qui signifie qu'on peut lui ajouter de nouvelles propriétés. Cependant, dans ce cas, on a utilisé la méthode {{jsxref("Object.preventExtensions()")}} afin de marquer l'objet comme non-extensible. Celui-ci ne pourra donc pas recevoir de nouvelles propriétés en plus de celles dont il dispose déjà.

+ +

Exemples

+ +

En mode strict, si on essaie d'ajouter une nouvelle propriété sur un objet non-extensible, on obtient une exception TypeError. En mode non-strict, l'ajout de la nouvelle propriété est ignoré silencieusement.

+ +
'use strict';
+
+var obj = {};
+Object.preventExtensions(obj);
+
+obj.x = 'toto';
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

Pour le mode strict ete le mode non-strict, un appel à {{jsxref("Object.defineProperty()")}} déclenchera une exception lorsqu'on utilisera cette méthode pour ajouter une nouvelle propriété à un objet non-extenssible.

+ +
var obj = { };
+Object.preventExtensions(obj);
+
+Object.defineProperty(obj,
+  'x', { value: "toto" }
+);
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

Pour corriger cet erreur, il faut retirer l'appel à {{jsxref("Object.preventExtensions()")}} pour que l'objet soit extensible, soit ajouter la propriété avant que l'objet devienne non-extensible, soit retirer l'ajout de cette propriété si elle n'est pas nécessaire.

+ +
'use strict';
+
+var obj = {};
+obj.x = 'toto'; // On ajoute la propriété avant de
+               // bloquer l'ajout d'autres propriétés
+
+Object.preventExtensions(obj);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/cant_delete/index.html b/files/fr/web/javascript/reference/errors/cant_delete/index.html deleted file mode 100644 index 7ec2b3bac8..0000000000 --- a/files/fr/web/javascript/reference/errors/cant_delete/index.html +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: 'TypeError: property "x" is non-configurable and can''t be deleted' -slug: Web/JavaScript/Reference/Errors/Cant_delete -tags: - - Erreurs - - JavaScript - - Mode strict - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Cant_delete -original_slug: Web/JavaScript/Reference/Erreurs/Cant_delete ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Calling delete on 'x' is not allowed in strict mode (Edge)
-TypeError: property "x" is non-configurable and can't be deleted. (Firefox)
-TypeError: Cannot delete property 'x' of #<Object> (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}} in strict mode only.

- -

Quel est le problème ?

- -

Une instruction demande la suppression d'une propriété non-configurable. L'attribut configurable permet de contrôler si la propriété peut être supprimée de l'objet auquel elle est rattachée et si ces attributs (en dehors de writable) peuvent être modifiés.

- -

Cette erreur ne se produit qu'en mode strict. En mode non-strict, l'opération de suppression renverra false.

- -

Exemples

- -

Les propriétés non-configurables ne sont pas très fréquentes mais il est possible d'en créer grâce à {{jsxref("Object.defineProperty()")}} ou à  {{jsxref("Object.freeze()")}}.

- -
"use strict";
-var obj = Object.freeze({name: "Elsa", score: 157});
-delete obj.score;  // TypeError
-
-"use strict";
-var obj = {};
-Object.defineProperty(obj, "toto", {value: 2, configurable: false});
-delete obj.toto;  // TypeError
-
-"use strict";
-var frozenArray = Object.freeze([0, 1, 2]);
-frozenArray.pop();  // TypeError
-
- -

Certaines propriétés natives de JavaScript sont non-configurables. Peut-être que le code tente de supprimer une constante mathématique :

- -
"use strict";
-delete Math.PI;  // TypeError
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/cant_delete/index.md b/files/fr/web/javascript/reference/errors/cant_delete/index.md new file mode 100644 index 0000000000..7ec2b3bac8 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/cant_delete/index.md @@ -0,0 +1,60 @@ +--- +title: 'TypeError: property "x" is non-configurable and can''t be deleted' +slug: Web/JavaScript/Reference/Errors/Cant_delete +tags: + - Erreurs + - JavaScript + - Mode strict + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_delete +original_slug: Web/JavaScript/Reference/Erreurs/Cant_delete +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Calling delete on 'x' is not allowed in strict mode (Edge)
+TypeError: property "x" is non-configurable and can't be deleted. (Firefox)
+TypeError: Cannot delete property 'x' of #<Object> (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}} in strict mode only.

+ +

Quel est le problème ?

+ +

Une instruction demande la suppression d'une propriété non-configurable. L'attribut configurable permet de contrôler si la propriété peut être supprimée de l'objet auquel elle est rattachée et si ces attributs (en dehors de writable) peuvent être modifiés.

+ +

Cette erreur ne se produit qu'en mode strict. En mode non-strict, l'opération de suppression renverra false.

+ +

Exemples

+ +

Les propriétés non-configurables ne sont pas très fréquentes mais il est possible d'en créer grâce à {{jsxref("Object.defineProperty()")}} ou à  {{jsxref("Object.freeze()")}}.

+ +
"use strict";
+var obj = Object.freeze({name: "Elsa", score: 157});
+delete obj.score;  // TypeError
+
+"use strict";
+var obj = {};
+Object.defineProperty(obj, "toto", {value: 2, configurable: false});
+delete obj.toto;  // TypeError
+
+"use strict";
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray.pop();  // TypeError
+
+ +

Certaines propriétés natives de JavaScript sont non-configurables. Peut-être que le code tente de supprimer une constante mathématique :

+ +
"use strict";
+delete Math.PI;  // TypeError
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/cant_redefine_property/index.html b/files/fr/web/javascript/reference/errors/cant_redefine_property/index.html deleted file mode 100644 index 5311f957a5..0000000000 --- a/files/fr/web/javascript/reference/errors/cant_redefine_property/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: 'TypeError: can''t redefine non-configurable property "x"' -slug: Web/JavaScript/Reference/Errors/Cant_redefine_property -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property -original_slug: Web/JavaScript/Reference/Erreurs/Cant_redefine_property ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Cannot modify non-writable property {x} (Edge)
-TypeError: can't redefine non-configurable property "x" (Firefox)
-TypeError: Cannot redefine property: "x" (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

On essaie de redéfinir une propriété alors que celle-ci est non-configurable. L'attribut configurable permet d'indiquer si la propriété peut être supprimée d'un objet et si ses attributs (en dehors de writable) peuvent être modifiés. Généralement, les propriétés d'un objet créées avec un initialisateur d'objet sont configurables. Cependant, lorsqu'on utilise la méthode {{jsxref("Object.defineProperty()")}}, la propriété n'est pas configurable par défaut.

- -

Exemples

- -

Propriétés non-configurables créées avec Object.defineProperty()

- -

La méthode {{jsxref("Object.defineProperty()")}} crée des propriétés non-configurables si on n'indique pas le contraire :

- -
var obj = Object.create({});
-Object.defineProperty(obj, "toto", {value: "machin"});
-
-Object.defineProperty(obj, "toto", {value: "bidule"});
-// TypeError: can't redefine non-configurable property "toto"
-
- -

Si on veut pouvoir redéfinir la propriété "toto" dans la suite du code, il faudra la créer comme étant configurable.

- -
var obj = Object.create({});
-Object.defineProperty(obj, "toto", {value: "machin", configurable: true});
-Object.defineProperty(obj, "toto", {value: "bidule", configurable: true});
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/cant_redefine_property/index.md b/files/fr/web/javascript/reference/errors/cant_redefine_property/index.md new file mode 100644 index 0000000000..5311f957a5 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/cant_redefine_property/index.md @@ -0,0 +1,52 @@ +--- +title: 'TypeError: can''t redefine non-configurable property "x"' +slug: Web/JavaScript/Reference/Errors/Cant_redefine_property +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property +original_slug: Web/JavaScript/Reference/Erreurs/Cant_redefine_property +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Cannot modify non-writable property {x} (Edge)
+TypeError: can't redefine non-configurable property "x" (Firefox)
+TypeError: Cannot redefine property: "x" (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

On essaie de redéfinir une propriété alors que celle-ci est non-configurable. L'attribut configurable permet d'indiquer si la propriété peut être supprimée d'un objet et si ses attributs (en dehors de writable) peuvent être modifiés. Généralement, les propriétés d'un objet créées avec un initialisateur d'objet sont configurables. Cependant, lorsqu'on utilise la méthode {{jsxref("Object.defineProperty()")}}, la propriété n'est pas configurable par défaut.

+ +

Exemples

+ +

Propriétés non-configurables créées avec Object.defineProperty()

+ +

La méthode {{jsxref("Object.defineProperty()")}} crée des propriétés non-configurables si on n'indique pas le contraire :

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "toto", {value: "machin"});
+
+Object.defineProperty(obj, "toto", {value: "bidule"});
+// TypeError: can't redefine non-configurable property "toto"
+
+ +

Si on veut pouvoir redéfinir la propriété "toto" dans la suite du code, il faudra la créer comme étant configurable.

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "toto", {value: "machin", configurable: true});
+Object.defineProperty(obj, "toto", {value: "bidule", configurable: true});
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/cyclic_object_value/index.html b/files/fr/web/javascript/reference/errors/cyclic_object_value/index.html deleted file mode 100644 index aa50f933f9..0000000000 --- a/files/fr/web/javascript/reference/errors/cyclic_object_value/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: 'TypeError: cyclic object value' -slug: Web/JavaScript/Reference/Errors/Cyclic_object_value -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value -original_slug: Web/JavaScript/Reference/Erreurs/Cyclic_object_value ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: cyclic object value (Firefox)
-TypeError: Converting circular structure to JSON (Chrome and Opera)
-TypeError: Circular reference in value argument not supported (Edge)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

Lorsqu'on appelle la méthode {{jsxref("JSON.stringify()")}}, les structures de références cycliques ne peuvent pas être converties en chaîne de caractères car le format JSON ne prend pas en charge les références (bien qu'un brouillon IETF existe).

- -

Exemples

- -

Avec une structure circulaire comme la suivante :

- -
var a = {};
-var b = {};
-a.child = b;
-b.child = a;
-
- -

{{jsxref("JSON.stringify()")}} échouera :

- -
JSON.stringify(a);
-// TypeError: cyclic object value
-
- -

Il est nécessaire de contrôler l'existence de cycles avant la conversion en chaîne de caractères. On peut par exemple fournir une fonction de remplacement comme deuxième argument de la fonction {{jsxref("JSON.stringify()")}}.

- -
const getCircularReplacer = () => {
-  const seen = new WeakSet();
-  return (key, value) => {
-    if (typeof value === "object" && value !== null) {
-      if (seen.has(value)) {
-        return;
-      }
-      seen.add(value);
-    }
-    return value;
-  };
-};
-
-JSON.stringify(circularReference, getCircularReplacer());
-// {"otherData":123}
- -

On peut également utiliser une bibliothèque ou une fonction utilitaire pour ce scénario. comme cycle.js.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/cyclic_object_value/index.md b/files/fr/web/javascript/reference/errors/cyclic_object_value/index.md new file mode 100644 index 0000000000..aa50f933f9 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/cyclic_object_value/index.md @@ -0,0 +1,69 @@ +--- +title: 'TypeError: cyclic object value' +slug: Web/JavaScript/Reference/Errors/Cyclic_object_value +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value +original_slug: Web/JavaScript/Reference/Erreurs/Cyclic_object_value +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: cyclic object value (Firefox)
+TypeError: Converting circular structure to JSON (Chrome and Opera)
+TypeError: Circular reference in value argument not supported (Edge)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

Lorsqu'on appelle la méthode {{jsxref("JSON.stringify()")}}, les structures de références cycliques ne peuvent pas être converties en chaîne de caractères car le format JSON ne prend pas en charge les références (bien qu'un brouillon IETF existe).

+ +

Exemples

+ +

Avec une structure circulaire comme la suivante :

+ +
var a = {};
+var b = {};
+a.child = b;
+b.child = a;
+
+ +

{{jsxref("JSON.stringify()")}} échouera :

+ +
JSON.stringify(a);
+// TypeError: cyclic object value
+
+ +

Il est nécessaire de contrôler l'existence de cycles avant la conversion en chaîne de caractères. On peut par exemple fournir une fonction de remplacement comme deuxième argument de la fonction {{jsxref("JSON.stringify()")}}.

+ +
const getCircularReplacer = () => {
+  const seen = new WeakSet();
+  return (key, value) => {
+    if (typeof value === "object" && value !== null) {
+      if (seen.has(value)) {
+        return;
+      }
+      seen.add(value);
+    }
+    return value;
+  };
+};
+
+JSON.stringify(circularReference, getCircularReplacer());
+// {"otherData":123}
+ +

On peut également utiliser une bibliothèque ou une fonction utilitaire pour ce scénario. comme cycle.js.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/dead_object/index.html b/files/fr/web/javascript/reference/errors/dead_object/index.html deleted file mode 100644 index ba4498fd26..0000000000 --- a/files/fr/web/javascript/reference/errors/dead_object/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: 'TypeError: can''t access dead object' -slug: Web/JavaScript/Reference/Errors/Dead_object -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Dead_object -original_slug: Web/JavaScript/Reference/Erreurs/Dead_object ---- -
{{JSSidebar("Errors")}}
- -

Message

- -
TypeError: can't access dead object
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

Afin d'améliorer l'utilisation de la mémoire et de prévenir les fuites mémoire, Firefox empêche les modules complémentaires de conserver des références fortes vers les objets du DOM après que leur document parent a été détruit. Un objet mort (dead) est un objet qui contient une référence forte vers un éléments du DOM, même après que celui-ci a été détruit dans le DOM. Pour éviter ces problèmes, les références aux objets du DOM d'un document étranger devraient être enregistrées dans un objet spécifique à ce document et être nettoyées lors de la suppression du document. On peut également utiliser les objets qui permettent d'enregistrer des références faibles.

- -

Vérifier si un objet est mort

- -

Components.utils fournit une méthode isDeadWrapper() qui peut être utilisée par du code privilégié :

- -
if (Components.utils.isDeadWrapper(window)) {
-  // dead
-}
- -

Du code sans privilège ne pourra pas accéder à Component.utils et pourra simplement intercepter l'exception :

- -
try {
-  String(window);
-}
-catch (e) {
-  console.log("window est problablement mort ");
-}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/dead_object/index.md b/files/fr/web/javascript/reference/errors/dead_object/index.md new file mode 100644 index 0000000000..ba4498fd26 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/dead_object/index.md @@ -0,0 +1,50 @@ +--- +title: 'TypeError: can''t access dead object' +slug: Web/JavaScript/Reference/Errors/Dead_object +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Dead_object +original_slug: Web/JavaScript/Reference/Erreurs/Dead_object +--- +
{{JSSidebar("Errors")}}
+ +

Message

+ +
TypeError: can't access dead object
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

Afin d'améliorer l'utilisation de la mémoire et de prévenir les fuites mémoire, Firefox empêche les modules complémentaires de conserver des références fortes vers les objets du DOM après que leur document parent a été détruit. Un objet mort (dead) est un objet qui contient une référence forte vers un éléments du DOM, même après que celui-ci a été détruit dans le DOM. Pour éviter ces problèmes, les références aux objets du DOM d'un document étranger devraient être enregistrées dans un objet spécifique à ce document et être nettoyées lors de la suppression du document. On peut également utiliser les objets qui permettent d'enregistrer des références faibles.

+ +

Vérifier si un objet est mort

+ +

Components.utils fournit une méthode isDeadWrapper() qui peut être utilisée par du code privilégié :

+ +
if (Components.utils.isDeadWrapper(window)) {
+  // dead
+}
+ +

Du code sans privilège ne pourra pas accéder à Component.utils et pourra simplement intercepter l'exception :

+ +
try {
+  String(window);
+}
+catch (e) {
+  console.log("window est problablement mort ");
+}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.html b/files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.html deleted file mode 100644 index 4451a729be..0000000000 --- a/files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: >- - SyntaxError: applying the 'delete' operator to an unqualified name is - deprecated -slug: Web/JavaScript/Reference/Errors/Delete_in_strict_mode -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode -original_slug: Web/JavaScript/Reference/Erreurs/Delete_in_strict_mode ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Calling delete on expression not allowed in strict mode (Edge)
-SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox)
-SyntaxError: Delete of an unqualified identifier in strict mode. (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}, uniquement en mode strict.

- -

Quel est le problème ?

- -

Les variables JavaScript ne peuvent pas être supprimées grâce à l'opérateur delete. En mode strict, toute tentative de suppression d'une variable lèvera une exception.

- -

L'opérateur delete sert uniquement à supprimer des propriétés sur un objet. Les propriétés d'un objet sont « qualifiées » si elles sont configurables.

- -

Contrairement à ce qu'on pourrait penser, l'opérateur delete n'a rien à voir avec la libération de la mémoire. La gestion de la mémoire se fait indirectement en cassant les références utilisées. Pour plus d'informations, consulter les pages sur delete et la gestion de la mémoire en JavaScript.

- -

Cette erreur ne se produit qu'en mode strict. En mode non-strict, l'opération renvoie simplement false.

- -

Exemples

- -

Essayer de supprimer une variable normale avec delete ne fonctionne pas, voire lève une exception en mode strict :

- -
'use strict';
-
-var x;
-
-// ...
-
-delete x;
-
-// SyntaxError: applying the 'delete' operator to
-// an unqualified name is deprecated
-
- -

Pour libérer le contenu d'une variable, on peut la passer à {{jsxref("null")}} :

- -
'use strict';
-
-var x;
-// ...
-x = null;
-
-// x peut être ramassée par le ramasse-miettes
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.md b/files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.md new file mode 100644 index 0000000000..4451a729be --- /dev/null +++ b/files/fr/web/javascript/reference/errors/delete_in_strict_mode/index.md @@ -0,0 +1,69 @@ +--- +title: >- + SyntaxError: applying the 'delete' operator to an unqualified name is + deprecated +slug: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +original_slug: Web/JavaScript/Reference/Erreurs/Delete_in_strict_mode +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Calling delete on expression not allowed in strict mode (Edge)
+SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox)
+SyntaxError: Delete of an unqualified identifier in strict mode. (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}, uniquement en mode strict.

+ +

Quel est le problème ?

+ +

Les variables JavaScript ne peuvent pas être supprimées grâce à l'opérateur delete. En mode strict, toute tentative de suppression d'une variable lèvera une exception.

+ +

L'opérateur delete sert uniquement à supprimer des propriétés sur un objet. Les propriétés d'un objet sont « qualifiées » si elles sont configurables.

+ +

Contrairement à ce qu'on pourrait penser, l'opérateur delete n'a rien à voir avec la libération de la mémoire. La gestion de la mémoire se fait indirectement en cassant les références utilisées. Pour plus d'informations, consulter les pages sur delete et la gestion de la mémoire en JavaScript.

+ +

Cette erreur ne se produit qu'en mode strict. En mode non-strict, l'opération renvoie simplement false.

+ +

Exemples

+ +

Essayer de supprimer une variable normale avec delete ne fonctionne pas, voire lève une exception en mode strict :

+ +
'use strict';
+
+var x;
+
+// ...
+
+delete x;
+
+// SyntaxError: applying the 'delete' operator to
+// an unqualified name is deprecated
+
+ +

Pour libérer le contenu d'une variable, on peut la passer à {{jsxref("null")}} :

+ +
'use strict';
+
+var x;
+// ...
+x = null;
+
+// x peut être ramassée par le ramasse-miettes
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html b/files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html deleted file mode 100644 index 669f4903a9..0000000000 --- a/files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 'ReferenceError: deprecated caller or arguments usage' -slug: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage -tags: - - Erreur - - JavaScript - - ReferenceError -translation_of: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage -original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_caller_or_arguments_usage ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context (Edge)
-Warning: ReferenceError: deprecated caller usage (Firefox)
-Warning: ReferenceError: deprecated arguments usage (Firefox)
-TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari)
-
- -

Type d'erreur

- -

Un avertissement uniquement affiché en mode strict qui prend la forme d'une {{jsxref("ReferenceError")}}. L'exécution du script JavaScript n'est pas interrompue.

- -

Quel est le problème ?

- -

En mode strict, les propriétés {{jsxref("Function.caller")}} et/ou {{jsxref("Function.arguments")}} sont utilisées alors qu'elles ne devraient pas l'être. Ces propriétés sont dépréciées car elles font fuiter des informations sur l'appelant de la fonction et ne sont pas standards. De plus, ces propriétés rendent certaines optimisations plus complexe et peuvent nuire aux performances.

- -

Exemples

- -

Utilisation de function.caller ou de arguments.callee.caller

- -

{{jsxref("Function.caller")}} et arguments.callee.caller sont dépréciées (se référer aux articles de la référence pour plus d'informations).

- -
"use strict";
-
-function myFunc() {
-  if (myFunc.caller == null) {
-    return 'La fonction a été appelée depuis la portée globale !';
-  } else {
-    return 'L\'appelant est ' + myFunc.caller;
-  }
-}
-
-myFunc();
-// Warning: ReferenceError: deprecated caller usage
-// "La fonction a été appelée depuis la portée globale !"
- -

Function.arguments

- -

{{jsxref("Function.arguments")}} est dépréciée (se référer à l'article sur cette propriété pour plus d'informations).

- -
"use strict";
-
-function f(n) { g(n - 1); }
-
-function g(n) {
-  console.log('before: ' + g.arguments[0]);
-  if (n > 0) { f(n); }
-  console.log('after: ' + g.arguments[0]);
-}
-
-f(2);
-
-console.log('returned: ' + g.arguments);
-// Warning: ReferenceError: deprecated arguments usage
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.md b/files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.md new file mode 100644 index 0000000000..669f4903a9 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.md @@ -0,0 +1,76 @@ +--- +title: 'ReferenceError: deprecated caller or arguments usage' +slug: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +tags: + - Erreur + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_caller_or_arguments_usage +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: 'arguments', 'callee' and 'caller' are restricted function properties and cannot be accessed in this context (Edge)
+Warning: ReferenceError: deprecated caller usage (Firefox)
+Warning: ReferenceError: deprecated arguments usage (Firefox)
+TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari)
+
+ +

Type d'erreur

+ +

Un avertissement uniquement affiché en mode strict qui prend la forme d'une {{jsxref("ReferenceError")}}. L'exécution du script JavaScript n'est pas interrompue.

+ +

Quel est le problème ?

+ +

En mode strict, les propriétés {{jsxref("Function.caller")}} et/ou {{jsxref("Function.arguments")}} sont utilisées alors qu'elles ne devraient pas l'être. Ces propriétés sont dépréciées car elles font fuiter des informations sur l'appelant de la fonction et ne sont pas standards. De plus, ces propriétés rendent certaines optimisations plus complexe et peuvent nuire aux performances.

+ +

Exemples

+ +

Utilisation de function.caller ou de arguments.callee.caller

+ +

{{jsxref("Function.caller")}} et arguments.callee.caller sont dépréciées (se référer aux articles de la référence pour plus d'informations).

+ +
"use strict";
+
+function myFunc() {
+  if (myFunc.caller == null) {
+    return 'La fonction a été appelée depuis la portée globale !';
+  } else {
+    return 'L\'appelant est ' + myFunc.caller;
+  }
+}
+
+myFunc();
+// Warning: ReferenceError: deprecated caller usage
+// "La fonction a été appelée depuis la portée globale !"
+ +

Function.arguments

+ +

{{jsxref("Function.arguments")}} est dépréciée (se référer à l'article sur cette propriété pour plus d'informations).

+ +
"use strict";
+
+function f(n) { g(n - 1); }
+
+function g(n) {
+  console.log('before: ' + g.arguments[0]);
+  if (n > 0) { f(n); }
+  console.log('after: ' + g.arguments[0]);
+}
+
+f(2);
+
+console.log('returned: ' + g.arguments);
+// Warning: ReferenceError: deprecated arguments usage
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.html b/files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.html deleted file mode 100644 index 5cd6889b74..0000000000 --- a/files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: 'Warning: expression closures are deprecated' -slug: Web/JavaScript/Reference/Errors/Deprecated_expression_closures -tags: - - Avertissement - - JavaScript - - Warning -translation_of: Web/JavaScript/Reference/Errors/Deprecated_expression_closures -original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_expression_closures ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: expression closures are deprecated
-
- -

Type d'erreur

- -

Un avertissement, l'exécution du code JavaScript ne sera pas interrompue.

- -

Quel est le problème ?

- -

La syntaxe non-standard avec une expression de fermeture est dépréciée et ne devrait plus être utilisée. Cette syntaxe sera complètement retirée avec le bug {{bug(1083458)}} et les scripts qui l'utilisent déclencheront alors une exception {{jsxref("SyntaxError")}}.

- -

Exemples

- -

Syntaxe dépréciée

- -

Les expression de fermeture permettent de ne pas utiliser les accolades ou les instructions return au sein d'une déclaration de fonction ou pour une définition de méthode dans un objet.

- -
var x = function() 1;
-
-var obj = {
-  count: function() 1
-};
-
- -

Syntaxe standard

- -

Pour convertir cette syntaxe non-standard en une syntaxe standard, il suffit d'ajouter des accolades et l'instruction return.

- -
var x = function() { return 1; }
-
-var obj = {
-  count: function() { return 1; }
-};
-
- -

Syntaxe standard avec les fonctions fléchées

- -

On peut aussi utiliser les fonctions fléchées :

- -
var x = () => 1;
- -

Syntaxe standard avec la notation raccourcie pour les méthodes

- -

On retrouve parfois les expressions de fermeture dans les accesseurs et les mutateurs, par exemple :

- -
var obj = {
-  get x() 1,
-  set x(v) this.v = v
-};
-
- -

Grâce aux définitions de méthodes ES2015, on peut convertir le fragment de code précédent en :

- -
var obj = {
-  get x() { return 1 },
-  set x(v) { this.v = v }
-};
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.md b/files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.md new file mode 100644 index 0000000000..5cd6889b74 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/deprecated_expression_closures/index.md @@ -0,0 +1,80 @@ +--- +title: 'Warning: expression closures are deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +tags: + - Avertissement + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_expression_closures +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: expression closures are deprecated
+
+ +

Type d'erreur

+ +

Un avertissement, l'exécution du code JavaScript ne sera pas interrompue.

+ +

Quel est le problème ?

+ +

La syntaxe non-standard avec une expression de fermeture est dépréciée et ne devrait plus être utilisée. Cette syntaxe sera complètement retirée avec le bug {{bug(1083458)}} et les scripts qui l'utilisent déclencheront alors une exception {{jsxref("SyntaxError")}}.

+ +

Exemples

+ +

Syntaxe dépréciée

+ +

Les expression de fermeture permettent de ne pas utiliser les accolades ou les instructions return au sein d'une déclaration de fonction ou pour une définition de méthode dans un objet.

+ +
var x = function() 1;
+
+var obj = {
+  count: function() 1
+};
+
+ +

Syntaxe standard

+ +

Pour convertir cette syntaxe non-standard en une syntaxe standard, il suffit d'ajouter des accolades et l'instruction return.

+ +
var x = function() { return 1; }
+
+var obj = {
+  count: function() { return 1; }
+};
+
+ +

Syntaxe standard avec les fonctions fléchées

+ +

On peut aussi utiliser les fonctions fléchées :

+ +
var x = () => 1;
+ +

Syntaxe standard avec la notation raccourcie pour les méthodes

+ +

On retrouve parfois les expressions de fermeture dans les accesseurs et les mutateurs, par exemple :

+ +
var obj = {
+  get x() 1,
+  set x(v) this.v = v
+};
+
+ +

Grâce aux définitions de méthodes ES2015, on peut convertir le fragment de code précédent en :

+ +
var obj = {
+  get x() { return 1 },
+  set x(v) { this.v = v }
+};
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/deprecated_octal/index.html b/files/fr/web/javascript/reference/errors/deprecated_octal/index.html deleted file mode 100644 index 067c0a363a..0000000000 --- a/files/fr/web/javascript/reference/errors/deprecated_octal/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: 'SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated' -slug: Web/JavaScript/Reference/Errors/Deprecated_octal -tags: - - Erreurs - - JavaScript - - Mode strict - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Deprecated_octal -original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_octal ---- -
{{jsSidebar("Errors")}}
- -

Message

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

Type d'erreur

- -

{{jsxref("SyntaxError")}}, uniquement en mode strict.

- -

Quel est le problème ?

- -

Les littéraux en base octale et les séquences d'échappement octales sont dépréciées et lèvent une exception {{jsxref("SyntaxError")}} en mode strict. À partir d'ECMAScript 2015, la syntaxe standard utilise un zéro suivi de la lettre « o » (en minuscule ou en majuscule) (0o or 0O).

- -

Exemples

- -

Littéraux en base octale préfixés par 0

- -
"use strict";
-
-03;
-
-// SyntaxError: "0"-prefixed octal literals and octal escape sequences
-// are deprecated
- -

Séquences d'échappement en base octale

- -
"use strict";
-
-"\251";
-
-// SyntaxError: "0"-prefixed octal literals and octal escape sequences
-// are deprecated
-
- -

Littéraux valides

- -

Pour former un littéral en base octal, on pourra utiliser un zéro suivi de la lettre « o » :

- -
0o3;
-
- -

Pour former une séquence d'échappement en base octale, on écrira une séquence d'échappement en base hexadécimale :

- -
'\xA9';
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/deprecated_octal/index.md b/files/fr/web/javascript/reference/errors/deprecated_octal/index.md new file mode 100644 index 0000000000..067c0a363a --- /dev/null +++ b/files/fr/web/javascript/reference/errors/deprecated_octal/index.md @@ -0,0 +1,69 @@ +--- +title: 'SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_octal +tags: + - Erreurs + - JavaScript + - Mode strict + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Deprecated_octal +original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_octal +--- +
{{jsSidebar("Errors")}}
+ +

Message

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

Type d'erreur

+ +

{{jsxref("SyntaxError")}}, uniquement en mode strict.

+ +

Quel est le problème ?

+ +

Les littéraux en base octale et les séquences d'échappement octales sont dépréciées et lèvent une exception {{jsxref("SyntaxError")}} en mode strict. À partir d'ECMAScript 2015, la syntaxe standard utilise un zéro suivi de la lettre « o » (en minuscule ou en majuscule) (0o or 0O).

+ +

Exemples

+ +

Littéraux en base octale préfixés par 0

+ +
"use strict";
+
+03;
+
+// SyntaxError: "0"-prefixed octal literals and octal escape sequences
+// are deprecated
+ +

Séquences d'échappement en base octale

+ +
"use strict";
+
+"\251";
+
+// SyntaxError: "0"-prefixed octal literals and octal escape sequences
+// are deprecated
+
+ +

Littéraux valides

+ +

Pour former un littéral en base octal, on pourra utiliser un zéro suivi de la lettre « o » :

+ +
0o3;
+
+ +

Pour former une séquence d'échappement en base octale, on écrira une séquence d'échappement en base hexadécimale :

+ +
'\xA9';
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.html b/files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.html deleted file mode 100644 index 8d36de23af..0000000000 --- a/files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: >- - SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# - instead -slug: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma -original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_source_map_pragma ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
-
-Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
-
- -

Type d'erreur

- -

Un avertissement prenant la forme d'une exception {{jsxref("SyntaxError")}}. L'exécution du code JavaScript n'est pas interrompue.

- -

Quel est le problème ?

- -

Une syntaxe dépréciée a été utilisée pour indiquer une correspondance de source (source map) dans le code JavaScript.

- -

Il arrive souvent que les fichiers sources JavaScript soient combinés et minifiés afin que le transfert depuis le serveur vers le client soit plus efficace. Grâce aux correspondances de source (ou source maps), le débogueur peut utiliser les sources des fichiers correspondants aux fichiers minifiés.

- -

La spécification sur cet outil a évolué car il existait un conflit de syntaxe avec IE (après //@cc_on, la correspondance était interprétée comme un test conditionnel de compilation du moteur JScript). Ce commentaire de compilation conditionnelle pour IE est peu connu mais son existence entraînait des erreurs avec jQuery et d'autres bibliothèques.

- -

Exemples

- -

Syntaxe dépréciée

- -

La syntaxe utilisant l'arobase (@) est dépréciée :

- -
//@ sourceMappingURL=http://exemple.com/chemin/vers/la/sourcemap.map
-
- -

Syntaxe standard

- -

Il faut utiliser le dièse (#) :

- -
//# sourceMappingURL=http://exemple.com/chemin/vers/la/sourcemap.map
- -

Autrement, on peut indiquer la correspondance dans un en-tête {{HTTPHeader("SourceMap")}} pour servir le fichier JavaScript afin d'éviter tout commentaire :

- -
X-SourceMap: /path/to/file.js.map
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.md b/files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.md new file mode 100644 index 0000000000..8d36de23af --- /dev/null +++ b/files/fr/web/javascript/reference/errors/deprecated_source_map_pragma/index.md @@ -0,0 +1,59 @@ +--- +title: >- + SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# + instead +slug: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_source_map_pragma +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
+
+Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
+
+ +

Type d'erreur

+ +

Un avertissement prenant la forme d'une exception {{jsxref("SyntaxError")}}. L'exécution du code JavaScript n'est pas interrompue.

+ +

Quel est le problème ?

+ +

Une syntaxe dépréciée a été utilisée pour indiquer une correspondance de source (source map) dans le code JavaScript.

+ +

Il arrive souvent que les fichiers sources JavaScript soient combinés et minifiés afin que le transfert depuis le serveur vers le client soit plus efficace. Grâce aux correspondances de source (ou source maps), le débogueur peut utiliser les sources des fichiers correspondants aux fichiers minifiés.

+ +

La spécification sur cet outil a évolué car il existait un conflit de syntaxe avec IE (après //@cc_on, la correspondance était interprétée comme un test conditionnel de compilation du moteur JScript). Ce commentaire de compilation conditionnelle pour IE est peu connu mais son existence entraînait des erreurs avec jQuery et d'autres bibliothèques.

+ +

Exemples

+ +

Syntaxe dépréciée

+ +

La syntaxe utilisant l'arobase (@) est dépréciée :

+ +
//@ sourceMappingURL=http://exemple.com/chemin/vers/la/sourcemap.map
+
+ +

Syntaxe standard

+ +

Il faut utiliser le dièse (#) :

+ +
//# sourceMappingURL=http://exemple.com/chemin/vers/la/sourcemap.map
+ +

Autrement, on peut indiquer la correspondance dans un en-tête {{HTTPHeader("SourceMap")}} pour servir le fichier JavaScript afin d'éviter tout commentaire :

+ +
X-SourceMap: /path/to/file.js.map
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/deprecated_string_generics/index.html b/files/fr/web/javascript/reference/errors/deprecated_string_generics/index.html deleted file mode 100644 index f348c0b4d8..0000000000 --- a/files/fr/web/javascript/reference/errors/deprecated_string_generics/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: 'Warning: String.x is deprecated; use String.prototype.x instead' -slug: Web/JavaScript/Reference/Errors/Deprecated_String_generics -tags: - - Avertissement - - JavaScript - - Warning -translation_of: Web/JavaScript/Reference/Errors/Deprecated_String_generics -original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_String_generics ---- -
{{jsSidebar("Errors")}}
- -
Les méthodes génériques pour les chaînes de caractères ont été retirées à partir de Firefox 68.
- -

Message

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

Type d'erreur

- -

Un avertissement, l'exécution du script n'est pas interrompue.

- -

Quel est le problème ?

- -

Les méthodes génériques non-standards de {{jsxref("String")}} sont dépréciées et ont été retirées à partir de Firefox 68 (il n'y a pas de prise en charge des navigateurs en dehors de Firefox). Les méthodes génériques sont des méthodes utilisées pour manipuler les instances de ce type d'objet et qui sont disponibles sur l'objet String, ce qui permet de les appliquer à n'importe quel objet.

- -

Exemples

- -

Syntaxe dépréciée

- -
var num = 15;
-String.replace(num, /5/, '2');
- -

Syntaxe standard

- -
var num = 15;
-String(num).replace(/5/, '2');
-
- -

Shim

- -

Voici une méthode qui permet d'avoir les méthodes génériques au sein des navigateurs qui ne les prennent pas en charge :

- -
/*globals define*/
-// Assumes all supplied String instance methods already present
-// (one may use shims for these if not available)
-(function() {
-  'use strict';
-
-  var i,
-    // We could also build the array of methods with the following, but the
-    //   getOwnPropertyNames() method is non-shimable:
-    // 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 < methodCount; i++) {
-    assignStringGeneric(methods[i]);
-  }
-}());
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/deprecated_string_generics/index.md b/files/fr/web/javascript/reference/errors/deprecated_string_generics/index.md new file mode 100644 index 0000000000..f348c0b4d8 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/deprecated_string_generics/index.md @@ -0,0 +1,106 @@ +--- +title: 'Warning: String.x is deprecated; use String.prototype.x instead' +slug: Web/JavaScript/Reference/Errors/Deprecated_String_generics +tags: + - Avertissement + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_String_generics +original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_String_generics +--- +
{{jsSidebar("Errors")}}
+ +
Les méthodes génériques pour les chaînes de caractères ont été retirées à partir de Firefox 68.
+ +

Message

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

Type d'erreur

+ +

Un avertissement, l'exécution du script n'est pas interrompue.

+ +

Quel est le problème ?

+ +

Les méthodes génériques non-standards de {{jsxref("String")}} sont dépréciées et ont été retirées à partir de Firefox 68 (il n'y a pas de prise en charge des navigateurs en dehors de Firefox). Les méthodes génériques sont des méthodes utilisées pour manipuler les instances de ce type d'objet et qui sont disponibles sur l'objet String, ce qui permet de les appliquer à n'importe quel objet.

+ +

Exemples

+ +

Syntaxe dépréciée

+ +
var num = 15;
+String.replace(num, /5/, '2');
+ +

Syntaxe standard

+ +
var num = 15;
+String(num).replace(/5/, '2');
+
+ +

Shim

+ +

Voici une méthode qui permet d'avoir les méthodes génériques au sein des navigateurs qui ne les prennent pas en charge :

+ +
/*globals define*/
+// Assumes all supplied String instance methods already present
+// (one may use shims for these if not available)
+(function() {
+  'use strict';
+
+  var i,
+    // We could also build the array of methods with the following, but the
+    //   getOwnPropertyNames() method is non-shimable:
+    // 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 < methodCount; i++) {
+    assignStringGeneric(methods[i]);
+  }
+}());
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.html b/files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.html deleted file mode 100644 index 444295566c..0000000000 --- a/files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: 'Warning: Date.prototype.toLocaleFormat is deprecated' -slug: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat -tags: - - Avertissement - - JavaScript - - Warning -translation_of: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat -original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_toLocaleFormat ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead
-
- -

Type d'erreur

- -

Un avertissement, l'exécution du script JavaScript n'est pas interrompue.

- -

Quel est le problème ?

- -

La méthode non-standard {{jsxref("Date.prototype.toLocaleFormat")}} est dépréciée et ne devrait plus être utilisée. Elle utilise une chaîne de caractères qui indique le format avec la même syntaxe que la fonction strftime() en C. Cette fonction n'est plus disponible à partir de Firefox 58.

- -

Exemples

- -

Syntaxe dépréciée

- -

La méthode {{jsxref("Date.prototype.toLocaleFormat")}} est dépréciée et sera retirée (aucune prise en charge par les autres navigateurs en dehors de Firefox).

- -
var today = new Date();
-var date = today.toLocaleFormat('%A %e %B %Y');
-
-console.log(date);
-// En français
-// "Vendredi 10 mars 2017"
- -

Utiliser une syntaxe standard grâce à l'API ECMAScript Intl

- -

Le standard ECMA-402 (l'API ECMAScript Intl) définit des objets et méthodes standards qui permettent de mettre en forme des dates et heures (disponible à partir de Chrome 24, de Firefox 29, d'IE11 et de  Safari10).

- -

Si on souhaite uniquement formater une date, on pourra utiliser la méthode {{jsxref("Date.prototype.toLocaleDateString")}}.

- -
var today = new Date();
-var options = { weekday: 'long', year: 'numeric',
-                month: 'long', day: 'numeric' };
-var date = today.toLocaleDateString('fr-FR', options);
-
-console.log(date);
-// "Vendredi 10 mars 2017"
-
- -

Si on manipule plus de dates, on peut utiliser l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} qui permet de mettre en cache certains des calculs afin d'avoir une mise en forme rapide (ce qui s'avère utile lorsqu'on a une boucle par exemple) :

- -
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 => console.log(dateFormatter.format(date)));
-
-// "Donnerstag, 20. Dezember 2012"
-// "Montag, 12. Mai 2014"
-
- -

Utiliser les méthodes de l'objet Date

- -

L'objet {{jsxref("Date")}} dispose de plusieurs méthodes qui permettent de construire une chaîne de caractères pour une date donnée. Ainsi

- -
(new Date()).toLocaleFormat("%Y%m%d");
-// "20170310"
-
- -

Pourra être converti en :

- -
let now = new Date();
-let date = now.getFullYear() * 10000 +
-          (now.getMonth() + 1) * 100 + now.getDate();
-
-console.log(date);
-// "20170310"
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.md b/files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.md new file mode 100644 index 0000000000..444295566c --- /dev/null +++ b/files/fr/web/javascript/reference/errors/deprecated_tolocaleformat/index.md @@ -0,0 +1,92 @@ +--- +title: 'Warning: Date.prototype.toLocaleFormat is deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +tags: + - Avertissement + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +original_slug: Web/JavaScript/Reference/Erreurs/Deprecated_toLocaleFormat +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead
+
+ +

Type d'erreur

+ +

Un avertissement, l'exécution du script JavaScript n'est pas interrompue.

+ +

Quel est le problème ?

+ +

La méthode non-standard {{jsxref("Date.prototype.toLocaleFormat")}} est dépréciée et ne devrait plus être utilisée. Elle utilise une chaîne de caractères qui indique le format avec la même syntaxe que la fonction strftime() en C. Cette fonction n'est plus disponible à partir de Firefox 58.

+ +

Exemples

+ +

Syntaxe dépréciée

+ +

La méthode {{jsxref("Date.prototype.toLocaleFormat")}} est dépréciée et sera retirée (aucune prise en charge par les autres navigateurs en dehors de Firefox).

+ +
var today = new Date();
+var date = today.toLocaleFormat('%A %e %B %Y');
+
+console.log(date);
+// En français
+// "Vendredi 10 mars 2017"
+ +

Utiliser une syntaxe standard grâce à l'API ECMAScript Intl

+ +

Le standard ECMA-402 (l'API ECMAScript Intl) définit des objets et méthodes standards qui permettent de mettre en forme des dates et heures (disponible à partir de Chrome 24, de Firefox 29, d'IE11 et de  Safari10).

+ +

Si on souhaite uniquement formater une date, on pourra utiliser la méthode {{jsxref("Date.prototype.toLocaleDateString")}}.

+ +
var today = new Date();
+var options = { weekday: 'long', year: 'numeric',
+                month: 'long', day: 'numeric' };
+var date = today.toLocaleDateString('fr-FR', options);
+
+console.log(date);
+// "Vendredi 10 mars 2017"
+
+ +

Si on manipule plus de dates, on peut utiliser l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} qui permet de mettre en cache certains des calculs afin d'avoir une mise en forme rapide (ce qui s'avère utile lorsqu'on a une boucle par exemple) :

+ +
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 => console.log(dateFormatter.format(date)));
+
+// "Donnerstag, 20. Dezember 2012"
+// "Montag, 12. Mai 2014"
+
+ +

Utiliser les méthodes de l'objet Date

+ +

L'objet {{jsxref("Date")}} dispose de plusieurs méthodes qui permettent de construire une chaîne de caractères pour une date donnée. Ainsi

+ +
(new Date()).toLocaleFormat("%Y%m%d");
+// "20170310"
+
+ +

Pourra être converti en :

+ +
let now = new Date();
+let date = now.getFullYear() * 10000 +
+          (now.getMonth() + 1) * 100 + now.getDate();
+
+console.log(date);
+// "20170310"
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/equal_as_assign/index.html b/files/fr/web/javascript/reference/errors/equal_as_assign/index.html deleted file mode 100644 index 2e420be691..0000000000 --- a/files/fr/web/javascript/reference/errors/equal_as_assign/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: 'SyntaxError: test for equality (==) mistyped as assignment (=)?' -slug: Web/JavaScript/Reference/Errors/Equal_as_assign -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Equal_as_assign -original_slug: Web/JavaScript/Reference/Erreurs/Equal_as_assign ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: SyntaxError: test for equality (==) mistyped as assignment (=)?
-
- -

Type d'erreur

- -

Uniquement pour Firefox. Un avertissement sous la forme d'une exception {{jsxref("SyntaxError")}}, généré uniquement si la préférence javascript.options.strict vaut true.

- -

Quel est le problème ?

- -

Le code utilise une affectation (=) là où on attendrait un test d'égalité (==). Afin d'aider au débogage, le moteur JavaScript déclenche des avertissements lorsqu'il détecte ce motif.

- -

Exemples

- -

Des affectations utilisées au sein d'expressions conditionnelles

- -

Il est conseillé de ne pas utiliser d'affectations simples dans des expressions conditionnelles (comme le test effectué avec if...else) car on peut confondre les deux à la lecture du code. Ainsi, on n'utilisera pas la forme suivante :

- -
if (x = y) {
-  // do the right thing
-}
-
- -

Si on doit effectivement affecter une variable dans une expression conditionnelle, on entourera l'affectation d'une paire de parenthèses supplémentaires afin de montrer qu'on veut bien effectuer une affectation, comme ceci :

- -
if ((x = y)) {
-  // exécuter le code
-}
- -

Autrement (généralement), on veut plutôt utiliser un opérateur de comparaison (== ou === par exemple) :

- -
if (x == y) {
-  // exécuter le code
-}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/equal_as_assign/index.md b/files/fr/web/javascript/reference/errors/equal_as_assign/index.md new file mode 100644 index 0000000000..2e420be691 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/equal_as_assign/index.md @@ -0,0 +1,54 @@ +--- +title: 'SyntaxError: test for equality (==) mistyped as assignment (=)?' +slug: Web/JavaScript/Reference/Errors/Equal_as_assign +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Equal_as_assign +original_slug: Web/JavaScript/Reference/Erreurs/Equal_as_assign +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: SyntaxError: test for equality (==) mistyped as assignment (=)?
+
+ +

Type d'erreur

+ +

Uniquement pour Firefox. Un avertissement sous la forme d'une exception {{jsxref("SyntaxError")}}, généré uniquement si la préférence javascript.options.strict vaut true.

+ +

Quel est le problème ?

+ +

Le code utilise une affectation (=) là où on attendrait un test d'égalité (==). Afin d'aider au débogage, le moteur JavaScript déclenche des avertissements lorsqu'il détecte ce motif.

+ +

Exemples

+ +

Des affectations utilisées au sein d'expressions conditionnelles

+ +

Il est conseillé de ne pas utiliser d'affectations simples dans des expressions conditionnelles (comme le test effectué avec if...else) car on peut confondre les deux à la lecture du code. Ainsi, on n'utilisera pas la forme suivante :

+ +
if (x = y) {
+  // do the right thing
+}
+
+ +

Si on doit effectivement affecter une variable dans une expression conditionnelle, on entourera l'affectation d'une paire de parenthèses supplémentaires afin de montrer qu'on veut bien effectuer une affectation, comme ceci :

+ +
if ((x = y)) {
+  // exécuter le code
+}
+ +

Autrement (généralement), on veut plutôt utiliser un opérateur de comparaison (== ou === par exemple) :

+ +
if (x == y) {
+  // exécuter le code
+}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html b/files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html deleted file mode 100644 index 26954d8e79..0000000000 --- a/files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html +++ /dev/null @@ -1,169 +0,0 @@ ---- -title: 'Warning: JavaScript 1.6''s for-each-in loops are deprecated' -slug: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated -tags: - - Avertissement - - JavaScript -translation_of: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated -original_slug: Web/JavaScript/Reference/Erreurs/For-each-in_loops_are_deprecated ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead
-
- -

Type d'erreur

- -

Avertissement.

- -

Quel est le problème ?

- -

L'instruction {{jsxref("Instructions/for_each...in", "for each (variable in obj)")}} présente à partir de JavaScript 1.6 est une instruction dépréciée et est amenée à disparaître dans un avenir proche.

- -

Exemples

- -

Itérer sur un objet

- -

{{jsxref("Instructions/for_each...in", "for each...in")}} pouvait être utilisé pour parcourir les valeurs contenues dans un objet.

- -

Syntaxe dépréciée

- -
var objet = { a: 10, b: 20 };
-
-for each (var x in objet) {
-  console.log(x);        // 10
-                         // 20
-}
-
- -

Syntaxe alternative, standard

- -

On peut désormais utilisé l'instruction de boucle standard {{jsxref("Instructions/for...in", "for...in")}} afin d'itérer sur les clés d'un objet et de récupérer les valeurs des propriétés :

- -
var objet = { a: 10, b: 20 };
-
-for (var key in objet) {
-  var x = objet[key];
-  console.log(x);        // 10
-                         // 20
-}
-
- -

Ou alors, on peut utiliser {{jsxref("Instructions/for...of", "for...of")}} (ES2015) et {{jsxref("Object.values")}} (ES2017) afin d'obtenir un tableau des valeurs associées à un objet pour ensuite le parcourir :

- -
var objet = { a: 10, b: 20 };
-
-for (var x of Object.values(objet)) {
-  console.log(x);        // 10
-                         // 20
-}
-
- -

Itérer sur un tableau

- -

{{jsxref("Instructions/for_each...in", "for each...in")}} pouvait être utilisée afin de parcourir les éléments d'un tableau.

- -

Syntaxe dépréciée

- -
var array = [10, 20, 30];
-
-for each (var x in array) {
-  console.log(x);        // 10
-                         // 20
-                         // 30
-}
-
- -

Syntaxe alternative, standard

- -

On peut obtenir le même effet avec les boucles {{jsxref("Instructions/for...of", "for...of")}} (ES2015).

- -
var array = [10, 20, 30];
-
-for (var x of array) {
-  console.log(x);        // 10
-                         // 20
-                         // 30
-}
-
- -

Parcourir un tableau qui vaille null ou undefined

- -

{{jsxref("Instructions/for_each...in", "for each...in")}} ne fera rien si la valeur fournie est null ou undefined. En revanche, {{jsxref("Instructions/for...of", "for...of")}} lèvera une exception dans ces cas.

- -

Syntaxe dépréciée

- -
function func(array) {
-  for each (var x in array) {
-    console.log(x);
-  }
-}
-func([10, 20]);        // 10
-                       // 20
-func(null);            // rien ne s'affiche
-func(undefined);       // rien ne s'affiche
-
- -

Syntaxe alternative, standard

- -

Pour réécrire les instructions {{jsxref("Instructions/for_each...in", "for each...in")}} afin que les valeurs null ou undefined puissent être gérées avec {{jsxref("Instructions/for...of", "for...of")}}, il faudra rajouter une protection :

- -
function func(array) {
-  if (array) {
-    for (var x of array) {
-      console.log(x);
-    }
-  }
-}
-func([10, 20]);        // 10
-                       // 20
-func(null);            // rien ne s'affiche
-func(undefined);       // rien ne s'affiche
-
- -

Itérer sur les tuples clé-valeur d'un objet

- -

Syntaxe dépréciée

- -

On pouvait utiliser une forme syntaxique particulière, désormais dépréciée, qui combine {{jsxref("Instructions/for_each...in", "for each...in")}} et l'objet déprécié {{jsxref("Iterator")}}.

- -
var object = { a: 10, b: 20 };
-
-for each (var [key, value] in Iterator(object)) {
-  console.log(key, value);  // "a", 10
-                            // "b", 20
-}
-
- -

Syntaxe alternative, standard

- -

On peut désormais utiliser la boucle {{jsxref("Instructions/for...in", "for...in")}} afin de parcourir les différentes clés d'un objet pour ensuite récupérer les valeurs associées :

- -
var object = { a: 10, b: 20 };
-
-for (var key in object) {
-  var value = object[key];
-  console.log(key, value);  // "a", 10
-                            // "b", 20
-}
-
- -

Ou encore, on peut utiliser {{jsxref("Instructions/for...of", "for...of")}} (ES2015) et {{jsxref("Object.entries")}} (ES2017) pour récupérer un tableau contenant les clés et les valeurs d'un objet qu'on pourra ensuite parcourir :

- -
var object = { a: 10, b: 20 };
-
-for (var [key, value] of Object.entries(object)) {
-  console.log(key, value);  // "a", 10
-                            // "b", 20
-}
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.md b/files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.md new file mode 100644 index 0000000000..26954d8e79 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.md @@ -0,0 +1,169 @@ +--- +title: 'Warning: JavaScript 1.6''s for-each-in loops are deprecated' +slug: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +tags: + - Avertissement + - JavaScript +translation_of: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +original_slug: Web/JavaScript/Reference/Erreurs/For-each-in_loops_are_deprecated +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead
+
+ +

Type d'erreur

+ +

Avertissement.

+ +

Quel est le problème ?

+ +

L'instruction {{jsxref("Instructions/for_each...in", "for each (variable in obj)")}} présente à partir de JavaScript 1.6 est une instruction dépréciée et est amenée à disparaître dans un avenir proche.

+ +

Exemples

+ +

Itérer sur un objet

+ +

{{jsxref("Instructions/for_each...in", "for each...in")}} pouvait être utilisé pour parcourir les valeurs contenues dans un objet.

+ +

Syntaxe dépréciée

+ +
var objet = { a: 10, b: 20 };
+
+for each (var x in objet) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

Syntaxe alternative, standard

+ +

On peut désormais utilisé l'instruction de boucle standard {{jsxref("Instructions/for...in", "for...in")}} afin d'itérer sur les clés d'un objet et de récupérer les valeurs des propriétés :

+ +
var objet = { a: 10, b: 20 };
+
+for (var key in objet) {
+  var x = objet[key];
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

Ou alors, on peut utiliser {{jsxref("Instructions/for...of", "for...of")}} (ES2015) et {{jsxref("Object.values")}} (ES2017) afin d'obtenir un tableau des valeurs associées à un objet pour ensuite le parcourir :

+ +
var objet = { a: 10, b: 20 };
+
+for (var x of Object.values(objet)) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

Itérer sur un tableau

+ +

{{jsxref("Instructions/for_each...in", "for each...in")}} pouvait être utilisée afin de parcourir les éléments d'un tableau.

+ +

Syntaxe dépréciée

+ +
var array = [10, 20, 30];
+
+for each (var x in array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

Syntaxe alternative, standard

+ +

On peut obtenir le même effet avec les boucles {{jsxref("Instructions/for...of", "for...of")}} (ES2015).

+ +
var array = [10, 20, 30];
+
+for (var x of array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

Parcourir un tableau qui vaille null ou undefined

+ +

{{jsxref("Instructions/for_each...in", "for each...in")}} ne fera rien si la valeur fournie est null ou undefined. En revanche, {{jsxref("Instructions/for...of", "for...of")}} lèvera une exception dans ces cas.

+ +

Syntaxe dépréciée

+ +
function func(array) {
+  for each (var x in array) {
+    console.log(x);
+  }
+}
+func([10, 20]);        // 10
+                       // 20
+func(null);            // rien ne s'affiche
+func(undefined);       // rien ne s'affiche
+
+ +

Syntaxe alternative, standard

+ +

Pour réécrire les instructions {{jsxref("Instructions/for_each...in", "for each...in")}} afin que les valeurs null ou undefined puissent être gérées avec {{jsxref("Instructions/for...of", "for...of")}}, il faudra rajouter une protection :

+ +
function func(array) {
+  if (array) {
+    for (var x of array) {
+      console.log(x);
+    }
+  }
+}
+func([10, 20]);        // 10
+                       // 20
+func(null);            // rien ne s'affiche
+func(undefined);       // rien ne s'affiche
+
+ +

Itérer sur les tuples clé-valeur d'un objet

+ +

Syntaxe dépréciée

+ +

On pouvait utiliser une forme syntaxique particulière, désormais dépréciée, qui combine {{jsxref("Instructions/for_each...in", "for each...in")}} et l'objet déprécié {{jsxref("Iterator")}}.

+ +
var object = { a: 10, b: 20 };
+
+for each (var [key, value] in Iterator(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

Syntaxe alternative, standard

+ +

On peut désormais utiliser la boucle {{jsxref("Instructions/for...in", "for...in")}} afin de parcourir les différentes clés d'un objet pour ensuite récupérer les valeurs associées :

+ +
var object = { a: 10, b: 20 };
+
+for (var key in object) {
+  var value = object[key];
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

Ou encore, on peut utiliser {{jsxref("Instructions/for...of", "for...of")}} (ES2015) et {{jsxref("Object.entries")}} (ES2017) pour récupérer un tableau contenant les clés et les valeurs d'un objet qu'on pourra ensuite parcourir :

+ +
var object = { a: 10, b: 20 };
+
+for (var [key, value] of Object.entries(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/getter_only/index.html b/files/fr/web/javascript/reference/errors/getter_only/index.html deleted file mode 100644 index 01fd2c0e14..0000000000 --- a/files/fr/web/javascript/reference/errors/getter_only/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: 'TypeError: setting a property that has only a getter' -slug: Web/JavaScript/Reference/Errors/Getter_only -tags: - - Erreurs - - JavaScript - - Mode strict - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Getter_only -original_slug: Web/JavaScript/Reference/Erreurs/Getter_only ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)
-TypeError: setting getter-only property "x" (Firefox)
-TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}, uniquement en mode strict.

- -

Quel est le problème ?

- -

On essaie de fournir une nouvelle valeur pour une propriété qui ne dispose que d'un accesseur. Ceci échouera en mode non-strict mais lèvera une exception {{jsxref("TypeError")}} en mode strict.

- -

Exemples

- -

Dans l'exemple qui suit, on voit comment créer un accesseur sur une propriété. En revanche, dans la définition de l'objet, on n'inclut aucun mutateur et une exception TypeError sera déclenchée lorsqu'on voudra modifier la propriété temperature pour la passer à 30. Pour plus de détails, on pourra consulter la page {{jsxref("Object.defineProperty()")}}.

- -
"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 a property that has only a getter
-
- -

Pour corriger cette erreur, soit on retire la ligne 16 (où on tente de modifier la propriété) soit on implémente un mutateur, comme ceci :

- -
"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 }]
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/getter_only/index.md b/files/fr/web/javascript/reference/errors/getter_only/index.md new file mode 100644 index 0000000000..01fd2c0e14 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/getter_only/index.md @@ -0,0 +1,85 @@ +--- +title: 'TypeError: setting a property that has only a getter' +slug: Web/JavaScript/Reference/Errors/Getter_only +tags: + - Erreurs + - JavaScript + - Mode strict + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Getter_only +original_slug: Web/JavaScript/Reference/Erreurs/Getter_only +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)
+TypeError: setting getter-only property "x" (Firefox)
+TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}, uniquement en mode strict.

+ +

Quel est le problème ?

+ +

On essaie de fournir une nouvelle valeur pour une propriété qui ne dispose que d'un accesseur. Ceci échouera en mode non-strict mais lèvera une exception {{jsxref("TypeError")}} en mode strict.

+ +

Exemples

+ +

Dans l'exemple qui suit, on voit comment créer un accesseur sur une propriété. En revanche, dans la définition de l'objet, on n'inclut aucun mutateur et une exception TypeError sera déclenchée lorsqu'on voudra modifier la propriété temperature pour la passer à 30. Pour plus de détails, on pourra consulter la page {{jsxref("Object.defineProperty()")}}.

+ +
"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 a property that has only a getter
+
+ +

Pour corriger cette erreur, soit on retire la ligne 16 (où on tente de modifier la propriété) soit on implémente un mutateur, comme ceci :

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

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/identifier_after_number/index.html b/files/fr/web/javascript/reference/errors/identifier_after_number/index.html deleted file mode 100644 index 1401b41432..0000000000 --- a/files/fr/web/javascript/reference/errors/identifier_after_number/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 'SyntaxError: identifier starts immediately after numeric literal' -slug: Web/JavaScript/Reference/Errors/Identifier_after_number -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Identifier_after_number -original_slug: Web/JavaScript/Reference/Erreurs/Identifier_after_number ---- -
{{JSSidebar("Errors")}}
- -

Message

- -
SyntaxError: Unexpected identifier after numeric literal (Edge)
-SyntaxError: identifier starts immediately after numeric literal (Firefox)
-SyntaxError: Unexpected number (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Les noms qu'on donne aux variables (aussi appelés « identifiants ») doivent respecter certaines règles…

- -

En JavaScript, un identifiant doit commencer par une lettre, un tiret bas (_) ou un dollar ($), il ne peut pas commencer par un chiffre. Seuls les caractères après le premier peuvent être des chiffres.

- -

Exemples

- -

Des variables dont le nom commence par un chiffre

- -

En JavaScript, les noms des variables ne peuvent pas commencer par un chiffre. Aussi, le script suivant provoquera des erreurs :

- -
var 1vie = 'toto';
-// SyntaxError: identifier starts immediately after numeric literal
-
-var toto = 1vie;
-// SyntaxError: identifier starts immediately after numeric literal
-
-alert(1.toto);
-// SyntaxError: identifier starts immediately after numeric literal
-
- -

Pour éviter ce problème, il faudra renommer les variables afin d'éviter d'utiliser un chiffre au début :

- -
var vie1 = 'toto';
-var toto = vie1;
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/identifier_after_number/index.md b/files/fr/web/javascript/reference/errors/identifier_after_number/index.md new file mode 100644 index 0000000000..1401b41432 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/identifier_after_number/index.md @@ -0,0 +1,57 @@ +--- +title: 'SyntaxError: identifier starts immediately after numeric literal' +slug: Web/JavaScript/Reference/Errors/Identifier_after_number +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Identifier_after_number +original_slug: Web/JavaScript/Reference/Erreurs/Identifier_after_number +--- +
{{JSSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Unexpected identifier after numeric literal (Edge)
+SyntaxError: identifier starts immediately after numeric literal (Firefox)
+SyntaxError: Unexpected number (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Les noms qu'on donne aux variables (aussi appelés « identifiants ») doivent respecter certaines règles…

+ +

En JavaScript, un identifiant doit commencer par une lettre, un tiret bas (_) ou un dollar ($), il ne peut pas commencer par un chiffre. Seuls les caractères après le premier peuvent être des chiffres.

+ +

Exemples

+ +

Des variables dont le nom commence par un chiffre

+ +

En JavaScript, les noms des variables ne peuvent pas commencer par un chiffre. Aussi, le script suivant provoquera des erreurs :

+ +
var 1vie = 'toto';
+// SyntaxError: identifier starts immediately after numeric literal
+
+var toto = 1vie;
+// SyntaxError: identifier starts immediately after numeric literal
+
+alert(1.toto);
+// SyntaxError: identifier starts immediately after numeric literal
+
+ +

Pour éviter ce problème, il faudra renommer les variables afin d'éviter d'utiliser un chiffre au début :

+ +
var vie1 = 'toto';
+var toto = vie1;
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/illegal_character/index.html b/files/fr/web/javascript/reference/errors/illegal_character/index.html deleted file mode 100644 index 9c886718f5..0000000000 --- a/files/fr/web/javascript/reference/errors/illegal_character/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: 'SyntaxError: illegal character' -slug: Web/JavaScript/Reference/Errors/Illegal_character -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Illegal_character -original_slug: Web/JavaScript/Reference/Erreurs/Illegal_character ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Invalid character (Edge)
-SyntaxError: illegal character (Firefox)
-SyntaxError: Invalid or unexpected token (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Dans le code, il y a un élément de la syntaxe qui n'est pas à la bonne place. Pour détecter les erreurs de ce type, vous pouvez utiliser un éditeur de texte qui prend en charge la coloration syntaxique et qui met en évidence les caractères problématiques (par exemple si on a utilisé un tiret () au lieu d'un moins ( - ) ou des guillemets anglais () à la place de doubles quotes ( " ).

- -

Exemples

- -

Caractères ressemblants

- -

Certains caractères ressemblent à des caractères spéciaux en JavaScript mais n'en sont pas. Dans ce cas, lorsque le moteur analysera le code, il échouera.

- -
“Ceci ressemble à une chaîne de caractères.”;
-// “ n'est pas le caractère "
-// SyntaxError: illegal character
-
-42 – 13;
-// – n'est pas le caractère -
-// SyntaxError: illegal character
-
-var toto = "truc";
-// ; (<37e>) n'est pas le caractère ;
-// SyntaxError: illegal character
-
- -

On peut corriger ce point en utilisant les bons caractères :

- -
"Ceci est vraiment une chaîne de caractères.";
-42 - 13;
-var toto = "truc";
-
- -

Certains éditeurs et environnements de développement intégrés indiqueront la présence de tels caractères avec une coloration syntaxique différente. Toutefois, tous les éditeurs n'ont pas une telle fonctionnalité et si vous n'arrivez pas à déterminer l'origine du problème, il vaudra sans doute mieux supprimer la ligne incriminée et la resaisir manuellement.

- -

Caractères oubliés

- -

On oublie parfois un caractère.

- -
var couleurs = ['#000', #333', '#666'];
-// SyntaxError: illegal character
-
- -

Dans ce cas, il suffit de rajouter la quote pour '#333'.

- -
var couleurs = ['#000', '#333', '#666'];
- -

Caractères cachés

- -

Lorsque vous copiez/collez du code depuis des sources externes, celles-ci peuvent contenir des caractères invalides difficiles à discerner.

- -
var toto = 'truc';​
-// SyntaxError: illegal character
-
- -

Lorsqu'on inspecte ce code grâce à un éditeur de texte (par exemple Vim), on peut voir qu'il y en fait un espace sans chasse (ZWSP) (U+200B).

- -
var toto = 'truc';​<200b>
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/illegal_character/index.md b/files/fr/web/javascript/reference/errors/illegal_character/index.md new file mode 100644 index 0000000000..9c886718f5 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/illegal_character/index.md @@ -0,0 +1,84 @@ +--- +title: 'SyntaxError: illegal character' +slug: Web/JavaScript/Reference/Errors/Illegal_character +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Illegal_character +original_slug: Web/JavaScript/Reference/Erreurs/Illegal_character +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Invalid character (Edge)
+SyntaxError: illegal character (Firefox)
+SyntaxError: Invalid or unexpected token (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Dans le code, il y a un élément de la syntaxe qui n'est pas à la bonne place. Pour détecter les erreurs de ce type, vous pouvez utiliser un éditeur de texte qui prend en charge la coloration syntaxique et qui met en évidence les caractères problématiques (par exemple si on a utilisé un tiret () au lieu d'un moins ( - ) ou des guillemets anglais () à la place de doubles quotes ( " ).

+ +

Exemples

+ +

Caractères ressemblants

+ +

Certains caractères ressemblent à des caractères spéciaux en JavaScript mais n'en sont pas. Dans ce cas, lorsque le moteur analysera le code, il échouera.

+ +
“Ceci ressemble à une chaîne de caractères.”;
+// “ n'est pas le caractère "
+// SyntaxError: illegal character
+
+42 – 13;
+// – n'est pas le caractère -
+// SyntaxError: illegal character
+
+var toto = "truc";
+// ; (<37e>) n'est pas le caractère ;
+// SyntaxError: illegal character
+
+ +

On peut corriger ce point en utilisant les bons caractères :

+ +
"Ceci est vraiment une chaîne de caractères.";
+42 - 13;
+var toto = "truc";
+
+ +

Certains éditeurs et environnements de développement intégrés indiqueront la présence de tels caractères avec une coloration syntaxique différente. Toutefois, tous les éditeurs n'ont pas une telle fonctionnalité et si vous n'arrivez pas à déterminer l'origine du problème, il vaudra sans doute mieux supprimer la ligne incriminée et la resaisir manuellement.

+ +

Caractères oubliés

+ +

On oublie parfois un caractère.

+ +
var couleurs = ['#000', #333', '#666'];
+// SyntaxError: illegal character
+
+ +

Dans ce cas, il suffit de rajouter la quote pour '#333'.

+ +
var couleurs = ['#000', '#333', '#666'];
+ +

Caractères cachés

+ +

Lorsque vous copiez/collez du code depuis des sources externes, celles-ci peuvent contenir des caractères invalides difficiles à discerner.

+ +
var toto = 'truc';​
+// SyntaxError: illegal character
+
+ +

Lorsqu'on inspecte ce code grâce à un éditeur de texte (par exemple Vim), on peut voir qu'il y en fait un espace sans chasse (ZWSP) (U+200B).

+ +
var toto = 'truc';​<200b>
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/in_operator_no_object/index.html b/files/fr/web/javascript/reference/errors/in_operator_no_object/index.html deleted file mode 100644 index 104971982d..0000000000 --- a/files/fr/web/javascript/reference/errors/in_operator_no_object/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: 'TypeError: invalid ''in'' operand "x"' -slug: Web/JavaScript/Reference/Errors/in_operator_no_object -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/in_operator_no_object -original_slug: Web/JavaScript/Reference/Erreurs/in_operator_no_object ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Invalid operand to 'in' (Edge)
-TypeError: right-hand side of 'in' should be an object, got 'x' (Firefox)
-TypeError: cannot use 'in' operator to search for 'x' in 'y' (Firefox, Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

L'opérateur in peut uniquement être utilisé pour vérifier qu'une propriété appartient à un objet. Il ne peut pas être utilisé pour rechercher des caractères dans des chaînes de caractères, des nombres ou dans d'autres types de données en dehors des objets.

- -

Exemples

- -

Rechercher un texte dans une chaîne de caractères

- -

À la différence de certains langages de programmation (Python par exemple), JavaScript ne permet pas de chercher des textes dans une chaîne de caractères grâce à l'opérateur in.

- -
"Coucou" in "Coucou monde";
-// TypeError: cannot use 'in' operator to search for 'Coucou' in 'Coucou monde'
-
- -

On utilisera plutôt la méthode {{jsxref("String.prototype.indexOf()")}} :

- -
"Coucou monde".indexOf("Coucou") !== -1;
-// true
- -

null ou undefined ne fonctionnent pas

- -

Avant d'utiliser in, il faut s'assurer que la valeur qu'on inspecte n'est pas {{jsxref("null")}} ou {{jsxref("undefined")}}.

- -
var toto = null;
-"truc" in toto;
-// TypeError: cannot use 'in' operator to search for 'truc' in 'toto" (Chrome)
-// TypeError: right-hand side of 'in' should be an object, got null (Firefox)
-
- -

L'opérateur in doit être utilisé avec un objet.

- -
var toto = { machin: "bidule" };
-"truc" in toto; // false
-
-"PI" in Math; // true
-"pi" in Math; // false
-
- -

Rechercher dans un tableau

- -

Attention lorsqu'on utilise l'opérateur in quand on recherche une valeur dans un objet {{jsxref("Array")}}. L'opérateur in vérifie la présence de l'index mais pas la valeur présente à cet index.

- -
var arbres = ['cèdre', 'bouleau', 'pin', 'sapin', 'érable'];
-3 in arbres; // true
-"pin" in arbres; // false
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/in_operator_no_object/index.md b/files/fr/web/javascript/reference/errors/in_operator_no_object/index.md new file mode 100644 index 0000000000..104971982d --- /dev/null +++ b/files/fr/web/javascript/reference/errors/in_operator_no_object/index.md @@ -0,0 +1,74 @@ +--- +title: 'TypeError: invalid ''in'' operand "x"' +slug: Web/JavaScript/Reference/Errors/in_operator_no_object +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/in_operator_no_object +original_slug: Web/JavaScript/Reference/Erreurs/in_operator_no_object +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Invalid operand to 'in' (Edge)
+TypeError: right-hand side of 'in' should be an object, got 'x' (Firefox)
+TypeError: cannot use 'in' operator to search for 'x' in 'y' (Firefox, Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

L'opérateur in peut uniquement être utilisé pour vérifier qu'une propriété appartient à un objet. Il ne peut pas être utilisé pour rechercher des caractères dans des chaînes de caractères, des nombres ou dans d'autres types de données en dehors des objets.

+ +

Exemples

+ +

Rechercher un texte dans une chaîne de caractères

+ +

À la différence de certains langages de programmation (Python par exemple), JavaScript ne permet pas de chercher des textes dans une chaîne de caractères grâce à l'opérateur in.

+ +
"Coucou" in "Coucou monde";
+// TypeError: cannot use 'in' operator to search for 'Coucou' in 'Coucou monde'
+
+ +

On utilisera plutôt la méthode {{jsxref("String.prototype.indexOf()")}} :

+ +
"Coucou monde".indexOf("Coucou") !== -1;
+// true
+ +

null ou undefined ne fonctionnent pas

+ +

Avant d'utiliser in, il faut s'assurer que la valeur qu'on inspecte n'est pas {{jsxref("null")}} ou {{jsxref("undefined")}}.

+ +
var toto = null;
+"truc" in toto;
+// TypeError: cannot use 'in' operator to search for 'truc' in 'toto" (Chrome)
+// TypeError: right-hand side of 'in' should be an object, got null (Firefox)
+
+ +

L'opérateur in doit être utilisé avec un objet.

+ +
var toto = { machin: "bidule" };
+"truc" in toto; // false
+
+"PI" in Math; // true
+"pi" in Math; // false
+
+ +

Rechercher dans un tableau

+ +

Attention lorsqu'on utilise l'opérateur in quand on recherche une valeur dans un objet {{jsxref("Array")}}. L'opérateur in vérifie la présence de l'index mais pas la valeur présente à cet index.

+ +
var arbres = ['cèdre', 'bouleau', 'pin', 'sapin', 'érable'];
+3 in arbres; // true
+"pin" in arbres; // false
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/index.html b/files/fr/web/javascript/reference/errors/index.html deleted file mode 100644 index 7110b7682a..0000000000 --- a/files/fr/web/javascript/reference/errors/index.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Référence des erreurs JavaScript -slug: Web/JavaScript/Reference/Errors -tags: - - JavaScript -translation_of: Web/JavaScript/Reference/Errors -original_slug: Web/JavaScript/Reference/Erreurs ---- -

{{jsSidebar("Errors")}}

- -

Errare ECMAScript est
- Vous trouverez ci-après une liste d'erreurs causées par le moteur JavaScript. Ces erreurs peuvent aider à déboguer certains problèmes mais leur signification n'est pas toujours claire. Chacune de ces pages fournit donc des explications et informations supplémentaires à propos de ces erreurs.

- -

D'un point de vue technique, chaque erreur est un objet {{jsxref("Error")}} et possède une propriété name (son nom) et une propriété message.

- -

Liste d'erreurs

- -

{{ListSubPages("/fr/docs/Web/JavaScript/Reference/Erreurs")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/index.md b/files/fr/web/javascript/reference/errors/index.md new file mode 100644 index 0000000000..7110b7682a --- /dev/null +++ b/files/fr/web/javascript/reference/errors/index.md @@ -0,0 +1,24 @@ +--- +title: Référence des erreurs JavaScript +slug: Web/JavaScript/Reference/Errors +tags: + - JavaScript +translation_of: Web/JavaScript/Reference/Errors +original_slug: Web/JavaScript/Reference/Erreurs +--- +

{{jsSidebar("Errors")}}

+ +

Errare ECMAScript est
+ Vous trouverez ci-après une liste d'erreurs causées par le moteur JavaScript. Ces erreurs peuvent aider à déboguer certains problèmes mais leur signification n'est pas toujours claire. Chacune de ces pages fournit donc des explications et informations supplémentaires à propos de ces erreurs.

+ +

D'un point de vue technique, chaque erreur est un objet {{jsxref("Error")}} et possède une propriété name (son nom) et une propriété message.

+ +

Liste d'erreurs

+ +

{{ListSubPages("/fr/docs/Web/JavaScript/Reference/Erreurs")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/invalid_array_length/index.html b/files/fr/web/javascript/reference/errors/invalid_array_length/index.html deleted file mode 100644 index aa5fd0d701..0000000000 --- a/files/fr/web/javascript/reference/errors/invalid_array_length/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: 'RangeError: invalid array length' -slug: Web/JavaScript/Reference/Errors/Invalid_array_length -tags: - - Erreurs - - JavaScript - - RangeError -translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length -original_slug: Web/JavaScript/Reference/Erreurs/Invalid_array_length ---- -
{{jsSidebar("Erreurs")}}
- -

Message

- -
RangeError: Array length must be a finite positive integer (Edge)
-RangeError: invalid array length (Firefox)
-RangeError: Invalid array length (Chrome)
-RangeError: Invalid array buffer length (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("RangeError")}}

- -

Quel est le problème ?

- -

Deux cas de figures peuvent causer cette erreur :

- - - -

Les tailles des objets Array et ArrayBuffer sont limitées car leurs longueurs (length) sont représentées par des entiers non-signés sur 32 bits. Ces valeurs sont donc nécessairement comprises dans l'intervalle allant de 0 à 2^32-1.

- -

Si vous utilisez le constructeur pour Array, il est probable que vous souhaitiez utiliser la notation littérale plutôt que le constructeur. En effet, le premier argument de ce constructeur correspond à la longueur du tableau.

- -

Sinon, vous pouvez réduire la longueur utilisée afin que celle-ci soit dans l'intervalle valide avant de l'utiliser pour une telle création ou modification.

- -

Exemples

- -

Exemples invalides

- -
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;         // set -1 to the length property
-
-let b = new Array(Math.pow(2, 32) - 1);
-b.length = b.length + 1;         // set 2^32 to the length property
-
- -

Exemples valides

- -
[ 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 est la notation hexadécimale
-// pour 2^32 - 1
-// ce qu'on peut également écrire (-1 >>> 0)
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/invalid_array_length/index.md b/files/fr/web/javascript/reference/errors/invalid_array_length/index.md new file mode 100644 index 0000000000..aa5fd0d701 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/invalid_array_length/index.md @@ -0,0 +1,80 @@ +--- +title: 'RangeError: invalid array length' +slug: Web/JavaScript/Reference/Errors/Invalid_array_length +tags: + - Erreurs + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length +original_slug: Web/JavaScript/Reference/Erreurs/Invalid_array_length +--- +
{{jsSidebar("Erreurs")}}
+ +

Message

+ +
RangeError: Array length must be a finite positive integer (Edge)
+RangeError: invalid array length (Firefox)
+RangeError: Invalid array length (Chrome)
+RangeError: Invalid array buffer length (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("RangeError")}}

+ +

Quel est le problème ?

+ +

Deux cas de figures peuvent causer cette erreur :

+ + + +

Les tailles des objets Array et ArrayBuffer sont limitées car leurs longueurs (length) sont représentées par des entiers non-signés sur 32 bits. Ces valeurs sont donc nécessairement comprises dans l'intervalle allant de 0 à 2^32-1.

+ +

Si vous utilisez le constructeur pour Array, il est probable que vous souhaitiez utiliser la notation littérale plutôt que le constructeur. En effet, le premier argument de ce constructeur correspond à la longueur du tableau.

+ +

Sinon, vous pouvez réduire la longueur utilisée afin que celle-ci soit dans l'intervalle valide avant de l'utiliser pour une telle création ou modification.

+ +

Exemples

+ +

Exemples invalides

+ +
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;         // set -1 to the length property
+
+let b = new Array(Math.pow(2, 32) - 1);
+b.length = b.length + 1;         // set 2^32 to the length property
+
+ +

Exemples valides

+ +
[ 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 est la notation hexadécimale
+// pour 2^32 - 1
+// ce qu'on peut également écrire (-1 >>> 0)
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html b/files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html deleted file mode 100644 index 5a441e32a9..0000000000 --- a/files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: 'ReferenceError: invalid assignment left-hand side' -slug: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side -tags: - - Erreurs - - JavaScript - - ReferenceError -translation_of: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side -original_slug: Web/JavaScript/Reference/Erreurs/Invalid_assignment_left-hand_side ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
ReferenceError: invalid assignment left-hand side
-
- -

Type d'erreur

- -

{{jsxref("ReferenceError")}}.

- -

Quel est le problème ?

- -

Un affectation inattendue a eu lieu. Cela peut être dû à un mélange entre un opérateur d'affectation et un opérateur de comparaison. Un seul signe égal affectera une valeur à une variable alors que les opérateurs == ou === comparent des valeurs entre elles.

- -

Exemples

- -
if (Math.PI = 3 || Math.PI = 4) {
-  console.log('Nope !');
-}
-// ReferenceError: invalid assignment left-hand side
-
-var str = 'Hello, '
-+= 'is it me '
-+= 'you\'re looking for?';
-// ReferenceError: invalid assignment left-hand side
-
- -

Dans l'instruction if, plutôt qu'une affectation, on voudra plutôt utiliser un opérateur == ou === et l'opérateur de concaténation (+) à la place pour la chaîne.

- -
if (Math.PI == 3 || Math.PI == 4) {
-  console.log('no way!');
-}
-
-var str = 'Hello, '
-+ 'from the '
-+ 'other side!';
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.md b/files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.md new file mode 100644 index 0000000000..5a441e32a9 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.md @@ -0,0 +1,55 @@ +--- +title: 'ReferenceError: invalid assignment left-hand side' +slug: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +tags: + - Erreurs + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +original_slug: Web/JavaScript/Reference/Erreurs/Invalid_assignment_left-hand_side +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
ReferenceError: invalid assignment left-hand side
+
+ +

Type d'erreur

+ +

{{jsxref("ReferenceError")}}.

+ +

Quel est le problème ?

+ +

Un affectation inattendue a eu lieu. Cela peut être dû à un mélange entre un opérateur d'affectation et un opérateur de comparaison. Un seul signe égal affectera une valeur à une variable alors que les opérateurs == ou === comparent des valeurs entre elles.

+ +

Exemples

+ +
if (Math.PI = 3 || Math.PI = 4) {
+  console.log('Nope !');
+}
+// ReferenceError: invalid assignment left-hand side
+
+var str = 'Hello, '
++= 'is it me '
++= 'you\'re looking for?';
+// ReferenceError: invalid assignment left-hand side
+
+ +

Dans l'instruction if, plutôt qu'une affectation, on voudra plutôt utiliser un opérateur == ou === et l'opérateur de concaténation (+) à la place pour la chaîne.

+ +
if (Math.PI == 3 || Math.PI == 4) {
+  console.log('no way!');
+}
+
+var str = 'Hello, '
++ 'from the '
++ 'other side!';
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/invalid_const_assignment/index.html b/files/fr/web/javascript/reference/errors/invalid_const_assignment/index.html deleted file mode 100644 index 76219c8d9f..0000000000 --- a/files/fr/web/javascript/reference/errors/invalid_const_assignment/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: 'TypeError: invalid assignment to const "x"' -slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment -original_slug: Web/JavaScript/Reference/Erreurs/Invalid_const_assignment ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: invalid assignment to const "x" (Firefox)
-TypeError: Assignment to constant variable. (Chrome)
-TypeError: Redeclaration of const 'x' (Edge)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

Une constante est une valeur qui ne peut pas être modifiée lors de l'exécution du programme. Elle ne peut pas être modifiée grâce à une réaffectation ou grâce à une redéclaration. En JavaScript, les constantes sont déclarées grâce au mot-clé const.

- -

Exemples

- -

Redéclaration invalide

- -

Si on affecte une valeur à une constante dans la même portée de bloc que celui qui contient l'affectation initiale, une exception sera levée :

- -
const COLUMNS = 80;
-
-// ...
-
-COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
- -

Résoudre le problème

- -

Il existe plusieurs façons de résoudre ce problème et il faut au préalable comprendre le rôle de la constante en question.

- -

Utiliser un autre nom

- -

Si on souhaite déclarer une autre constante, on peut utiliser un autre nom que celui qui est déjà pris dans cette portée :

- -
const COLUMNS = 80;
-const WIDE_COLUMNS = 120;
- -

const, let ou var ?

- -

const ne doit pas être utilisé si on ne souhaite pas déclarer de constante. Peut-être qu'on souhaite simplement déclarer une variable avec une portée de bloc grâce à let ou une variable globale avec var.

- -
let columns = 80;
-
-// ...
-
-let columns = 120;
-
- -

Gérer les portées

- -

On peut également vérifier qu'on est dans la bonne portée. Est-ce que la constante devait apparaître dans la portée en question ou devait être utilisée dans une fonction ?

- -
const COLUMNS = 80;
-
-function setupBigScreenEnvironment() {
-  const COLUMNS = 120;
-}
- -

const et l'immuabilité

- -

La déclaration const crée une référence en lecture seule vers une valeur. Elle ne signifie pas que la valeur en question est immuable mais uniquement que l'identifiant de la référence ne peut pas recevoir de nouvelle valeur. Ainsi, si le contenu est un objet, celui-ci pourra toujours être modifié :

- -
const obj = {toto: 'truc'};
-obj = {toto: 'bidule'}; // TypeError: invalid assignment to const `obj'
-
- -

En revanche, on peut modifier les propriétés :

- -
obj.toto = 'bidule';
-obj; // Object { toto: "bidule" }
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/invalid_const_assignment/index.md b/files/fr/web/javascript/reference/errors/invalid_const_assignment/index.md new file mode 100644 index 0000000000..76219c8d9f --- /dev/null +++ b/files/fr/web/javascript/reference/errors/invalid_const_assignment/index.md @@ -0,0 +1,91 @@ +--- +title: 'TypeError: invalid assignment to const "x"' +slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment +original_slug: Web/JavaScript/Reference/Erreurs/Invalid_const_assignment +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: invalid assignment to const "x" (Firefox)
+TypeError: Assignment to constant variable. (Chrome)
+TypeError: Redeclaration of const 'x' (Edge)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

Une constante est une valeur qui ne peut pas être modifiée lors de l'exécution du programme. Elle ne peut pas être modifiée grâce à une réaffectation ou grâce à une redéclaration. En JavaScript, les constantes sont déclarées grâce au mot-clé const.

+ +

Exemples

+ +

Redéclaration invalide

+ +

Si on affecte une valeur à une constante dans la même portée de bloc que celui qui contient l'affectation initiale, une exception sera levée :

+ +
const COLUMNS = 80;
+
+// ...
+
+COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
+ +

Résoudre le problème

+ +

Il existe plusieurs façons de résoudre ce problème et il faut au préalable comprendre le rôle de la constante en question.

+ +

Utiliser un autre nom

+ +

Si on souhaite déclarer une autre constante, on peut utiliser un autre nom que celui qui est déjà pris dans cette portée :

+ +
const COLUMNS = 80;
+const WIDE_COLUMNS = 120;
+ +

const, let ou var ?

+ +

const ne doit pas être utilisé si on ne souhaite pas déclarer de constante. Peut-être qu'on souhaite simplement déclarer une variable avec une portée de bloc grâce à let ou une variable globale avec var.

+ +
let columns = 80;
+
+// ...
+
+let columns = 120;
+
+ +

Gérer les portées

+ +

On peut également vérifier qu'on est dans la bonne portée. Est-ce que la constante devait apparaître dans la portée en question ou devait être utilisée dans une fonction ?

+ +
const COLUMNS = 80;
+
+function setupBigScreenEnvironment() {
+  const COLUMNS = 120;
+}
+ +

const et l'immuabilité

+ +

La déclaration const crée une référence en lecture seule vers une valeur. Elle ne signifie pas que la valeur en question est immuable mais uniquement que l'identifiant de la référence ne peut pas recevoir de nouvelle valeur. Ainsi, si le contenu est un objet, celui-ci pourra toujours être modifié :

+ +
const obj = {toto: 'truc'};
+obj = {toto: 'bidule'}; // TypeError: invalid assignment to const `obj'
+
+ +

En revanche, on peut modifier les propriétés :

+ +
obj.toto = 'bidule';
+obj; // Object { toto: "bidule" }
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/invalid_date/index.html b/files/fr/web/javascript/reference/errors/invalid_date/index.html deleted file mode 100644 index a89f979fbc..0000000000 --- a/files/fr/web/javascript/reference/errors/invalid_date/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 'RangeError: invalid date' -slug: Web/JavaScript/Reference/Errors/Invalid_date -tags: - - Erreurs - - JavaScript - - RangeError -translation_of: Web/JavaScript/Reference/Errors/Invalid_date -original_slug: Web/JavaScript/Reference/Erreurs/Invalid_date ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
RangeError: invalid date (Edge)
-RangeError: invalid date (Firefox)
-RangeError: invalid time value (Chrome)
-RangeError: Provided date is not in valid range (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("RangeError")}}

- -

Quel est le problème ?

- -

Une chaîne de caractères indiquant une date invalide a été fournie comme argument au constructeur {{jsxref("Date")}} ou à la méthode {{jsxref("Date.parse()")}}.

- -

Exemples

- -

Exemples invalides

- -

Les chaînes de caractères qui ne peuvent pas être converties en date ou les dates qui contiennent des éléments illégaux pour le format ISO renvoient généralement {{jsxref("NaN")}}. Cependant, selon l'implémentation, les chaînes de caractères qui ne respectent pas le format ISO pour les dates peuvent déclencher une exception RangeError: invalid date. Les instructions suivantes déclencheront cette erreur dans Firefox :

- -
new Date('toto-truc 2014');
-new Date('2014-25-23').toISOString();
-new Date('toto-truc 2014').toString();
-
- -

En revanche, cette instruction renverra {{jsxref("NaN")}} dans Firefox :

- -
Date.parse('toto-truc 2014'); // NaN
- -

Pour plus de détails, consulter la documentation sur {{jsxref("Date.parse()")}}.

- -

Exemples valides

- -
new Date('05 October 2011 14:48 UTC');
-new Date(1317826080); // timestamp Unix pour le 5 octobre 2011 14:48:00 UTC
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/invalid_date/index.md b/files/fr/web/javascript/reference/errors/invalid_date/index.md new file mode 100644 index 0000000000..a89f979fbc --- /dev/null +++ b/files/fr/web/javascript/reference/errors/invalid_date/index.md @@ -0,0 +1,57 @@ +--- +title: 'RangeError: invalid date' +slug: Web/JavaScript/Reference/Errors/Invalid_date +tags: + - Erreurs + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_date +original_slug: Web/JavaScript/Reference/Erreurs/Invalid_date +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
RangeError: invalid date (Edge)
+RangeError: invalid date (Firefox)
+RangeError: invalid time value (Chrome)
+RangeError: Provided date is not in valid range (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("RangeError")}}

+ +

Quel est le problème ?

+ +

Une chaîne de caractères indiquant une date invalide a été fournie comme argument au constructeur {{jsxref("Date")}} ou à la méthode {{jsxref("Date.parse()")}}.

+ +

Exemples

+ +

Exemples invalides

+ +

Les chaînes de caractères qui ne peuvent pas être converties en date ou les dates qui contiennent des éléments illégaux pour le format ISO renvoient généralement {{jsxref("NaN")}}. Cependant, selon l'implémentation, les chaînes de caractères qui ne respectent pas le format ISO pour les dates peuvent déclencher une exception RangeError: invalid date. Les instructions suivantes déclencheront cette erreur dans Firefox :

+ +
new Date('toto-truc 2014');
+new Date('2014-25-23').toISOString();
+new Date('toto-truc 2014').toString();
+
+ +

En revanche, cette instruction renverra {{jsxref("NaN")}} dans Firefox :

+ +
Date.parse('toto-truc 2014'); // NaN
+ +

Pour plus de détails, consulter la documentation sur {{jsxref("Date.parse()")}}.

+ +

Exemples valides

+ +
new Date('05 October 2011 14:48 UTC');
+new Date(1317826080); // timestamp Unix pour le 5 octobre 2011 14:48:00 UTC
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.html b/files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.html deleted file mode 100644 index 2ae766aadc..0000000000 --- a/files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: 'SyntaxError: for-in loop head declarations may not have initializers' -slug: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer -tags: - - Erreurs - - JavaScript - - Mode strict - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer -original_slug: Web/JavaScript/Reference/Erreurs/Invalid_for-in_initializer ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: for-in loop head declarations cannot have an initializer (Edge)
-SyntaxError: for-in loop head declarations may not have initializers (Firefox)
-SyntaxError: for-in loop variable declaration may not have an initializer. (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}, uniquement en mode strict.

- -

Quel est le problème ?

- -

L'en-tête d'une boucle for...in contient une expression d'initialisation, c'est-à-dire qu'une variable est déclarée et qu'on lui affecte une valeur. Ceci n'est pas autorisé en mode strict (et ignoré en mode non-strict).

- -

Exemples

- -

Cet exemple déclenchera une exception SyntaxError :

- -
"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 declarations may not have initializers
-
- -

Boucle for-in valide

- -

On peut retirer l'initialisateur de l'en-tête de la boucle :

- -
"use strict";
-
-var obj = {a: 1, b: 2, c: 3 };
-
-for (var i in obj) {
-  console.log(obj[i]);
-}
-
- -

Parcours d'un tableau

- -

Il ne faut pas utiliser de boucle for...in pour parcourir un tableau (Array). Peut-être souhaitiez-vous utiliser une boucle for pour parcourir le tableau ? Cette boucle for permet également d'utiliser un initialisateur :

- -
var arr = [ "a", "b", "c" ]
-
-for (var i = 2; i < arr.length; i++) {
-  console.log(arr[i]);
-}
-
-// "c"
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.md b/files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.md new file mode 100644 index 0000000000..2ae766aadc --- /dev/null +++ b/files/fr/web/javascript/reference/errors/invalid_for-in_initializer/index.md @@ -0,0 +1,75 @@ +--- +title: 'SyntaxError: for-in loop head declarations may not have initializers' +slug: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer +tags: + - Erreurs + - JavaScript + - Mode strict + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer +original_slug: Web/JavaScript/Reference/Erreurs/Invalid_for-in_initializer +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: for-in loop head declarations cannot have an initializer (Edge)
+SyntaxError: for-in loop head declarations may not have initializers (Firefox)
+SyntaxError: for-in loop variable declaration may not have an initializer. (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}, uniquement en mode strict.

+ +

Quel est le problème ?

+ +

L'en-tête d'une boucle for...in contient une expression d'initialisation, c'est-à-dire qu'une variable est déclarée et qu'on lui affecte une valeur. Ceci n'est pas autorisé en mode strict (et ignoré en mode non-strict).

+ +

Exemples

+ +

Cet exemple déclenchera une exception SyntaxError :

+ +
"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 declarations may not have initializers
+
+ +

Boucle for-in valide

+ +

On peut retirer l'initialisateur de l'en-tête de la boucle :

+ +
"use strict";
+
+var obj = {a: 1, b: 2, c: 3 };
+
+for (var i in obj) {
+  console.log(obj[i]);
+}
+
+ +

Parcours d'un tableau

+ +

Il ne faut pas utiliser de boucle for...in pour parcourir un tableau (Array). Peut-être souhaitiez-vous utiliser une boucle for pour parcourir le tableau ? Cette boucle for permet également d'utiliser un initialisateur :

+ +
var arr = [ "a", "b", "c" ]
+
+for (var i = 2; i < arr.length; i++) {
+  console.log(arr[i]);
+}
+
+// "c"
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.html b/files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.html deleted file mode 100644 index 943b5399fc..0000000000 --- a/files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -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: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer -original_slug: Web/JavaScript/Reference/Erreurs/Invalid_for-of_initializer ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: for-of loop head declarations cannot have an initializer (Edge)
-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)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

L'en-tête d'une boucle for...of contient une expression d'initialisation, c'est-à-dire qu'une variable est déclarée et qu'on lui affecte une valeur. Ceci n'est pas autorisé pour les boucles for-of. En revanche, les boucles for permettent d'avoir un initialisateur.

- -

Exemples

- -

Boucles for-of invalides

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

Boucles for-of valides

- -

Il faut retirer l'initialisateur de l'en-tête de la boucle pour ne plus avoir l'erreur. Si cette valeur devait servir d'incrément, on peut ajouter l'addition dans le corps de la boucle.

- -
let iterable = [10, 20, 30];
-
-for (let value of iterable) {
-  value += 50;
-  console.log(value);
-}
-// 60
-// 70
-// 80
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.md b/files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.md new file mode 100644 index 0000000000..943b5399fc --- /dev/null +++ b/files/fr/web/javascript/reference/errors/invalid_for-of_initializer/index.md @@ -0,0 +1,64 @@ +--- +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: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer +original_slug: Web/JavaScript/Reference/Erreurs/Invalid_for-of_initializer +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: for-of loop head declarations cannot have an initializer (Edge)
+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)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

L'en-tête d'une boucle for...of contient une expression d'initialisation, c'est-à-dire qu'une variable est déclarée et qu'on lui affecte une valeur. Ceci n'est pas autorisé pour les boucles for-of. En revanche, les boucles for permettent d'avoir un initialisateur.

+ +

Exemples

+ +

Boucles for-of invalides

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

Boucles for-of valides

+ +

Il faut retirer l'initialisateur de l'en-tête de la boucle pour ne plus avoir l'erreur. Si cette valeur devait servir d'incrément, on peut ajouter l'addition dans le corps de la boucle.

+ +
let iterable = [10, 20, 30];
+
+for (let value of iterable) {
+  value += 50;
+  console.log(value);
+}
+// 60
+// 70
+// 80
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html b/files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html deleted file mode 100644 index a9fe80e977..0000000000 --- a/files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: 'TypeError: invalid ''instanceof'' operand ''x''' -slug: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand -tags: - - Error - - Errors - - JavaScript - - Reference - - TypeError -translation_of: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand -original_slug: Web/JavaScript/Reference/Erreurs/invalid_right_hand_side_instanceof_operand ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: invalid 'instanceof' operand "x" (Firefox)
-TypeError: "x" is not a function (Firefox)
-TypeError: Right-hand side of 'instanceof' is not an object (Chrome)
-TypeError: Right-hand side of 'instanceof' is not callable (Chrome)
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

L'opérateur instanceof attend un opérande droit qui soit un objet constructeur, c'est-à-dire un objet possédant une propriété prototype et qui puisse être appelé.

- -

Exemples

- -
"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
-42 instanceof 0;      // TypeError: invalid 'instanceof' operand 0
-
-function Toto() {}
-var f = Toto();        // Toto() est appelé et renvoie undefined
-var x = new Toto();
-
-x instanceof f;       // TypeError: invalid 'instanceof' operand f
-x instanceof x;       // TypeError: x is not a function
-
- -

Pour corriger ces erreurs, il faut remplacer l'opérateur instanceof avec l'opérateur typeof ou s'assurer que l'opérande droit est la fonction et non le résultat de son évaluation.

- -
typeof "test" == "string";  // true
-typeof 42 == "number"       // true
-
-function Toto() {}
-var f = Toto;               // On n'appelle pas Toto.
-var x = new Toto();
-
-x instanceof f;             // true
-x instanceof Toto;          // true
-
- -

Voir aussi

- - - -

 

diff --git a/files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.md b/files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.md new file mode 100644 index 0000000000..a9fe80e977 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.md @@ -0,0 +1,63 @@ +--- +title: 'TypeError: invalid ''instanceof'' operand ''x''' +slug: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand +tags: + - Error + - Errors + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand +original_slug: Web/JavaScript/Reference/Erreurs/invalid_right_hand_side_instanceof_operand +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: invalid 'instanceof' operand "x" (Firefox)
+TypeError: "x" is not a function (Firefox)
+TypeError: Right-hand side of 'instanceof' is not an object (Chrome)
+TypeError: Right-hand side of 'instanceof' is not callable (Chrome)
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

L'opérateur instanceof attend un opérande droit qui soit un objet constructeur, c'est-à-dire un objet possédant une propriété prototype et qui puisse être appelé.

+ +

Exemples

+ +
"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
+42 instanceof 0;      // TypeError: invalid 'instanceof' operand 0
+
+function Toto() {}
+var f = Toto();        // Toto() est appelé et renvoie undefined
+var x = new Toto();
+
+x instanceof f;       // TypeError: invalid 'instanceof' operand f
+x instanceof x;       // TypeError: x is not a function
+
+ +

Pour corriger ces erreurs, il faut remplacer l'opérateur instanceof avec l'opérateur typeof ou s'assurer que l'opérande droit est la fonction et non le résultat de son évaluation.

+ +
typeof "test" == "string";  // true
+typeof 42 == "number"       // true
+
+function Toto() {}
+var f = Toto;               // On n'appelle pas Toto.
+var x = new Toto();
+
+x instanceof f;             // true
+x instanceof Toto;          // true
+
+ +

Voir aussi

+ + + +

 

diff --git a/files/fr/web/javascript/reference/errors/is_not_iterable/index.html b/files/fr/web/javascript/reference/errors/is_not_iterable/index.html deleted file mode 100644 index 1aba992ca7..0000000000 --- a/files/fr/web/javascript/reference/errors/is_not_iterable/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: 'TypeError: ''x'' is not iterable' -slug: Web/JavaScript/Reference/Errors/is_not_iterable -tags: - - Error - - JavaScript - - Reference - - TypeError -translation_of: Web/JavaScript/Reference/Errors/is_not_iterable -original_slug: Web/JavaScript/Reference/Erreurs/is_not_iterable ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: 'x' is not iterable (Firefox, Chrome)
-TypeError: 'x' is not a function or its return value is not iterable (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

La valeur passée comme opérande droit de for…of ou comme argument d'une fonction telle que {{jsxref("Promise.all")}} ou {{jsxref("TypedArray.from")}} n'est pas un objet itérable.  Un objet itérable peut être un objet itérable natif tel qu'un objet {{jsxref("Array")}}, {{jsxref("String")}} ou {{jsxref("Map")}} ou le résultat d'un générateur ou un objet qui implémente le protocole itérable.

- -

Exemples

- -

Parcourir les propriétés d'un objet

- -

En JavaScript, les objets ne sont pas itérables car ils n'implémentent pas le protocole itérable. On ne peut donc pas utiliser for...of afin d'en parcourir les propriétés.

- -
var obj = { 'France': 'Paris', 'England': 'London' };
-for (let p of obj) { // TypeError: obj is not iterable
-    // …
-}
-
- -

Si on souhaite utiliser un itérateur pour parcourir les propriétés (leurs noms ou leurs valeurs), on pourra utiliser les méthodes {{jsxref("Object.keys")}} ou {{jsxref("Object.entries")}} qui fournissent des itérateurs :

- -
var obj = { 'France': 'Paris', 'England': 'London' };
-// On parcourt les noms des propriétés
-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);
-
- -

On pourrait également utiliser un objet {{jsxref("Map")}} :

- -
var map = new Map;
-map.set('France', 'Paris');
-map.set('England', 'London');
-// On parcourt les noms des propriétés
-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);
-
- -

Itérer grâce à un générateur

- -

Les générateurs sont des fonctions qui, lorsqu'elles sont appelées, produisent des objets itérables.

- -
function* generate(a, b) {
-  yield a;
-  yield b;
-}
-
-for (let x of generate) // TypeError: generate is not iterable
-    console.log(x);
-
- -

Lorsqu'elles ne sont pas appelées, l'objet {{jsxref("Function")}} correspondant au générateur peut être appelé mais il n'est pass itérable. Il ne faut donc pas oublier d'invoquer le générateur afin de parcourir les valeurs de l'itérateur qu'il produit.

- -
function* generate(a, b) {
-    yield a;
-    yield b;
-}
-
-for (let x of generate(1,2))
-    console.log(x);
-
- -

Parcourir un itérable spécifique

- -

Les itérables spécifiques (custom iterables) peuvent être créés en implémentant la méthode {{jsxref("Symbol.iterator")}}. En implémentant cette méthode, il faut s'assurer que la valeur renvoyée est un objet qui est un itérateur. Autrement dit, l'objet renvoyé doit posséder une méthode next().

- -
const monIterableVide = {
-    [Symbol.iterator]() {
-        return [] // [] est un iterable mais pas un itérateur
-                  // car il n'a pas de méthode next
-    }
-}
-
-Array.from(monIterableVide);  // TypeError: monIterableVide is not iterable
-
- -

Voici une implémentation correcte :

- -
const monIterableVide = {
-    [Symbol.iterator]() {
-        return [][Symbol.iterator]()
-    }
-}
-
-Array.from(monIterableVide);  // []
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/is_not_iterable/index.md b/files/fr/web/javascript/reference/errors/is_not_iterable/index.md new file mode 100644 index 0000000000..1aba992ca7 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/is_not_iterable/index.md @@ -0,0 +1,129 @@ +--- +title: 'TypeError: ''x'' is not iterable' +slug: Web/JavaScript/Reference/Errors/is_not_iterable +tags: + - Error + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/is_not_iterable +original_slug: Web/JavaScript/Reference/Erreurs/is_not_iterable +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: 'x' is not iterable (Firefox, Chrome)
+TypeError: 'x' is not a function or its return value is not iterable (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

La valeur passée comme opérande droit de for…of ou comme argument d'une fonction telle que {{jsxref("Promise.all")}} ou {{jsxref("TypedArray.from")}} n'est pas un objet itérable.  Un objet itérable peut être un objet itérable natif tel qu'un objet {{jsxref("Array")}}, {{jsxref("String")}} ou {{jsxref("Map")}} ou le résultat d'un générateur ou un objet qui implémente le protocole itérable.

+ +

Exemples

+ +

Parcourir les propriétés d'un objet

+ +

En JavaScript, les objets ne sont pas itérables car ils n'implémentent pas le protocole itérable. On ne peut donc pas utiliser for...of afin d'en parcourir les propriétés.

+ +
var obj = { 'France': 'Paris', 'England': 'London' };
+for (let p of obj) { // TypeError: obj is not iterable
+    // …
+}
+
+ +

Si on souhaite utiliser un itérateur pour parcourir les propriétés (leurs noms ou leurs valeurs), on pourra utiliser les méthodes {{jsxref("Object.keys")}} ou {{jsxref("Object.entries")}} qui fournissent des itérateurs :

+ +
var obj = { 'France': 'Paris', 'England': 'London' };
+// On parcourt les noms des propriétés
+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);
+
+ +

On pourrait également utiliser un objet {{jsxref("Map")}} :

+ +
var map = new Map;
+map.set('France', 'Paris');
+map.set('England', 'London');
+// On parcourt les noms des propriétés
+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);
+
+ +

Itérer grâce à un générateur

+ +

Les générateurs sont des fonctions qui, lorsqu'elles sont appelées, produisent des objets itérables.

+ +
function* generate(a, b) {
+  yield a;
+  yield b;
+}
+
+for (let x of generate) // TypeError: generate is not iterable
+    console.log(x);
+
+ +

Lorsqu'elles ne sont pas appelées, l'objet {{jsxref("Function")}} correspondant au générateur peut être appelé mais il n'est pass itérable. Il ne faut donc pas oublier d'invoquer le générateur afin de parcourir les valeurs de l'itérateur qu'il produit.

+ +
function* generate(a, b) {
+    yield a;
+    yield b;
+}
+
+for (let x of generate(1,2))
+    console.log(x);
+
+ +

Parcourir un itérable spécifique

+ +

Les itérables spécifiques (custom iterables) peuvent être créés en implémentant la méthode {{jsxref("Symbol.iterator")}}. En implémentant cette méthode, il faut s'assurer que la valeur renvoyée est un objet qui est un itérateur. Autrement dit, l'objet renvoyé doit posséder une méthode next().

+ +
const monIterableVide = {
+    [Symbol.iterator]() {
+        return [] // [] est un iterable mais pas un itérateur
+                  // car il n'a pas de méthode next
+    }
+}
+
+Array.from(monIterableVide);  // TypeError: monIterableVide is not iterable
+
+ +

Voici une implémentation correcte :

+ +
const monIterableVide = {
+    [Symbol.iterator]() {
+        return [][Symbol.iterator]()
+    }
+}
+
+Array.from(monIterableVide);  // []
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/json_bad_parse/index.html b/files/fr/web/javascript/reference/errors/json_bad_parse/index.html deleted file mode 100644 index 800d8fd05f..0000000000 --- a/files/fr/web/javascript/reference/errors/json_bad_parse/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: 'SyntaxError: JSON.parse: bad parsing' -slug: Web/JavaScript/Reference/Errors/JSON_bad_parse -tags: - - Erreurs - - JSON - - JavaScript - - NeedsExample - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/JSON_bad_parse -original_slug: Web/JavaScript/Reference/Erreurs/JSON_bad_parse ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
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
-SyntaxError: JSON.parse Error: Invalid character at position {0} (Edge)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Lorsque la méthode {{jsxref("JSON.parse()")}} analyse (parse) une chaîne de caractères en JSON, cette chaîne doit être du JSON valide et une exception sera levée si la syntaxe est incorrecte.

- -

Exemples

- -

JSON.parse() n'accepte pas les virgules en fin de tableau

- -

Les deux lignes qui suivent déclencheront une exception SyntaxError :

- -
JSON.parse('[1, 2, 3, 4, ]');
-JSON.parse('{"foo" : 1, }');
-// SyntaxError JSON.parse: unexpected character
-// at line 1 column 14 of the JSON data
-
- -

Pour que la méthode puisse analyser le JSON correctement, on évitera les virgules en fin de tableau :

- -
JSON.parse('[1, 2, 3, 4 ]');
-JSON.parse('{"foo" : 1 }');
- -

Les noms des propriétés doivent être entre double quotes

- -

On ne peut pas utiliser de quotes simples pour indiquer le nom d'une propriété (ex. 'toto').

- -
JSON.parse("{'toto' : 1 }");
-// SyntaxError: JSON.parse: expected property name or '}'
-// at line 1 column 2 of the JSON data
- -

À la place, on écrira "toto" :

- -
JSON.parse('{"toto" : 1 }');
- -

Zéros en début de nombres et points décimaux

- -

On ne peut pas utiliser de zéros en début de nombre (ex. 01). Par ailleurs, les nombres décimaux doivent avoir une partie décimale, on ne peut pas terminer un nombre par un point.

- -
JSON.parse('{"toto" : 01 }');
-// SyntaxError: JSON.parse: expected ',' or '}' after property value
-// in object at line 1 column 2 of the JSON data
-
-JSON.parse('{"toto" : 1. }');
-// SyntaxError: JSON.parse: unterminated fractional number
-// at line 1 column 2 of the JSON data
-
- -

Pour que cela fonctionne, on écrira simplement 1 sans 0 devant et au moins un chiffre après le séparateur décimal :

- -
JSON.parse('{"toto" : 1 }');
-JSON.parse('{"toto" : 1.0 }');
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/json_bad_parse/index.md b/files/fr/web/javascript/reference/errors/json_bad_parse/index.md new file mode 100644 index 0000000000..800d8fd05f --- /dev/null +++ b/files/fr/web/javascript/reference/errors/json_bad_parse/index.md @@ -0,0 +1,113 @@ +--- +title: 'SyntaxError: JSON.parse: bad parsing' +slug: Web/JavaScript/Reference/Errors/JSON_bad_parse +tags: + - Erreurs + - JSON + - JavaScript + - NeedsExample + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/JSON_bad_parse +original_slug: Web/JavaScript/Reference/Erreurs/JSON_bad_parse +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
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
+SyntaxError: JSON.parse Error: Invalid character at position {0} (Edge)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Lorsque la méthode {{jsxref("JSON.parse()")}} analyse (parse) une chaîne de caractères en JSON, cette chaîne doit être du JSON valide et une exception sera levée si la syntaxe est incorrecte.

+ +

Exemples

+ +

JSON.parse() n'accepte pas les virgules en fin de tableau

+ +

Les deux lignes qui suivent déclencheront une exception SyntaxError :

+ +
JSON.parse('[1, 2, 3, 4, ]');
+JSON.parse('{"foo" : 1, }');
+// SyntaxError JSON.parse: unexpected character
+// at line 1 column 14 of the JSON data
+
+ +

Pour que la méthode puisse analyser le JSON correctement, on évitera les virgules en fin de tableau :

+ +
JSON.parse('[1, 2, 3, 4 ]');
+JSON.parse('{"foo" : 1 }');
+ +

Les noms des propriétés doivent être entre double quotes

+ +

On ne peut pas utiliser de quotes simples pour indiquer le nom d'une propriété (ex. 'toto').

+ +
JSON.parse("{'toto' : 1 }");
+// SyntaxError: JSON.parse: expected property name or '}'
+// at line 1 column 2 of the JSON data
+ +

À la place, on écrira "toto" :

+ +
JSON.parse('{"toto" : 1 }');
+ +

Zéros en début de nombres et points décimaux

+ +

On ne peut pas utiliser de zéros en début de nombre (ex. 01). Par ailleurs, les nombres décimaux doivent avoir une partie décimale, on ne peut pas terminer un nombre par un point.

+ +
JSON.parse('{"toto" : 01 }');
+// SyntaxError: JSON.parse: expected ',' or '}' after property value
+// in object at line 1 column 2 of the JSON data
+
+JSON.parse('{"toto" : 1. }');
+// SyntaxError: JSON.parse: unterminated fractional number
+// at line 1 column 2 of the JSON data
+
+ +

Pour que cela fonctionne, on écrira simplement 1 sans 0 devant et au moins un chiffre après le séparateur décimal :

+ +
JSON.parse('{"toto" : 1 }');
+JSON.parse('{"toto" : 1.0 }');
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.html b/files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.html deleted file mode 100644 index a06f5cc5c9..0000000000 --- a/files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: 'SyntaxError: Malformed formal parameter' -slug: Web/JavaScript/Reference/Errors/Malformed_formal_parameter -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Malformed_formal_parameter -original_slug: Web/JavaScript/Reference/Erreurs/Malformed_formal_parameter ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Expected {x} (Edge)
-SyntaxError: malformed formal parameter (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

La méthode {{jsxref("Function()")}} a été utilisée avec au moins deux arguments. Le dernier argument correspond au code source de la nouvelle fonction qui est créée. Les autres arguments sont la liste des arguments passés à la fonction.

- -

C'est cette liste d'arguments qui est, pour une certaine raison, invalide. Il s'agit peut-être d'un mot-clé (if ou var par exemple) utilisé comme un nom d'argument, ou d'un signe de ponctuation mal placé. Il peut également s'agir d'une valeur invalide comme un nombre ou un objet.

- -

OK mais pourquoi cette formulation étrange ?

- -

En effet, "Formal parameter" est une manière étrange de dire  « argument de fonction ». Le mot "malformed" (malformé) est utilisé car les ingénieurs travaillant sur Firefox engineers apprécient énormément les romans gothiques du XIXe.

- -

Examples

- -

Exemples invalides

- -
var f = Function("x y", "return x + y;");
-// SyntaxError (virgule manquante)
-
-var f = Function("x,", "return x;");
-// SyntaxError (virgule mal placée)
-
-var f = Function(37, "console.log('OK')");
-// SyntaxError (des nombres ne peuvent être des noms)
-
- -

Exemples valides

- -
 // Ponctuation correcte
-var f = Function("x, y", "return x + y;");
-
-var f = Function("x", "return x;");
-
-// Voici une alternative plus rapide
-// si vous pouvez éviter Function
-var f = function (x) { return x; };
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.md b/files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.md new file mode 100644 index 0000000000..a06f5cc5c9 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/malformed_formal_parameter/index.md @@ -0,0 +1,65 @@ +--- +title: 'SyntaxError: Malformed formal parameter' +slug: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +original_slug: Web/JavaScript/Reference/Erreurs/Malformed_formal_parameter +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Expected {x} (Edge)
+SyntaxError: malformed formal parameter (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

La méthode {{jsxref("Function()")}} a été utilisée avec au moins deux arguments. Le dernier argument correspond au code source de la nouvelle fonction qui est créée. Les autres arguments sont la liste des arguments passés à la fonction.

+ +

C'est cette liste d'arguments qui est, pour une certaine raison, invalide. Il s'agit peut-être d'un mot-clé (if ou var par exemple) utilisé comme un nom d'argument, ou d'un signe de ponctuation mal placé. Il peut également s'agir d'une valeur invalide comme un nombre ou un objet.

+ +

OK mais pourquoi cette formulation étrange ?

+ +

En effet, "Formal parameter" est une manière étrange de dire  « argument de fonction ». Le mot "malformed" (malformé) est utilisé car les ingénieurs travaillant sur Firefox engineers apprécient énormément les romans gothiques du XIXe.

+ +

Examples

+ +

Exemples invalides

+ +
var f = Function("x y", "return x + y;");
+// SyntaxError (virgule manquante)
+
+var f = Function("x,", "return x;");
+// SyntaxError (virgule mal placée)
+
+var f = Function(37, "console.log('OK')");
+// SyntaxError (des nombres ne peuvent être des noms)
+
+ +

Exemples valides

+ +
 // Ponctuation correcte
+var f = Function("x, y", "return x + y;");
+
+var f = Function("x", "return x;");
+
+// Voici une alternative plus rapide
+// si vous pouvez éviter Function
+var f = function (x) { return x; };
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/malformed_uri/index.html b/files/fr/web/javascript/reference/errors/malformed_uri/index.html deleted file mode 100644 index dfe037e1aa..0000000000 --- a/files/fr/web/javascript/reference/errors/malformed_uri/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: 'URIError: malformed URI sequence' -slug: Web/JavaScript/Reference/Errors/Malformed_URI -tags: - - Erreurs - - JavaScript - - URIError -translation_of: Web/JavaScript/Reference/Errors/Malformed_URI -original_slug: Web/JavaScript/Reference/Erreurs/Malformed_URI ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
URIError: The URI to be encoded contains invalid character (Edge)
-URIError: malformed URI sequence (Firefox)
-URIError: URI malformed (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("URIError")}}

- -

Quel est le problème ?

- -

Il y a eu une erreur lors de l'encodage ou du décodage de l'URI. Un argument fourni à {{jsxref("decodeURI")}}, {{jsxref("encodeURI")}}, {{jsxref("encodeURIComponent")}} ou à {{jsxref("decodeURIComponent")}} n'était pas valide et la fonction concernée n'a pas pu encoder ou décoder la valeur correctement.

- -

Exemples

- -

Encodage

- -

L'encodage permet de remplacer certains caractères par une, deux, trois voire quatre séquences d'échappement qui représente l'encodage UTF-8 du caractère. Une exception {{jsxref("URIError")}} sera levée si on tente d'encoder un caractère surrogate qui ne fait pas partie d'une paire de codets :

- -
encodeURI('\uD800');
-// "URIError: malformed URI sequence"
-
-encodeURI('\uDFFF');
-// "URIError: malformed URI sequence"
-
- -

En revanche, si on dispose de la paire de codets :

- -
encodeURI('\uD800\uDFFF');
-// "%F0%90%8F%BF"
- -

Décodage

- -

Le décodage permet de remplacer chaque séquence d'échappement dans le composant encodé par le caractère qu'elle représente. S'il n'existe aucun caractère correspondant, une exception sera déclenchée :

- -
decodeURIComponent('%E0%A4%A');
-// "URIError: malformed URI sequence"
-
- -

Avec la valeur d'entrée correcte, on a généralement quelque chose qui ressemble à :

- -
decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B');
-// "JavaScript_шеллы"
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/malformed_uri/index.md b/files/fr/web/javascript/reference/errors/malformed_uri/index.md new file mode 100644 index 0000000000..dfe037e1aa --- /dev/null +++ b/files/fr/web/javascript/reference/errors/malformed_uri/index.md @@ -0,0 +1,67 @@ +--- +title: 'URIError: malformed URI sequence' +slug: Web/JavaScript/Reference/Errors/Malformed_URI +tags: + - Erreurs + - JavaScript + - URIError +translation_of: Web/JavaScript/Reference/Errors/Malformed_URI +original_slug: Web/JavaScript/Reference/Erreurs/Malformed_URI +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
URIError: The URI to be encoded contains invalid character (Edge)
+URIError: malformed URI sequence (Firefox)
+URIError: URI malformed (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("URIError")}}

+ +

Quel est le problème ?

+ +

Il y a eu une erreur lors de l'encodage ou du décodage de l'URI. Un argument fourni à {{jsxref("decodeURI")}}, {{jsxref("encodeURI")}}, {{jsxref("encodeURIComponent")}} ou à {{jsxref("decodeURIComponent")}} n'était pas valide et la fonction concernée n'a pas pu encoder ou décoder la valeur correctement.

+ +

Exemples

+ +

Encodage

+ +

L'encodage permet de remplacer certains caractères par une, deux, trois voire quatre séquences d'échappement qui représente l'encodage UTF-8 du caractère. Une exception {{jsxref("URIError")}} sera levée si on tente d'encoder un caractère surrogate qui ne fait pas partie d'une paire de codets :

+ +
encodeURI('\uD800');
+// "URIError: malformed URI sequence"
+
+encodeURI('\uDFFF');
+// "URIError: malformed URI sequence"
+
+ +

En revanche, si on dispose de la paire de codets :

+ +
encodeURI('\uD800\uDFFF');
+// "%F0%90%8F%BF"
+ +

Décodage

+ +

Le décodage permet de remplacer chaque séquence d'échappement dans le composant encodé par le caractère qu'elle représente. S'il n'existe aucun caractère correspondant, une exception sera déclenchée :

+ +
decodeURIComponent('%E0%A4%A');
+// "URIError: malformed URI sequence"
+
+ +

Avec la valeur d'entrée correcte, on a généralement quelque chose qui ressemble à :

+ +
decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B');
+// "JavaScript_шеллы"
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.html b/files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.html deleted file mode 100644 index c51fef7551..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: 'SyntaxError: missing ] after element list' -slug: Web/JavaScript/Reference/Errors/Missing_bracket_after_list -tags: - - Erreurs - - JavaScript - - Reference - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_bracket_after_list -original_slug: Web/JavaScript/Reference/Erreurs/Missing_bracket_after_list ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: missing ] after element list
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}.

- -

Quel est le problème ?

- -

Il y a une erreur dans le littéral de tableau qui est uilisé. Il manque un crochet fermant ("]") ou une virgule qui sépare les éléments.

- -

Exemples

- -

Littéraux de tableaux incomplets

- -
var liste = [1, 2,
-
-var instruments = [
-  "Ukulele",
-  "Guitare",
-  "Piano"
-};
-
-var data = [{toto: "truc"} {titi: "bidule"}];
-
- -

Les versions correctes seraient :

- -
var liste = [1, 2];
-
-var instruments = [
- "Ukulele",
- "Guitare",
- "Piano"
-];
-
-var data = [{toto: "truc"}, {titi: "bidule"}];
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.md b/files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.md new file mode 100644 index 0000000000..c51fef7551 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_bracket_after_list/index.md @@ -0,0 +1,58 @@ +--- +title: 'SyntaxError: missing ] after element list' +slug: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +tags: + - Erreurs + - JavaScript + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +original_slug: Web/JavaScript/Reference/Erreurs/Missing_bracket_after_list +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: missing ] after element list
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}.

+ +

Quel est le problème ?

+ +

Il y a une erreur dans le littéral de tableau qui est uilisé. Il manque un crochet fermant ("]") ou une virgule qui sépare les éléments.

+ +

Exemples

+ +

Littéraux de tableaux incomplets

+ +
var liste = [1, 2,
+
+var instruments = [
+  "Ukulele",
+  "Guitare",
+  "Piano"
+};
+
+var data = [{toto: "truc"} {titi: "bidule"}];
+
+ +

Les versions correctes seraient :

+ +
var liste = [1, 2];
+
+var instruments = [
+ "Ukulele",
+ "Guitare",
+ "Piano"
+];
+
+var data = [{toto: "truc"}, {titi: "bidule"}];
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.html b/files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.html deleted file mode 100644 index 9e6595726c..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 'SyntaxError: missing : after property id' -slug: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id -original_slug: Web/JavaScript/Reference/Erreurs/Missing_colon_after_property_id ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Expected ':' (Edge)
-SyntaxError: missing : after property id (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Lorsqu'on crée un objet en utilisant un initialisateur d'objet, il faut utiliser un deux-points ( : ) afin de séparer les clés des valeurs pour les propriétés de l'objet.

- -
var obj = { cleDeLaPropriete: 'valeur' };
-
- -

Exemples

- -

Deux-points et signe égal

- -

Le code qui suit provoquera une erreur car on utilise un signe égal (=) à la place du deux-points.

- -
var obj = { cleDeLaPropriete = 'valeur' };
-// SyntaxError: missing : after property id
-
- -

Pour corriger ce problème, on peut utiliser un deux-points ou bien affecter la nouvelle propriété après avoir créé l'objet :

- -
var obj = { cleDeLaPropriete: 'valeur' };
-
-// ou encore :
-
-var obj = { };
-obj['cleDeLaPropriete'] = 'valeur';
-
- -

Propriétés vides

- -

On ne peut pas créer de propriétés vides de cette façon :

- -
var obj = { cleDeLaPropriete; };
-// SyntaxError: missing : after property id
-
- -

Si vous souhaitez définir une propriété sans valeur, vous pouvez utiliser le mot-clé {{jsxref("null")}} :

- -
var obj = { cleDeLaPropriete: null };
- -

Propriétés calculées

- -

Si vous souhaitez créer une clé de propriété à partir d'une expression, il faudra utiliser des crochets pour encadrer l'expression (sinon le nom de la propriété ne pourra pas être calculé) :

- -
var obj = { 'tr'+'uc': 'toto' };
-// SyntaxError: missing : after property id
-
- -

Pour corriger l'erreur, il faudra placer l'expression entre crochets :

- -
var obj = { ['tr'+'uc']: 'toto' };
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.md b/files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.md new file mode 100644 index 0000000000..9e6595726c --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_colon_after_property_id/index.md @@ -0,0 +1,78 @@ +--- +title: 'SyntaxError: missing : after property id' +slug: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +original_slug: Web/JavaScript/Reference/Erreurs/Missing_colon_after_property_id +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Expected ':' (Edge)
+SyntaxError: missing : after property id (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Lorsqu'on crée un objet en utilisant un initialisateur d'objet, il faut utiliser un deux-points ( : ) afin de séparer les clés des valeurs pour les propriétés de l'objet.

+ +
var obj = { cleDeLaPropriete: 'valeur' };
+
+ +

Exemples

+ +

Deux-points et signe égal

+ +

Le code qui suit provoquera une erreur car on utilise un signe égal (=) à la place du deux-points.

+ +
var obj = { cleDeLaPropriete = 'valeur' };
+// SyntaxError: missing : after property id
+
+ +

Pour corriger ce problème, on peut utiliser un deux-points ou bien affecter la nouvelle propriété après avoir créé l'objet :

+ +
var obj = { cleDeLaPropriete: 'valeur' };
+
+// ou encore :
+
+var obj = { };
+obj['cleDeLaPropriete'] = 'valeur';
+
+ +

Propriétés vides

+ +

On ne peut pas créer de propriétés vides de cette façon :

+ +
var obj = { cleDeLaPropriete; };
+// SyntaxError: missing : after property id
+
+ +

Si vous souhaitez définir une propriété sans valeur, vous pouvez utiliser le mot-clé {{jsxref("null")}} :

+ +
var obj = { cleDeLaPropriete: null };
+ +

Propriétés calculées

+ +

Si vous souhaitez créer une clé de propriété à partir d'une expression, il faudra utiliser des crochets pour encadrer l'expression (sinon le nom de la propriété ne pourra pas être calculé) :

+ +
var obj = { 'tr'+'uc': 'toto' };
+// SyntaxError: missing : after property id
+
+ +

Pour corriger l'erreur, il faudra placer l'expression entre crochets :

+ +
var obj = { ['tr'+'uc']: 'toto' };
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.html b/files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.html deleted file mode 100644 index c8ee04b3c8..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: 'SyntaxError: missing } after function body' -slug: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body -original_slug: Web/JavaScript/Reference/Erreurs/Missing_curly_after_function_body ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Expected '}' (Edge)
-SyntaxError: missing } after function body (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Il y a une erreur de syntaxe près d'une création de fonction. Dans ce cas, il est préférable de vérifier que les parenthèses et accolades fermantes sont bien présentes et dans le bon ordre. Indenter et formater le code peut vous aider à vous y retrouver parmi les éventuels différents niveaux d'imbrication.

- -

Exemples

- -

Oubli d'une accolade fermante

- -

La plupart du temps, il s'agit d'une accolade manquante dans le code de la fonction :

- -
var charge = function() {
-  if (soleil) {
-    utiliserPanneauSolaire();
-  } else {
-    utiliserVelo();
-};
-
- -

La forme correcte est :

- -
var charge = function() {
-  if (soleil) {
-    utiliserPanneauSolaire();
-  } else {
-    utiliserVelo();
-  }
-};
- -

Une erreur de ce type peut être moins visible lorsqu'on utilise les fonctions qui sont appelées immédiatement, les fermetures ou d'autres formes qui utilisent de nombreuses parenthèses et/ou accolades comme par exemple :

- -
(function() { if (true) { return false; } );
-
- -

Généralement, mettre en forme et vérifier l'indentation permet de repérer ces erreurs.

- -
(function() {
-  if (true) {
-    return false;
-  }
-});
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.md b/files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.md new file mode 100644 index 0000000000..c8ee04b3c8 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_curly_after_function_body/index.md @@ -0,0 +1,68 @@ +--- +title: 'SyntaxError: missing } after function body' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +original_slug: Web/JavaScript/Reference/Erreurs/Missing_curly_after_function_body +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Expected '}' (Edge)
+SyntaxError: missing } after function body (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Il y a une erreur de syntaxe près d'une création de fonction. Dans ce cas, il est préférable de vérifier que les parenthèses et accolades fermantes sont bien présentes et dans le bon ordre. Indenter et formater le code peut vous aider à vous y retrouver parmi les éventuels différents niveaux d'imbrication.

+ +

Exemples

+ +

Oubli d'une accolade fermante

+ +

La plupart du temps, il s'agit d'une accolade manquante dans le code de la fonction :

+ +
var charge = function() {
+  if (soleil) {
+    utiliserPanneauSolaire();
+  } else {
+    utiliserVelo();
+};
+
+ +

La forme correcte est :

+ +
var charge = function() {
+  if (soleil) {
+    utiliserPanneauSolaire();
+  } else {
+    utiliserVelo();
+  }
+};
+ +

Une erreur de ce type peut être moins visible lorsqu'on utilise les fonctions qui sont appelées immédiatement, les fermetures ou d'autres formes qui utilisent de nombreuses parenthèses et/ou accolades comme par exemple :

+ +
(function() { if (true) { return false; } );
+
+ +

Généralement, mettre en forme et vérifier l'indentation permet de repérer ces erreurs.

+ +
(function() {
+  if (true) {
+    return false;
+  }
+});
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.html b/files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.html deleted file mode 100644 index f845a673c6..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: 'SyntaxError: missing } after property list' -slug: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list -original_slug: Web/JavaScript/Reference/Erreurs/Missing_curly_after_property_list ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Expected '}' (Edge)
-SyntaxError: missing } after property list (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Il y a une coquille dans le littéral objet utilisé. Cela peut être dû à une accolade manquante ou à une virgule manquante. Il est aussi utile de vérifier que les accolades et les parenthèses sont bien ordonnées. Pour ce type d'erreur, une bonne indentation permet de repérer plus facilement la coquille parmi les lignes de code.

- -

Exemples

- -

Une virgule oubliée

- -

Il arrive parfois que ce soit une virgule absente dans le littéral qui entraîne cette erreur :

- -
var obj = {
-  a: 1,
-  b: { maProp: 2 }
-  c: 3
-};
-
- -

La version correcte correspondante est :

- -
var obj = {
-  a: 1,
-  b: { maProp: 2 },
-  c: 3
-};
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.md b/files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.md new file mode 100644 index 0000000000..f845a673c6 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_curly_after_property_list/index.md @@ -0,0 +1,53 @@ +--- +title: 'SyntaxError: missing } after property list' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +original_slug: Web/JavaScript/Reference/Erreurs/Missing_curly_after_property_list +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Expected '}' (Edge)
+SyntaxError: missing } after property list (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Il y a une coquille dans le littéral objet utilisé. Cela peut être dû à une accolade manquante ou à une virgule manquante. Il est aussi utile de vérifier que les accolades et les parenthèses sont bien ordonnées. Pour ce type d'erreur, une bonne indentation permet de repérer plus facilement la coquille parmi les lignes de code.

+ +

Exemples

+ +

Une virgule oubliée

+ +

Il arrive parfois que ce soit une virgule absente dans le littéral qui entraîne cette erreur :

+ +
var obj = {
+  a: 1,
+  b: { maProp: 2 }
+  c: 3
+};
+
+ +

La version correcte correspondante est :

+ +
var obj = {
+  a: 1,
+  b: { maProp: 2 },
+  c: 3
+};
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_formal_parameter/index.html b/files/fr/web/javascript/reference/errors/missing_formal_parameter/index.html deleted file mode 100644 index e5956f0f04..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_formal_parameter/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 'SyntaxError: missing formal parameter' -slug: Web/JavaScript/Reference/Errors/Missing_formal_parameter -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_formal_parameter -original_slug: Web/JavaScript/Reference/Erreurs/Missing_formal_parameter ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: missing formal parameter (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

« Formal parameter » (ou « paramètre formel ») est une façon de désigner un paramètre d'une fonction. Ici, certains des paramètres de la fonction sont invalides. Lorsqu'on déclare une fonction, les paramètres doivent être des identifiants et non des valeurs (telles que des nombres, des chaînes de caractères ou des objets). La déclaration et l'appel de la fonction forment deux étapes distinctes. Les déclarations utilisent uniquement des identifiants comme paramètres. Lorsqu'on appelle une fonction, on fournit les valeurs à utiliser.

- -

En JavaScript, les identifiants peuvent contenir n'importe quel caractère alphanumérique (ou "$" or "_") et ne doivent pas commencer par un nombre. Un identifiant n'est pas une chaîne de caractères, une chaîne de caractères est une donnée alors qu'un identifiant fait partie du code.

- -

Exemples

- -

Lorsqu'on définit une fonction, les paramètres doivent être des identifiants. Aucune des fonctions suivantes ne répond à ce critère (elles lèvent donc toutes une erreur) car elles utilisent des valeurs :

- -
function carre(3) {
-  return nombre * nombre;
-};
-// SyntaxError: missing formal parameter
-
-function salutation("Coucou") {
-  return salut;
-};
-// SyntaxError: missing formal parameter
-
-function log({ obj: "value"}) {
-  console.log(arg)
-};
-// SyntaxError: missing formal parameter
-
- -

Il faut utiliser des identifiants lors de la déclaration des fonctions :

- -
function carre(nombre) {
-  return nombre * nombre;
-};
-
-function salutation(salut) {
-  return salut;
-};
-
-function log(arg) {
-  console.log(arg)
-};
- -

Ensuite, on pourra appeler ces fonctions avec les arguments voulus :

- -
carre(2); // 4
-salutation("Coucou"); // "Coucou"
-log({obj: "value"});  // Object { obj: "value" }
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_formal_parameter/index.md b/files/fr/web/javascript/reference/errors/missing_formal_parameter/index.md new file mode 100644 index 0000000000..e5956f0f04 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_formal_parameter/index.md @@ -0,0 +1,78 @@ +--- +title: 'SyntaxError: missing formal parameter' +slug: Web/JavaScript/Reference/Errors/Missing_formal_parameter +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_formal_parameter +original_slug: Web/JavaScript/Reference/Erreurs/Missing_formal_parameter +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: missing formal parameter (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

« Formal parameter » (ou « paramètre formel ») est une façon de désigner un paramètre d'une fonction. Ici, certains des paramètres de la fonction sont invalides. Lorsqu'on déclare une fonction, les paramètres doivent être des identifiants et non des valeurs (telles que des nombres, des chaînes de caractères ou des objets). La déclaration et l'appel de la fonction forment deux étapes distinctes. Les déclarations utilisent uniquement des identifiants comme paramètres. Lorsqu'on appelle une fonction, on fournit les valeurs à utiliser.

+ +

En JavaScript, les identifiants peuvent contenir n'importe quel caractère alphanumérique (ou "$" or "_") et ne doivent pas commencer par un nombre. Un identifiant n'est pas une chaîne de caractères, une chaîne de caractères est une donnée alors qu'un identifiant fait partie du code.

+ +

Exemples

+ +

Lorsqu'on définit une fonction, les paramètres doivent être des identifiants. Aucune des fonctions suivantes ne répond à ce critère (elles lèvent donc toutes une erreur) car elles utilisent des valeurs :

+ +
function carre(3) {
+  return nombre * nombre;
+};
+// SyntaxError: missing formal parameter
+
+function salutation("Coucou") {
+  return salut;
+};
+// SyntaxError: missing formal parameter
+
+function log({ obj: "value"}) {
+  console.log(arg)
+};
+// SyntaxError: missing formal parameter
+
+ +

Il faut utiliser des identifiants lors de la déclaration des fonctions :

+ +
function carre(nombre) {
+  return nombre * nombre;
+};
+
+function salutation(salut) {
+  return salut;
+};
+
+function log(arg) {
+  console.log(arg)
+};
+ +

Ensuite, on pourra appeler ces fonctions avec les arguments voulus :

+ +
carre(2); // 4
+salutation("Coucou"); // "Coucou"
+log({obj: "value"});  // Object { obj: "value" }
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.html b/files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.html deleted file mode 100644 index e368d0982c..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.html +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: 'SyntaxError: missing = in const declaration' -slug: Web/JavaScript/Reference/Errors/Missing_initializer_in_const -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_initializer_in_const -original_slug: Web/JavaScript/Reference/Erreurs/Missing_initializer_in_const ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Const must be initalized (Edge)
-SyntaxError: missing = in const declaration (Firefox)
-SyntaxError: Missing initializer in const declaration (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Une constante est une valeur qui ne peut pas être modifiée par le programme pendant l'exécution. Elle ne peut pas être changée avec une réaffectation ou une redéclaration. En JavaScript, les constantes sont déclarées grâce au mot-clé const. Il est également nécessaire de fournir une valeur d'initialisation dans l'instruction où on déclare la constante (ce qui est logique vu qu'on ne peut pas la modifier ensuite).

- -

Exemples

- -

Valeur d'initialisation manquante

- -

À la différence de var ou de let, il est nécessaire d'indiquer une valeur lors de la déclaration. Si aucune valeur n'est indiquée, une exception sera levée :

- -
const COLUMNS;
-// SyntaxError: missing = in const declaration
- -

Résoudre le problème

- -

On a le choix entre plusieurs options pour résoudre ce problème. Il faut comprendre le rôle de la constante en question.

- -

Ajouter une valeur constante

- -

On peut indiquer la valeur de la constante dans la même instruction :

- -
const COLONNES = 80;
- -

const, let ou var ?

- -

const ne doit pas être utilisé si on ne souhaite pas déclarer de constante. Peut-être qu'on souhaite simplement déclarer une variable avec une portée de bloc grâce à let ou une variable globale avec var. Ces deux instructions ne nécessitent pas de valeur initiale.

- -
let colonnes;
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.md b/files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.md new file mode 100644 index 0000000000..e368d0982c --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_initializer_in_const/index.md @@ -0,0 +1,60 @@ +--- +title: 'SyntaxError: missing = in const declaration' +slug: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +original_slug: Web/JavaScript/Reference/Erreurs/Missing_initializer_in_const +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Const must be initalized (Edge)
+SyntaxError: missing = in const declaration (Firefox)
+SyntaxError: Missing initializer in const declaration (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Une constante est une valeur qui ne peut pas être modifiée par le programme pendant l'exécution. Elle ne peut pas être changée avec une réaffectation ou une redéclaration. En JavaScript, les constantes sont déclarées grâce au mot-clé const. Il est également nécessaire de fournir une valeur d'initialisation dans l'instruction où on déclare la constante (ce qui est logique vu qu'on ne peut pas la modifier ensuite).

+ +

Exemples

+ +

Valeur d'initialisation manquante

+ +

À la différence de var ou de let, il est nécessaire d'indiquer une valeur lors de la déclaration. Si aucune valeur n'est indiquée, une exception sera levée :

+ +
const COLUMNS;
+// SyntaxError: missing = in const declaration
+ +

Résoudre le problème

+ +

On a le choix entre plusieurs options pour résoudre ce problème. Il faut comprendre le rôle de la constante en question.

+ +

Ajouter une valeur constante

+ +

On peut indiquer la valeur de la constante dans la même instruction :

+ +
const COLONNES = 80;
+ +

const, let ou var ?

+ +

const ne doit pas être utilisé si on ne souhaite pas déclarer de constante. Peut-être qu'on souhaite simplement déclarer une variable avec une portée de bloc grâce à let ou une variable globale avec var. Ces deux instructions ne nécessitent pas de valeur initiale.

+ +
let colonnes;
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.html b/files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.html deleted file mode 100644 index d46591c96f..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: 'SyntaxError: missing name after . operator' -slug: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator -original_slug: Web/JavaScript/Reference/Erreurs/Missing_name_after_dot_operator ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: missing name after . operator
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

L'opérateur . (le point) est utilisé pour accéder aux propriétés d'un objet. Il est nécessaire d'indiquer le nom de la propriété à laquelle on souhaite accéder. Pour les propriétés dont le nom est calculé, il est préférable d'utiliser les crochets pour encadrer le nom. Cela permet de calculer une expression dont le résultat sera le nom de la propriété recherchée. Peut-être cherchiez-vous à utiliser l'opérateur de concaténation ? C'est l'opérateur + qu'il faut utiliser dans ce cas. Pour plus de détails, voir les exemples ci-après.

- -

Exemples

- -

Accéder à une propriété

- -

Pour accéder à une propriété en JavaScript, on utilise le point (.) ou les crochets ([]) mais pas une combinaison des deux. Les crochets sont notamment utiles lorsqu'on souhaite accéder à des propriétés dont le nom est calculé.

- -
var obj = { toto: { truc: "bidule", machin2: "bidule2" } };
-var i = 2;
-
-obj.[toto].[truc]
-// SyntaxError: missing name after . operator
-
-obj.toto."machin"+i;
-// SyntaxError: missing name after . operator
-
- -

Pour corriger ce fragment de code, on pourra accéder aux propriétés de la façon suivante :

- -
obj.toto.truc; // "bidule"
-// ou autrement
-obj["toto"]["truc"]; // "bidule"
-
-// pour les propriétés dont le
-// nom est calculé, il faut les
-// crochets
-obj.toto["machin" + i]; // "bidule2"
-
- -

Accéder à une propriété ou concaténer ?

- -

Si vous avez l'habitude de développer en utilisant un autre langage de programmation tel que {{Glossary("PHP")}}, il est possible de mélanger certains opérateurs et d'utiliser le point comme opérateur de concaténation, qui est l'opérateur + en JavaScript :

- -
console.log("Coucou " . "monde");
-
-// SyntaxError: missing name after . operator
- -

À la place, on écrira :

- -
console.log("Coucou " + "monde");
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.md b/files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.md new file mode 100644 index 0000000000..d46591c96f --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_name_after_dot_operator/index.md @@ -0,0 +1,70 @@ +--- +title: 'SyntaxError: missing name after . operator' +slug: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +original_slug: Web/JavaScript/Reference/Erreurs/Missing_name_after_dot_operator +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: missing name after . operator
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

L'opérateur . (le point) est utilisé pour accéder aux propriétés d'un objet. Il est nécessaire d'indiquer le nom de la propriété à laquelle on souhaite accéder. Pour les propriétés dont le nom est calculé, il est préférable d'utiliser les crochets pour encadrer le nom. Cela permet de calculer une expression dont le résultat sera le nom de la propriété recherchée. Peut-être cherchiez-vous à utiliser l'opérateur de concaténation ? C'est l'opérateur + qu'il faut utiliser dans ce cas. Pour plus de détails, voir les exemples ci-après.

+ +

Exemples

+ +

Accéder à une propriété

+ +

Pour accéder à une propriété en JavaScript, on utilise le point (.) ou les crochets ([]) mais pas une combinaison des deux. Les crochets sont notamment utiles lorsqu'on souhaite accéder à des propriétés dont le nom est calculé.

+ +
var obj = { toto: { truc: "bidule", machin2: "bidule2" } };
+var i = 2;
+
+obj.[toto].[truc]
+// SyntaxError: missing name after . operator
+
+obj.toto."machin"+i;
+// SyntaxError: missing name after . operator
+
+ +

Pour corriger ce fragment de code, on pourra accéder aux propriétés de la façon suivante :

+ +
obj.toto.truc; // "bidule"
+// ou autrement
+obj["toto"]["truc"]; // "bidule"
+
+// pour les propriétés dont le
+// nom est calculé, il faut les
+// crochets
+obj.toto["machin" + i]; // "bidule2"
+
+ +

Accéder à une propriété ou concaténer ?

+ +

Si vous avez l'habitude de développer en utilisant un autre langage de programmation tel que {{Glossary("PHP")}}, il est possible de mélanger certains opérateurs et d'utiliser le point comme opérateur de concaténation, qui est l'opérateur + en JavaScript :

+ +
console.log("Coucou " . "monde");
+
+// SyntaxError: missing name after . operator
+ +

À la place, on écrira :

+ +
console.log("Coucou " + "monde");
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html b/files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html deleted file mode 100644 index f59707b152..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 'SyntaxError: missing ) after argument list' -slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list -original_slug: Web/JavaScript/Reference/Erreurs/Missing_parenthesis_after_argument_list ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Expected ')' (Edge)
-SyntaxError: missing ) after argument list (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}.

- -

Quel est le problème ?

- -

 

- -

Il y a une erreur avec la façon dont une fonction est appelée . Cela peut être une faute de frappe, un opérateur manquant, ou une chaîne non-échappée, par exemple .

- -

Exemple

- -

Parce qu'il n'y a pas d'opérateur "+" pour concaténer la chaîne de caractères, JavaScript s'attend à trouver une parenthèse après "PI : ", qu'il considère comme  l'argument de la fonction log. 

- -
console.log("PI: " Math.PI);
-// SyntaxError: missing ) after argument list
-
- -

La fonction log peut être corrigée en ajoutant un opérateur "+".

- -
console.log("PI: " + Math.PI);
-// "PI: 3.141592653589793"
- -

Chaînes non terminées

- -
console.log('"Java" + "Script" = \"' + 'Java' + 'Script\");
-// SyntaxError: missing ) after argument list
- -

Dans cet exemple, le moteur JavaScript considère qu'on souhaitait avoir ); dans la chaîne de caractères et l'ignore. Aussi, le moteur considère que l'appelle à console.log n'est pas terminé et qu'il manque une parenthèse fermante. Pour corriger ce problème, on peut rajouter une quote ' après la chaîne de caractères "Script" :

- -
console.log('"Java" + "Script" = \"' + 'Java' + 'Script\"');
-// '"Java" + "Script" = "JavaScript"'
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.md b/files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.md new file mode 100644 index 0000000000..f59707b152 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.md @@ -0,0 +1,57 @@ +--- +title: 'SyntaxError: missing ) after argument list' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +original_slug: Web/JavaScript/Reference/Erreurs/Missing_parenthesis_after_argument_list +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Expected ')' (Edge)
+SyntaxError: missing ) after argument list (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}.

+ +

Quel est le problème ?

+ +

 

+ +

Il y a une erreur avec la façon dont une fonction est appelée . Cela peut être une faute de frappe, un opérateur manquant, ou une chaîne non-échappée, par exemple .

+ +

Exemple

+ +

Parce qu'il n'y a pas d'opérateur "+" pour concaténer la chaîne de caractères, JavaScript s'attend à trouver une parenthèse après "PI : ", qu'il considère comme  l'argument de la fonction log. 

+ +
console.log("PI: " Math.PI);
+// SyntaxError: missing ) after argument list
+
+ +

La fonction log peut être corrigée en ajoutant un opérateur "+".

+ +
console.log("PI: " + Math.PI);
+// "PI: 3.141592653589793"
+ +

Chaînes non terminées

+ +
console.log('"Java" + "Script" = \"' + 'Java' + 'Script\");
+// SyntaxError: missing ) after argument list
+ +

Dans cet exemple, le moteur JavaScript considère qu'on souhaitait avoir ); dans la chaîne de caractères et l'ignore. Aussi, le moteur considère que l'appelle à console.log n'est pas terminé et qu'il manque une parenthèse fermante. Pour corriger ce problème, on peut rajouter une quote ' après la chaîne de caractères "Script" :

+ +
console.log('"Java" + "Script" = \"' + 'Java' + 'Script\"');
+// '"Java" + "Script" = "JavaScript"'
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html b/files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html deleted file mode 100644 index 52018f1d8d..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: 'SyntaxError: missing ) after condition' -slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition -original_slug: Web/JavaScript/Reference/Erreurs/Missing_parenthesis_after_condition ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Expected ')' (Edge)
-SyntaxError: missing ) after condition (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Il y a une erreur pour la condition écrite dans l'instruction if. Pour chaque langage de programmation, on utilise des instructions pour choisir quel bloc d'instructions exécuter selon les différentes entrées. L'instruction if permet d'exécuter une instruction si une condition donnée est vérifiée. En JavaScript, il faut que cette condition apparaisse entre parenthèses après le mot-clé  if :

- -
if (condition) {
-  // faire quelque chose si la condition est vraie
-}
- -

Exemples

- -

Il s'agit peut-être simplement d'une coquille et il suffit alors de vérifier les parenthèses (ou plutôt leur absence) :

- -
if (3 > Math.PI {
-  console.log("Pardon ?");
-}
-
-// SyntaxError: missing ) after condition
-
- -

Pour corriger ce fragment de code, on ajoutera une parenthèse pour fermer la condition :

- -
if (3 > Math.PI) {
-  console.log("Pardon ?");
-}
- -

Si vous avez l'habitude d'utiliser un autre langage de programmation, peut-être avez-vous utilisé un mot-clé qui n'existe pas en JavaScript ?

- -
if (done is true) {
- console.log("we are done!");
-}
-
-// SyntaxError: missing ) after condition
-
- -

Pour corriger cette erreur, on utilisera un opérateur de comparaison correct :

- -
if (done === true) {
- console.log("Et voilà !");
-}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.md b/files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.md new file mode 100644 index 0000000000..52018f1d8d --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_parenthesis_after_condition/index.md @@ -0,0 +1,71 @@ +--- +title: 'SyntaxError: missing ) after condition' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +original_slug: Web/JavaScript/Reference/Erreurs/Missing_parenthesis_after_condition +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Expected ')' (Edge)
+SyntaxError: missing ) after condition (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Il y a une erreur pour la condition écrite dans l'instruction if. Pour chaque langage de programmation, on utilise des instructions pour choisir quel bloc d'instructions exécuter selon les différentes entrées. L'instruction if permet d'exécuter une instruction si une condition donnée est vérifiée. En JavaScript, il faut que cette condition apparaisse entre parenthèses après le mot-clé  if :

+ +
if (condition) {
+  // faire quelque chose si la condition est vraie
+}
+ +

Exemples

+ +

Il s'agit peut-être simplement d'une coquille et il suffit alors de vérifier les parenthèses (ou plutôt leur absence) :

+ +
if (3 > Math.PI {
+  console.log("Pardon ?");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

Pour corriger ce fragment de code, on ajoutera une parenthèse pour fermer la condition :

+ +
if (3 > Math.PI) {
+  console.log("Pardon ?");
+}
+ +

Si vous avez l'habitude d'utiliser un autre langage de programmation, peut-être avez-vous utilisé un mot-clé qui n'existe pas en JavaScript ?

+ +
if (done is true) {
+ console.log("we are done!");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

Pour corriger cette erreur, on utilisera un opérateur de comparaison correct :

+ +
if (done === true) {
+ console.log("Et voilà !");
+}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.html b/files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.html deleted file mode 100644 index cb9e5c0312..0000000000 --- a/files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: 'SyntaxError: missing ; before statement' -slug: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement -tags: - - Erreurs - - JavaScript - - Reference - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement -original_slug: Web/JavaScript/Reference/Erreurs/Missing_semicolon_before_statement ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Expected ';' (Edge)
-SyntaxError: missing ; before statement (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}.

- -

Quel est le problème ?

- -

Un point-virgule est absent quelque part. En JavaScript, les instructions doivent se terminer par des points-virgules. Certaines de ces instructions sont traitées par l'insertion automatique de point-virgule (ASI pour Automatic Semicolon Insertion), mais pour le code qui provoque l'erreur, un point-virgule est nécessaire afin que le moteur JavaScript puisse analyser le code source correctement.

- -

La plupart du temps, cette erreur est la conséquence d'une autre erreur : ne pas « fermer » les chaînes de caractères correctement ou utiliser var de façon incorrecte. Il peut également y avoir trop de parenthèses à un endroit. Lorsque cette erreur apparaît, faites attention à la syntaxe du code environnant.

- -

Exemples

- -

Les chaînes laissées ouvertes

- -

Cette erreur est parfois simplement provoquée par une chaîne dont les quotes ne sont pas échappées correctement ou qui ne sont pas correctement délimitées. Le moteur JavaScript s'attend donc à trouver la fin de la chaîne. Par exemple :

- -
var toto = 'Ouvrir l'œil';
-// SyntaxError: missing ; before statement
- -

Pour éviter cela, on pourra utiliser des doubles quotes ou échapper l'apostrophe :

- -
var toto = "Ouvrir l'œil";
-var toto = 'Ouvrir l\'œil';
-
- -

Déclarer des propriétés avec var

- -

On ne peut pas déclarer de propriétés sur un objet ou un tableau avec une déclaration var.

- -
var obj = {};
-var obj.toto = "coucou"; // SyntaxError missing ; before statement
-
-var array = [];
-var array[0] = "monde"; // SyntaxError missing ; before statement
-
- -

Pour éviter cela, on n'utilisera pas le mot-clé var qui est inutile dans ces cas :

- -
var obj = {};
-obj.toto = "coucou";
-
-var array = [];
-array[0] = "monde";
-
- -

Mauvais mots-clés

- -

Il peut arriver, notamment lorsqu'on provient d'un autre langage de programmation, d'utiliser des mots-clés qui n'ont pas du tout le même sens en JavaScript :

- -
def print(info){
-  console.log(info);
-}; // SyntaxError missing ; before statement
- -

À la place de def, on utilisera le mot-clé function :

- -
function print(info){
-  console.log(info);
-};
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.md b/files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.md new file mode 100644 index 0000000000..cb9e5c0312 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/missing_semicolon_before_statement/index.md @@ -0,0 +1,84 @@ +--- +title: 'SyntaxError: missing ; before statement' +slug: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +tags: + - Erreurs + - JavaScript + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +original_slug: Web/JavaScript/Reference/Erreurs/Missing_semicolon_before_statement +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Expected ';' (Edge)
+SyntaxError: missing ; before statement (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}.

+ +

Quel est le problème ?

+ +

Un point-virgule est absent quelque part. En JavaScript, les instructions doivent se terminer par des points-virgules. Certaines de ces instructions sont traitées par l'insertion automatique de point-virgule (ASI pour Automatic Semicolon Insertion), mais pour le code qui provoque l'erreur, un point-virgule est nécessaire afin que le moteur JavaScript puisse analyser le code source correctement.

+ +

La plupart du temps, cette erreur est la conséquence d'une autre erreur : ne pas « fermer » les chaînes de caractères correctement ou utiliser var de façon incorrecte. Il peut également y avoir trop de parenthèses à un endroit. Lorsque cette erreur apparaît, faites attention à la syntaxe du code environnant.

+ +

Exemples

+ +

Les chaînes laissées ouvertes

+ +

Cette erreur est parfois simplement provoquée par une chaîne dont les quotes ne sont pas échappées correctement ou qui ne sont pas correctement délimitées. Le moteur JavaScript s'attend donc à trouver la fin de la chaîne. Par exemple :

+ +
var toto = 'Ouvrir l'œil';
+// SyntaxError: missing ; before statement
+ +

Pour éviter cela, on pourra utiliser des doubles quotes ou échapper l'apostrophe :

+ +
var toto = "Ouvrir l'œil";
+var toto = 'Ouvrir l\'œil';
+
+ +

Déclarer des propriétés avec var

+ +

On ne peut pas déclarer de propriétés sur un objet ou un tableau avec une déclaration var.

+ +
var obj = {};
+var obj.toto = "coucou"; // SyntaxError missing ; before statement
+
+var array = [];
+var array[0] = "monde"; // SyntaxError missing ; before statement
+
+ +

Pour éviter cela, on n'utilisera pas le mot-clé var qui est inutile dans ces cas :

+ +
var obj = {};
+obj.toto = "coucou";
+
+var array = [];
+array[0] = "monde";
+
+ +

Mauvais mots-clés

+ +

Il peut arriver, notamment lorsqu'on provient d'un autre langage de programmation, d'utiliser des mots-clés qui n'ont pas du tout le même sens en JavaScript :

+ +
def print(info){
+  console.log(info);
+}; // SyntaxError missing ; before statement
+ +

À la place de def, on utilisera le mot-clé function :

+ +
function print(info){
+  console.log(info);
+};
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/more_arguments_needed/index.html b/files/fr/web/javascript/reference/errors/more_arguments_needed/index.html deleted file mode 100644 index 3417499581..0000000000 --- a/files/fr/web/javascript/reference/errors/more_arguments_needed/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: 'TypeError: More arguments needed' -slug: Web/JavaScript/Reference/Errors/More_arguments_needed -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/More_arguments_needed -original_slug: Web/JavaScript/Reference/Erreurs/More_arguments_needed ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: argument is not an Object and is not null (Edge)
-TypeError: Object.create requires at least 1 argument, but only 0 were passed
-TypeError: Object.setPrototypeOf requires at least 2 arguments, but only 0 were passed
-TypeError: Object.defineProperties requires at least 1 argument, but only 0 were passed
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}.

- -

Quel est le problème ?

- -

Lors de l'appel de la fonction, il y a eu une erreur due au manque d'argument. La fonction doit recevoir plus de paramètres afin de pouvoir fonctionner.

- -

Exemples

- -

La méthode {{jsxref("Object.create()")}} nécessite au moins un argument et {{jsxref("Object.setPrototypeOf()")}} requiert deux paramètres :

- -
var obj = Object.create();
-// TypeError: Object.create requires more than 0 arguments
-
-var obj = Object.setPrototypeOf({});
-// TypeError: Object.setPrototypeOf requires more than 1 argument
-
- -

On peut corriger cet exemple en utilisant {{jsxref("null")}} comme prototype :

- -
var obj = Object.create(null);
-
-var obj = Object.setPrototypeOf({}, null);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/more_arguments_needed/index.md b/files/fr/web/javascript/reference/errors/more_arguments_needed/index.md new file mode 100644 index 0000000000..3417499581 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/more_arguments_needed/index.md @@ -0,0 +1,50 @@ +--- +title: 'TypeError: More arguments needed' +slug: Web/JavaScript/Reference/Errors/More_arguments_needed +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/More_arguments_needed +original_slug: Web/JavaScript/Reference/Erreurs/More_arguments_needed +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: argument is not an Object and is not null (Edge)
+TypeError: Object.create requires at least 1 argument, but only 0 were passed
+TypeError: Object.setPrototypeOf requires at least 2 arguments, but only 0 were passed
+TypeError: Object.defineProperties requires at least 1 argument, but only 0 were passed
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}.

+ +

Quel est le problème ?

+ +

Lors de l'appel de la fonction, il y a eu une erreur due au manque d'argument. La fonction doit recevoir plus de paramètres afin de pouvoir fonctionner.

+ +

Exemples

+ +

La méthode {{jsxref("Object.create()")}} nécessite au moins un argument et {{jsxref("Object.setPrototypeOf()")}} requiert deux paramètres :

+ +
var obj = Object.create();
+// TypeError: Object.create requires more than 0 arguments
+
+var obj = Object.setPrototypeOf({});
+// TypeError: Object.setPrototypeOf requires more than 1 argument
+
+ +

On peut corriger cet exemple en utilisant {{jsxref("null")}} comme prototype :

+ +
var obj = Object.create(null);
+
+var obj = Object.setPrototypeOf({}, null);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/negative_repetition_count/index.html b/files/fr/web/javascript/reference/errors/negative_repetition_count/index.html deleted file mode 100644 index 2b653b11f0..0000000000 --- a/files/fr/web/javascript/reference/errors/negative_repetition_count/index.html +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: 'RangeError: repeat count must be non-negative' -slug: Web/JavaScript/Reference/Errors/Negative_repetition_count -tags: - - Erreurs - - JavaScript - - RangeError -translation_of: Web/JavaScript/Reference/Errors/Negative_repetition_count -original_slug: Web/JavaScript/Reference/Erreurs/Negative_repetition_count ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
RangeError: argument out of range (Edge)
-RangeError: repeat count must be non-negative (Firefox)
-RangeError: Invalid count value (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("RangeError")}}

- -

Quel est le problème ?

- -

La méthode {{jsxref("String.prototype.repeat()")}} a été utilisée avec un argument négatif. Or, cet argument doit être compris dans l'intervalle [0, +∞).

- -

Exemples

- -

Exemples invalides

- -
'abc'.repeat(-1); // RangeError 
- -

Exemples valides

- -
'abc'.repeat(0);    // ''
-'abc'.repeat(1);    // 'abc'
-'abc'.repeat(2);    // 'abcabc'
-'abc'.repeat(3.5);  // 'abcabcabc' (converti en entier)
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/negative_repetition_count/index.md b/files/fr/web/javascript/reference/errors/negative_repetition_count/index.md new file mode 100644 index 0000000000..2b653b11f0 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/negative_repetition_count/index.md @@ -0,0 +1,46 @@ +--- +title: 'RangeError: repeat count must be non-negative' +slug: Web/JavaScript/Reference/Errors/Negative_repetition_count +tags: + - Erreurs + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Negative_repetition_count +original_slug: Web/JavaScript/Reference/Erreurs/Negative_repetition_count +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
RangeError: argument out of range (Edge)
+RangeError: repeat count must be non-negative (Firefox)
+RangeError: Invalid count value (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("RangeError")}}

+ +

Quel est le problème ?

+ +

La méthode {{jsxref("String.prototype.repeat()")}} a été utilisée avec un argument négatif. Or, cet argument doit être compris dans l'intervalle [0, +∞).

+ +

Exemples

+ +

Exemples invalides

+ +
'abc'.repeat(-1); // RangeError 
+ +

Exemples valides

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' (converti en entier)
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/no_non-null_object/index.html b/files/fr/web/javascript/reference/errors/no_non-null_object/index.html deleted file mode 100644 index 2dd59d1667..0000000000 --- a/files/fr/web/javascript/reference/errors/no_non-null_object/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: 'TypeError: "x" is not a non-null object' -slug: Web/JavaScript/Reference/Errors/No_non-null_object -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/No_non-null_object -original_slug: Web/JavaScript/Reference/Erreurs/No_non-null_object ---- -
{{JSSidebar("Errors")}}
- -

Message

- -
TypeError: Invalid descriptor for property {x} (Edge)
-TypeError: "x" is not a non-null object (Firefox)
-TypeError: Property description must be an object: "x" (Chrome)
-TypeError: Invalid value used in weak set (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

Un objet devrait être trouvé et n'est pas fourni. La valeur {{jsxref("null")}} n'est pas un objet et ne fonctionnera pas, il est nécessaire de fournir un véritable objet pour que le code en question fonctionne.

- -

Exemples

- -

Absence d'un descripteur de propriété

- -

Lorsqu'on utilise des méthodes telles que {{jsxref("Object.create()")}}, {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.defineProperties()")}}, le paramètre optionnel de description des propriétés doit être un descripteur sous la forme d'un objet. Si la valeur fournie n'est pas un objet (mais par exemple un nombre), l'appel à la méthode déclenchera une erreur :

- -
Object.defineProperty({}, 'cle', 1);
-// TypeError: 1 is not a non-null object
-
-Object.defineProperty({}, 'cle', null);
-// TypeError: null is not a non-null object
-
- -

Un descripteur de propriété valide aura la structure suivante :

- -
Object.defineProperty({}, 'cle', { value: 'toto', writable: false });
-
- -

Les clés de WeakMap et WeakSet sont des objets

- -

Les objets {{jsxref("WeakMap")}} et {{jsxref("WeakSet")}} utilisent des objets comme clé. On ne peut pas utiliser d'autres types de valeurs pour les clés de ces objets.

- -
var ws = new WeakSet();
-ws.add('toto');
-// TypeError: "toto" is not a non-null object
- -

À la place, on utilisera des objets :

- -
ws.add({toto: 'truc'});
-ws.add(window);
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/no_non-null_object/index.md b/files/fr/web/javascript/reference/errors/no_non-null_object/index.md new file mode 100644 index 0000000000..2dd59d1667 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/no_non-null_object/index.md @@ -0,0 +1,67 @@ +--- +title: 'TypeError: "x" is not a non-null object' +slug: Web/JavaScript/Reference/Errors/No_non-null_object +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/No_non-null_object +original_slug: Web/JavaScript/Reference/Erreurs/No_non-null_object +--- +
{{JSSidebar("Errors")}}
+ +

Message

+ +
TypeError: Invalid descriptor for property {x} (Edge)
+TypeError: "x" is not a non-null object (Firefox)
+TypeError: Property description must be an object: "x" (Chrome)
+TypeError: Invalid value used in weak set (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

Un objet devrait être trouvé et n'est pas fourni. La valeur {{jsxref("null")}} n'est pas un objet et ne fonctionnera pas, il est nécessaire de fournir un véritable objet pour que le code en question fonctionne.

+ +

Exemples

+ +

Absence d'un descripteur de propriété

+ +

Lorsqu'on utilise des méthodes telles que {{jsxref("Object.create()")}}, {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.defineProperties()")}}, le paramètre optionnel de description des propriétés doit être un descripteur sous la forme d'un objet. Si la valeur fournie n'est pas un objet (mais par exemple un nombre), l'appel à la méthode déclenchera une erreur :

+ +
Object.defineProperty({}, 'cle', 1);
+// TypeError: 1 is not a non-null object
+
+Object.defineProperty({}, 'cle', null);
+// TypeError: null is not a non-null object
+
+ +

Un descripteur de propriété valide aura la structure suivante :

+ +
Object.defineProperty({}, 'cle', { value: 'toto', writable: false });
+
+ +

Les clés de WeakMap et WeakSet sont des objets

+ +

Les objets {{jsxref("WeakMap")}} et {{jsxref("WeakSet")}} utilisent des objets comme clé. On ne peut pas utiliser d'autres types de valeurs pour les clés de ces objets.

+ +
var ws = new WeakSet();
+ws.add('toto');
+// TypeError: "toto" is not a non-null object
+ +

À la place, on utilisera des objets :

+ +
ws.add({toto: 'truc'});
+ws.add(window);
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/no_properties/index.html b/files/fr/web/javascript/reference/errors/no_properties/index.html deleted file mode 100644 index d45bd65c93..0000000000 --- a/files/fr/web/javascript/reference/errors/no_properties/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: 'TypeError: "x" has no properties' -slug: Web/JavaScript/Reference/Errors/No_properties -tags: - - Erreurs - - JavaScript - - Reference - - TypeError -translation_of: Web/JavaScript/Reference/Errors/No_properties -original_slug: Web/JavaScript/Reference/Erreurs/No_properties ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Unable to get property {x} of undefined or null reference (Edge)
-TypeError: null has no properties (Firefox)
-TypeError: undefined has no properties (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}.

- -

Quel est le problème ?

- -

Les valeurs {{jsxref("null")}} et {{jsxref("undefined")}} n'ont aucunes propriétés auxquelles accéder.

- -

Exemples

- -
null.toto;
-// TypeError: null has no properties
-
-undefined.truc;
-// TypeError: undefined has no properties
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/no_properties/index.md b/files/fr/web/javascript/reference/errors/no_properties/index.md new file mode 100644 index 0000000000..d45bd65c93 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/no_properties/index.md @@ -0,0 +1,43 @@ +--- +title: 'TypeError: "x" has no properties' +slug: Web/JavaScript/Reference/Errors/No_properties +tags: + - Erreurs + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/No_properties +original_slug: Web/JavaScript/Reference/Erreurs/No_properties +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: null has no properties (Firefox)
+TypeError: undefined has no properties (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}.

+ +

Quel est le problème ?

+ +

Les valeurs {{jsxref("null")}} et {{jsxref("undefined")}} n'ont aucunes propriétés auxquelles accéder.

+ +

Exemples

+ +
null.toto;
+// TypeError: null has no properties
+
+undefined.truc;
+// TypeError: undefined has no properties
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/no_variable_name/index.html b/files/fr/web/javascript/reference/errors/no_variable_name/index.html deleted file mode 100644 index 035c83faa9..0000000000 --- a/files/fr/web/javascript/reference/errors/no_variable_name/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: 'SyntaxError: missing variable name' -slug: Web/JavaScript/Reference/Errors/No_variable_name -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/No_variable_name -original_slug: Web/JavaScript/Reference/Erreurs/No_variable_name ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: missing variable name (Firefox)
-SyntaxError: Unexpected token = (Chrome)
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Il manque un nom pour une variable. Cela est probablement dû à une erreur de syntaxe dans le code. Peut-être qu'une variable est placée au mauvais endroit ou peut-être qu'il manque un nom car on n'a pas trouvé de nom pertinent… (ce qui est souvent assez difficile).

- -

Exemples

- -

Absence d'un nom pour une variable

- -
var = "toto";
-
- -

Il est souvent compliqué de trouver le bon nom pour une variable…

- -
var àDéfautDeMieux = "toto";
- -

Les mots-clés réservés ne peuvent pas être utilisés comme noms de variables

- -

Quelques mots-clés sont réservés et ne peuvent pas être utilisés comme noms de variable :

- -
var debugger = "zuuuuut";
-// SyntaxError: missing variable name
-
- -

Déclarer plusieurs variables

- -

Attention aux virgules lorsqu'on déclare plusieurs variables… Y a-t-il plus de virgules que nécessairee ? Une virgule est-elle utilisée à la place d'un point-virgule ?

- -
var x, y = "toto",
-var x, = "toto"
-
-var un = document.getElementById('un'),
-var deux = document.getElementById('deux'),
-
-// SyntaxError: missing variable name
-
- -

Voici une version corrigée :

- -
var x, y = "toto";
-var x = "toto";
-
-var un = document.getElementById('un');
-var deux = document.getElementById('deux');
- -

Tableaux

- -

Pour former un littéral de tableau ({{jsxref("Array")}}), il est nécessaire d'ajouter des crochets autour des valeurs des éléments. Le fragment de code suivant ne fonctionnera pas :

- -
var arr = 1,2,3,4,5;
-// SyntaxError: missing variable name
-
- -

Voici la forme équivalente correcte :

- -
var arr = [1,2,3,4,5];
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/no_variable_name/index.md b/files/fr/web/javascript/reference/errors/no_variable_name/index.md new file mode 100644 index 0000000000..035c83faa9 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/no_variable_name/index.md @@ -0,0 +1,84 @@ +--- +title: 'SyntaxError: missing variable name' +slug: Web/JavaScript/Reference/Errors/No_variable_name +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/No_variable_name +original_slug: Web/JavaScript/Reference/Erreurs/No_variable_name +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: missing variable name (Firefox)
+SyntaxError: Unexpected token = (Chrome)
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Il manque un nom pour une variable. Cela est probablement dû à une erreur de syntaxe dans le code. Peut-être qu'une variable est placée au mauvais endroit ou peut-être qu'il manque un nom car on n'a pas trouvé de nom pertinent… (ce qui est souvent assez difficile).

+ +

Exemples

+ +

Absence d'un nom pour une variable

+ +
var = "toto";
+
+ +

Il est souvent compliqué de trouver le bon nom pour une variable…

+ +
var àDéfautDeMieux = "toto";
+ +

Les mots-clés réservés ne peuvent pas être utilisés comme noms de variables

+ +

Quelques mots-clés sont réservés et ne peuvent pas être utilisés comme noms de variable :

+ +
var debugger = "zuuuuut";
+// SyntaxError: missing variable name
+
+ +

Déclarer plusieurs variables

+ +

Attention aux virgules lorsqu'on déclare plusieurs variables… Y a-t-il plus de virgules que nécessairee ? Une virgule est-elle utilisée à la place d'un point-virgule ?

+ +
var x, y = "toto",
+var x, = "toto"
+
+var un = document.getElementById('un'),
+var deux = document.getElementById('deux'),
+
+// SyntaxError: missing variable name
+
+ +

Voici une version corrigée :

+ +
var x, y = "toto";
+var x = "toto";
+
+var un = document.getElementById('un');
+var deux = document.getElementById('deux');
+ +

Tableaux

+ +

Pour former un littéral de tableau ({{jsxref("Array")}}), il est nécessaire d'ajouter des crochets autour des valeurs des éléments. Le fragment de code suivant ne fonctionnera pas :

+ +
var arr = 1,2,3,4,5;
+// SyntaxError: missing variable name
+
+ +

Voici la forme équivalente correcte :

+ +
var arr = [1,2,3,4,5];
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/non_configurable_array_element/index.html b/files/fr/web/javascript/reference/errors/non_configurable_array_element/index.html deleted file mode 100644 index bbb5b3569c..0000000000 --- a/files/fr/web/javascript/reference/errors/non_configurable_array_element/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: 'TypeError: can''t delete non-configurable array element' -slug: Web/JavaScript/Reference/Errors/Non_configurable_array_element -tags: - - Erreur - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Non_configurable_array_element -original_slug: Web/JavaScript/Reference/Erreurs/Non_configurable_array_element ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: can't delete non-configurable array element (Firefox)
-TypeError: Cannot delete property '2' of [object Array] (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

On a voulu raccourcir la longueur d'un tableau mais l'un des éléments de ce tableau est non-configurable. Lorsqu'on tronque un tableau, les éléments situés au-delà de la nouvelle longueur seront supprimés. Dans ce cas, c'est cette suppression qui n'a pas pu être effectuée.

- -

L'attribut configurable permet de contrôler si la propriété peut être supprimée d'un objet et si ses attributs (en dehors de writable) peuvent être modifiés.

- -

La plupart du temps, les propriétés d'un objet créé avec un littéral de tableau sont configurables. Toutefois, si on utilise {{jsxref("Object.defineProperty()")}} par exemple, la propriété n'est pas configurable par défaut.

- -

Exemples

- -

Propriétés non-configurables créées avec  Object.defineProperty

- -

Par défaut, la méthode {{jsxref("Object.defineProperty()")}} crée des propriétés non-configurables si on n'indique pas expressément le contraire :

- -
var arr = [];
-Object.defineProperty(arr, 0, {value: 0});
-Object.defineProperty(arr, 1, {value: "1"});
-
-arr.length = 1;
-// TypeError: can't delete non-configurable array element
-
- -

Si on veut tronquer le tableau, il faut que les éléments excédants soient configurables :

- -
var arr = [];
-Object.defineProperty(arr, 0, {value: 0, configurable: true});
-Object.defineProperty(arr, 1, {value: "1", configurable: true});
-
-arr.length = 1;
-
- -

Tableaux scellés (seal)

- -

La méthode {{jsxref("Object.seal()")}} permet de marquer l'ensemble des propriétés (ici les éléments du tableau) comme non-configurables :

- -
var arr = [1,2,3];
-Object.seal(arr);
-
-arr.length = 1;
-// TypeError: can't delete non-configurable array element
-
- -

Pour corriger l'erreur, il faut retirer l'appel à {{jsxref("Object.seal()")}} ou réaliser une copie du tableau. Dans ce dernier cas, on notera que tronquer la copie du tableau ne modifie pas la longueur du tableau original.

- -
var arr = [1,2,3];
-Object.seal(arr);
-
-// On copie le tableau initial pour tronquer cette copie
-var copie = Array.from(arr);
-copie.length = 1;
-// arr.length == 3
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/non_configurable_array_element/index.md b/files/fr/web/javascript/reference/errors/non_configurable_array_element/index.md new file mode 100644 index 0000000000..bbb5b3569c --- /dev/null +++ b/files/fr/web/javascript/reference/errors/non_configurable_array_element/index.md @@ -0,0 +1,84 @@ +--- +title: 'TypeError: can''t delete non-configurable array element' +slug: Web/JavaScript/Reference/Errors/Non_configurable_array_element +tags: + - Erreur + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Non_configurable_array_element +original_slug: Web/JavaScript/Reference/Erreurs/Non_configurable_array_element +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: can't delete non-configurable array element (Firefox)
+TypeError: Cannot delete property '2' of [object Array] (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

On a voulu raccourcir la longueur d'un tableau mais l'un des éléments de ce tableau est non-configurable. Lorsqu'on tronque un tableau, les éléments situés au-delà de la nouvelle longueur seront supprimés. Dans ce cas, c'est cette suppression qui n'a pas pu être effectuée.

+ +

L'attribut configurable permet de contrôler si la propriété peut être supprimée d'un objet et si ses attributs (en dehors de writable) peuvent être modifiés.

+ +

La plupart du temps, les propriétés d'un objet créé avec un littéral de tableau sont configurables. Toutefois, si on utilise {{jsxref("Object.defineProperty()")}} par exemple, la propriété n'est pas configurable par défaut.

+ +

Exemples

+ +

Propriétés non-configurables créées avec  Object.defineProperty

+ +

Par défaut, la méthode {{jsxref("Object.defineProperty()")}} crée des propriétés non-configurables si on n'indique pas expressément le contraire :

+ +
var arr = [];
+Object.defineProperty(arr, 0, {value: 0});
+Object.defineProperty(arr, 1, {value: "1"});
+
+arr.length = 1;
+// TypeError: can't delete non-configurable array element
+
+ +

Si on veut tronquer le tableau, il faut que les éléments excédants soient configurables :

+ +
var arr = [];
+Object.defineProperty(arr, 0, {value: 0, configurable: true});
+Object.defineProperty(arr, 1, {value: "1", configurable: true});
+
+arr.length = 1;
+
+ +

Tableaux scellés (seal)

+ +

La méthode {{jsxref("Object.seal()")}} permet de marquer l'ensemble des propriétés (ici les éléments du tableau) comme non-configurables :

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+arr.length = 1;
+// TypeError: can't delete non-configurable array element
+
+ +

Pour corriger l'erreur, il faut retirer l'appel à {{jsxref("Object.seal()")}} ou réaliser une copie du tableau. Dans ce dernier cas, on notera que tronquer la copie du tableau ne modifie pas la longueur du tableau original.

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+// On copie le tableau initial pour tronquer cette copie
+var copie = Array.from(arr);
+copie.length = 1;
+// arr.length == 3
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/not_a_codepoint/index.html b/files/fr/web/javascript/reference/errors/not_a_codepoint/index.html deleted file mode 100644 index 2da0d021ee..0000000000 --- a/files/fr/web/javascript/reference/errors/not_a_codepoint/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 'RangeError: argument is not a valid code point' -slug: Web/JavaScript/Reference/Errors/Not_a_codepoint -tags: - - Erreurs - - JavaScript - - RangeError -translation_of: Web/JavaScript/Reference/Errors/Not_a_codepoint -original_slug: Web/JavaScript/Reference/Erreurs/Not_a_codepoint ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
RangeError: Invalid code point {0} (Edge)
-RangeError: {0} is not a valid code point (Firefox)
-RangeError: Invalid code point {0} (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("RangeError")}}

- -

Quel est le problème ?

- -

La méthode {{jsxref("String.fromCodePoint()")}} a été utilisée mais elle n'accepte que les points de code valides (code points) et la valeur fournie en argument n'est pas un point de code valide (ex. NaN, -1).

- -

Un point de code est une valeur de code Unicode et s'inscrit dans un intervalle allant de 0 à 0x10FFFF.

- -

Les valeurs {{jsxref("NaN")}}, les entiers négatifs (-1), les flottants (3.14) ou les valeur supérieures à 0x10FFFF (1114111) ne peuvent pas être utilisées avec cette méthode.

- -

Examples

- -

Exemples invalides

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

Exemples valides

- -
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"
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/not_a_codepoint/index.md b/files/fr/web/javascript/reference/errors/not_a_codepoint/index.md new file mode 100644 index 0000000000..2da0d021ee --- /dev/null +++ b/files/fr/web/javascript/reference/errors/not_a_codepoint/index.md @@ -0,0 +1,57 @@ +--- +title: 'RangeError: argument is not a valid code point' +slug: Web/JavaScript/Reference/Errors/Not_a_codepoint +tags: + - Erreurs + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_codepoint +original_slug: Web/JavaScript/Reference/Erreurs/Not_a_codepoint +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
RangeError: Invalid code point {0} (Edge)
+RangeError: {0} is not a valid code point (Firefox)
+RangeError: Invalid code point {0} (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("RangeError")}}

+ +

Quel est le problème ?

+ +

La méthode {{jsxref("String.fromCodePoint()")}} a été utilisée mais elle n'accepte que les points de code valides (code points) et la valeur fournie en argument n'est pas un point de code valide (ex. NaN, -1).

+ +

Un point de code est une valeur de code Unicode et s'inscrit dans un intervalle allant de 0 à 0x10FFFF.

+ +

Les valeurs {{jsxref("NaN")}}, les entiers négatifs (-1), les flottants (3.14) ou les valeur supérieures à 0x10FFFF (1114111) ne peuvent pas être utilisées avec cette méthode.

+ +

Examples

+ +

Exemples invalides

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

Exemples valides

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

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/not_a_constructor/index.html b/files/fr/web/javascript/reference/errors/not_a_constructor/index.html deleted file mode 100644 index 211e4e952c..0000000000 --- a/files/fr/web/javascript/reference/errors/not_a_constructor/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: 'TypeError: "x" is not a constructor' -slug: Web/JavaScript/Reference/Errors/Not_a_constructor -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor -original_slug: Web/JavaScript/Reference/Erreurs/Not_a_constructor ---- -
{{jsSidebar("Errors")}}
- -

Message

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

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

Une variable ou un objet a été utilisé comme un constructeur alors que cet objet ou cette variable n'est pas un constructeur. Pour plus d'informations sur les constructeurs, voir la page sur l'opérateur new.

- -

De nombreux objets globaux tels que {{jsxref("String")}} ou {{jsxref("Array")}}, sont constructibles avec new. Cependant, d'autres objets globaux ne le sont pas (leurs propriétés et méthodes sont statiques). Les objets standards natifs suivants ne sont pas des constructeur : {{jsxref("Math")}}, {{jsxref("JSON")}}, {{jsxref("Symbol")}}, {{jsxref("Reflect")}}, {{jsxref("Intl")}}, {{jsxref("SIMD")}}, {{jsxref("Atomics")}}.

- -

Les fonctions génératrices ne peuvent pas non plus être utilisées comme des constructeurs.

- -

Exemples

- -

Exemples invalides

- -
var Voiture = 1;
-new Voiture();
-// TypeError: Voiture 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
-
- -

Créer un constructeur voiture

- -

Imaginons qu'on veuille représenter des voitures sous forme d'objets. On appellera ce type voiture et on lui ajoutera des propriétés pour le fabricant, le modèle et l'année. Pour cela, on pourra écrire la fonction suivante :

- -
function Voiture(fabriquant, modèle, année) {
-  this.fabriquant = fabriquant;
-  this.modèle = modèle;
-  this.année = année;
-}
-
- -

On peut désormais créer un objet maVoiture comme ceci :

- -
var maVoiture = new Voiture("Renault", "Twingo", 2006);
- -

Avec les promesses

- -

Lorsqu'on renvoie une promesse immédiatement tenue ou rompue, il n'est pas nécessaire d'utiliser new Promise() pour la manipuler. Il faut plutôt utiliser les méthodes statiques {{jsxref("Promise.resolve()")}} ou {{jsxref("Promise.reject()")}} :

- -
// Dans ce cas on aura une exception
-// "this is not a constructor"
-return new Promise.resolve(true);
-
- -
// Cette formulation fonctionne mais
-// est inutilement longue
-return new Promise((resolve, reject) => { resolve(true); });
-
-// On pourra autrement utiliser les
-// méthodes statiques
-return Promise.resolve(true);
-return Promise.reject(false);
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/not_a_constructor/index.md b/files/fr/web/javascript/reference/errors/not_a_constructor/index.md new file mode 100644 index 0000000000..211e4e952c --- /dev/null +++ b/files/fr/web/javascript/reference/errors/not_a_constructor/index.md @@ -0,0 +1,97 @@ +--- +title: 'TypeError: "x" is not a constructor' +slug: Web/JavaScript/Reference/Errors/Not_a_constructor +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor +original_slug: Web/JavaScript/Reference/Erreurs/Not_a_constructor +--- +
{{jsSidebar("Errors")}}
+ +

Message

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

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

Une variable ou un objet a été utilisé comme un constructeur alors que cet objet ou cette variable n'est pas un constructeur. Pour plus d'informations sur les constructeurs, voir la page sur l'opérateur new.

+ +

De nombreux objets globaux tels que {{jsxref("String")}} ou {{jsxref("Array")}}, sont constructibles avec new. Cependant, d'autres objets globaux ne le sont pas (leurs propriétés et méthodes sont statiques). Les objets standards natifs suivants ne sont pas des constructeur : {{jsxref("Math")}}, {{jsxref("JSON")}}, {{jsxref("Symbol")}}, {{jsxref("Reflect")}}, {{jsxref("Intl")}}, {{jsxref("SIMD")}}, {{jsxref("Atomics")}}.

+ +

Les fonctions génératrices ne peuvent pas non plus être utilisées comme des constructeurs.

+ +

Exemples

+ +

Exemples invalides

+ +
var Voiture = 1;
+new Voiture();
+// TypeError: Voiture 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
+
+ +

Créer un constructeur voiture

+ +

Imaginons qu'on veuille représenter des voitures sous forme d'objets. On appellera ce type voiture et on lui ajoutera des propriétés pour le fabricant, le modèle et l'année. Pour cela, on pourra écrire la fonction suivante :

+ +
function Voiture(fabriquant, modèle, année) {
+  this.fabriquant = fabriquant;
+  this.modèle = modèle;
+  this.année = année;
+}
+
+ +

On peut désormais créer un objet maVoiture comme ceci :

+ +
var maVoiture = new Voiture("Renault", "Twingo", 2006);
+ +

Avec les promesses

+ +

Lorsqu'on renvoie une promesse immédiatement tenue ou rompue, il n'est pas nécessaire d'utiliser new Promise() pour la manipuler. Il faut plutôt utiliser les méthodes statiques {{jsxref("Promise.resolve()")}} ou {{jsxref("Promise.reject()")}} :

+ +
// Dans ce cas on aura une exception
+// "this is not a constructor"
+return new Promise.resolve(true);
+
+ +
// Cette formulation fonctionne mais
+// est inutilement longue
+return new Promise((resolve, reject) => { resolve(true); });
+
+// On pourra autrement utiliser les
+// méthodes statiques
+return Promise.resolve(true);
+return Promise.reject(false);
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/not_a_function/index.html b/files/fr/web/javascript/reference/errors/not_a_function/index.html deleted file mode 100644 index 8675a249ae..0000000000 --- a/files/fr/web/javascript/reference/errors/not_a_function/index.html +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: 'TypeError: "x" is not a function' -slug: Web/JavaScript/Reference/Errors/Not_a_function -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Not_a_function -original_slug: Web/JavaScript/Reference/Erreurs/Not_a_function ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Object doesn't support property or method {x} (Edge)
-TypeError: "x" is not a function
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}.

- -

Quel est le problème ?

- -

Une valeur a été utilisée pour un appel de fonction alors que cette valeur n'est pas une fonction. Autrement dit, un fragment de code attendait une fonction mais a reçu des valeurs d'un autre type.

- -

Il est possible qu'il y ait une coquille dans le nom de la fonction. Peut être que l'objet sur lequel la méthode est invoquée ne possède pas cette fonction (par exemple, les objets Array possèdent une fonction map() mais d'autres objets ne l'ont pas).

- -

Il existe de nombreuses fonctions natives qui fonctionnent à l'aide d'une fonction (callback) passée en argument :

- - - -

Exemples

- -

Une coquille dans le nom de la fonction

- -

Dans ce cas, qui arrive bien trop souvent, il y a une faute d'orthographe dans le nom de la fonction utilisée :

- -
var x = document.getElementByID("toto");
-// TypeError: document.getElementByID is not a function
-
- -

Le nom de la fonction est (dans cet exemple) getElementById (attention à la casse pour les noms en JavaScript) :

- -
var x = document.getElementById("toto");
-
- -

Appeler une fonction sur le mauvais objet

- -

Certaines méthodes ne fonctionnent que pour certains types d'objet et utilisent une fonction en argument. Ainsi, dans cet exemple, on utilise {{jsxref("Array.prototype.map()")}} qui ne fonctionne que sur les objets {{jsxref("Array")}}.

- -
var obj = { a: 13, b: 37, c: 42 };
-
-obj.map(function(num) {
-  return num * 2;
-});
-
-// TypeError: obj.map is not a function
- -

Il faudra utiliser un tableau à la place :

- -
var nombres = [1, 4, 9];
-
-nombres.map(function(num) {
-  return num * 2;
-});
-
-// Array [ 2, 8, 18 ]
-
- -

Utiliser le même nom pour une méthode et une propriété

- -

Lorsqu'on écrit une classe, on peut malheureusement utiliser le même nom pour une propriété et une méthode. Lorsqu'on appellera la fonction, celle-ci aura été remplacée par la propriété et cela déclenchera une erreur :

- -
var Chien = function () {
- this.age = 11;
- this.couleur = "noir";
- this.nom = "Ralph";
- return this;
-}
-
-Chien.prototype.nom = function(nom) {
- this.nom = nom;
- return this;
-}
-
-
-var monNouveauChien = new Chien();
-monNouveauChien.nom("Cassidy"); // Uncaught TypeError: monNouveauChien.nom is not a function
-
- -

Pour résoudre le problème, on utilisera deux noms distincts pour la propriété et la méthode :

- -
var Chien = function () {
- this.age = 11;
- this.couleur = "noir";
- this.nomChien = "Ralph";
- return this;
-}
-
-Chien.prototype.nom = function(nom) {
- this.nomChien = nom;
- return this;
-}
-
-
-var monNouveauChien = new Chien();
-monNouveauChien.nom("Cassidy"); // Chien { age: 11, couleur: "noir", nomChien: "Cassidy" }
-
- -

Utiliser des parenthèses pour la multiplication

- -

En notation mathématique, on peut écrire 2(3+5) pour indiquer qu'on souhaite multiplier 2 par 3 + 5. Toutefois, une telle écriture n'est pas valide en JavaScript car il faut préciser l'opérateur de multiplication :

- -
var seize = 2(3 + 5);
-console.log('2 x (3 + 5) vaut ' + String(seize));
-// Uncaught TypeError: 2 is not a function
- -

Pour corriger, il suffit d'ajouter l'opérateur * :

- -
var seize = 2 * (3 + 5);
-console.log('2 x (3 + 5) is ' + String(seize));
-//2 x (3 + 5) is 16
-
- -

Importer un module exporté correctement

- -

Assurez-vous d'importer le module correctement. Si par exemple, on dispose d'une bibliothèque helpers.js avec le code suivant :

- -
let helpers = function () { };
-helpers.log = function(msg) {
-  console.log(msg);
-};
-
-export default helpers;
- -

Pour l'importer côté application, on écrira :

- -
import helpers from './helpers'
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/not_a_function/index.md b/files/fr/web/javascript/reference/errors/not_a_function/index.md new file mode 100644 index 0000000000..8675a249ae --- /dev/null +++ b/files/fr/web/javascript/reference/errors/not_a_function/index.md @@ -0,0 +1,156 @@ +--- +title: 'TypeError: "x" is not a function' +slug: Web/JavaScript/Reference/Errors/Not_a_function +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_function +original_slug: Web/JavaScript/Reference/Erreurs/Not_a_function +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Object doesn't support property or method {x} (Edge)
+TypeError: "x" is not a function
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}.

+ +

Quel est le problème ?

+ +

Une valeur a été utilisée pour un appel de fonction alors que cette valeur n'est pas une fonction. Autrement dit, un fragment de code attendait une fonction mais a reçu des valeurs d'un autre type.

+ +

Il est possible qu'il y ait une coquille dans le nom de la fonction. Peut être que l'objet sur lequel la méthode est invoquée ne possède pas cette fonction (par exemple, les objets Array possèdent une fonction map() mais d'autres objets ne l'ont pas).

+ +

Il existe de nombreuses fonctions natives qui fonctionnent à l'aide d'une fonction (callback) passée en argument :

+ + + +

Exemples

+ +

Une coquille dans le nom de la fonction

+ +

Dans ce cas, qui arrive bien trop souvent, il y a une faute d'orthographe dans le nom de la fonction utilisée :

+ +
var x = document.getElementByID("toto");
+// TypeError: document.getElementByID is not a function
+
+ +

Le nom de la fonction est (dans cet exemple) getElementById (attention à la casse pour les noms en JavaScript) :

+ +
var x = document.getElementById("toto");
+
+ +

Appeler une fonction sur le mauvais objet

+ +

Certaines méthodes ne fonctionnent que pour certains types d'objet et utilisent une fonction en argument. Ainsi, dans cet exemple, on utilise {{jsxref("Array.prototype.map()")}} qui ne fonctionne que sur les objets {{jsxref("Array")}}.

+ +
var obj = { a: 13, b: 37, c: 42 };
+
+obj.map(function(num) {
+  return num * 2;
+});
+
+// TypeError: obj.map is not a function
+ +

Il faudra utiliser un tableau à la place :

+ +
var nombres = [1, 4, 9];
+
+nombres.map(function(num) {
+  return num * 2;
+});
+
+// Array [ 2, 8, 18 ]
+
+ +

Utiliser le même nom pour une méthode et une propriété

+ +

Lorsqu'on écrit une classe, on peut malheureusement utiliser le même nom pour une propriété et une méthode. Lorsqu'on appellera la fonction, celle-ci aura été remplacée par la propriété et cela déclenchera une erreur :

+ +
var Chien = function () {
+ this.age = 11;
+ this.couleur = "noir";
+ this.nom = "Ralph";
+ return this;
+}
+
+Chien.prototype.nom = function(nom) {
+ this.nom = nom;
+ return this;
+}
+
+
+var monNouveauChien = new Chien();
+monNouveauChien.nom("Cassidy"); // Uncaught TypeError: monNouveauChien.nom is not a function
+
+ +

Pour résoudre le problème, on utilisera deux noms distincts pour la propriété et la méthode :

+ +
var Chien = function () {
+ this.age = 11;
+ this.couleur = "noir";
+ this.nomChien = "Ralph";
+ return this;
+}
+
+Chien.prototype.nom = function(nom) {
+ this.nomChien = nom;
+ return this;
+}
+
+
+var monNouveauChien = new Chien();
+monNouveauChien.nom("Cassidy"); // Chien { age: 11, couleur: "noir", nomChien: "Cassidy" }
+
+ +

Utiliser des parenthèses pour la multiplication

+ +

En notation mathématique, on peut écrire 2(3+5) pour indiquer qu'on souhaite multiplier 2 par 3 + 5. Toutefois, une telle écriture n'est pas valide en JavaScript car il faut préciser l'opérateur de multiplication :

+ +
var seize = 2(3 + 5);
+console.log('2 x (3 + 5) vaut ' + String(seize));
+// Uncaught TypeError: 2 is not a function
+ +

Pour corriger, il suffit d'ajouter l'opérateur * :

+ +
var seize = 2 * (3 + 5);
+console.log('2 x (3 + 5) is ' + String(seize));
+//2 x (3 + 5) is 16
+
+ +

Importer un module exporté correctement

+ +

Assurez-vous d'importer le module correctement. Si par exemple, on dispose d'une bibliothèque helpers.js avec le code suivant :

+ +
let helpers = function () { };
+helpers.log = function(msg) {
+  console.log(msg);
+};
+
+export default helpers;
+ +

Pour l'importer côté application, on écrira :

+ +
import helpers from './helpers'
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/not_defined/index.html b/files/fr/web/javascript/reference/errors/not_defined/index.html deleted file mode 100644 index d88edd4f04..0000000000 --- a/files/fr/web/javascript/reference/errors/not_defined/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: 'ReferenceError: "x" is not defined' -slug: Web/JavaScript/Reference/Errors/Not_defined -tags: - - Erreur - - JavaScript - - Reference - - ReferenceError -translation_of: Web/JavaScript/Reference/Errors/Not_defined -original_slug: Web/JavaScript/Reference/Erreurs/Not_defined ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
ReferenceError: "x" is not defined
-
- -

Type d'erreur

- -

{{jsxref("ReferenceError")}}.

- -

Quel est le problème ?

- -

Une variable qui n'existe pas est référencée quelque part. Cette variable doit être déclarée ou il faut vérifier qu'elle est disponible dans le script concerné ou dans la portée utilisée.

- -
-

Note : Lors du chargement d'une bibliothèque comme jQuery, assurez-vous de bien charger la bibliothèque avant d'accéder aux variables comme $. La balise {{HTMLElement("script")}} utilisée pour charger la bibliothèque doit être présente avant le code qui l'utilise.

-
- -

Exemples

- -

Exemple de variable non déclarée

- -
toto.substring(1); // ReferenceError: toto is not defined
-
- -

La variable toto n'est définie nulle part. De plus, il faut qu'elle soit une chaîne de caractères afin que la méthode {{jsxref("String.prototype.substring()")}} puisse fonctionner.

- -
var toto = "truc";
-toto.substring(1); // "ruc"
- -

Exemple de portée invalide

- -

Une variable doit être disponible dans le contexte d'exécution où elle est utilisée. Les variables définies au sein d'une fonction ne peuvent pas être utilisées en dehors de cette fonction car la variable appartient à la portée de la fonction.

- -
function numbers () {
-  var num1 = 2,
-      num2 = 3;
-  return num1 + num2;
-}
-
-console.log(num1); // ReferenceError num1 is not defined.
- -

Toutefois, une fonction peut accéder aux variables et aux fonctions définies dans la portée dans laquelle elle s'inscrit. Ainsi, une fonction définie dans la portée globale peut utiliser toutes les variables définies dans la portée globale.

- -
var num1 = 2,
-    num2 = 3;
-
-function numbers () {
-  return num1 + num2;
-}
-
-console.log(num1); // 2
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/not_defined/index.md b/files/fr/web/javascript/reference/errors/not_defined/index.md new file mode 100644 index 0000000000..d88edd4f04 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/not_defined/index.md @@ -0,0 +1,71 @@ +--- +title: 'ReferenceError: "x" is not defined' +slug: Web/JavaScript/Reference/Errors/Not_defined +tags: + - Erreur + - JavaScript + - Reference + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Not_defined +original_slug: Web/JavaScript/Reference/Erreurs/Not_defined +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
ReferenceError: "x" is not defined
+
+ +

Type d'erreur

+ +

{{jsxref("ReferenceError")}}.

+ +

Quel est le problème ?

+ +

Une variable qui n'existe pas est référencée quelque part. Cette variable doit être déclarée ou il faut vérifier qu'elle est disponible dans le script concerné ou dans la portée utilisée.

+ +
+

Note : Lors du chargement d'une bibliothèque comme jQuery, assurez-vous de bien charger la bibliothèque avant d'accéder aux variables comme $. La balise {{HTMLElement("script")}} utilisée pour charger la bibliothèque doit être présente avant le code qui l'utilise.

+
+ +

Exemples

+ +

Exemple de variable non déclarée

+ +
toto.substring(1); // ReferenceError: toto is not defined
+
+ +

La variable toto n'est définie nulle part. De plus, il faut qu'elle soit une chaîne de caractères afin que la méthode {{jsxref("String.prototype.substring()")}} puisse fonctionner.

+ +
var toto = "truc";
+toto.substring(1); // "ruc"
+ +

Exemple de portée invalide

+ +

Une variable doit être disponible dans le contexte d'exécution où elle est utilisée. Les variables définies au sein d'une fonction ne peuvent pas être utilisées en dehors de cette fonction car la variable appartient à la portée de la fonction.

+ +
function numbers () {
+  var num1 = 2,
+      num2 = 3;
+  return num1 + num2;
+}
+
+console.log(num1); // ReferenceError num1 is not defined.
+ +

Toutefois, une fonction peut accéder aux variables et aux fonctions définies dans la portée dans laquelle elle s'inscrit. Ainsi, une fonction définie dans la portée globale peut utiliser toutes les variables définies dans la portée globale.

+ +
var num1 = 2,
+    num2 = 3;
+
+function numbers () {
+  return num1 + num2;
+}
+
+console.log(num1); // 2
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/precision_range/index.html b/files/fr/web/javascript/reference/errors/precision_range/index.html deleted file mode 100644 index 52adf5bcd1..0000000000 --- a/files/fr/web/javascript/reference/errors/precision_range/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: 'RangeError: precision is out of range' -slug: Web/JavaScript/Reference/Errors/Precision_range -tags: - - Erreurs - - JavaScript - - RangeError -translation_of: Web/JavaScript/Reference/Errors/Precision_range -original_slug: Web/JavaScript/Reference/Erreurs/Precision_range ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
RangeError: The number of fractional digits is out of range (Edge)
-RangeError: The precision is out of range (Edge)
-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)
-
- -

Type d'erreur

- -

{{jsxref("RangeError")}}

- -

Quel est le problème ?

- -

Un argument dont la précision est en dehors de l'intervalle valide, prévu par le moteur JavaScript, a été utilisé pour une de ces méthodes :

- - - -

Généralement, ces méthodes acceptent des arguments de précision compris entre 0 et 20 (voire 21). Cependant, la spécification ECMAScript permet de gérer des valeurs en dehors de cet intervalle.

- - - - - - - - - - - - - - - - - - - - - - - - - - -
MéthodeFirefox (SpiderMonkey)Chrome, Opera (V8)
{{jsxref("Number.prototype.toExponential()")}}0 to 1000 to 20
{{jsxref("Number.prototype.toFixed()")}}-20 to 1000 to 20
{{jsxref("Number.prototype.toPrecision()")}}1 to 1001 to 21
- -

Exemples

- -

Exemples invalides

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

Exemples valides

- -
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 (note that it rounds up in this case)
-
-5.123456.toPrecision(5); // 5.1235
-5.123456.toPrecision(2); // 5.1
-5.123456.toPrecision(1); // 5
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/precision_range/index.md b/files/fr/web/javascript/reference/errors/precision_range/index.md new file mode 100644 index 0000000000..52adf5bcd1 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/precision_range/index.md @@ -0,0 +1,99 @@ +--- +title: 'RangeError: precision is out of range' +slug: Web/JavaScript/Reference/Errors/Precision_range +tags: + - Erreurs + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Precision_range +original_slug: Web/JavaScript/Reference/Erreurs/Precision_range +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
RangeError: The number of fractional digits is out of range (Edge)
+RangeError: The precision is out of range (Edge)
+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)
+
+ +

Type d'erreur

+ +

{{jsxref("RangeError")}}

+ +

Quel est le problème ?

+ +

Un argument dont la précision est en dehors de l'intervalle valide, prévu par le moteur JavaScript, a été utilisé pour une de ces méthodes :

+ + + +

Généralement, ces méthodes acceptent des arguments de précision compris entre 0 et 20 (voire 21). Cependant, la spécification ECMAScript permet de gérer des valeurs en dehors de cet intervalle.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
MéthodeFirefox (SpiderMonkey)Chrome, Opera (V8)
{{jsxref("Number.prototype.toExponential()")}}0 to 1000 to 20
{{jsxref("Number.prototype.toFixed()")}}-20 to 1000 to 20
{{jsxref("Number.prototype.toPrecision()")}}1 to 1001 to 21
+ +

Exemples

+ +

Exemples invalides

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

Exemples valides

+ +
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 (note that it rounds up in this case)
+
+5.123456.toPrecision(5); // 5.1235
+5.123456.toPrecision(2); // 5.1
+5.123456.toPrecision(1); // 5
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/property_access_denied/index.html b/files/fr/web/javascript/reference/errors/property_access_denied/index.html deleted file mode 100644 index cb7818d3c3..0000000000 --- a/files/fr/web/javascript/reference/errors/property_access_denied/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 'Error: Permission denied to access property "x"' -slug: Web/JavaScript/Reference/Errors/Property_access_denied -tags: - - Erreurs - - Error - - JavaScript - - Sécurité -translation_of: Web/JavaScript/Reference/Errors/Property_access_denied -original_slug: Web/JavaScript/Reference/Erreurs/Property_access_denied ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Error: Permission denied to access property "x"
-
- -

Type d'erreur

- -

{{jsxref("Error")}}.

- -

Quel est le problème ?

- -

Il y a eu une tentative d'accès non-autorisée à un objet sur lequel vous n'avez pas de permissions. Généralement, cela se produit lorsqu'un élément {{HTMLElement("iframe")}} est chargée depuis un domaine différent et que la condition de même origine n'est pas respectée.

- -

Exemples

- -
<!DOCTYPE html>
-<html>
-  <head>
-    <iframe id="myframe" src="http://www1.w3c-test.org/common/blank.html"></iframe>
-    <script>
-      onload = function() {
-        console.log(frames[0].document);
-        // Error: Permission denied to access property "document"
-      }
-    </script>
-  </head>
-  <body></body>
-</html>
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/property_access_denied/index.md b/files/fr/web/javascript/reference/errors/property_access_denied/index.md new file mode 100644 index 0000000000..cb7818d3c3 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/property_access_denied/index.md @@ -0,0 +1,48 @@ +--- +title: 'Error: Permission denied to access property "x"' +slug: Web/JavaScript/Reference/Errors/Property_access_denied +tags: + - Erreurs + - Error + - JavaScript + - Sécurité +translation_of: Web/JavaScript/Reference/Errors/Property_access_denied +original_slug: Web/JavaScript/Reference/Erreurs/Property_access_denied +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Error: Permission denied to access property "x"
+
+ +

Type d'erreur

+ +

{{jsxref("Error")}}.

+ +

Quel est le problème ?

+ +

Il y a eu une tentative d'accès non-autorisée à un objet sur lequel vous n'avez pas de permissions. Généralement, cela se produit lorsqu'un élément {{HTMLElement("iframe")}} est chargée depuis un domaine différent et que la condition de même origine n'est pas respectée.

+ +

Exemples

+ +
<!DOCTYPE html>
+<html>
+  <head>
+    <iframe id="myframe" src="http://www1.w3c-test.org/common/blank.html"></iframe>
+    <script>
+      onload = function() {
+        console.log(frames[0].document);
+        // Error: Permission denied to access property "document"
+      }
+    </script>
+  </head>
+  <body></body>
+</html>
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/read-only/index.html b/files/fr/web/javascript/reference/errors/read-only/index.html deleted file mode 100644 index d46e5a80e7..0000000000 --- a/files/fr/web/javascript/reference/errors/read-only/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: 'TypeError: "x" is read-only' -slug: Web/JavaScript/Reference/Errors/Read-only -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Read-only -original_slug: Web/JavaScript/Reference/Erreurs/Read-only ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)
-TypeError: "x" is read-only (Firefox)
-TypeError: 0 is read-only (Firefox)
-TypeError: Cannot assign to read only property 'x' of #<Object> (Chrome)
-TypeError: Cannot assign to read only property '0' of [object Array] (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

La variable globale ou la propriété ne peut pas recevoir de valeur ou être modifiée car elle est en lecture seule (d'un point de vue technique, il s'agit d'une propriété de donnée en lecture seule).

- -

Cette erreur ne se produit qu'avec le mode strict. En mode non-strict, l'affectation est ignorée silencieusement.

- -

Exemples

- -

Exemples invalides

- -

Les propriétés en lecture seule ne sont pas fréquemment utilisées mais on peut en créer en utilisant les méthodes {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.freeze()")}}.

- -
"use strict";
-var obj = Object.freeze({name: "Elsa", score: 157});
-obj.score = 0;  // TypeError
-
-"use strict";
-Object.defineProperty(this, "NB_POUMONS", {value: 2, writable: false});
-NB_POUMONS = 3;  // TypeError
-
-"use strict";
-var frozenArray = Object.freeze([0, 1, 2]);
-frozenArray[0]++;  // TypeError
-
- -

Quelques propriétés natives JavaScript sont également en lecture seule. Par exemple, on obtient cette erreur lorsqu'on souhaite redéfinir une constante mathématique.

- -
"use strict";
-Math.PI = 4;  // TypeError
-
- -

La variable globale undefined est également en lecture seule. On ne peut donc pas faire disparaître la fameuse erreur "undefined is not a function" avec ce code :

- -
"use strict";
-undefined = function () {};
-// TypeError: "undefined" is read-only
-
- -

Exemples valides

- -
"use strict";
-var obj = Object.freeze({name: "Score", points: 157});
-obj = {name: obj.name, points: 0};
-// En changeant d'objet, ça fonctionne
-
-"use strict";
-var NB_POUMONS = 2;  // `var` fonctionne
-NB_POUMONS = 3;  // ok
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/read-only/index.md b/files/fr/web/javascript/reference/errors/read-only/index.md new file mode 100644 index 0000000000..d46e5a80e7 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/read-only/index.md @@ -0,0 +1,81 @@ +--- +title: 'TypeError: "x" is read-only' +slug: Web/JavaScript/Reference/Errors/Read-only +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Read-only +original_slug: Web/JavaScript/Reference/Erreurs/Read-only +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)
+TypeError: "x" is read-only (Firefox)
+TypeError: 0 is read-only (Firefox)
+TypeError: Cannot assign to read only property 'x' of #<Object> (Chrome)
+TypeError: Cannot assign to read only property '0' of [object Array] (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

La variable globale ou la propriété ne peut pas recevoir de valeur ou être modifiée car elle est en lecture seule (d'un point de vue technique, il s'agit d'une propriété de donnée en lecture seule).

+ +

Cette erreur ne se produit qu'avec le mode strict. En mode non-strict, l'affectation est ignorée silencieusement.

+ +

Exemples

+ +

Exemples invalides

+ +

Les propriétés en lecture seule ne sont pas fréquemment utilisées mais on peut en créer en utilisant les méthodes {{jsxref("Object.defineProperty()")}} ou {{jsxref("Object.freeze()")}}.

+ +
"use strict";
+var obj = Object.freeze({name: "Elsa", score: 157});
+obj.score = 0;  // TypeError
+
+"use strict";
+Object.defineProperty(this, "NB_POUMONS", {value: 2, writable: false});
+NB_POUMONS = 3;  // TypeError
+
+"use strict";
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray[0]++;  // TypeError
+
+ +

Quelques propriétés natives JavaScript sont également en lecture seule. Par exemple, on obtient cette erreur lorsqu'on souhaite redéfinir une constante mathématique.

+ +
"use strict";
+Math.PI = 4;  // TypeError
+
+ +

La variable globale undefined est également en lecture seule. On ne peut donc pas faire disparaître la fameuse erreur "undefined is not a function" avec ce code :

+ +
"use strict";
+undefined = function () {};
+// TypeError: "undefined" is read-only
+
+ +

Exemples valides

+ +
"use strict";
+var obj = Object.freeze({name: "Score", points: 157});
+obj = {name: obj.name, points: 0};
+// En changeant d'objet, ça fonctionne
+
+"use strict";
+var NB_POUMONS = 2;  // `var` fonctionne
+NB_POUMONS = 3;  // ok
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/redeclared_parameter/index.html b/files/fr/web/javascript/reference/errors/redeclared_parameter/index.html deleted file mode 100644 index 55c0e38653..0000000000 --- a/files/fr/web/javascript/reference/errors/redeclared_parameter/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: 'SyntaxError: redeclaration of formal parameter "x"' -slug: Web/JavaScript/Reference/Errors/Redeclared_parameter -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Redeclared_parameter -original_slug: Web/JavaScript/Reference/Erreurs/Redeclared_parameter ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Let/Const redeclaration (Edge)
-SyntaxError: redeclaration of formal parameter "x" (Firefox)
-SyntaxError: Identifier "x" has already been declared (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Le même nom de variable est présent comme paramètre de la fonction et dans une affectation let au sein du corps de cette fonction et il n'est pas possible de redéclarer la même variable dans la même fonction ou dans le même bloc avec let.

- -

Exemples

- -

Dans le fragment de code qui suit, la variable arg redéclare l'argument passé à la fonction.

- -
function f(arg) {
-  let arg = "toto";
-}
-
-// SyntaxError: redeclaration of formal parameter "arg"
-
- -

Si on souhaite changer la valeur de arg dans le corps de la fonction, c'est possible mais il ne faut pas la redéclarer. Autrement dit, on peut retirer le mot-clé let. Si on souhaite plutôt créer une nouvelle variable, mieux vaudra utiliser un autre nom afin d'éviter les conflits avec les noms des paramètres existants.

- -
function f(arg) {
-  arg = "toto";
-}
-
-function f(arg) {
-  let truc = "toto";
-}
-
- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/redeclared_parameter/index.md b/files/fr/web/javascript/reference/errors/redeclared_parameter/index.md new file mode 100644 index 0000000000..55c0e38653 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/redeclared_parameter/index.md @@ -0,0 +1,63 @@ +--- +title: 'SyntaxError: redeclaration of formal parameter "x"' +slug: Web/JavaScript/Reference/Errors/Redeclared_parameter +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Redeclared_parameter +original_slug: Web/JavaScript/Reference/Erreurs/Redeclared_parameter +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Let/Const redeclaration (Edge)
+SyntaxError: redeclaration of formal parameter "x" (Firefox)
+SyntaxError: Identifier "x" has already been declared (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Le même nom de variable est présent comme paramètre de la fonction et dans une affectation let au sein du corps de cette fonction et il n'est pas possible de redéclarer la même variable dans la même fonction ou dans le même bloc avec let.

+ +

Exemples

+ +

Dans le fragment de code qui suit, la variable arg redéclare l'argument passé à la fonction.

+ +
function f(arg) {
+  let arg = "toto";
+}
+
+// SyntaxError: redeclaration of formal parameter "arg"
+
+ +

Si on souhaite changer la valeur de arg dans le corps de la fonction, c'est possible mais il ne faut pas la redéclarer. Autrement dit, on peut retirer le mot-clé let. Si on souhaite plutôt créer une nouvelle variable, mieux vaudra utiliser un autre nom afin d'éviter les conflits avec les noms des paramètres existants.

+ +
function f(arg) {
+  arg = "toto";
+}
+
+function f(arg) {
+  let truc = "toto";
+}
+
+ +

Notes de compatibilité

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html b/files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html deleted file mode 100644 index 4afa3f08ed..0000000000 --- a/files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: 'TypeError: Reduce of empty array with no initial value' -slug: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value -tags: - - Error - - JavaScript - - Reference - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value -original_slug: Web/JavaScript/Reference/Erreurs/Reduce_of_empty_array_with_no_initial_value ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: reduce of empty array with no initial value
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}

- -

Quel est le problème ?

- -

En JavaScript, il existe plusieurs fonctions qui permettent de réduire un tableau :

- - - -

Ces fonctions utilisent un argument optionnel valeurInitiale (qui sera utilisée comme premier argument pour le premier appel du callback). Toutefois, si aucune valeur initiale explicite est fournie, la méthode utilisera le premier élément de l'objet  {{jsxref("Array")}} / {{jsxref("TypedArray")}} comme valeur initiale. Cette exception est déclenchée lorsqu'on souhaite réduire un tableau vide car aucune valeur initiale n'a été fournie.

- -

Exemples

- -

Exemples invalides

- -

Ce problème se produit lorsqu'on combine une méthode de filtrage ({{jsxref("Array.prototype.filter()")}}, {{jsxref("TypedArray.prototype.filter()")}}) qui retire tous les éléments du tableau. Si on applique ensuite une réduction, il n'y aura pas de valeur initiale.

- -
var ints = [0, -1, -2, -3, -4, -5];
-ints.filter(x => x > 0)         // cet appel retire tous les éléments
-    .reduce((x, y) => x + y)    // aucun ne peut alors être utilisé comme valeur initiale
- -

Cela peut également se produire si on utilise un sélecteur avec une coquille ou que la liste contient un nombre d'élément inattendu:

- -
var names = document.getElementsByClassName("names");
-var name_list = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
-
- -

Exemples valides

- -

On peut résoudre ces problèmes de deux façons.

- -

On peut fournir une valeur initiale qui soit l'élément neutre de la réduction (par exemple 0 si on additionne, 1 si on multiplie ou la chaîne vide si on concatène du texte).

- -
var ints = [0, -1, -2, -3, -4, -5];
-ints.filter(x => x > 0)         // removes all elements
-    .reduce((x, y) => x + y, 0) // the initial value is the neutral element of the addition
-
- -

On peut également gérer le cas où le tableau est vide, avant d'appeler reduce ou dans le callback après avoir ajouté une valeur initiale.

- -
var names = document.getElementsByClassName("names");
-
-var nameList1 = "";
-if (names1.length >= 1)
-  nameList1 = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
-// nameList1 == "" lorsque names est vide
-
-var nameList2 = Array.prototype.reduce.call(names, (acc, name) => {
-  if (acc == "") // la valeur initiale
-    return name;
-  return acc + ", " + name;
-}, "");
-// nameList2 == "" lorsque names est vide
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.md b/files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.md new file mode 100644 index 0000000000..4afa3f08ed --- /dev/null +++ b/files/fr/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.md @@ -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 +tags: + - Error + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value +original_slug: Web/JavaScript/Reference/Erreurs/Reduce_of_empty_array_with_no_initial_value +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: reduce of empty array with no initial value
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}

+ +

Quel est le problème ?

+ +

En JavaScript, il existe plusieurs fonctions qui permettent de réduire un tableau :

+ + + +

Ces fonctions utilisent un argument optionnel valeurInitiale (qui sera utilisée comme premier argument pour le premier appel du callback). Toutefois, si aucune valeur initiale explicite est fournie, la méthode utilisera le premier élément de l'objet  {{jsxref("Array")}} / {{jsxref("TypedArray")}} comme valeur initiale. Cette exception est déclenchée lorsqu'on souhaite réduire un tableau vide car aucune valeur initiale n'a été fournie.

+ +

Exemples

+ +

Exemples invalides

+ +

Ce problème se produit lorsqu'on combine une méthode de filtrage ({{jsxref("Array.prototype.filter()")}}, {{jsxref("TypedArray.prototype.filter()")}}) qui retire tous les éléments du tableau. Si on applique ensuite une réduction, il n'y aura pas de valeur initiale.

+ +
var ints = [0, -1, -2, -3, -4, -5];
+ints.filter(x => x > 0)         // cet appel retire tous les éléments
+    .reduce((x, y) => x + y)    // aucun ne peut alors être utilisé comme valeur initiale
+ +

Cela peut également se produire si on utilise un sélecteur avec une coquille ou que la liste contient un nombre d'élément inattendu:

+ +
var names = document.getElementsByClassName("names");
+var name_list = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
+
+ +

Exemples valides

+ +

On peut résoudre ces problèmes de deux façons.

+ +

On peut fournir une valeur initiale qui soit l'élément neutre de la réduction (par exemple 0 si on additionne, 1 si on multiplie ou la chaîne vide si on concatène du texte).

+ +
var ints = [0, -1, -2, -3, -4, -5];
+ints.filter(x => x > 0)         // removes all elements
+    .reduce((x, y) => x + y, 0) // the initial value is the neutral element of the addition
+
+ +

On peut également gérer le cas où le tableau est vide, avant d'appeler reduce ou dans le callback après avoir ajouté une valeur initiale.

+ +
var names = document.getElementsByClassName("names");
+
+var nameList1 = "";
+if (names1.length >= 1)
+  nameList1 = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
+// nameList1 == "" lorsque names est vide
+
+var nameList2 = Array.prototype.reduce.call(names, (acc, name) => {
+  if (acc == "") // la valeur initiale
+    return name;
+  return acc + ", " + name;
+}, "");
+// nameList2 == "" lorsque names est vide
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/reserved_identifier/index.html b/files/fr/web/javascript/reference/errors/reserved_identifier/index.html deleted file mode 100644 index f632ea336e..0000000000 --- a/files/fr/web/javascript/reference/errors/reserved_identifier/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: 'SyntaxError: "x" is a reserved identifier' -slug: Web/JavaScript/Reference/Errors/Reserved_identifier -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Reserved_identifier -original_slug: Web/JavaScript/Reference/Erreurs/Reserved_identifier ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
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)
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Les mots-clés réservés lèveront une exception s'ils sont utilisés en tant qu'identifiants. Voici les mots-clés réservés en mode strict et en mode sloppy :

- - - -

Voici les mots-clés uniquement réservés en mode strict :

- - - -

Exemples

- -

Mots-clés réservés en modes strict et non-strict

- -

L'identifiant enum est réservé dans les différents cas :

- -
var enum = { RED: 0, GREEN: 1, BLUE: 2 };
-// SyntaxError: enum is a reserved identifier
-
- -

En mode strict, d'autres mots-clés sont réservés :

- -
"use strict";
-var package = ["pomme", "poire", "pêches"];
-// SyntaxError: package is a reserved identifier
-
- -

Pour ne pas avoir l'erreur, il faudra renommer les variables :

- -
var enumCouleurs = { RED: 0, GREEN: 1, BLUE: 2 };
-var liste = ["pomme", "poire", "pêches"];
- -

Mettre à jour les anciens navigateurs

- -

Si vous utilisez un ancien navigateur qui n'implémente pas let ou class, vous devrez mettre à jour votre navigateur :

- -
"use strict";
-class DocArchiver {}
-
-// SyntaxError: class is a reserved identifier
-// (lève une exception dans les anciens navigateurs
-// tels que Firefox 44 et les versions antérieures)
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/reserved_identifier/index.md b/files/fr/web/javascript/reference/errors/reserved_identifier/index.md new file mode 100644 index 0000000000..f632ea336e --- /dev/null +++ b/files/fr/web/javascript/reference/errors/reserved_identifier/index.md @@ -0,0 +1,82 @@ +--- +title: 'SyntaxError: "x" is a reserved identifier' +slug: Web/JavaScript/Reference/Errors/Reserved_identifier +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Reserved_identifier +original_slug: Web/JavaScript/Reference/Erreurs/Reserved_identifier +--- +
{{jsSidebar("Errors")}}
+ +

Message

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

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Les mots-clés réservés lèveront une exception s'ils sont utilisés en tant qu'identifiants. Voici les mots-clés réservés en mode strict et en mode sloppy :

+ + + +

Voici les mots-clés uniquement réservés en mode strict :

+ + + +

Exemples

+ +

Mots-clés réservés en modes strict et non-strict

+ +

L'identifiant enum est réservé dans les différents cas :

+ +
var enum = { RED: 0, GREEN: 1, BLUE: 2 };
+// SyntaxError: enum is a reserved identifier
+
+ +

En mode strict, d'autres mots-clés sont réservés :

+ +
"use strict";
+var package = ["pomme", "poire", "pêches"];
+// SyntaxError: package is a reserved identifier
+
+ +

Pour ne pas avoir l'erreur, il faudra renommer les variables :

+ +
var enumCouleurs = { RED: 0, GREEN: 1, BLUE: 2 };
+var liste = ["pomme", "poire", "pêches"];
+ +

Mettre à jour les anciens navigateurs

+ +

Si vous utilisez un ancien navigateur qui n'implémente pas let ou class, vous devrez mettre à jour votre navigateur :

+ +
"use strict";
+class DocArchiver {}
+
+// SyntaxError: class is a reserved identifier
+// (lève une exception dans les anciens navigateurs
+// tels que Firefox 44 et les versions antérieures)
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/resulting_string_too_large/index.html b/files/fr/web/javascript/reference/errors/resulting_string_too_large/index.html deleted file mode 100644 index 78ad63d9f3..0000000000 --- a/files/fr/web/javascript/reference/errors/resulting_string_too_large/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: 'RangeError: repeat count must be less than infinity' -slug: Web/JavaScript/Reference/Errors/Resulting_string_too_large -tags: - - Erreurs - - JavaScript - - RangeError -translation_of: Web/JavaScript/Reference/Errors/Resulting_string_too_large -original_slug: Web/JavaScript/Reference/Erreurs/Resulting_string_too_large ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
RangeError: argument out of range (Edge)
-RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)
-RangeError: Invalid count value (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("RangeError")}}

- -

Quel est le problème ?

- -

La méthode {{jsxref("String.prototype.repeat()")}}, qui permet de répéter une chaîne de caractères, a été utilisée avec un argument qui n'est pas compris entre 0 et {{jsxref("Infinity")}} (exclue) (ce qui correspond à l'intervalle [0, +∞))

- -

La chaîne de caractères crée par cette méthode ne doit pas dépasser la taille maximale d'une chaîne. Cette taille varie selon le moteur JavaScript. Pour Firefox (SpiderMonkey), la taille maximale d'une chaîne de caractères vaut 2^28-1 (0xFFFFFFF).

- -

Exemples

- -

Exemples invalides

- -
'abc'.repeat(Infinity); // RangeError
-'a'.repeat(2**28);      // RangeError
-
- -

Exemples valides

- -
'abc'.repeat(0);    // ''
-'abc'.repeat(1);    // 'abc'
-'abc'.repeat(2);    // 'abcabc'
-'abc'.repeat(3.5);  // 'abcabcabc' (count will be converted to integer)
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/resulting_string_too_large/index.md b/files/fr/web/javascript/reference/errors/resulting_string_too_large/index.md new file mode 100644 index 0000000000..78ad63d9f3 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/resulting_string_too_large/index.md @@ -0,0 +1,50 @@ +--- +title: 'RangeError: repeat count must be less than infinity' +slug: Web/JavaScript/Reference/Errors/Resulting_string_too_large +tags: + - Erreurs + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Resulting_string_too_large +original_slug: Web/JavaScript/Reference/Erreurs/Resulting_string_too_large +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
RangeError: argument out of range (Edge)
+RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)
+RangeError: Invalid count value (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("RangeError")}}

+ +

Quel est le problème ?

+ +

La méthode {{jsxref("String.prototype.repeat()")}}, qui permet de répéter une chaîne de caractères, a été utilisée avec un argument qui n'est pas compris entre 0 et {{jsxref("Infinity")}} (exclue) (ce qui correspond à l'intervalle [0, +∞))

+ +

La chaîne de caractères crée par cette méthode ne doit pas dépasser la taille maximale d'une chaîne. Cette taille varie selon le moteur JavaScript. Pour Firefox (SpiderMonkey), la taille maximale d'une chaîne de caractères vaut 2^28-1 (0xFFFFFFF).

+ +

Exemples

+ +

Exemples invalides

+ +
'abc'.repeat(Infinity); // RangeError
+'a'.repeat(2**28);      // RangeError
+
+ +

Exemples valides

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' (count will be converted to integer)
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/stmt_after_return/index.html b/files/fr/web/javascript/reference/errors/stmt_after_return/index.html deleted file mode 100644 index 4d506a6285..0000000000 --- a/files/fr/web/javascript/reference/errors/stmt_after_return/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: 'Warning: unreachable code after return statement' -slug: Web/JavaScript/Reference/Errors/Stmt_after_return -tags: - - JavaScript - - Warning -translation_of: Web/JavaScript/Reference/Errors/Stmt_after_return -original_slug: Web/JavaScript/Reference/Erreurs/Stmt_after_return ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Warning: unreachable code after return statement (Firefox)
-
- -

Type d'erreur

- -

Avertissement

- -

Quel est le problème ?

- -

Ce problème peut avoir deux origines :

- - - -

Lorsqu'une expression existe après une instruction return valide, un avertissement est produit pour alerter qu'une portion du code ne peut pas être atteinte et ne sera donc jamais lue et exécutée.

- -

Pourquoi est-il préférable d'ajouter des points-virgules après les instructions return ? Si on utilise une instruction return sans point-virgule, cela peut créer une ambiguïté : est-ce que le développeur souhaite que le code qui suit sur la ligne d'après soit exécuté ou non ? L'avertissement relève cette ambiguïté afin de mieux la percevoir pour la lever.

- -

Les avertissements ne seront pas affichés pour les return sans point-virgule si ces instructions suivent :

- - - -

Exemples

- -

Exemples invalides

- -
function f() {
-  var x = 3;
-  x += 4;
-  return x;   // return permet de finir la fonction sur le champ
-  x -= 3;     // Cette ligne ne sera jamais lue donc exécutée
-}
-
-function f() {
-  return     // Cette instruction est traitée `return;`
-    3 + 4;   // La fonction termine et cette ligne n'est jamais traitée
-}
-
- -

Exemples valides

- -
function f() {
-  var x = 3;
-  x += 4;
-  x -= 3;
-  return x;  // OK : return est après
-             // toutes les autres instructions
-}
-
-function f() {
-  return 3 + 4  // OK : un return sans point-virgule
-                // avec une expression sur la même ligne
-}
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/stmt_after_return/index.md b/files/fr/web/javascript/reference/errors/stmt_after_return/index.md new file mode 100644 index 0000000000..4d506a6285 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/stmt_after_return/index.md @@ -0,0 +1,80 @@ +--- +title: 'Warning: unreachable code after return statement' +slug: Web/JavaScript/Reference/Errors/Stmt_after_return +tags: + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/Stmt_after_return +original_slug: Web/JavaScript/Reference/Erreurs/Stmt_after_return +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Warning: unreachable code after return statement (Firefox)
+
+ +

Type d'erreur

+ +

Avertissement

+ +

Quel est le problème ?

+ +

Ce problème peut avoir deux origines :

+ + + +

Lorsqu'une expression existe après une instruction return valide, un avertissement est produit pour alerter qu'une portion du code ne peut pas être atteinte et ne sera donc jamais lue et exécutée.

+ +

Pourquoi est-il préférable d'ajouter des points-virgules après les instructions return ? Si on utilise une instruction return sans point-virgule, cela peut créer une ambiguïté : est-ce que le développeur souhaite que le code qui suit sur la ligne d'après soit exécuté ou non ? L'avertissement relève cette ambiguïté afin de mieux la percevoir pour la lever.

+ +

Les avertissements ne seront pas affichés pour les return sans point-virgule si ces instructions suivent :

+ + + +

Exemples

+ +

Exemples invalides

+ +
function f() {
+  var x = 3;
+  x += 4;
+  return x;   // return permet de finir la fonction sur le champ
+  x -= 3;     // Cette ligne ne sera jamais lue donc exécutée
+}
+
+function f() {
+  return     // Cette instruction est traitée `return;`
+    3 + 4;   // La fonction termine et cette ligne n'est jamais traitée
+}
+
+ +

Exemples valides

+ +
function f() {
+  var x = 3;
+  x += 4;
+  x -= 3;
+  return x;  // OK : return est après
+             // toutes les autres instructions
+}
+
+function f() {
+  return 3 + 4  // OK : un return sans point-virgule
+                // avec une expression sur la même ligne
+}
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/strict_non_simple_params/index.html b/files/fr/web/javascript/reference/errors/strict_non_simple_params/index.html deleted file mode 100644 index 26abbf3a40..0000000000 --- a/files/fr/web/javascript/reference/errors/strict_non_simple_params/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: 'SyntaxError: "use strict" not allowed in function with "x" parameter' -slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params -tags: - - Erreurs - - JavaScript - - Reference - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params -original_slug: Web/JavaScript/Reference/Erreurs/Strict_Non_Simple_Params ---- -
{{jsSidebar("Errors")}}
- -

Message

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

Type d'erreur

- -

{{jsxref("SyntaxError")}}.

- -

Quel est le problème ?

- -

Une directive "use strict" apparaît au début d'une fonction qui possède l'un des paramètres suivants :

- - - -

Selon la spécification ECMAScript, une directive "use strict" ne peut pas être utilisée pour de telles fonctions.

- -

Exemples

- -

Déclaration de fonction

- -

Dans l'exemple qui suit, la fonction somme possède deux paramètres par défaut a=1 et b=2.

- -
function somme(a = 1, b = 2) {
-  // SyntaxError: "use strict" not allowed in function with default parameter
-  "use strict";
-  return a + b;
-}
-
- -

Si on veut que la fonction soit en mode strict et que le script entier ou que la fonction englobante peut être en mode strict, il suffira de déplacer l'instruction "use strict" en dehors du corps de la méthode.

- -
"use strict";
-function somme(a = 1, b = 2) {
-  return a + b;
-}
-
- -

Expression de fonction

- -

Il est également possible d'utiliser les expressions de fonction pour résoudre ce problème :

- -
var somme = function somme([a, b]) {
-  // SyntaxError: "use strict" not allowed in function with destructuring parameter
-  "use strict";
-  return a + b;
-};
-
- -

On peut convertir le fragment de code précédent avec l'expression suivante :

- -
var somme = (function() {
-  "use strict";
-  return function somme([a, b]) {
-    return a + b;
-  };
-})();
-
- -

Fonction fléchée

- -

Si on a une fonction fléchée qui doit accéder à la variable this on peut utiliser une fonction fléchée comme fonction englobante :

- -
var callback = (...args) => {
-  // SyntaxError: "use strict" not allowed in function with rest parameter
-  "use strict";
-  return this.run(args);
-};
-
- -

This can be converted into following expression.

- -
var callback = (() => {
-  "use strict";
-  return (...args) => {
-    return this.run(args);
-  };
-})();
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/strict_non_simple_params/index.md b/files/fr/web/javascript/reference/errors/strict_non_simple_params/index.md new file mode 100644 index 0000000000..26abbf3a40 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/strict_non_simple_params/index.md @@ -0,0 +1,116 @@ +--- +title: 'SyntaxError: "use strict" not allowed in function with "x" parameter' +slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +tags: + - Erreurs + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +original_slug: Web/JavaScript/Reference/Erreurs/Strict_Non_Simple_Params +--- +
{{jsSidebar("Errors")}}
+ +

Message

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

Type d'erreur

+ +

{{jsxref("SyntaxError")}}.

+ +

Quel est le problème ?

+ +

Une directive "use strict" apparaît au début d'une fonction qui possède l'un des paramètres suivants :

+ + + +

Selon la spécification ECMAScript, une directive "use strict" ne peut pas être utilisée pour de telles fonctions.

+ +

Exemples

+ +

Déclaration de fonction

+ +

Dans l'exemple qui suit, la fonction somme possède deux paramètres par défaut a=1 et b=2.

+ +
function somme(a = 1, b = 2) {
+  // SyntaxError: "use strict" not allowed in function with default parameter
+  "use strict";
+  return a + b;
+}
+
+ +

Si on veut que la fonction soit en mode strict et que le script entier ou que la fonction englobante peut être en mode strict, il suffira de déplacer l'instruction "use strict" en dehors du corps de la méthode.

+ +
"use strict";
+function somme(a = 1, b = 2) {
+  return a + b;
+}
+
+ +

Expression de fonction

+ +

Il est également possible d'utiliser les expressions de fonction pour résoudre ce problème :

+ +
var somme = function somme([a, b]) {
+  // SyntaxError: "use strict" not allowed in function with destructuring parameter
+  "use strict";
+  return a + b;
+};
+
+ +

On peut convertir le fragment de code précédent avec l'expression suivante :

+ +
var somme = (function() {
+  "use strict";
+  return function somme([a, b]) {
+    return a + b;
+  };
+})();
+
+ +

Fonction fléchée

+ +

Si on a une fonction fléchée qui doit accéder à la variable this on peut utiliser une fonction fléchée comme fonction englobante :

+ +
var callback = (...args) => {
+  // SyntaxError: "use strict" not allowed in function with rest parameter
+  "use strict";
+  return this.run(args);
+};
+
+ +

This can be converted into following expression.

+ +
var callback = (() => {
+  "use strict";
+  return (...args) => {
+    return this.run(args);
+  };
+})();
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/too_much_recursion/index.html b/files/fr/web/javascript/reference/errors/too_much_recursion/index.html deleted file mode 100644 index 097eff25b7..0000000000 --- a/files/fr/web/javascript/reference/errors/too_much_recursion/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: 'InternalError: too much recursion' -slug: Web/JavaScript/Reference/Errors/Too_much_recursion -tags: - - Erreurs - - InternalError - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion -original_slug: Web/JavaScript/Reference/Erreurs/Too_much_recursion ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Error: Out of stack space (Edge)
-InternalError: too much recursion (Firefox)
-RangeError: Maximum call stack size exceeded (Chrome)
-
- -

Type d'erreur

- -

{{jsxref("InternalError")}}.

- -

Quel est le problème ?

- -

Une fonction qui s'appelle elle-même est une fonction recursive. Lorsqu'une certaine condition est respectée, la fonction arrête de s'appeler elle-même, c'est ce qu'on appelle le cas initial.

- -

D'une certaine façon, une récursion est semblable à une boucle. Les deux exécutent le même code plusieurs fois, et les deux ont besoin d'une condition d'arrêt afin d'éviter une boucle infinie ou une récursion infinie. Lorsqu'il y a trop de niveaux de récursion ou une récursion infinie, JavaScript lèvera cette erreur.

- -

Exemples

- -

Cette fonction récursive est exécutée 10 fois comme l'indique la condition de sortie :

- -
function loop(x) {
-  if (x >= 10) // "x >= 10" is the exit condition
-    return;
-  // do stuff
-  loop(x + 1); // the recursive call
-}
-loop(0);
- -

Si la condition d'arrêt est beaucoup trop grande, cela ne fonctionnera pas :

- -
function loop(x) {
-  if (x >= 1000000000000)
-    return;
-  // do stuff
-  loop(x + 1);
-}
-loop(0);
-
-// InternalError: too much recursion
- -

Si la fonction récursive ne possède pas de cas initial, il n'y aura pas de condition de sortie et la fonction continuera de s'appeler indéfiniment.

- -
function boucle(x) {
-  boucle(x + 1);
-  // il n'y a pas de cas initial
-}
-
-boucle(0);
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/too_much_recursion/index.md b/files/fr/web/javascript/reference/errors/too_much_recursion/index.md new file mode 100644 index 0000000000..097eff25b7 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/too_much_recursion/index.md @@ -0,0 +1,70 @@ +--- +title: 'InternalError: too much recursion' +slug: Web/JavaScript/Reference/Errors/Too_much_recursion +tags: + - Erreurs + - InternalError + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion +original_slug: Web/JavaScript/Reference/Erreurs/Too_much_recursion +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Error: Out of stack space (Edge)
+InternalError: too much recursion (Firefox)
+RangeError: Maximum call stack size exceeded (Chrome)
+
+ +

Type d'erreur

+ +

{{jsxref("InternalError")}}.

+ +

Quel est le problème ?

+ +

Une fonction qui s'appelle elle-même est une fonction recursive. Lorsqu'une certaine condition est respectée, la fonction arrête de s'appeler elle-même, c'est ce qu'on appelle le cas initial.

+ +

D'une certaine façon, une récursion est semblable à une boucle. Les deux exécutent le même code plusieurs fois, et les deux ont besoin d'une condition d'arrêt afin d'éviter une boucle infinie ou une récursion infinie. Lorsqu'il y a trop de niveaux de récursion ou une récursion infinie, JavaScript lèvera cette erreur.

+ +

Exemples

+ +

Cette fonction récursive est exécutée 10 fois comme l'indique la condition de sortie :

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" is the exit condition
+    return;
+  // do stuff
+  loop(x + 1); // the recursive call
+}
+loop(0);
+ +

Si la condition d'arrêt est beaucoup trop grande, cela ne fonctionnera pas :

+ +
function loop(x) {
+  if (x >= 1000000000000)
+    return;
+  // do stuff
+  loop(x + 1);
+}
+loop(0);
+
+// InternalError: too much recursion
+ +

Si la fonction récursive ne possède pas de cas initial, il n'y aura pas de condition de sortie et la fonction continuera de s'appeler indéfiniment.

+ +
function boucle(x) {
+  boucle(x + 1);
+  // il n'y a pas de cas initial
+}
+
+boucle(0);
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/undeclared_var/index.html b/files/fr/web/javascript/reference/errors/undeclared_var/index.html deleted file mode 100644 index 26293dc271..0000000000 --- a/files/fr/web/javascript/reference/errors/undeclared_var/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: 'ReferenceError: assignment to undeclared variable "x"' -slug: Web/JavaScript/Reference/Errors/Undeclared_var -tags: - - Erreurs - - JavaScript - - ReferenceError -translation_of: Web/JavaScript/Reference/Errors/Undeclared_var -original_slug: Web/JavaScript/Reference/Erreurs/Undeclared_var ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
ReferenceError: assignment to undeclared variable "x" (Firefox)
-ReferenceError: "x" is not defined (Chrome)
-ReferenceError: Variable undefined in strict mode (Edge)
-
- -

Type d'erreur

- -

Une erreur {{jsxref("ReferenceError")}}, uniquement en mode strict.

- -

Quel est le problème ?

- -

Une valeur a été affectée à une variable non-déclarée. Autrement dit, il y a eu une affectation qui n'utilise pas le mot-clé var. Il existe certaines différences entre les variables déclarées et les variables non déclarées ce qui peut entraîner des résultats étranges. C'est pour cette raison que le moteur affiche une erreur en mode strict.

- -

Trois choses à noter lorsqu'on évoque les variables déclarées/non déclarées :

- - - -

Pour plus de détails et d'exemple, se référer à la page sur var.

- -

Les erreurs à propos des affectations sur les variables non déclarées se produisent uniquement en mode strict. En mode non-strict, elles sont ignorées silencieusement.

- -

Exemples

- -

Exemples invalides

- -

Ici, la variable truc n'est pas déclarée :

- -
function toto() {
-  "use strict";
-  truc = true;
-}
-toto(); // ReferenceError: assignment to undeclared variable truc
-
- -

Exemples valides

- -

Afin de déclarer truc, on peut ajouter le mot-clé var devant.

- -
function toto() {
-  "use strict";
-  var truc = true;
-}
-toto();
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/undeclared_var/index.md b/files/fr/web/javascript/reference/errors/undeclared_var/index.md new file mode 100644 index 0000000000..26293dc271 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/undeclared_var/index.md @@ -0,0 +1,67 @@ +--- +title: 'ReferenceError: assignment to undeclared variable "x"' +slug: Web/JavaScript/Reference/Errors/Undeclared_var +tags: + - Erreurs + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Undeclared_var +original_slug: Web/JavaScript/Reference/Erreurs/Undeclared_var +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
ReferenceError: assignment to undeclared variable "x" (Firefox)
+ReferenceError: "x" is not defined (Chrome)
+ReferenceError: Variable undefined in strict mode (Edge)
+
+ +

Type d'erreur

+ +

Une erreur {{jsxref("ReferenceError")}}, uniquement en mode strict.

+ +

Quel est le problème ?

+ +

Une valeur a été affectée à une variable non-déclarée. Autrement dit, il y a eu une affectation qui n'utilise pas le mot-clé var. Il existe certaines différences entre les variables déclarées et les variables non déclarées ce qui peut entraîner des résultats étranges. C'est pour cette raison que le moteur affiche une erreur en mode strict.

+ +

Trois choses à noter lorsqu'on évoque les variables déclarées/non déclarées :

+ + + +

Pour plus de détails et d'exemple, se référer à la page sur var.

+ +

Les erreurs à propos des affectations sur les variables non déclarées se produisent uniquement en mode strict. En mode non-strict, elles sont ignorées silencieusement.

+ +

Exemples

+ +

Exemples invalides

+ +

Ici, la variable truc n'est pas déclarée :

+ +
function toto() {
+  "use strict";
+  truc = true;
+}
+toto(); // ReferenceError: assignment to undeclared variable truc
+
+ +

Exemples valides

+ +

Afin de déclarer truc, on peut ajouter le mot-clé var devant.

+ +
function toto() {
+  "use strict";
+  var truc = true;
+}
+toto();
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/undefined_prop/index.html b/files/fr/web/javascript/reference/errors/undefined_prop/index.html deleted file mode 100644 index b3b000d302..0000000000 --- a/files/fr/web/javascript/reference/errors/undefined_prop/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: 'ReferenceError: reference to undefined property "x"' -slug: Web/JavaScript/Reference/Errors/Undefined_prop -tags: - - Erreurs - - JavaScript - - Reference - - ReferenceError -translation_of: Web/JavaScript/Reference/Errors/Undefined_prop -original_slug: Web/JavaScript/Reference/Erreurs/Undefined_prop ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
ReferenceError: reference to undefined property "x" (Firefox)
-
- -

Type d'erreur

- -

Uniquement pour Firefox. Une erreur {{jsxref("ReferenceError")}} lancée en avertissement, uniquement si la préférence javascript.options.strict vaut true.

- -

Quel est le problème ?

- -

Le code tente d'accéder à une propriété inexistante d'un objet. Il existe deux méthodes pour accéder aux propriétés. Pour plus de détails, on pourra lire la page de la référence sur les accesseurs de propriété.

- -

Exemples

- -

Exemples invalides

- -

Ici, la propriété truc n'est pas une propriété définie et on obtient alors une ReferenceError.

- -
"use strict";
-
-var toto = {};
-toto.truc; // ReferenceError: reference to undefined property "bar"
-
- -

Exemples valides

- -

Pour éviter cette erreur, il faut que truc soit une variable  « définie » ou vérifier son existence avant de l'utiliser (en utilisant par exemple la méthode {{jsxref("Object.prototype.hasOwnProperty()")}}).

- -
"use strict";
-
-var toto = {};
-
-toto.truc = "lune";
-console.log(toto.truc); // "lune"
-
-if (foo.hasOwnProperty("truc")) {
-  console.log(toto.truc);
-}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/undefined_prop/index.md b/files/fr/web/javascript/reference/errors/undefined_prop/index.md new file mode 100644 index 0000000000..b3b000d302 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/undefined_prop/index.md @@ -0,0 +1,58 @@ +--- +title: 'ReferenceError: reference to undefined property "x"' +slug: Web/JavaScript/Reference/Errors/Undefined_prop +tags: + - Erreurs + - JavaScript + - Reference + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Undefined_prop +original_slug: Web/JavaScript/Reference/Erreurs/Undefined_prop +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
ReferenceError: reference to undefined property "x" (Firefox)
+
+ +

Type d'erreur

+ +

Uniquement pour Firefox. Une erreur {{jsxref("ReferenceError")}} lancée en avertissement, uniquement si la préférence javascript.options.strict vaut true.

+ +

Quel est le problème ?

+ +

Le code tente d'accéder à une propriété inexistante d'un objet. Il existe deux méthodes pour accéder aux propriétés. Pour plus de détails, on pourra lire la page de la référence sur les accesseurs de propriété.

+ +

Exemples

+ +

Exemples invalides

+ +

Ici, la propriété truc n'est pas une propriété définie et on obtient alors une ReferenceError.

+ +
"use strict";
+
+var toto = {};
+toto.truc; // ReferenceError: reference to undefined property "bar"
+
+ +

Exemples valides

+ +

Pour éviter cette erreur, il faut que truc soit une variable  « définie » ou vérifier son existence avant de l'utiliser (en utilisant par exemple la méthode {{jsxref("Object.prototype.hasOwnProperty()")}}).

+ +
"use strict";
+
+var toto = {};
+
+toto.truc = "lune";
+console.log(toto.truc); // "lune"
+
+if (foo.hasOwnProperty("truc")) {
+  console.log(toto.truc);
+}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/unexpected_token/index.html b/files/fr/web/javascript/reference/errors/unexpected_token/index.html deleted file mode 100644 index 771455c514..0000000000 --- a/files/fr/web/javascript/reference/errors/unexpected_token/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 'SyntaxError: Unexpected token' -slug: Web/JavaScript/Reference/Errors/Unexpected_token -tags: - - Erreurs - - JavaScript - - Reference - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Unexpected_token -original_slug: Web/JavaScript/Reference/Erreurs/Unexpected_token ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
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 '=>' after argument list, got "x"
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

La syntaxe du langage « attendait » un élément mais quelque chose d'autre est écrit à la place dans le script. Cela peut simplement être dû à une coquille dans le code.

- -

Exemples

- -

Expression attendue

- -

Lorsqu'on enchaîne des expressions, par exemple, les virgules ne sont pas autorisées en fin d'expression :

- -
for (let i = 0; i < 5,; ++i) {
-  console.log(i);
-}
-// SyntaxError: expected expression, got ')'
-
- -

Pour corriger cette erreur, on peut retirer la virgule superflue ou bien ajouter une autre expression :

- -
for (let i = 0; i < 5; ++i) {
-  console.log(i);
-}
-
- -

Parenthèses manquantes

- -

Il peut également arriver que des parenthèses manquent autour des instructions if :

- -
function round(n, upperBound, lowerBound){
-  if(n > upperBound) || (n < lowerBound){
-    throw 'Number ' + String(n) + ' is more than ' + String(upperBound) + ' or less than ' + String(lowerBound);
-  }else if(n < ((upperBound + lowerBound)/2)){
-    return lowerBound;
-  }else{
-    return upperBound;
-  }
-} // SyntaxError: expected expression, got '||'
- -

Si on compte les parenthèses ouvrantes et fermantes, c'est correct mais on peut voir que le OU logique (||) n'est contenu au sein d'aucune paire de parenthèses.

- -

Pour corriger ce problème, il suffit d'ajouter une paire de parenthèses englobante :

- -
function round(n, upperBound, lowerBound){
-  if((n > upperBound) || (n < lowerBound)){
-    throw 'Number ' + String(n) + ' is more than ' + String(upperBound) + ' or less than ' + String(lowerBound);
-  }else if(n < ((upperBound + lowerBound)/2)){
-    return lowerBound;
-  }else{
-    return upperBound;
-  }
-}
-
diff --git a/files/fr/web/javascript/reference/errors/unexpected_token/index.md b/files/fr/web/javascript/reference/errors/unexpected_token/index.md new file mode 100644 index 0000000000..771455c514 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/unexpected_token/index.md @@ -0,0 +1,78 @@ +--- +title: 'SyntaxError: Unexpected token' +slug: Web/JavaScript/Reference/Errors/Unexpected_token +tags: + - Erreurs + - JavaScript + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unexpected_token +original_slug: Web/JavaScript/Reference/Erreurs/Unexpected_token +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
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 '=>' after argument list, got "x"
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

La syntaxe du langage « attendait » un élément mais quelque chose d'autre est écrit à la place dans le script. Cela peut simplement être dû à une coquille dans le code.

+ +

Exemples

+ +

Expression attendue

+ +

Lorsqu'on enchaîne des expressions, par exemple, les virgules ne sont pas autorisées en fin d'expression :

+ +
for (let i = 0; i < 5,; ++i) {
+  console.log(i);
+}
+// SyntaxError: expected expression, got ')'
+
+ +

Pour corriger cette erreur, on peut retirer la virgule superflue ou bien ajouter une autre expression :

+ +
for (let i = 0; i < 5; ++i) {
+  console.log(i);
+}
+
+ +

Parenthèses manquantes

+ +

Il peut également arriver que des parenthèses manquent autour des instructions if :

+ +
function round(n, upperBound, lowerBound){
+  if(n > upperBound) || (n < lowerBound){
+    throw 'Number ' + String(n) + ' is more than ' + String(upperBound) + ' or less than ' + String(lowerBound);
+  }else if(n < ((upperBound + lowerBound)/2)){
+    return lowerBound;
+  }else{
+    return upperBound;
+  }
+} // SyntaxError: expected expression, got '||'
+ +

Si on compte les parenthèses ouvrantes et fermantes, c'est correct mais on peut voir que le OU logique (||) n'est contenu au sein d'aucune paire de parenthèses.

+ +

Pour corriger ce problème, il suffit d'ajouter une paire de parenthèses englobante :

+ +
function round(n, upperBound, lowerBound){
+  if((n > upperBound) || (n < lowerBound)){
+    throw 'Number ' + String(n) + ' is more than ' + String(upperBound) + ' or less than ' + String(lowerBound);
+  }else if(n < ((upperBound + lowerBound)/2)){
+    return lowerBound;
+  }else{
+    return upperBound;
+  }
+}
+
diff --git a/files/fr/web/javascript/reference/errors/unexpected_type/index.html b/files/fr/web/javascript/reference/errors/unexpected_type/index.html deleted file mode 100644 index 6b54febd7b..0000000000 --- a/files/fr/web/javascript/reference/errors/unexpected_type/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: 'TypeError: "x" is (not) "y"' -slug: Web/JavaScript/Reference/Errors/Unexpected_type -tags: - - Erreurs - - JavaScript - - Reference - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Unexpected_type -original_slug: Web/JavaScript/Reference/Erreurs/Unexpected_type ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: Unable to get property {x} of undefined or null reference (Edge)
-TypeError: "x" is (not) "y" (Firefox)
-
-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
-
- -

Type d'erreur

- -

{{jsxref("TypeError")}}.

- -

Quel est le problème ?

- -

Un type inattendu a été rencontré. Cela se produit la plupart du temps avec les valeurs {{jsxref("undefined")}} ou {{jsxref("null")}}.

- -

Certaines méthodes comme {{jsxref("Object.create()")}} ou {{jsxref("Symbol.keyFor()")}} ont des contraintes sur le type de valeur qui peut être passé en argument.

- -

Exemples

- -

Exemples invalides

- -
// undefined et null : des valeurs
-// sur lesquelles la méthode substring
-// ne fonctionnera pas
-var toto = undefined;
-toto.substring(1); // TypeError: toto is undefined
-
-var toto = null;
-toto.substring(1); // TypeError: toto is null
-
-
-// Certaines méthodes nécessitent une valeur
-// d'un type spécifique
-var toto = {}
-Symbol.keyFor(toto); // TypeError: toto is not a symbol
-
-var toto = "truc"
-Object.create(toto); // TypeError: "toto" is not an object or null
-
- -

Résoudre le problème

- -

Pour résoudre ce problème et écarter les cas où la valeur vaut undefined, on peut par exemple utiliser l'opérateur typeof.

- -
if (typeof toto !== 'undefined') {
-  // Désormais, on sait que toto est bien
-  // défini et on peut poursuivre.
-}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/unexpected_type/index.md b/files/fr/web/javascript/reference/errors/unexpected_type/index.md new file mode 100644 index 0000000000..6b54febd7b --- /dev/null +++ b/files/fr/web/javascript/reference/errors/unexpected_type/index.md @@ -0,0 +1,74 @@ +--- +title: 'TypeError: "x" is (not) "y"' +slug: Web/JavaScript/Reference/Errors/Unexpected_type +tags: + - Erreurs + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Unexpected_type +original_slug: Web/JavaScript/Reference/Erreurs/Unexpected_type +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: "x" is (not) "y" (Firefox)
+
+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
+
+ +

Type d'erreur

+ +

{{jsxref("TypeError")}}.

+ +

Quel est le problème ?

+ +

Un type inattendu a été rencontré. Cela se produit la plupart du temps avec les valeurs {{jsxref("undefined")}} ou {{jsxref("null")}}.

+ +

Certaines méthodes comme {{jsxref("Object.create()")}} ou {{jsxref("Symbol.keyFor()")}} ont des contraintes sur le type de valeur qui peut être passé en argument.

+ +

Exemples

+ +

Exemples invalides

+ +
// undefined et null : des valeurs
+// sur lesquelles la méthode substring
+// ne fonctionnera pas
+var toto = undefined;
+toto.substring(1); // TypeError: toto is undefined
+
+var toto = null;
+toto.substring(1); // TypeError: toto is null
+
+
+// Certaines méthodes nécessitent une valeur
+// d'un type spécifique
+var toto = {}
+Symbol.keyFor(toto); // TypeError: toto is not a symbol
+
+var toto = "truc"
+Object.create(toto); // TypeError: "toto" is not an object or null
+
+ +

Résoudre le problème

+ +

Pour résoudre ce problème et écarter les cas où la valeur vaut undefined, on peut par exemple utiliser l'opérateur typeof.

+ +
if (typeof toto !== 'undefined') {
+  // Désormais, on sait que toto est bien
+  // défini et on peut poursuivre.
+}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/unnamed_function_statement/index.html b/files/fr/web/javascript/reference/errors/unnamed_function_statement/index.html deleted file mode 100644 index 286bd78e7e..0000000000 --- a/files/fr/web/javascript/reference/errors/unnamed_function_statement/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: 'SyntaxError: function statement requires a name' -slug: Web/JavaScript/Reference/Errors/Unnamed_function_statement -tags: - - Erreurs - - JavaScript - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Unnamed_function_statement -original_slug: Web/JavaScript/Reference/Erreurs/Unnamed_function_statement ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
Syntax Error: Expected identifier (Edge)
-SyntaxError: function statement requires a name [Firefox]
-SyntaxError: Unexpected token ( [Chrome]
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Une déclaration de fonction présente dans le code requiert un nom. Il faut alors vérifier la façon dont la fonction est définie et s'il est nécessaire de lui fournir un nom ou si la fonction en question est une expression de fonction, une fonction immédiatement invoquée ou si le code de la fonction est simplement bien placé dans son contexte.

- -

Exemples

- -

Déclaration / Expression

- -

Une déclaration de fonction requiert un nom. Le fragment de code suivant ne fonctionnera pas :

- -
function () {
-  return 'Coucou monde :)';
-}
-// SyntaxError: function statement requires a name
-
- -

On peut utiliser une expression de fonction à la place :

- -
var salutations = function() {
-  return 'Coucou monde :)';
-};
- -

Si la fonction devait être appelé immédiatement, il suffit d'ajouter des parenthèses autour :

- -
(function () {
-
-})();
- -

Fonctions étiquetées

- -

Si vous utilisez des fonctions étiquetées, il faut toujours fournir un nom après le mot-clé function. Le code suivant ne fonctionnera pas :

- -
function Greeter() {
-  german: function () {
-    return "Moin";
-  }
-}
-// SyntaxError: function statement requires a name
-
- -

En revanche, ceci fonctionnera :

- -
function Greeter() {
-  german: function g() {
-    return "Moin";
-  }
-}
- -

Méthodes d'un objet

- -

Si vous souhaitez construire une méthode d'un objet, il faudra d'abord créer l'objet. Dans ce cas, la syntaxe sans le nom après le mot-clé function sera valide :

- -
var greeter = {
-  german: function () {
-    return "Moin";
-  }
-};
- -

Syntaxe et fonctions de rappel (callbacks)

- -

Lorsqu'on utilise les callbacks, il est facile de s'emmêler les pinceaux entre les parenthèses et les virgules :

- -
promise.then(
-  function() {
-    console.log("success");
-  });
-  function() {
-    console.log("error");
-}
-// SyntaxError: function statement requires a name
-
- -

La forme correcte serait :

- -
promise.then(
-  function() {
-    console.log("success");
-  },
-  function() {
-    console.log("error");
-  }
-);
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/unnamed_function_statement/index.md b/files/fr/web/javascript/reference/errors/unnamed_function_statement/index.md new file mode 100644 index 0000000000..286bd78e7e --- /dev/null +++ b/files/fr/web/javascript/reference/errors/unnamed_function_statement/index.md @@ -0,0 +1,116 @@ +--- +title: 'SyntaxError: function statement requires a name' +slug: Web/JavaScript/Reference/Errors/Unnamed_function_statement +tags: + - Erreurs + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unnamed_function_statement +original_slug: Web/JavaScript/Reference/Erreurs/Unnamed_function_statement +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
Syntax Error: Expected identifier (Edge)
+SyntaxError: function statement requires a name [Firefox]
+SyntaxError: Unexpected token ( [Chrome]
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Une déclaration de fonction présente dans le code requiert un nom. Il faut alors vérifier la façon dont la fonction est définie et s'il est nécessaire de lui fournir un nom ou si la fonction en question est une expression de fonction, une fonction immédiatement invoquée ou si le code de la fonction est simplement bien placé dans son contexte.

+ +

Exemples

+ +

Déclaration / Expression

+ +

Une déclaration de fonction requiert un nom. Le fragment de code suivant ne fonctionnera pas :

+ +
function () {
+  return 'Coucou monde :)';
+}
+// SyntaxError: function statement requires a name
+
+ +

On peut utiliser une expression de fonction à la place :

+ +
var salutations = function() {
+  return 'Coucou monde :)';
+};
+ +

Si la fonction devait être appelé immédiatement, il suffit d'ajouter des parenthèses autour :

+ +
(function () {
+
+})();
+ +

Fonctions étiquetées

+ +

Si vous utilisez des fonctions étiquetées, il faut toujours fournir un nom après le mot-clé function. Le code suivant ne fonctionnera pas :

+ +
function Greeter() {
+  german: function () {
+    return "Moin";
+  }
+}
+// SyntaxError: function statement requires a name
+
+ +

En revanche, ceci fonctionnera :

+ +
function Greeter() {
+  german: function g() {
+    return "Moin";
+  }
+}
+ +

Méthodes d'un objet

+ +

Si vous souhaitez construire une méthode d'un objet, il faudra d'abord créer l'objet. Dans ce cas, la syntaxe sans le nom après le mot-clé function sera valide :

+ +
var greeter = {
+  german: function () {
+    return "Moin";
+  }
+};
+ +

Syntaxe et fonctions de rappel (callbacks)

+ +

Lorsqu'on utilise les callbacks, il est facile de s'emmêler les pinceaux entre les parenthèses et les virgules :

+ +
promise.then(
+  function() {
+    console.log("success");
+  });
+  function() {
+    console.log("error");
+}
+// SyntaxError: function statement requires a name
+
+ +

La forme correcte serait :

+ +
promise.then(
+  function() {
+    console.log("success");
+  },
+  function() {
+    console.log("error");
+  }
+);
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/unterminated_string_literal/index.html b/files/fr/web/javascript/reference/errors/unterminated_string_literal/index.html deleted file mode 100644 index f6ad8afa09..0000000000 --- a/files/fr/web/javascript/reference/errors/unterminated_string_literal/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 'SyntaxError: unterminated string literal' -slug: Web/JavaScript/Reference/Errors/Unterminated_string_literal -tags: - - Erreurs - - JavaScript - - Reference - - SyntaxError -translation_of: Web/JavaScript/Reference/Errors/Unterminated_string_literal -original_slug: Web/JavaScript/Reference/Erreurs/Unterminated_string_literal ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
SyntaxError: Unterminated string constant (Edge)
-SyntaxError: unterminated string literal (Firefox)
-
- -

Type d'erreur

- -

{{jsxref("SyntaxError")}}

- -

Quel est le problème ?

- -

Une chaîne de caractères ({{jsxref("String")}}) n'est pas bien délimitée quelque part. Les littéraux de chaînes de caractères doivent être délimités par des simples quotes (') ou par des doubles quotes ("). Les séquences d'échappement permet de représenter dans ces chaînes de caractères. Pour réparer cette erreur :

- - - -

Exemples

- -

Gérer plusieurs lignes

- -

En JavaScript, on ne peut pas écrire une chaîne simple sur plusieurs lignes comme ceci :

- -
var longString = "This is a very long string which needs
-                  to wrap across multiple lines because
-                  otherwise my code is unreadable.";
-// SyntaxError: unterminated string literal
- -

Pour écrire une chaîne sur plusieurs lignes, on pourra utiliser :

- - - -

Voici la première variante avec l'opérateur de concaténation :

- -
var longString = "This is a very long string which needs " +
-                 "to wrap across multiple lines because " +
-                 "otherwise my code is unreadable.";
-
- -

Sinon, on peut utiliser une barre oblique inversée à la fin de chaque ligne pour indiquer qu'elle continue sur la ligne suivante. Attention, il faudra qu'il n'y ait aucun espace ou autre caractère après la barre oblique (il peut bien entendu y avoir un saut de ligne) :

- -
var longString = "This is a very long string which needs \
-to wrap across multiple lines because \
-otherwise my code is unreadable.";
-
- -

On pourra également utiliser les littéraux de gabarits qui sont pris en charge par les environnement ECMAScript 2015 :

- -
var longString = `This is a very long string which needs
-                  to wrap across multiple lines because
-                  otherwise my code is unreadable.`;
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/unterminated_string_literal/index.md b/files/fr/web/javascript/reference/errors/unterminated_string_literal/index.md new file mode 100644 index 0000000000..f6ad8afa09 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/unterminated_string_literal/index.md @@ -0,0 +1,78 @@ +--- +title: 'SyntaxError: unterminated string literal' +slug: Web/JavaScript/Reference/Errors/Unterminated_string_literal +tags: + - Erreurs + - JavaScript + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unterminated_string_literal +original_slug: Web/JavaScript/Reference/Erreurs/Unterminated_string_literal +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
SyntaxError: Unterminated string constant (Edge)
+SyntaxError: unterminated string literal (Firefox)
+
+ +

Type d'erreur

+ +

{{jsxref("SyntaxError")}}

+ +

Quel est le problème ?

+ +

Une chaîne de caractères ({{jsxref("String")}}) n'est pas bien délimitée quelque part. Les littéraux de chaînes de caractères doivent être délimités par des simples quotes (') ou par des doubles quotes ("). Les séquences d'échappement permet de représenter dans ces chaînes de caractères. Pour réparer cette erreur :

+ + + +

Exemples

+ +

Gérer plusieurs lignes

+ +

En JavaScript, on ne peut pas écrire une chaîne simple sur plusieurs lignes comme ceci :

+ +
var longString = "This is a very long string which needs
+                  to wrap across multiple lines because
+                  otherwise my code is unreadable.";
+// SyntaxError: unterminated string literal
+ +

Pour écrire une chaîne sur plusieurs lignes, on pourra utiliser :

+ + + +

Voici la première variante avec l'opérateur de concaténation :

+ +
var longString = "This is a very long string which needs " +
+                 "to wrap across multiple lines because " +
+                 "otherwise my code is unreadable.";
+
+ +

Sinon, on peut utiliser une barre oblique inversée à la fin de chaque ligne pour indiquer qu'elle continue sur la ligne suivante. Attention, il faudra qu'il n'y ait aucun espace ou autre caractère après la barre oblique (il peut bien entendu y avoir un saut de ligne) :

+ +
var longString = "This is a very long string which needs \
+to wrap across multiple lines because \
+otherwise my code is unreadable.";
+
+ +

On pourra également utiliser les littéraux de gabarits qui sont pris en charge par les environnement ECMAScript 2015 :

+ +
var longString = `This is a very long string which needs
+                  to wrap across multiple lines because
+                  otherwise my code is unreadable.`;
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/errors/var_hides_argument/index.html b/files/fr/web/javascript/reference/errors/var_hides_argument/index.html deleted file mode 100644 index dda8687316..0000000000 --- a/files/fr/web/javascript/reference/errors/var_hides_argument/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 'TypeError: variable "x" redeclares argument' -slug: Web/JavaScript/Reference/Errors/Var_hides_argument -tags: - - Erreurs - - JavaScript - - TypeError -translation_of: Web/JavaScript/Reference/Errors/Var_hides_argument -original_slug: Web/JavaScript/Reference/Erreurs/Var_hides_argument ---- -
{{jsSidebar("Errors")}}
- -

Message

- -
TypeError: variable "x" redeclares argument (Firefox)
-
- -

Type d'erreur

- -

Une erreur {{jsxref("TypeError")}}, uniquement en mode strict.

- -

Quel est le problème ?

- -

Le même nom de variable est utilisé comme nom pour un paramètre et comme nom de variable via une affectation var. Cela peut être lié à un conflit de nommage et le moteur envoie un avertissement.

- -

Cette erreur ne se produit qu'en mode strict. Pour du code non-strict, la redéclaration est ignorée silencieusement..

- -

Exemples

- -

Exemples invalides

- -

Ici, la variable arg redéclare l'argument de la fonction :

- -
"use strict";
-
-function f(arg) {
-  var arg = "foo";
-}
-
- -

Exemples valides

- -

Pour résoudre ce problème, on pourra généralement retirer l'instruction var car la variable existe déjà et peut être utilisée. Si on ne veut pas utiliser cette même variable, mieux vaudra renommer le paramètre ou la variable interne afin de lever l'ambiguïté.

- -
"use strict";
-
-function f(arg) {
-  arg = "foo";
-}
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/errors/var_hides_argument/index.md b/files/fr/web/javascript/reference/errors/var_hides_argument/index.md new file mode 100644 index 0000000000..dda8687316 --- /dev/null +++ b/files/fr/web/javascript/reference/errors/var_hides_argument/index.md @@ -0,0 +1,56 @@ +--- +title: 'TypeError: variable "x" redeclares argument' +slug: Web/JavaScript/Reference/Errors/Var_hides_argument +tags: + - Erreurs + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Var_hides_argument +original_slug: Web/JavaScript/Reference/Erreurs/Var_hides_argument +--- +
{{jsSidebar("Errors")}}
+ +

Message

+ +
TypeError: variable "x" redeclares argument (Firefox)
+
+ +

Type d'erreur

+ +

Une erreur {{jsxref("TypeError")}}, uniquement en mode strict.

+ +

Quel est le problème ?

+ +

Le même nom de variable est utilisé comme nom pour un paramètre et comme nom de variable via une affectation var. Cela peut être lié à un conflit de nommage et le moteur envoie un avertissement.

+ +

Cette erreur ne se produit qu'en mode strict. Pour du code non-strict, la redéclaration est ignorée silencieusement..

+ +

Exemples

+ +

Exemples invalides

+ +

Ici, la variable arg redéclare l'argument de la fonction :

+ +
"use strict";
+
+function f(arg) {
+  var arg = "foo";
+}
+
+ +

Exemples valides

+ +

Pour résoudre ce problème, on pourra généralement retirer l'instruction var car la variable existe déjà et peut être utilisée. Si on ne veut pas utiliser cette même variable, mieux vaudra renommer le paramètre ou la variable interne afin de lever l'ambiguïté.

+ +
"use strict";
+
+function f(arg) {
+  arg = "foo";
+}
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/arguments/@@iterator/index.html b/files/fr/web/javascript/reference/functions/arguments/@@iterator/index.html deleted file mode 100644 index 406eb7bcdc..0000000000 --- a/files/fr/web/javascript/reference/functions/arguments/@@iterator/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: arguments[@@iterator]() -slug: Web/JavaScript/Reference/Functions/arguments/@@iterator -tags: - - Déprécié - - Fonctions - - JavaScript - - Propriété - - Reference - - arguments -translation_of: Web/JavaScript/Reference/Functions/arguments/@@iterator -original_slug: Web/JavaScript/Reference/Fonctions/arguments/@@iterator ---- -
{{jsSidebar("Functions")}}
- -

La valeur initiale de la propriété @@iterator est le même objet que la fonction utilisée pour la valeur initiale de la propriété {{jsxref("Array.prototype.values")}}.

- -

Syntaxe

- -
arguments[Symbol.iterator]()
- -

Exemples

- -

Utiliser une boucle for...of

- -
function f() {
-  // votre environnement doit supporter les
-  // boucles for..of et les variables
-  // définies avec let dans les boucles
-  for (let letter of arguments) {
-    console.log(letter);
-  }
-}
-f('w', 'y', 'k', 'o', 'p');
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-createunmappedargumentsobject', ' CreateUnmappedArgumentsObject')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ES6', '#sec-createmappedargumentsobject', ' CreateMappedArgumentsObject')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-createunmappedargumentsobject', 'CreateUnmappedArgumentsObject')}}{{Spec2('ESDraft')}} 
{{SpecName('ESDraft', '#sec-createmappedargumentsobject', 'CreateMappedArgumentsObject')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- - -

{{Compat("javascript.functions.arguments.@@iterator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/arguments/@@iterator/index.md b/files/fr/web/javascript/reference/functions/arguments/@@iterator/index.md new file mode 100644 index 0000000000..406eb7bcdc --- /dev/null +++ b/files/fr/web/javascript/reference/functions/arguments/@@iterator/index.md @@ -0,0 +1,78 @@ +--- +title: arguments[@@iterator]() +slug: Web/JavaScript/Reference/Functions/arguments/@@iterator +tags: + - Déprécié + - Fonctions + - JavaScript + - Propriété + - Reference + - arguments +translation_of: Web/JavaScript/Reference/Functions/arguments/@@iterator +original_slug: Web/JavaScript/Reference/Fonctions/arguments/@@iterator +--- +
{{jsSidebar("Functions")}}
+ +

La valeur initiale de la propriété @@iterator est le même objet que la fonction utilisée pour la valeur initiale de la propriété {{jsxref("Array.prototype.values")}}.

+ +

Syntaxe

+ +
arguments[Symbol.iterator]()
+ +

Exemples

+ +

Utiliser une boucle for...of

+ +
function f() {
+  // votre environnement doit supporter les
+  // boucles for..of et les variables
+  // définies avec let dans les boucles
+  for (let letter of arguments) {
+    console.log(letter);
+  }
+}
+f('w', 'y', 'k', 'o', 'p');
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-createunmappedargumentsobject', ' CreateUnmappedArgumentsObject')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ES6', '#sec-createmappedargumentsobject', ' CreateMappedArgumentsObject')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-createunmappedargumentsobject', 'CreateUnmappedArgumentsObject')}}{{Spec2('ESDraft')}} 
{{SpecName('ESDraft', '#sec-createmappedargumentsobject', 'CreateMappedArgumentsObject')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ + +

{{Compat("javascript.functions.arguments.@@iterator")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/arguments/callee/index.html b/files/fr/web/javascript/reference/functions/arguments/callee/index.html deleted file mode 100644 index 4f69ce4490..0000000000 --- a/files/fr/web/javascript/reference/functions/arguments/callee/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: callee -slug: Web/JavaScript/Reference/Functions/arguments/callee -tags: - - Déprécié - - Fonctions - - JavaScript - - Propriété - - Reference - - arguments -translation_of: Web/JavaScript/Reference/Functions/arguments/callee -original_slug: Web/JavaScript/Reference/Fonctions/arguments/callee ---- -
{{jsSidebar("Functions")}}{{deprecated_header}}
- -

La propriété arguments.callee contient la fonction en cours d'exécution.

- -

Description

- -

callee est une propriété de l'objet arguments. Elle peut être utilisée afin de faire référence à la fonction en cours d'exécution à l'intérieur de cette fonction. Cette propriété peut etre utile lorsqu'on ne connait pas le nom de la fonction (fonction anonyme par exemple).

- -

Attention : En mode strict, ECMAScript 5 interdit la fonction arguments.callee(). Éviter de l'utiliser en utilisant un nom de fonction dans les expressions ou en utilisant une déclaration de fonction où la fonction s'appelle elle-même.

- -

Pourquoi arguments.callee a-t-il été retiré du mode strict ES5 ?

- -

(adapté d'une réponse Stack Overflow par olliej)

- -

Aux débuts de JavaScript, il n'était pas possible d'utiliser des expressions de fonction avec des noms. Il était donc impossible de faire une expression de fonction récursive.

- -

Cette syntaxe produisait le résultat escompté :

- -
function factorielle (n) {
-    return !(n > 1) ? 1 : factorielle(n - 1) * n;
-}
-
-[1,2,3,4,5].map(factorielle);
- -

mais :

- -
[1,2,3,4,5].map(function (n) {
-    return !(n > 1) ? 1 : /* que met-on ici ? */ (n - 1) * n;
-});
- -

ne fonctionnait pas. Pour que cela puisse fonctionner, on ajouta arguments.callee :

- -
[1,2,3,4,5].map(function (n) {
-    return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
-});
- -

Cependant, ce fut une mauvaise solution (avec caller également) car elle rendit impossible l'extension inline et la récursion terminale de façon générale (il est possible d'y arriver de certaines façons mais cela entraînerait nécessairement un code moins efficace). Le second problème que cela entraîne est que l'appel récursif aura une autre valeur this :

- -
var global = this;
-
-var fonctionTruc = function (recursed) {
-    if (!recursed) { return arguments.callee(true); }
-    if (this !== global) {
-        console.log("this est : " + this);
-    } else {
-        console.log("this est la variable globale");
-    }
-}
-
-fonctionTruc();
- -

ECMAScript 3 a introduit les expressions de fonctions nommées pour résoudre le problème. On peut désormais utiliser :

- -
[1,2,3,4,5].map(function factorielle (n) {
-    return !(n > 1) ? 1 : factorielle(n - 1)*n;
-});
- -

Cette méthode possède plusieurs avantages :

- - - -

Une autre fonctionnalité qui a été déprécié est : arguments.callee.caller, ou plus précisément Function.caller. Pourquoi cela ? Parce que ça permet d'avoir accès à tout moment à la fonction appelante la plus loin dans la pile d'appels. Or, comme évoqué ci-avant, cela a un effet de bord considérable : ça rend beaucoup plus complexes voire impossibles certaines optimisations. Ainsi, on ne peut pas garantir qu'une fonction f n'appellera pas une autre fonction inconnue, ce qui signifie qu'on ne peut pas utiliser l'extension inline. En résumé, cela signifie que n'importe quel site d'appel de fonction (call site) qui aurait pu être développé inline très simplement devra subir de nombreux tests :

- -
function f (a, b, c, d, e) { return a ? b * c : d * e; }
- -

Si l'interpréteur JavaScript ne peut pas garantir que l'ensemble des arguments fournis ici sont des nombres à l'instant de l'appel de la fonction, il devra insérer des vérifications pour chaque argument avant le code inline, sinon il ne pourra pas développer la fonction inline. On notera que, dans ce cas, un interpréteur intelligent devrait pouvoir réarranger les vérifications à faire afin qu'elles soient optimales et de se débarrasser des valeurs inutiles. Malgré tout, une telle optimisation ne sera pas possible dans d'autres cas, ce qui signifie que le développement inline n'est pas possible.

- -

Exemples

- -

Utiliser arguments.callee pour une fonction anonyme récursive

- -

Une fonction récursive, par définition, s'appelle elle-même. Elle fait donc généralement référence à elle-même grâce à son nom. Cependant, une fonction anonyme (créée grâce ) une expression de fonction ou au constructeur {{jsxref("Function")}}) n'a pas de nom et la seule façon d'y faire référence est donc d'utiliser arguments.callee.

- -

L'exemple qui suit illustre une fonction qui définit et renvoie une fonction factorielle. Cet exemple n'a qu'un but démonstratif et ne correspond certainement pas à ce qui serait utilisé en pratique (les expressions de fonctions pouvant être nommées).

- -
function créer() {
-   return function(n) {
-      if (n <= 1)
-         return 1;
-      return n * arguments.callee(n - 1);
-   };
-}
-
-var résultat = create()(5); // renvoie 120 (5 * 4 * 3 * 2 * 1)
- -

Une utilisation d'arguments.callee qui ne possède pas de solution de remplacement

- -

Malgré tout, dans un cas comme le suivant, il n'existe pas d'équivalent pour arguments.callee, c'est pourquoi sa déprécation pourrait être un bug (voir {{Bug("725398")}}):

- -
function créerPersonne (sIdentité) {
-    var oPersonne = new Function("alert(arguments.callee.identité);");
-    oPersonne.identité = sIdentité;
-    return oPersonne;
-}
-
-var jean = créerPersonne("Jean Biche");
-
-jean();
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.arguments.callee")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/arguments/callee/index.md b/files/fr/web/javascript/reference/functions/arguments/callee/index.md new file mode 100644 index 0000000000..4f69ce4490 --- /dev/null +++ b/files/fr/web/javascript/reference/functions/arguments/callee/index.md @@ -0,0 +1,157 @@ +--- +title: callee +slug: Web/JavaScript/Reference/Functions/arguments/callee +tags: + - Déprécié + - Fonctions + - JavaScript + - Propriété + - Reference + - arguments +translation_of: Web/JavaScript/Reference/Functions/arguments/callee +original_slug: Web/JavaScript/Reference/Fonctions/arguments/callee +--- +
{{jsSidebar("Functions")}}{{deprecated_header}}
+ +

La propriété arguments.callee contient la fonction en cours d'exécution.

+ +

Description

+ +

callee est une propriété de l'objet arguments. Elle peut être utilisée afin de faire référence à la fonction en cours d'exécution à l'intérieur de cette fonction. Cette propriété peut etre utile lorsqu'on ne connait pas le nom de la fonction (fonction anonyme par exemple).

+ +

Attention : En mode strict, ECMAScript 5 interdit la fonction arguments.callee(). Éviter de l'utiliser en utilisant un nom de fonction dans les expressions ou en utilisant une déclaration de fonction où la fonction s'appelle elle-même.

+ +

Pourquoi arguments.callee a-t-il été retiré du mode strict ES5 ?

+ +

(adapté d'une réponse Stack Overflow par olliej)

+ +

Aux débuts de JavaScript, il n'était pas possible d'utiliser des expressions de fonction avec des noms. Il était donc impossible de faire une expression de fonction récursive.

+ +

Cette syntaxe produisait le résultat escompté :

+ +
function factorielle (n) {
+    return !(n > 1) ? 1 : factorielle(n - 1) * n;
+}
+
+[1,2,3,4,5].map(factorielle);
+ +

mais :

+ +
[1,2,3,4,5].map(function (n) {
+    return !(n > 1) ? 1 : /* que met-on ici ? */ (n - 1) * n;
+});
+ +

ne fonctionnait pas. Pour que cela puisse fonctionner, on ajouta arguments.callee :

+ +
[1,2,3,4,5].map(function (n) {
+    return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
+});
+ +

Cependant, ce fut une mauvaise solution (avec caller également) car elle rendit impossible l'extension inline et la récursion terminale de façon générale (il est possible d'y arriver de certaines façons mais cela entraînerait nécessairement un code moins efficace). Le second problème que cela entraîne est que l'appel récursif aura une autre valeur this :

+ +
var global = this;
+
+var fonctionTruc = function (recursed) {
+    if (!recursed) { return arguments.callee(true); }
+    if (this !== global) {
+        console.log("this est : " + this);
+    } else {
+        console.log("this est la variable globale");
+    }
+}
+
+fonctionTruc();
+ +

ECMAScript 3 a introduit les expressions de fonctions nommées pour résoudre le problème. On peut désormais utiliser :

+ +
[1,2,3,4,5].map(function factorielle (n) {
+    return !(n > 1) ? 1 : factorielle(n - 1)*n;
+});
+ +

Cette méthode possède plusieurs avantages :

+ + + +

Une autre fonctionnalité qui a été déprécié est : arguments.callee.caller, ou plus précisément Function.caller. Pourquoi cela ? Parce que ça permet d'avoir accès à tout moment à la fonction appelante la plus loin dans la pile d'appels. Or, comme évoqué ci-avant, cela a un effet de bord considérable : ça rend beaucoup plus complexes voire impossibles certaines optimisations. Ainsi, on ne peut pas garantir qu'une fonction f n'appellera pas une autre fonction inconnue, ce qui signifie qu'on ne peut pas utiliser l'extension inline. En résumé, cela signifie que n'importe quel site d'appel de fonction (call site) qui aurait pu être développé inline très simplement devra subir de nombreux tests :

+ +
function f (a, b, c, d, e) { return a ? b * c : d * e; }
+ +

Si l'interpréteur JavaScript ne peut pas garantir que l'ensemble des arguments fournis ici sont des nombres à l'instant de l'appel de la fonction, il devra insérer des vérifications pour chaque argument avant le code inline, sinon il ne pourra pas développer la fonction inline. On notera que, dans ce cas, un interpréteur intelligent devrait pouvoir réarranger les vérifications à faire afin qu'elles soient optimales et de se débarrasser des valeurs inutiles. Malgré tout, une telle optimisation ne sera pas possible dans d'autres cas, ce qui signifie que le développement inline n'est pas possible.

+ +

Exemples

+ +

Utiliser arguments.callee pour une fonction anonyme récursive

+ +

Une fonction récursive, par définition, s'appelle elle-même. Elle fait donc généralement référence à elle-même grâce à son nom. Cependant, une fonction anonyme (créée grâce ) une expression de fonction ou au constructeur {{jsxref("Function")}}) n'a pas de nom et la seule façon d'y faire référence est donc d'utiliser arguments.callee.

+ +

L'exemple qui suit illustre une fonction qui définit et renvoie une fonction factorielle. Cet exemple n'a qu'un but démonstratif et ne correspond certainement pas à ce qui serait utilisé en pratique (les expressions de fonctions pouvant être nommées).

+ +
function créer() {
+   return function(n) {
+      if (n <= 1)
+         return 1;
+      return n * arguments.callee(n - 1);
+   };
+}
+
+var résultat = create()(5); // renvoie 120 (5 * 4 * 3 * 2 * 1)
+ +

Une utilisation d'arguments.callee qui ne possède pas de solution de remplacement

+ +

Malgré tout, dans un cas comme le suivant, il n'existe pas d'équivalent pour arguments.callee, c'est pourquoi sa déprécation pourrait être un bug (voir {{Bug("725398")}}):

+ +
function créerPersonne (sIdentité) {
+    var oPersonne = new Function("alert(arguments.callee.identité);");
+    oPersonne.identité = sIdentité;
+    return oPersonne;
+}
+
+var jean = créerPersonne("Jean Biche");
+
+jean();
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.arguments.callee")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/arguments/index.html b/files/fr/web/javascript/reference/functions/arguments/index.html deleted file mode 100644 index c996b904d3..0000000000 --- a/files/fr/web/javascript/reference/functions/arguments/index.html +++ /dev/null @@ -1,247 +0,0 @@ ---- -title: arguments -slug: Web/JavaScript/Reference/Functions/arguments -tags: - - Fonctions - - Functions - - JavaScript - - Reference - - arguments -translation_of: Web/JavaScript/Reference/Functions/arguments -original_slug: Web/JavaScript/Reference/Fonctions/arguments ---- -
{{jsSidebar("Fonctions")}}
- -

L'objet arguments est un objet, semblable à un tableau, correspondant aux arguments passés à une fonction.

- -
-

Note : Si vous pouvez utiliser les fonctionnalités ECMAScript 2015/ES6, il est préférable de manipuler les arguments avec les paramètres du reste.

-
- -
-

Note : Par « objet semblable à un tableau », on indique que l'objet arguments possède une propriété {{jsxref("Fonctions/arguments.length", "length")}} et que ses propriétés sont indexées à partir de 0 mais qu'il ne possède aucune des méthodes natives de {{jsxref("Array")}} telles que {{jsxref("Array.forEach", "forEach()")}} et {{jsxref("Array.map", "map()")}}.

-
- -
{{EmbedInteractiveExample("pages/js/functions-arguments.html")}}
- - - -
-

Note : « Variable ayant la fonction pour portée » correspond à la traduction de « Variable of the function scope » qu'il serait incorrect de traduire par « Variable de la portée de la fonction » car la portée de la fonction est la portée dans laquelle on peut appeler la fonction. Une variable locale de la fonction pourrait quant à elle avoir une portée strictement incluse dans le corps de la fonction (variable définie dans un bloc de la fonction même si cette subtilité n'existe pas en Javascript). Toute suggestion pour éviter cette tournure un peu longue sans altérer le sens est la bienvenue. (variable intrinsèque)

-
- -

Syntaxe

- -
arguments
- -

Description

- -

L'objet arguments est une variable locale (intrinsèque et inhérente aux fonctions) disponible dans toutes les fonctions (qui ne sont pas des fonctions fléchées).

- -

Vous pouvez accéder aux arguments d'une fonction à l'intérieur de celle-ci en utilisant l'objet arguments. Cet objet contient une entrée pour chaque argument passé à la fonction, l'indice de la première entrée commençant à 0. Par exemple, si une fonction est appelée avec trois arguments, on accède à ceux-ci comme suit :

- -
arguments[0]
-arguments[1]
-arguments[2]
- -

Les arguments peuvent aussi être modifiés :

- -
arguments[1] = 'nouvelle valeur';
- -

Type de l'objet arguments et liens avec Array

- -

L'objet arguments n'est pas un {{jsxref("Array")}}. Il est similaire à un Array, mais il n'a pas les propriétés d'un Array, exceptée la propriété {{jsxref("Array.length", "length")}}. Par exemple, il n'a pas la méthode {{jsxref("Array.pop", "pop()")}}. Néanmoins, il peut être converti en un vrai objet de type Array :

- -
console.log(typeof arguments); // 'object'
-var args = Array.prototype.slice.call(arguments);
-
-// Avec ECMAScript 2015 / ES6
-var args = Array.from(arguments);
-
- -

Utilisation de la décomposition avec les arguments

- -

On peut utiliser la méthode {{jsxref("Array.from()")}} ou encore l'opérateur de décomposition afin de convertir cet objet en un vrai Array :

- -
var args = Array.from(arguments);
-var args = [...arguments];
- -
-

Attention : Il est déconseillé d'utiliser slice sur les arguments car cela peut empêcher certaines optimisations des moteurs JavaScript. Pour ce scénario, on peut par exemple construire un nouveau tableau en parcourant l'objet arguments (à ce sujet, voir cette page sur les contraintes d'optimisations liées à V8). Pour cet exemple, on pourra utiliser Array.apply :

- -
var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
-
- -

L'objet arguments est disponible uniquement dans le corps d'une fonction. Tenter d'accéder à l'objet arguments en dehors de la déclaration d'une fonction renvoie une erreur.

- -

Vous pouvez utiliser l'objet arguments si vous appelez une fonction avec plus de paramètres que ceux déclarés dans sa signature. Cette technique est utile pour les fonctions qui acceptent un nombre variable d'arguments. Vous pouvez utiliser  {{jsxref("Fonctions/arguments/length", "arguments.length")}} pour déterminer le nombre de paramètres passés à la fonction, puis utiliser chaque argument en utilisant l'objet arguments. (Pour déterminer le nombre d'arguments déclarés à la définition de la fonction, il faut utiliser la propriété {{jsxref("Function.length", "length")}}.)

- -

Utiliser typeof sur arguments

- -

L'opérateur {{jsxref("Opérateurs/L_opérateur_typeof","typeof")}} renvoie "object" lorsqu'on l'utilise sur arguments

- -
console.log(typeof arguments); // "object"
- -

On peut tout à fait utiliser typeof sur chacun des arguments afin de connaître leur type respectif

- -
console.log(typeof arguments[0]); // renvoie le type du premier argument
- -

Propriétés

- -
-
{{jsxref("Fonctions/arguments/callee", "arguments.callee")}} {{Deprecated_inline}}
-
Référence à la fonction en cours d'exécution.
-
{{jsxref("Fonctions/arguments/caller", "arguments.caller")}} {{Obsolete_inline}}
-
Référence à la fonction appelante.
-
{{jsxref("Fonctions/arguments/length", "arguments.length")}}
-
Référence au nombre d'arguments passés à la fonction.
-
{{jsxref("Fonctions/arguments/@@iterator", "arguments[@@iterator]")}}
-
Renvoie un nouvel itérateur qui contient les valeurs pour chaque indice d'arguments.
-
- -

Exemples

- -

Définir une fonction de concaténation d'un nombre variable de chaînes

- -

Cet exemple définit une fonction qui concatène un nombre variable de chaînes. Le seul argument formel de la fonction est une chaîne spécifiant un séparateur inséré entre les chaînes concaténées. La fonction est définie comme suit :

- -
function myConcat(separateur) {
-  var args = Array.prototype.slice.call(arguments, 1);
-  return args.join(separateur);
-}
- -

Vous pouvez passer n'importe quel nombre d'arguments à cette fonction ; elle créera une liste en utilisant chaque argument comme un élément de la liste.

- -
// renvoie "rouge, orange, bleu"
-myConcat(", ", "rouge", "orange", "bleu");
-
-// renvoie "éléphant ; giraffe ; lion ; guépard"
-myConcat(" ; ", "elephant", "giraffe", "lion", "guépard");
-
- -

Définir une fonction de création de listes HTML

- -

Cet exemple définit une fonction qui crée des chaînes définissant des listes HTML. Le seul argument formel de la fonction est une chaîne pouvant valoir "u" (unordered), si la liste doit être sans numérotation (avec des puces), ou "o" (ordered), si la liste doit être numérotée. La fonction est définie comme suit :

- -
function liste(type) {
-  var resultat = "<" + type + "l><li>";
-  var args = Array.prototype.slice.call(arguments, 1);
-  resultat += args.join("</li><li>");
-  resultat += "</li></" + type + "l>"; // end list
-
-  return resultat;
-}
- -

Vous pouvez passer n'importe quel nombre d'arguments à cette fonction ; elle créera une liste du type indiqué en ajoutant chaque argument comme élément dans la liste. Exemple :

- -
var listeHTML = liste("u", "Un", "Deux", "Trois");
-
-/* listeHTML vaut  :
-
-"<ul><li>Un</li><li>Deux</li><li>Trois</li></ul>"
-
-*/
- -

Paramètres du reste, paramètres par défaut et décomposition

- -

L'objet arguments peut être utilisé en combinaison avec les paramètres du reste, les paramètres par défaut ou les paramètres décomposés.

- -
function toto(...args) {
-  return args;
-}
-toto(1, 2, 3); // [1, 2, 3]
-
- -

Toutefois, pour les fonctions utilisées en mode non-strict, un objet arguments n'est fourni à l'intérieur de la fonction uniquement si celle-ci n'utilise pas de paramètres du reste, pas de paramètres par défaut ou de paramètre décomposé. Par exemple, dans la fonction suivante, qui utilise un paramètre par défaut, ce sera 10 qui sera renvoyé (et non 100) :

- -
function truc(a=1) {
-  arguments[0] = 100;
-  return a;
-}
-truc(10); // 10
-
- -

Si l'objet arguments est modifié dans la fonction, cela modifiera la valeur du paramètre passé. Dans cet exemple où il n'y a ni paramètres du reste, ni paramètres par défaut, ni décomposition, le résultat sera 100 :

- -
fonction truc(a) {
-  arguments[0] = 100;
-  return a;
-}
-truc(10); // 100
- -

En fait, lorsqu'il n'y a aucun paramètre du reste, paramètre par défaut ou aucune décomposition, les arguments formels feront références aux valeurs de l'objet arguments. Lorsqu'on aura besoin d'accéder à ces valeurs, on accèdera aux valeurs contenues dans arguments et à l'inverse, lorsqu'on modifiera ces valeurs, cela modifiera le contenu d'arguments. Par exemple

- -
function func(a, b) {
-  arguments[0] = 99;
-  arguments[1] = 99;
-  console.log(a + " " +b);
-}
-
-func(1, 2); // 99 99
-
- -

ou encore :

- -
function func(a, b) {
-  a = 9;
-  b = 99;
-  console.log(arguments[0] + " " + arguments[1]);
-}
-
-func(3, 4); // 9 99
-
- -

En revanche, dès qu'on utilise des paramètres du reste, des paramètres par défaut ou la décomposition, c'est le comportement normal qui sera appliqué :

- -
function func(a, b, c = 9) {
-  arguments[0] = 99;
-  arguments[1] = 98;
-  console.log(a + " " + b);
-}
-
-func(3, 4); // 3 4
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.1
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}{{Spec2('ES5.1')}} 
{{SpecName('ES2015', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ES2015')}} 
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.arguments")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/arguments/index.md b/files/fr/web/javascript/reference/functions/arguments/index.md new file mode 100644 index 0000000000..c996b904d3 --- /dev/null +++ b/files/fr/web/javascript/reference/functions/arguments/index.md @@ -0,0 +1,247 @@ +--- +title: arguments +slug: Web/JavaScript/Reference/Functions/arguments +tags: + - Fonctions + - Functions + - JavaScript + - Reference + - arguments +translation_of: Web/JavaScript/Reference/Functions/arguments +original_slug: Web/JavaScript/Reference/Fonctions/arguments +--- +
{{jsSidebar("Fonctions")}}
+ +

L'objet arguments est un objet, semblable à un tableau, correspondant aux arguments passés à une fonction.

+ +
+

Note : Si vous pouvez utiliser les fonctionnalités ECMAScript 2015/ES6, il est préférable de manipuler les arguments avec les paramètres du reste.

+
+ +
+

Note : Par « objet semblable à un tableau », on indique que l'objet arguments possède une propriété {{jsxref("Fonctions/arguments.length", "length")}} et que ses propriétés sont indexées à partir de 0 mais qu'il ne possède aucune des méthodes natives de {{jsxref("Array")}} telles que {{jsxref("Array.forEach", "forEach()")}} et {{jsxref("Array.map", "map()")}}.

+
+ +
{{EmbedInteractiveExample("pages/js/functions-arguments.html")}}
+ + + +
+

Note : « Variable ayant la fonction pour portée » correspond à la traduction de « Variable of the function scope » qu'il serait incorrect de traduire par « Variable de la portée de la fonction » car la portée de la fonction est la portée dans laquelle on peut appeler la fonction. Une variable locale de la fonction pourrait quant à elle avoir une portée strictement incluse dans le corps de la fonction (variable définie dans un bloc de la fonction même si cette subtilité n'existe pas en Javascript). Toute suggestion pour éviter cette tournure un peu longue sans altérer le sens est la bienvenue. (variable intrinsèque)

+
+ +

Syntaxe

+ +
arguments
+ +

Description

+ +

L'objet arguments est une variable locale (intrinsèque et inhérente aux fonctions) disponible dans toutes les fonctions (qui ne sont pas des fonctions fléchées).

+ +

Vous pouvez accéder aux arguments d'une fonction à l'intérieur de celle-ci en utilisant l'objet arguments. Cet objet contient une entrée pour chaque argument passé à la fonction, l'indice de la première entrée commençant à 0. Par exemple, si une fonction est appelée avec trois arguments, on accède à ceux-ci comme suit :

+ +
arguments[0]
+arguments[1]
+arguments[2]
+ +

Les arguments peuvent aussi être modifiés :

+ +
arguments[1] = 'nouvelle valeur';
+ +

Type de l'objet arguments et liens avec Array

+ +

L'objet arguments n'est pas un {{jsxref("Array")}}. Il est similaire à un Array, mais il n'a pas les propriétés d'un Array, exceptée la propriété {{jsxref("Array.length", "length")}}. Par exemple, il n'a pas la méthode {{jsxref("Array.pop", "pop()")}}. Néanmoins, il peut être converti en un vrai objet de type Array :

+ +
console.log(typeof arguments); // 'object'
+var args = Array.prototype.slice.call(arguments);
+
+// Avec ECMAScript 2015 / ES6
+var args = Array.from(arguments);
+
+ +

Utilisation de la décomposition avec les arguments

+ +

On peut utiliser la méthode {{jsxref("Array.from()")}} ou encore l'opérateur de décomposition afin de convertir cet objet en un vrai Array :

+ +
var args = Array.from(arguments);
+var args = [...arguments];
+ +
+

Attention : Il est déconseillé d'utiliser slice sur les arguments car cela peut empêcher certaines optimisations des moteurs JavaScript. Pour ce scénario, on peut par exemple construire un nouveau tableau en parcourant l'objet arguments (à ce sujet, voir cette page sur les contraintes d'optimisations liées à V8). Pour cet exemple, on pourra utiliser Array.apply :

+ +
var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
+
+ +

L'objet arguments est disponible uniquement dans le corps d'une fonction. Tenter d'accéder à l'objet arguments en dehors de la déclaration d'une fonction renvoie une erreur.

+ +

Vous pouvez utiliser l'objet arguments si vous appelez une fonction avec plus de paramètres que ceux déclarés dans sa signature. Cette technique est utile pour les fonctions qui acceptent un nombre variable d'arguments. Vous pouvez utiliser  {{jsxref("Fonctions/arguments/length", "arguments.length")}} pour déterminer le nombre de paramètres passés à la fonction, puis utiliser chaque argument en utilisant l'objet arguments. (Pour déterminer le nombre d'arguments déclarés à la définition de la fonction, il faut utiliser la propriété {{jsxref("Function.length", "length")}}.)

+ +

Utiliser typeof sur arguments

+ +

L'opérateur {{jsxref("Opérateurs/L_opérateur_typeof","typeof")}} renvoie "object" lorsqu'on l'utilise sur arguments

+ +
console.log(typeof arguments); // "object"
+ +

On peut tout à fait utiliser typeof sur chacun des arguments afin de connaître leur type respectif

+ +
console.log(typeof arguments[0]); // renvoie le type du premier argument
+ +

Propriétés

+ +
+
{{jsxref("Fonctions/arguments/callee", "arguments.callee")}} {{Deprecated_inline}}
+
Référence à la fonction en cours d'exécution.
+
{{jsxref("Fonctions/arguments/caller", "arguments.caller")}} {{Obsolete_inline}}
+
Référence à la fonction appelante.
+
{{jsxref("Fonctions/arguments/length", "arguments.length")}}
+
Référence au nombre d'arguments passés à la fonction.
+
{{jsxref("Fonctions/arguments/@@iterator", "arguments[@@iterator]")}}
+
Renvoie un nouvel itérateur qui contient les valeurs pour chaque indice d'arguments.
+
+ +

Exemples

+ +

Définir une fonction de concaténation d'un nombre variable de chaînes

+ +

Cet exemple définit une fonction qui concatène un nombre variable de chaînes. Le seul argument formel de la fonction est une chaîne spécifiant un séparateur inséré entre les chaînes concaténées. La fonction est définie comme suit :

+ +
function myConcat(separateur) {
+  var args = Array.prototype.slice.call(arguments, 1);
+  return args.join(separateur);
+}
+ +

Vous pouvez passer n'importe quel nombre d'arguments à cette fonction ; elle créera une liste en utilisant chaque argument comme un élément de la liste.

+ +
// renvoie "rouge, orange, bleu"
+myConcat(", ", "rouge", "orange", "bleu");
+
+// renvoie "éléphant ; giraffe ; lion ; guépard"
+myConcat(" ; ", "elephant", "giraffe", "lion", "guépard");
+
+ +

Définir une fonction de création de listes HTML

+ +

Cet exemple définit une fonction qui crée des chaînes définissant des listes HTML. Le seul argument formel de la fonction est une chaîne pouvant valoir "u" (unordered), si la liste doit être sans numérotation (avec des puces), ou "o" (ordered), si la liste doit être numérotée. La fonction est définie comme suit :

+ +
function liste(type) {
+  var resultat = "<" + type + "l><li>";
+  var args = Array.prototype.slice.call(arguments, 1);
+  resultat += args.join("</li><li>");
+  resultat += "</li></" + type + "l>"; // end list
+
+  return resultat;
+}
+ +

Vous pouvez passer n'importe quel nombre d'arguments à cette fonction ; elle créera une liste du type indiqué en ajoutant chaque argument comme élément dans la liste. Exemple :

+ +
var listeHTML = liste("u", "Un", "Deux", "Trois");
+
+/* listeHTML vaut  :
+
+"<ul><li>Un</li><li>Deux</li><li>Trois</li></ul>"
+
+*/
+ +

Paramètres du reste, paramètres par défaut et décomposition

+ +

L'objet arguments peut être utilisé en combinaison avec les paramètres du reste, les paramètres par défaut ou les paramètres décomposés.

+ +
function toto(...args) {
+  return args;
+}
+toto(1, 2, 3); // [1, 2, 3]
+
+ +

Toutefois, pour les fonctions utilisées en mode non-strict, un objet arguments n'est fourni à l'intérieur de la fonction uniquement si celle-ci n'utilise pas de paramètres du reste, pas de paramètres par défaut ou de paramètre décomposé. Par exemple, dans la fonction suivante, qui utilise un paramètre par défaut, ce sera 10 qui sera renvoyé (et non 100) :

+ +
function truc(a=1) {
+  arguments[0] = 100;
+  return a;
+}
+truc(10); // 10
+
+ +

Si l'objet arguments est modifié dans la fonction, cela modifiera la valeur du paramètre passé. Dans cet exemple où il n'y a ni paramètres du reste, ni paramètres par défaut, ni décomposition, le résultat sera 100 :

+ +
fonction truc(a) {
+  arguments[0] = 100;
+  return a;
+}
+truc(10); // 100
+ +

En fait, lorsqu'il n'y a aucun paramètre du reste, paramètre par défaut ou aucune décomposition, les arguments formels feront références aux valeurs de l'objet arguments. Lorsqu'on aura besoin d'accéder à ces valeurs, on accèdera aux valeurs contenues dans arguments et à l'inverse, lorsqu'on modifiera ces valeurs, cela modifiera le contenu d'arguments. Par exemple

+ +
function func(a, b) {
+  arguments[0] = 99;
+  arguments[1] = 99;
+  console.log(a + " " +b);
+}
+
+func(1, 2); // 99 99
+
+ +

ou encore :

+ +
function func(a, b) {
+  a = 9;
+  b = 99;
+  console.log(arguments[0] + " " + arguments[1]);
+}
+
+func(3, 4); // 9 99
+
+ +

En revanche, dès qu'on utilise des paramètres du reste, des paramètres par défaut ou la décomposition, c'est le comportement normal qui sera appliqué :

+ +
function func(a, b, c = 9) {
+  arguments[0] = 99;
+  arguments[1] = 98;
+  console.log(a + " " + b);
+}
+
+func(3, 4); // 3 4
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.1
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}{{Spec2('ES5.1')}} 
{{SpecName('ES2015', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ES2015')}} 
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.arguments")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/arguments/length/index.html b/files/fr/web/javascript/reference/functions/arguments/length/index.html deleted file mode 100644 index 495b0e6f20..0000000000 --- a/files/fr/web/javascript/reference/functions/arguments/length/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: length -slug: Web/JavaScript/Reference/Functions/arguments/length -tags: - - Functions - - JavaScript - - Propriété - - Reference - - arguments -translation_of: Web/JavaScript/Reference/Functions/arguments/length -original_slug: Web/JavaScript/Reference/Fonctions/arguments/length ---- -
{{jsSideBar("Functions")}}
- -

La propriété arguments.length contient le nombre d'arguments passés à la fonction.

- -

Syntaxe

- -
arguments.length
- -

Description

- -

La propriété arguments.length fournit le nombre d'arguments qui ont été passés à la fonction. Cette quantité peut être inférieure ou supérieure au nombre de paramètres explicitement déclarés dans la définition de la fonction (voir également {{jsxref("Function.length")}}).

- -

Exemple

- -

Utiliser arguments.length

- -

Dans cet exemple, on définit une fonction qui permet d'additionner plusieurs nombres.

- -
function somme(x /*, y, z, ...*/) {
-   x = Number(x);
-   for (var i = 1; i < arguments.length; i++) {
-      x += Number(arguments[i]);
-   }
-   return x;
-}
-
- -
résultat = somme(3, 4, 5);        // renvoie 12
-résultat = somme(3, 4);           // renvoie 7
-résultat = somme(103, 104, 105);  // renvoie 312
-
- -
-

Note : arguments.length ne doit pas être confondu avec {{jsxref("Function.length")}}.

-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.1
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- - -

{{Compat("javascript.functions.arguments.length")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/arguments/length/index.md b/files/fr/web/javascript/reference/functions/arguments/length/index.md new file mode 100644 index 0000000000..495b0e6f20 --- /dev/null +++ b/files/fr/web/javascript/reference/functions/arguments/length/index.md @@ -0,0 +1,91 @@ +--- +title: length +slug: Web/JavaScript/Reference/Functions/arguments/length +tags: + - Functions + - JavaScript + - Propriété + - Reference + - arguments +translation_of: Web/JavaScript/Reference/Functions/arguments/length +original_slug: Web/JavaScript/Reference/Fonctions/arguments/length +--- +
{{jsSideBar("Functions")}}
+ +

La propriété arguments.length contient le nombre d'arguments passés à la fonction.

+ +

Syntaxe

+ +
arguments.length
+ +

Description

+ +

La propriété arguments.length fournit le nombre d'arguments qui ont été passés à la fonction. Cette quantité peut être inférieure ou supérieure au nombre de paramètres explicitement déclarés dans la définition de la fonction (voir également {{jsxref("Function.length")}}).

+ +

Exemple

+ +

Utiliser arguments.length

+ +

Dans cet exemple, on définit une fonction qui permet d'additionner plusieurs nombres.

+ +
function somme(x /*, y, z, ...*/) {
+   x = Number(x);
+   for (var i = 1; i < arguments.length; i++) {
+      x += Number(arguments[i]);
+   }
+   return x;
+}
+
+ +
résultat = somme(3, 4, 5);        // renvoie 12
+résultat = somme(3, 4);           // renvoie 7
+résultat = somme(103, 104, 105);  // renvoie 312
+
+ +
+

Note : arguments.length ne doit pas être confondu avec {{jsxref("Function.length")}}.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.1
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ + +

{{Compat("javascript.functions.arguments.length")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/arrow_functions/index.html b/files/fr/web/javascript/reference/functions/arrow_functions/index.html deleted file mode 100644 index 8beaaa3098..0000000000 --- a/files/fr/web/javascript/reference/functions/arrow_functions/index.html +++ /dev/null @@ -1,374 +0,0 @@ ---- -title: Fonctions fléchées -slug: Web/JavaScript/Reference/Functions/Arrow_functions -tags: - - ECMAScript 2015 - - Fonctions - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Functions/Arrow_functions -original_slug: Web/JavaScript/Reference/Fonctions/Fonctions_fléchées ---- -
{{jsSidebar("Functions")}}
- -

Une expression de fonction fléchée (arrow function en anglais) permet d’avoir une syntaxe plus courte que les expressions de fonction et ne possède pas ses propres valeurs pour this, arguments, super, ou new.target. Les fonctions fléchées sont souvent anonymes et ne sont pas destinées à être utilisées pour déclarer des méthodes.

- -
{{EmbedInteractiveExample("pages/js/functions-arrow.html")}}
- -

Syntaxe

- -
([param] [, param]) => {
-   instructions
-}
-
-(param1, param2, …, param2) => expression
-// équivalent à
-(param1, param2, …, param2) => {
-  return expression;
-}
-
-// Parenthèses non nécessaires quand il n'y a qu'un seul argument
-param => expression
-
-// Une fonction sans paramètre peut s'écrire avec un couple
-// de parenthèses
-() => {
-  instructions
-}
-
-// Gestion des paramètres du reste et paramètres par défaut
-(param1, param2, ...reste) => {
-  instructions
-}
-(param1 = valeurDefaut1, param2, …, paramN = valeurDefautN) => {
-  instructions
-}
-
-// Gestion de la décomposition pour la liste des paramètres
-let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
-f();
-
- -
-
param
-
Le nom d’un argument. S’il n'y a aucun argument, cela doit être indiqué par une paire de parenthèses (). S’il n'y a qu’un argument, les parenthèses ne sont pas nécessaires (ex. : toto => 1).
-
instructions ou expression
-
Plusieurs instructions doivent être encadrées par des accolades, {}. Une expression simple ne nécessite pas d’accolades. L’expression est également la valeur de retour implicite pour cette fonction.
-
- -

Description

- -

Deux facteurs sont à l’origine de la conception des fonctions fléchées : une syntaxe plus courte et l’absence de this spécifique à la fonction. Sur ce dernier point, cela signifie qu’une fonction fléchée ne lie pas son propre {{jsxref("Opérateurs/L_opérateur_this","this")}} au sein de la fonction (il en va de même avec {{jsxref("Fonctions/arguments","arguments")}}, {{jsxref("Opérateurs/super","super")}} ou {{jsxref("Opérateurs/new.target","new.target")}}).

- -
-

Note : Voir aussi l’article sur les fonctions fléchées présent sur https://tech.mozfr.org/post/2015/06/10/ES6-en-details-%3A-les-fonctions-flechees (l’article original en anglais est disponible ici).

-
- -

Syntaxe plus courte

- -

Pour des aspects fonctionnels, la légèreté de la syntaxe est bienvenue. Par exemple :

- -
var a = [
-  "We're up all night 'til the sun",
-  "We're up all night to get some",
-  "We're up all night for good fun",
-  "We're up all night to get lucky"
-];
-
-// Sans la syntaxe des fonctions fléchées
-var a2 = a.map(function (s) { return s.length });
-// [31, 30, 31, 31]
-
-// Avec, on a quelque chose de plus concis
-var a3 = a.map( s => s.length);
-// [31, 30, 31, 31]
- -

Pas de this lié à la fonction

- -

Jusqu’a l’apparition des fonctions fléchées, chaque nouvelle fonction définissait son propre {{jsxref("Opérateurs/L_opérateur_this","this")}} :

- - - -

Cela a pu entraîner des confusions lorsqu’on utilisait un style de programmation orientée objet.

- -
function Personne () {
-  // Le constructeur Personne() définit `this` comme lui-même.
-  this.age = 0;
-
-  setInterval(function grandir () {
-    // En mode non strict, la fonction grandir() définit `this`
-    // comme l'objet global et pas comme le `this` defini
-    // par le constructeur Personne().
-    this.age++;
-  }, 1000);
-}
-
-var p = new Personne();
- -

Avec ECMAScript 3/5, ce problème a pu être résolu en affectant la valeur de this à une autre variable :

- -
function Personne () {
-  var that = this;
-  that.age = 0;
-
-  setInterval(function grandir () {
-    // La fonction callback se réfère à la variable `that`
-    // qui est le contexte souhaité
-    that.age++;
-  }, 1000);
-}
- -

Autrement, on aurait pu utiliser une fonction de liaison afin que la bonne valeur this soit passée à la fonction grandir.

- -

Les fonctions fléchées ne créent pas de nouveau contexte, elles utilisent la valeur this de leur contexte. Aussi, si le mot-clé this est utilisé dans le corps de la fonction, le moteur recherchera la référence à cette valeur dans une portée parente. Le code qui suit fonctionne ainsi de la façon attendue car le this utilisé dans setInterval est le thisde la portée de Personne :

- -
function Personne () {
-  this.age = 0;
-
-  setInterval(() => {
-    this.age++;
-    // |this| fait bien référence à l'objet personne
-  }, 1000);
-}
-
-var p = new Personne();
- -

Liens avec le mode strict

- -

Ici this provient du contexte englobant, les règles du mode strict sont donc ignorées pour ce qui concerne this.

- -
var f = () => {'use strict'; return this};
-f() === window; // ou l'objet global
- -

Le reste des règles du mode strict sont appliquées normalement.

- -

Appel via {{jsxref("Function.prototype.call()")}} ou {{jsxref("Function.prototype.apply()")}}

- -

Étant donné que this provient du contexte englobant, si on invoque une fonction via la méthode call ou apply, cela ne passera que des arguments mais n’aura aucun effet sur this :

- -
var ajouter = {
-  base: 1,
-
-  add : function (a) {
-    var f = v => v + this.base;
-    return f(a);
-  },
-
-  addViaCall: function (a) {
-    var f = v => v + this.base;
-    var b = {
-      base: 2
-    };
-    return f.call(b, a);
-  }
-};
-
-console.log(ajouter.add(1));
-// Cela affichera 2 dans la console
-
-console.log(ajouter.addViaCall(1));
-// Cela affichera toujours 2
-
- -

Pas de liaison pour arguments

- -

Les fonctions fléchées n’exposent pas d’objet arguments : arguments.length, arguments[0], arguments[1], et autres ne font donc pas référence aux arguments passés à la fonction fléchés. Dans ce cas arguments est simplement une référence à la variable de même nom si elle est présente dans la portée englobante :

- -
var arguments = [1, 2, 3];
-var arr = () => arguments[0];
-
-arr(); // 1
-
-function toto () {
-  var f = (i) => arguments[0] + i;
-  // lien implicite avec arguments de toto
-  return f(2);
-}
-
-toto(3); // 5
- -

Les fonctions fléchées n’ont donc pas leur propre objet arguments, mais dans la plupart des cas, les paramètres du reste représentent une bonne alternative :

- -
function toto () {
-  var f = (...args) => args[0];
-  return f(2);
-}
-
-toto(1); // 2
- -

Les fonctions fléchées comme méthodes

- -

Comme indiqué précédemment, les fonctions fléchées sont mieux indiquées pour les fonctions qui ne sont pas des méthodes. Prenons un exemple pour illustrer ce point

- -
'use strict';
-var objet = {
-  i: 10,
-  b: () => console.log(this.i, this),
-  c: function() {
-    console.log(this.i, this);
-  }
-}
-
-objet.b();
-// affiche undefined, Window (ou l'objet global de l'environnement)
-
-objet.c();
-// affiche 10, Object {...}
- -

Utiliser prototype

- -

Les fonctions fléchées ne possèdent pas de prototype :

- -
var Toto = () => {};
-console.log(Toto.prototype);
-
- -

Utiliser le mot-clé yield

- -

Le mot-clé yield ne peut pas être utilisé dans le corps d’une fonction fléchée (sauf si cela intervient dans une autre fonction, imbriquée dans la fonction fléchée). De fait, les fonctions fléchéees ne peuvent donc pas être utilisées comme générateurs.

- -

Utiliser le mot-clé new

- -

Les fonctions fléchées ne peuvent pas être utilisées comme constructeurs et lèveront une exception si elles sont utilisées avec le mot-clé new.

- -
var Toto = () => {};
-var toto = new Toto();
-// TypeError: Toto is not a constructor
- -

Gestion du corps de la fonction

- -

Les fonctions fléchées peuvent avoir une syntaxe concise ou utiliser un bloc d’instructions classique. Cette dernière syntaxe n’a pas de valeur de retour implicite et il faut donc employer l’instruction return.

- -
// méthode concise, retour implicite
-var fonction = x => x * x;
-
-// bloc classique, retour explicite
-var fonction = (x, y) => { return x + y; }
-
- -

Renvoyer des littéraux objets

- -

Attention à bien utiliser les parenthèses lorsqu’on souhaite renvoyer des objets avec des littéraux :

- -
// fonction() renverra undefined !
-var fonction = () => { toto: 1 };
-
-// SyntaxError
-var fonction2 = () =>  { toto: function () {} };
-
- -

En effet, ici, l’analyse de l’expression trouve des blocs d’instructions au lieu de littéraux objets. Pour éviter cet effet indésirable, on pourra encadrer le littéral objet :

- -
var fonction = () => ({ toto: 1 });
- -

Sauts de ligne

- -

Il ne peut pas y avoir de saut de ligne entre les paramètres et la flèche d’une fonction fléchée.

- -
var func = ()
-            => 1; // SyntaxError: expected expression,
-                  //              got '=>'
-
- -

Ordre syntaxique

- -

La flèche utilisée pour une fonction fléchée n’est pas un opérateur. Les fonctions fléchées ont des règles spécifiques quant à leur place dans la syntaxe et interagissent différemment de la précédence des opérateurs par rapport à une fonction classique :

- -
let fonctionRappel;
-
-fonctionRappel = fonctionRappel || function () {};
-// OK
-
-fonctionRappel = fonctionRappel || () => {};
-// SyntaxError: invalid arrow-function arguments
-
-fonctionRappel = fonctionRappel || (() => {});
-// OK
-
- -

Exemples

- -
// Une fonction fléchée vide renvoie undefined
-let vide = () => {};
-
-(() => "tototruc")()
-// exemple d'une fonction immédiatement
-// invoquée (IIFE en anglais) qui renvoie
-// "tototruc"
-
-var simple = a => a > 15 ? 15 : a;
-simple(16); // 15
-simple(10); // 10
-
-var complexe = (a, b) => {
-    if (a > b) {
-        return a;
-    } else {
-        return b;
-    }
-}
-
-var arr = [5, 6, 13, 0, 1, 18, 23];
-
-var sum = arr.reduce((a, b) => a + b);
-// 66
-
-var even = arr.filter(v => v % 2 == 0);
-// [6, 0, 18]
-
-var double = arr.map(v => v * 2);
-// [10, 12, 26, 0, 2, 36, 46]
-
-// On peut aussi construire des chaînes
-// de promesses plus concises
-promise.then(a => {
-    // ...
-}).then(b => {
-    // ...
-});
-
-// Cela permet de visualiser les
-// fonctions sans paramètres
-setTimeout( () => {
-    console.log("Et voilà");
-    setTimeout( () => {
-        console.log("ensuite…");
-    }, 1);
-}, 1);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.arrow_functions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/arrow_functions/index.md b/files/fr/web/javascript/reference/functions/arrow_functions/index.md new file mode 100644 index 0000000000..8beaaa3098 --- /dev/null +++ b/files/fr/web/javascript/reference/functions/arrow_functions/index.md @@ -0,0 +1,374 @@ +--- +title: Fonctions fléchées +slug: Web/JavaScript/Reference/Functions/Arrow_functions +tags: + - ECMAScript 2015 + - Fonctions + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Functions/Arrow_functions +original_slug: Web/JavaScript/Reference/Fonctions/Fonctions_fléchées +--- +
{{jsSidebar("Functions")}}
+ +

Une expression de fonction fléchée (arrow function en anglais) permet d’avoir une syntaxe plus courte que les expressions de fonction et ne possède pas ses propres valeurs pour this, arguments, super, ou new.target. Les fonctions fléchées sont souvent anonymes et ne sont pas destinées à être utilisées pour déclarer des méthodes.

+ +
{{EmbedInteractiveExample("pages/js/functions-arrow.html")}}
+ +

Syntaxe

+ +
([param] [, param]) => {
+   instructions
+}
+
+(param1, param2, …, param2) => expression
+// équivalent à
+(param1, param2, …, param2) => {
+  return expression;
+}
+
+// Parenthèses non nécessaires quand il n'y a qu'un seul argument
+param => expression
+
+// Une fonction sans paramètre peut s'écrire avec un couple
+// de parenthèses
+() => {
+  instructions
+}
+
+// Gestion des paramètres du reste et paramètres par défaut
+(param1, param2, ...reste) => {
+  instructions
+}
+(param1 = valeurDefaut1, param2, …, paramN = valeurDefautN) => {
+  instructions
+}
+
+// Gestion de la décomposition pour la liste des paramètres
+let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
+f();
+
+ +
+
param
+
Le nom d’un argument. S’il n'y a aucun argument, cela doit être indiqué par une paire de parenthèses (). S’il n'y a qu’un argument, les parenthèses ne sont pas nécessaires (ex. : toto => 1).
+
instructions ou expression
+
Plusieurs instructions doivent être encadrées par des accolades, {}. Une expression simple ne nécessite pas d’accolades. L’expression est également la valeur de retour implicite pour cette fonction.
+
+ +

Description

+ +

Deux facteurs sont à l’origine de la conception des fonctions fléchées : une syntaxe plus courte et l’absence de this spécifique à la fonction. Sur ce dernier point, cela signifie qu’une fonction fléchée ne lie pas son propre {{jsxref("Opérateurs/L_opérateur_this","this")}} au sein de la fonction (il en va de même avec {{jsxref("Fonctions/arguments","arguments")}}, {{jsxref("Opérateurs/super","super")}} ou {{jsxref("Opérateurs/new.target","new.target")}}).

+ +
+

Note : Voir aussi l’article sur les fonctions fléchées présent sur https://tech.mozfr.org/post/2015/06/10/ES6-en-details-%3A-les-fonctions-flechees (l’article original en anglais est disponible ici).

+
+ +

Syntaxe plus courte

+ +

Pour des aspects fonctionnels, la légèreté de la syntaxe est bienvenue. Par exemple :

+ +
var a = [
+  "We're up all night 'til the sun",
+  "We're up all night to get some",
+  "We're up all night for good fun",
+  "We're up all night to get lucky"
+];
+
+// Sans la syntaxe des fonctions fléchées
+var a2 = a.map(function (s) { return s.length });
+// [31, 30, 31, 31]
+
+// Avec, on a quelque chose de plus concis
+var a3 = a.map( s => s.length);
+// [31, 30, 31, 31]
+ +

Pas de this lié à la fonction

+ +

Jusqu’a l’apparition des fonctions fléchées, chaque nouvelle fonction définissait son propre {{jsxref("Opérateurs/L_opérateur_this","this")}} :

+ + + +

Cela a pu entraîner des confusions lorsqu’on utilisait un style de programmation orientée objet.

+ +
function Personne () {
+  // Le constructeur Personne() définit `this` comme lui-même.
+  this.age = 0;
+
+  setInterval(function grandir () {
+    // En mode non strict, la fonction grandir() définit `this`
+    // comme l'objet global et pas comme le `this` defini
+    // par le constructeur Personne().
+    this.age++;
+  }, 1000);
+}
+
+var p = new Personne();
+ +

Avec ECMAScript 3/5, ce problème a pu être résolu en affectant la valeur de this à une autre variable :

+ +
function Personne () {
+  var that = this;
+  that.age = 0;
+
+  setInterval(function grandir () {
+    // La fonction callback se réfère à la variable `that`
+    // qui est le contexte souhaité
+    that.age++;
+  }, 1000);
+}
+ +

Autrement, on aurait pu utiliser une fonction de liaison afin que la bonne valeur this soit passée à la fonction grandir.

+ +

Les fonctions fléchées ne créent pas de nouveau contexte, elles utilisent la valeur this de leur contexte. Aussi, si le mot-clé this est utilisé dans le corps de la fonction, le moteur recherchera la référence à cette valeur dans une portée parente. Le code qui suit fonctionne ainsi de la façon attendue car le this utilisé dans setInterval est le thisde la portée de Personne :

+ +
function Personne () {
+  this.age = 0;
+
+  setInterval(() => {
+    this.age++;
+    // |this| fait bien référence à l'objet personne
+  }, 1000);
+}
+
+var p = new Personne();
+ +

Liens avec le mode strict

+ +

Ici this provient du contexte englobant, les règles du mode strict sont donc ignorées pour ce qui concerne this.

+ +
var f = () => {'use strict'; return this};
+f() === window; // ou l'objet global
+ +

Le reste des règles du mode strict sont appliquées normalement.

+ +

Appel via {{jsxref("Function.prototype.call()")}} ou {{jsxref("Function.prototype.apply()")}}

+ +

Étant donné que this provient du contexte englobant, si on invoque une fonction via la méthode call ou apply, cela ne passera que des arguments mais n’aura aucun effet sur this :

+ +
var ajouter = {
+  base: 1,
+
+  add : function (a) {
+    var f = v => v + this.base;
+    return f(a);
+  },
+
+  addViaCall: function (a) {
+    var f = v => v + this.base;
+    var b = {
+      base: 2
+    };
+    return f.call(b, a);
+  }
+};
+
+console.log(ajouter.add(1));
+// Cela affichera 2 dans la console
+
+console.log(ajouter.addViaCall(1));
+// Cela affichera toujours 2
+
+ +

Pas de liaison pour arguments

+ +

Les fonctions fléchées n’exposent pas d’objet arguments : arguments.length, arguments[0], arguments[1], et autres ne font donc pas référence aux arguments passés à la fonction fléchés. Dans ce cas arguments est simplement une référence à la variable de même nom si elle est présente dans la portée englobante :

+ +
var arguments = [1, 2, 3];
+var arr = () => arguments[0];
+
+arr(); // 1
+
+function toto () {
+  var f = (i) => arguments[0] + i;
+  // lien implicite avec arguments de toto
+  return f(2);
+}
+
+toto(3); // 5
+ +

Les fonctions fléchées n’ont donc pas leur propre objet arguments, mais dans la plupart des cas, les paramètres du reste représentent une bonne alternative :

+ +
function toto () {
+  var f = (...args) => args[0];
+  return f(2);
+}
+
+toto(1); // 2
+ +

Les fonctions fléchées comme méthodes

+ +

Comme indiqué précédemment, les fonctions fléchées sont mieux indiquées pour les fonctions qui ne sont pas des méthodes. Prenons un exemple pour illustrer ce point

+ +
'use strict';
+var objet = {
+  i: 10,
+  b: () => console.log(this.i, this),
+  c: function() {
+    console.log(this.i, this);
+  }
+}
+
+objet.b();
+// affiche undefined, Window (ou l'objet global de l'environnement)
+
+objet.c();
+// affiche 10, Object {...}
+ +

Utiliser prototype

+ +

Les fonctions fléchées ne possèdent pas de prototype :

+ +
var Toto = () => {};
+console.log(Toto.prototype);
+
+ +

Utiliser le mot-clé yield

+ +

Le mot-clé yield ne peut pas être utilisé dans le corps d’une fonction fléchée (sauf si cela intervient dans une autre fonction, imbriquée dans la fonction fléchée). De fait, les fonctions fléchéees ne peuvent donc pas être utilisées comme générateurs.

+ +

Utiliser le mot-clé new

+ +

Les fonctions fléchées ne peuvent pas être utilisées comme constructeurs et lèveront une exception si elles sont utilisées avec le mot-clé new.

+ +
var Toto = () => {};
+var toto = new Toto();
+// TypeError: Toto is not a constructor
+ +

Gestion du corps de la fonction

+ +

Les fonctions fléchées peuvent avoir une syntaxe concise ou utiliser un bloc d’instructions classique. Cette dernière syntaxe n’a pas de valeur de retour implicite et il faut donc employer l’instruction return.

+ +
// méthode concise, retour implicite
+var fonction = x => x * x;
+
+// bloc classique, retour explicite
+var fonction = (x, y) => { return x + y; }
+
+ +

Renvoyer des littéraux objets

+ +

Attention à bien utiliser les parenthèses lorsqu’on souhaite renvoyer des objets avec des littéraux :

+ +
// fonction() renverra undefined !
+var fonction = () => { toto: 1 };
+
+// SyntaxError
+var fonction2 = () =>  { toto: function () {} };
+
+ +

En effet, ici, l’analyse de l’expression trouve des blocs d’instructions au lieu de littéraux objets. Pour éviter cet effet indésirable, on pourra encadrer le littéral objet :

+ +
var fonction = () => ({ toto: 1 });
+ +

Sauts de ligne

+ +

Il ne peut pas y avoir de saut de ligne entre les paramètres et la flèche d’une fonction fléchée.

+ +
var func = ()
+            => 1; // SyntaxError: expected expression,
+                  //              got '=>'
+
+ +

Ordre syntaxique

+ +

La flèche utilisée pour une fonction fléchée n’est pas un opérateur. Les fonctions fléchées ont des règles spécifiques quant à leur place dans la syntaxe et interagissent différemment de la précédence des opérateurs par rapport à une fonction classique :

+ +
let fonctionRappel;
+
+fonctionRappel = fonctionRappel || function () {};
+// OK
+
+fonctionRappel = fonctionRappel || () => {};
+// SyntaxError: invalid arrow-function arguments
+
+fonctionRappel = fonctionRappel || (() => {});
+// OK
+
+ +

Exemples

+ +
// Une fonction fléchée vide renvoie undefined
+let vide = () => {};
+
+(() => "tototruc")()
+// exemple d'une fonction immédiatement
+// invoquée (IIFE en anglais) qui renvoie
+// "tototruc"
+
+var simple = a => a > 15 ? 15 : a;
+simple(16); // 15
+simple(10); // 10
+
+var complexe = (a, b) => {
+    if (a > b) {
+        return a;
+    } else {
+        return b;
+    }
+}
+
+var arr = [5, 6, 13, 0, 1, 18, 23];
+
+var sum = arr.reduce((a, b) => a + b);
+// 66
+
+var even = arr.filter(v => v % 2 == 0);
+// [6, 0, 18]
+
+var double = arr.map(v => v * 2);
+// [10, 12, 26, 0, 2, 36, 46]
+
+// On peut aussi construire des chaînes
+// de promesses plus concises
+promise.then(a => {
+    // ...
+}).then(b => {
+    // ...
+});
+
+// Cela permet de visualiser les
+// fonctions sans paramètres
+setTimeout( () => {
+    console.log("Et voilà");
+    setTimeout( () => {
+        console.log("ensuite…");
+    }, 1);
+}, 1);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.arrow_functions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/default_parameters/index.html b/files/fr/web/javascript/reference/functions/default_parameters/index.html deleted file mode 100644 index abcdcae567..0000000000 --- a/files/fr/web/javascript/reference/functions/default_parameters/index.html +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: Valeurs par défaut des arguments -slug: Web/JavaScript/Reference/Functions/Default_parameters -tags: - - ECMAScript 2015 - - Fonctions - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Functions/Default_parameters -original_slug: Web/JavaScript/Reference/Fonctions/Valeurs_par_défaut_des_arguments ---- -
{{jsSidebar("Functions")}}
- -

Cette syntaxe permet d'initialiser des paramètres lors de l'appel de la fonction si aucune valeur n'est passée ou si c'est la valeur {{jsxref("undefined")}} qui est passée.

- - - -
{{EmbedInteractiveExample("pages/js/functions-default.html")}}
- -

Syntaxe

- -
function [nom]([param1[ = valeurParDéfaut1 ][, ..., paramN[ = valeurParDéfautN ]]]) {
-   instructions
-}
-
- -

Description

- -

En JavaScript, par défaut, la valeur des paramètres d'une fonction sera undefined. Malgré tout, il peut être assez utile de pouvoir définir d'autres valeurs par défaut.

- -

Auparavant, pour définir une valeur par défaut pour un paramètre, il fallait tester s'il valait undefined et lui affecter une valeur choisie le cas échéant. Dans l'exemple qui suit, le paramètre b n'a pas de valeur fournie lors de l'appel, aussi si on avait utilisé undefined dans la multiplication, la valeur retournée aurait été NaN. Aussi, dans la deuxième ligne du code, on prévoit ce cas :

- -
function multiplier(a, b) {
-  var b = (typeof b !== 'undefined') ? b : 1;
-
-  return a * b;
-}
-
-multiplier(5, 2); // 10
-multiplier(5, 1); // 5
-multiplier(5);    // 5
-
- -

Grâce aux paramètres par défaut qui existent depuis ECMAScript 2015 (ES6), on peut se passer de cette vérification et alléger le code de la fonction :

- -
function multiplier(a, b = 1) {
-  return a * b;
-}
-
-multiplier(5, 2); // 10
-multiplier(5, 1); // 5
-multiplier(5, undefined); // 5
-multiplier(5); // 5
- -

Exemples

- -

Passer undefined en paramètre

- -

Dans l'exemple qui suit, le deuxième appel à la fonction fait explicitement appel à undefined. La valeur par défaut sera utilisée, y compris dans ce cas (en revanche, ce ne serait pas vrai pour null ou les autres valeurs équivalentes à false dans un contexte booléen).

- -
function test(num = 1) {
-  console.log(typeof num);
-}
-
-test();           // number (num vaut 1)
-test(undefined);  // number (num vaut 1 également)
-test("");         // string (num vaut "")
-test(null);       // object (num vaut null)
-
- -

Évaluation à l'appel

- -

L'argument par défaut est évalué à l'instant de l'appel. Ainsi, à la différence d'autres langages comme Python, un nouvel objet est créé à chaque appel de la fonction.

- -
function append(valeur, tableau = []) {
-  tableau.push(valeur);
-  return tableau;
-}
-
-append(1); //[1]
-append(2); //[2], et non [1, 2]
-
-
- -

Cela est également valable pour les fonctions et les variables

- -
function appelQqc(truc = qqc()) { return truc }
-
-appelQqc(); //lève une ReferenceError
-
-let qqc = () => "machin"
-
-appelQqc(); // "machin"
-
- -

Les paramètres par défaut sont disponibles à la suite

- -

Les paramètres déjà rencontrés dans la définition peuvent être utilisés comme paramètres par défaut dans la suite de la définition :

- -
function salutation(nom, salut, message = salut + ' ' + nom){
-    return [nom, salut, message];
-}
-
-salutation('David', 'Coucou');
-// ["David", "Coucou", "Coucou David"]
-
-salutation('David', 'Coucou', 'Bon anniversaire !');
-// ["David", "Coucou", "Bon anniversaire !"]
- -

On peut utiliser cette fonctionnalité afin de gérer beaucoup de cas aux limites :

- -
function go() {
-  return ":P"
-}
-
-function avecDéfaut(a, b = 5, c = b, d = go(), e = this,
-                      f = arguments, g = this.value) {
-  return [a,b,c,d,e,f,g];
-}
-function sansDéfaut(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];
-}
-
-avecDéfaut.call({value:"=^_^="});
-// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
-
-
-sansDéfaut.call({value:"=^_^="});
-// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
-
- -

Les fonctions définies dans le corps d'une fonction

- -

À partir de Gecko 33 {{geckoRelease(33)}}. Les fonctions déclarées dans le corps de la fonction ne peuvent pas servir comme valeurs par défaut, cela lèvera une exception {{jsxref("ReferenceError")}} (plus précisément une {{jsxref("TypeError")}} avec SpiderMonkey, voir le {{bug(1022967)}}). Les paramètres par défaut sont exécutés en premier, les déclarations de fonctions présentes dans le corps de la fonction sont évaluées ensuite.

- -
// Ne fonctionnera pas, entraîne une ReferenceError.
-function f(a = go()) {
-  function go(){return ":P"}
-}
-
- -

Utilisation de paramètres sans valeur par défaut après les paramètres par défaut

- -

Avant Gecko 26 ({{geckoRelease(26)}}, le code suivant aurait entraîné une exception {{jsxref("SyntaxError")}}. Cela a été corrigé avec le bug {{bug(777060)}}. Les paramètres sont toujours ordonnés de gauche à droite et les valeurs par défaut sont surchargées s'ils viennent avant les autres paramètres :

- -
function f(x=1, y) {
-  return [x, y];
-}
-
-f();  // [1, undefined]
-f(2); // [2, undefined]
-
- -

Paramètre par défaut et décomposition des paramètres

- -

Il est possible d'utiliser les valeurs par défaut avec la syntaxe de décomposition :

- -
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
-  return x + y + z;
-}
-
-f(); // 6
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.default_parameters")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/default_parameters/index.md b/files/fr/web/javascript/reference/functions/default_parameters/index.md new file mode 100644 index 0000000000..abcdcae567 --- /dev/null +++ b/files/fr/web/javascript/reference/functions/default_parameters/index.md @@ -0,0 +1,211 @@ +--- +title: Valeurs par défaut des arguments +slug: Web/JavaScript/Reference/Functions/Default_parameters +tags: + - ECMAScript 2015 + - Fonctions + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Functions/Default_parameters +original_slug: Web/JavaScript/Reference/Fonctions/Valeurs_par_défaut_des_arguments +--- +
{{jsSidebar("Functions")}}
+ +

Cette syntaxe permet d'initialiser des paramètres lors de l'appel de la fonction si aucune valeur n'est passée ou si c'est la valeur {{jsxref("undefined")}} qui est passée.

+ + + +
{{EmbedInteractiveExample("pages/js/functions-default.html")}}
+ +

Syntaxe

+ +
function [nom]([param1[ = valeurParDéfaut1 ][, ..., paramN[ = valeurParDéfautN ]]]) {
+   instructions
+}
+
+ +

Description

+ +

En JavaScript, par défaut, la valeur des paramètres d'une fonction sera undefined. Malgré tout, il peut être assez utile de pouvoir définir d'autres valeurs par défaut.

+ +

Auparavant, pour définir une valeur par défaut pour un paramètre, il fallait tester s'il valait undefined et lui affecter une valeur choisie le cas échéant. Dans l'exemple qui suit, le paramètre b n'a pas de valeur fournie lors de l'appel, aussi si on avait utilisé undefined dans la multiplication, la valeur retournée aurait été NaN. Aussi, dans la deuxième ligne du code, on prévoit ce cas :

+ +
function multiplier(a, b) {
+  var b = (typeof b !== 'undefined') ? b : 1;
+
+  return a * b;
+}
+
+multiplier(5, 2); // 10
+multiplier(5, 1); // 5
+multiplier(5);    // 5
+
+ +

Grâce aux paramètres par défaut qui existent depuis ECMAScript 2015 (ES6), on peut se passer de cette vérification et alléger le code de la fonction :

+ +
function multiplier(a, b = 1) {
+  return a * b;
+}
+
+multiplier(5, 2); // 10
+multiplier(5, 1); // 5
+multiplier(5, undefined); // 5
+multiplier(5); // 5
+ +

Exemples

+ +

Passer undefined en paramètre

+ +

Dans l'exemple qui suit, le deuxième appel à la fonction fait explicitement appel à undefined. La valeur par défaut sera utilisée, y compris dans ce cas (en revanche, ce ne serait pas vrai pour null ou les autres valeurs équivalentes à false dans un contexte booléen).

+ +
function test(num = 1) {
+  console.log(typeof num);
+}
+
+test();           // number (num vaut 1)
+test(undefined);  // number (num vaut 1 également)
+test("");         // string (num vaut "")
+test(null);       // object (num vaut null)
+
+ +

Évaluation à l'appel

+ +

L'argument par défaut est évalué à l'instant de l'appel. Ainsi, à la différence d'autres langages comme Python, un nouvel objet est créé à chaque appel de la fonction.

+ +
function append(valeur, tableau = []) {
+  tableau.push(valeur);
+  return tableau;
+}
+
+append(1); //[1]
+append(2); //[2], et non [1, 2]
+
+
+ +

Cela est également valable pour les fonctions et les variables

+ +
function appelQqc(truc = qqc()) { return truc }
+
+appelQqc(); //lève une ReferenceError
+
+let qqc = () => "machin"
+
+appelQqc(); // "machin"
+
+ +

Les paramètres par défaut sont disponibles à la suite

+ +

Les paramètres déjà rencontrés dans la définition peuvent être utilisés comme paramètres par défaut dans la suite de la définition :

+ +
function salutation(nom, salut, message = salut + ' ' + nom){
+    return [nom, salut, message];
+}
+
+salutation('David', 'Coucou');
+// ["David", "Coucou", "Coucou David"]
+
+salutation('David', 'Coucou', 'Bon anniversaire !');
+// ["David", "Coucou", "Bon anniversaire !"]
+ +

On peut utiliser cette fonctionnalité afin de gérer beaucoup de cas aux limites :

+ +
function go() {
+  return ":P"
+}
+
+function avecDéfaut(a, b = 5, c = b, d = go(), e = this,
+                      f = arguments, g = this.value) {
+  return [a,b,c,d,e,f,g];
+}
+function sansDéfaut(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];
+}
+
+avecDéfaut.call({value:"=^_^="});
+// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
+
+
+sansDéfaut.call({value:"=^_^="});
+// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
+
+ +

Les fonctions définies dans le corps d'une fonction

+ +

À partir de Gecko 33 {{geckoRelease(33)}}. Les fonctions déclarées dans le corps de la fonction ne peuvent pas servir comme valeurs par défaut, cela lèvera une exception {{jsxref("ReferenceError")}} (plus précisément une {{jsxref("TypeError")}} avec SpiderMonkey, voir le {{bug(1022967)}}). Les paramètres par défaut sont exécutés en premier, les déclarations de fonctions présentes dans le corps de la fonction sont évaluées ensuite.

+ +
// Ne fonctionnera pas, entraîne une ReferenceError.
+function f(a = go()) {
+  function go(){return ":P"}
+}
+
+ +

Utilisation de paramètres sans valeur par défaut après les paramètres par défaut

+ +

Avant Gecko 26 ({{geckoRelease(26)}}, le code suivant aurait entraîné une exception {{jsxref("SyntaxError")}}. Cela a été corrigé avec le bug {{bug(777060)}}. Les paramètres sont toujours ordonnés de gauche à droite et les valeurs par défaut sont surchargées s'ils viennent avant les autres paramètres :

+ +
function f(x=1, y) {
+  return [x, y];
+}
+
+f();  // [1, undefined]
+f(2); // [2, undefined]
+
+ +

Paramètre par défaut et décomposition des paramètres

+ +

Il est possible d'utiliser les valeurs par défaut avec la syntaxe de décomposition :

+ +
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
+  return x + y + z;
+}
+
+f(); // 6
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.default_parameters")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/get/index.html b/files/fr/web/javascript/reference/functions/get/index.html deleted file mode 100644 index b999d2d36a..0000000000 --- a/files/fr/web/javascript/reference/functions/get/index.html +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: L'opérateur get -slug: Web/JavaScript/Reference/Functions/get -tags: - - ECMAScript 2015 - - ECMAScript 5 - - Functions - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Functions/get -original_slug: Web/JavaScript/Reference/Fonctions/get ---- -
{{jsSidebar("Functions")}}
- -

La syntaxe get permet de lier une propriété d'un objet à une fonction qui sera appelée lorsqu'on accédera à la propriété.

- -
{{EmbedInteractiveExample("pages/js/functions-getter.html")}}
- -

Syntaxe

- -
{get prop() { ... } }
-{get [expression]() { ... } }
- -

Paramètres

- -
-
prop
-
Le nom de la propriété à lier à la fonction.
-
expression
-
Avec ECMAScript 2015, il est également possible d'utiliser des expressions renvoyant un nom de propriété calculé pour le lier à une fonction.
-
- -

Description

- -

Il est parfois utile de créer une propriété qui renvoie une valeur dynamique calculée, ou de ne pas avoir recours à l'appel explicite d'une méthode pour renvoyer le statut d'une variable interne. En JavaScript, il est possible de faire cela en utilisant un accesseur. Il n'est pas possible d'avoir simultanément un accesseur assimilé à une propriété et d'avoir cette propriété initialisée à une valeur, mais il est possible d'utiliser un accesseur et un {{jsxref("Fonctions/set","mutateur","",1)}} pour créer une sorte de pseudo-propriété.

- -

On notera que l'opérateur get :

- - - -

Un accesseur peut être supprimé grâce à l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}}.

- -

Exemples

- -

Définir un accesseur avec l'opérateur get

- -

Ce code va créer une pseudo-propriété dernier de l'objet o qui va retourner la dernière entrée du tableau o.journal :

- -
var o = {
-  get dernier() {
-    if (this.journal.length > 0) {
-      return this.journal[this.journal.length - 1];
-    }
-    else {
-      return null;
-    }
-  },
-  journal: ["toto","actu"]
-}
-console.log(o.dernier); // "actu"
-
- -

Notez qu'essayer d'assigner à dernier une valeur ne le modifiera pas.

- -

Supprimer un accesseur avec l'opérateur delete

- -
delete o.dernier;
-
- -

Définir un accesseur sur des objets existants grâce à defineProperty

- -

Afin d'ajouter un accesseur à un objet qui existe déjà, on peut utiliser la méthode {{jsxref("Object.defineProperty()")}}.

- -
var o = { a:0 }
-
-Object.defineProperty(o, "b", { get: function () { return this.a + 1; } });
-
-console.log(o.b) // Utilise l'accesseur qui génère a + 1 (qui correspond à 1)
- -

Utiliser un nom de propriété calculé

- -
var expr = "toto";
-
-var obj = {
-  get [expr]() { return "truc"; }
-};
-
-console.log(obj.toto); // "truc"
- -

Accesseurs mémoïsés

- -

Les accesseurs permettent de définir des propriétés sur un objet mais ils ne calculent pas la valeur de la propriété tant qu'il n'y a pas d'accès envers celle-ci. Un accesseur délègue le coût de calcul jusqu'au moment où la valeur est vraiment nécessaire (si cette dernière n'est jamais utilisée, cela ne coûte alors rien).

- -

Une technique supplémentaire pour optimiser ou retarder le calcul d'une valeur d'une propriété et de la mettre en cache pour les accès ultérieurs consiste à utiliser des accesseurs intelligents « mémoïsés ». La valeur est calculée lors du premier appel de l'accesseur puis est mise en cache afin que les appels ultérieurs renvoient la valeur en cache sans la recalculer. Cette méthode peut s'avérer utile dans plusieurs situations :

- - - -

Cela signifie qu'un tel accesseur ne doit pas être utilisé si la valeur peut être modifiée au cours du temps. En effet, avec la définition qu'on vient de lui donner, un tel accesseur ne recalculera pas la valeur.

- -

Dans l'exemple suivant, l'objet possède un accesseur en propriété propre. Lors de l'accès à la propriété, la propriété est retirée de l'objet puis réajoutée mais sous forme d'une propriété de donnée (et non d'un accesseur). Enfin, la valeur est renvoyée :

- -
get notifier() {
-  delete this.notifier;
-  return this.notifier = document.getElementById("bookmarked-notification-anchor");
-},
- -

Cet exemple est utilisé dans le code de Firefox, notamment dans le code du module XPCOMUtils.jsm qui définit la fonction defineLazyGetter().

- -

get ou defineProperty ?

- -

Bien que le mot-clé get et la méthode {{jsxref("Object.defineProperty()")}} aient des résultats similaires, il subsiste une différence lorsqu'on utilise les classes.

- -

Lorsqu'on utilise get, la propriété sera définie sur le prototype de l'objet. Avec {{jsxref("Object.defineProperty()")}}, la propriété sera définie sur l'instance à laquelle la méthode s'applique.

- -
class Exemple {
-  get coucou() {
-    return 'monde';
-  }
-}
-
-const obj = new Exemple();
-console.log(obj.coucou);
-// "monde"
-console.log(Object.getOwnPropertyDescriptor(obj, 'coucou'));
-// undefined
-console.log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), 'coucou'));
-// { configurable: true, enumerable: false, get: function get coucou() { return 'monde'; }, set: undefined }
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2015')}}Ajout des noms de propriétés calculés.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.get")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/get/index.md b/files/fr/web/javascript/reference/functions/get/index.md new file mode 100644 index 0000000000..b999d2d36a --- /dev/null +++ b/files/fr/web/javascript/reference/functions/get/index.md @@ -0,0 +1,177 @@ +--- +title: L'opérateur get +slug: Web/JavaScript/Reference/Functions/get +tags: + - ECMAScript 2015 + - ECMAScript 5 + - Functions + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Functions/get +original_slug: Web/JavaScript/Reference/Fonctions/get +--- +
{{jsSidebar("Functions")}}
+ +

La syntaxe get permet de lier une propriété d'un objet à une fonction qui sera appelée lorsqu'on accédera à la propriété.

+ +
{{EmbedInteractiveExample("pages/js/functions-getter.html")}}
+ +

Syntaxe

+ +
{get prop() { ... } }
+{get [expression]() { ... } }
+ +

Paramètres

+ +
+
prop
+
Le nom de la propriété à lier à la fonction.
+
expression
+
Avec ECMAScript 2015, il est également possible d'utiliser des expressions renvoyant un nom de propriété calculé pour le lier à une fonction.
+
+ +

Description

+ +

Il est parfois utile de créer une propriété qui renvoie une valeur dynamique calculée, ou de ne pas avoir recours à l'appel explicite d'une méthode pour renvoyer le statut d'une variable interne. En JavaScript, il est possible de faire cela en utilisant un accesseur. Il n'est pas possible d'avoir simultanément un accesseur assimilé à une propriété et d'avoir cette propriété initialisée à une valeur, mais il est possible d'utiliser un accesseur et un {{jsxref("Fonctions/set","mutateur","",1)}} pour créer une sorte de pseudo-propriété.

+ +

On notera que l'opérateur get :

+ + + +

Un accesseur peut être supprimé grâce à l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}}.

+ +

Exemples

+ +

Définir un accesseur avec l'opérateur get

+ +

Ce code va créer une pseudo-propriété dernier de l'objet o qui va retourner la dernière entrée du tableau o.journal :

+ +
var o = {
+  get dernier() {
+    if (this.journal.length > 0) {
+      return this.journal[this.journal.length - 1];
+    }
+    else {
+      return null;
+    }
+  },
+  journal: ["toto","actu"]
+}
+console.log(o.dernier); // "actu"
+
+ +

Notez qu'essayer d'assigner à dernier une valeur ne le modifiera pas.

+ +

Supprimer un accesseur avec l'opérateur delete

+ +
delete o.dernier;
+
+ +

Définir un accesseur sur des objets existants grâce à defineProperty

+ +

Afin d'ajouter un accesseur à un objet qui existe déjà, on peut utiliser la méthode {{jsxref("Object.defineProperty()")}}.

+ +
var o = { a:0 }
+
+Object.defineProperty(o, "b", { get: function () { return this.a + 1; } });
+
+console.log(o.b) // Utilise l'accesseur qui génère a + 1 (qui correspond à 1)
+ +

Utiliser un nom de propriété calculé

+ +
var expr = "toto";
+
+var obj = {
+  get [expr]() { return "truc"; }
+};
+
+console.log(obj.toto); // "truc"
+ +

Accesseurs mémoïsés

+ +

Les accesseurs permettent de définir des propriétés sur un objet mais ils ne calculent pas la valeur de la propriété tant qu'il n'y a pas d'accès envers celle-ci. Un accesseur délègue le coût de calcul jusqu'au moment où la valeur est vraiment nécessaire (si cette dernière n'est jamais utilisée, cela ne coûte alors rien).

+ +

Une technique supplémentaire pour optimiser ou retarder le calcul d'une valeur d'une propriété et de la mettre en cache pour les accès ultérieurs consiste à utiliser des accesseurs intelligents « mémoïsés ». La valeur est calculée lors du premier appel de l'accesseur puis est mise en cache afin que les appels ultérieurs renvoient la valeur en cache sans la recalculer. Cette méthode peut s'avérer utile dans plusieurs situations :

+ + + +

Cela signifie qu'un tel accesseur ne doit pas être utilisé si la valeur peut être modifiée au cours du temps. En effet, avec la définition qu'on vient de lui donner, un tel accesseur ne recalculera pas la valeur.

+ +

Dans l'exemple suivant, l'objet possède un accesseur en propriété propre. Lors de l'accès à la propriété, la propriété est retirée de l'objet puis réajoutée mais sous forme d'une propriété de donnée (et non d'un accesseur). Enfin, la valeur est renvoyée :

+ +
get notifier() {
+  delete this.notifier;
+  return this.notifier = document.getElementById("bookmarked-notification-anchor");
+},
+ +

Cet exemple est utilisé dans le code de Firefox, notamment dans le code du module XPCOMUtils.jsm qui définit la fonction defineLazyGetter().

+ +

get ou defineProperty ?

+ +

Bien que le mot-clé get et la méthode {{jsxref("Object.defineProperty()")}} aient des résultats similaires, il subsiste une différence lorsqu'on utilise les classes.

+ +

Lorsqu'on utilise get, la propriété sera définie sur le prototype de l'objet. Avec {{jsxref("Object.defineProperty()")}}, la propriété sera définie sur l'instance à laquelle la méthode s'applique.

+ +
class Exemple {
+  get coucou() {
+    return 'monde';
+  }
+}
+
+const obj = new Exemple();
+console.log(obj.coucou);
+// "monde"
+console.log(Object.getOwnPropertyDescriptor(obj, 'coucou'));
+// undefined
+console.log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), 'coucou'));
+// { configurable: true, enumerable: false, get: function get coucou() { return 'monde'; }, set: undefined }
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2015')}}Ajout des noms de propriétés calculés.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.get")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/index.html b/files/fr/web/javascript/reference/functions/index.html deleted file mode 100644 index cfdd7e95b1..0000000000 --- a/files/fr/web/javascript/reference/functions/index.html +++ /dev/null @@ -1,825 +0,0 @@ ---- -title: Fonctions et portée des fonctions -slug: Web/JavaScript/Reference/Functions -tags: - - Function - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Functions -original_slug: Web/JavaScript/Reference/Fonctions ---- -
{{jsSidebar("Functions")}}
- -

De manière générale, une fonction est un « sous-programme » qui peut être appelé par du code extérieur à la fonction (ou du code interne dans le cas d'une récursion). Comme le programme, une fonction est composée d'une suite d'instructions qui forment le corps de la fonction. Il est parfois possible de passer des valeurs à une fonction et une fonction peut éventuellement retourner (ou renvoyer) une valeur.

- -

En JavaScript, les fonctions sont des objets de première classe. Cela signifie qu'elles peuvent être manipulées et échangées, qu'elles peuvent avoir des propriétés et des méthodes, comme tous les autres objets JavaScript. Les fonctions sont des objets {{jsxref("Objets_globaux/Function","Function")}}.

- -

Pour plus d'informations et d'exemples, on pourra également consulter le chapitre du Guide JavaScript sur les fonctions.

- -

Description

- -

Toute fonction JavaScript est en fait un objet Function. Voir la page {{jsxref("Objets_globaux/Function","Function")}} pour des informations sur les propriétés et les méthodes de ces objets.

- -

Afin de renvoyer une valeur, la fonction doit comporter une instruction {{jsxref("Instructions/return","return")}} qui définit la valeur à renvoyer (sauf dans le cas d'un constructeur qui a été appelé avec le mot-clé {{jsxref("Opérateurs/L_opérateur_new")}}). Une fonction qui ne renvoie pas de valeur retourne {{jsxref("undefined")}}.

- -

Les paramètres donnés lors de l'appel d'une fonction sont appelés les arguments de la fonction. Les arguments sont passés par valeur (by value en anglais). Si la fonction modifie la valeur d'un argument, ce changement ne se répercute pas en dehors de la fonction. Il existe cependant les références d'objets qui sont aussi des valeurs mais qui possèdent la particularité suivante : si la fonction modifie les propriété de l'objet de la référence, ce(s) changement(s) seront perceptibles en dehors de la fonction. Prenons l'exemple suivant :

- -
 /* Déclaration de la fonction 'maFonction' */
- function maFonction(monObjet)
- {
-   monObjet.marque = "Toyota";
- }
-
- /*
-  * Déclaration de la variable 'mavoiture';
-  * création et initialisation d'un nouvel objet;
-  * assigner une référence à 'mavoiture'
-  */
- var mavoiture = {
-   marque: "Honda",
-   modele: "Accord",
-   annee: 1998
- };
-
- /* Affiche 'Honda' */
- console.log(mavoiture.marque);
-
- /* Passer la référence de l'objet à la fonction */
- maFonction(mavoiture);
-
- /*
-  * Affiche 'Toyota' pour valeur de la propriété 'marque'
-  * de l'objet. C'est ce que la fonction a changé.
-  */
- console.log(mavoiture.marque);
-
- -

Le mot-clé this ne fait pas référence à la fonction en cours d'exécution. Il faut donc faire référence aux objets Function par leurs noms, et ce même au sein du corps de la fonction.

- -

Définir des fonctions

- -

Il y a plusieurs façons de définir des fonctions

- -

Déclarer une fonction (l'instruction function)

- -

Il existe une syntaxe spécifique pour la déclaration des fonctions (vous pouvez consulter la page de l'instruction {{jsxref("Instructions/function","function")}} pour plus de détails) :

- -
function nom([param[, param[, ... param]]]) {
-   instructions
-}
-
- -
-
nom
-
Le nom de la fonction.
-
param
-
Le nom d'un argument à passer à la fonction (une fonction pouvant avoir jusqu'à 255 arguments).
-
instructions
-
Les instructions qui forment le corps de la fonction.
-
- -

Utiliser une expression de fonction (l'expression function)

- -

L'expression d'une fonction se fait d'une façon similaire à la déclaration (veuillez consulter la page de l'expression {{jsxref("Opérateurs/L_opérateur_function","function")}} pour plus d'informations) :

- -
function [nom]([param] [, param] [..., param]) {
-   instructions
-}
-
- -
-
nom
-
Le nom de la fonction. Il est facultatif, auquel cas la fonction devient une fonction anonyme.
-
param
-
Le nom d'un argument à passer à la fonction.
-
instructions
-
Les instructions qui forment le corps de la fonction.
-
- -

Voici un exemple d'expression de fonction anonyme (il n'y a pas de nom utilisé) :

- -
var maFonction = function() {
-  /* instructions */
-}
- -

Il est également possible de fournir un nom lors de la définition afin de créer une expression de fonction nommée :

- -
var maFonction = function fonctionNommée(){
-  /* instructions */
-}
-
- -

L'un des bénéfices d'utiliser une expression de fonction nommée est que son nom sera utilisé dans la pile d'appel lors qu'on aura une erreur. Avec le nom de la fonction, il sera plus facile de repérer l'origine de l'erreur.

- -

Comme on peut le voir, ces deux derniers exemples ne commencent pas avec le mot-clé function. Les instructions qui déclarent des fonctions mais qui ne commencent pas avec function sont des expressions de fonction.

- -

Lorsque les fonctions sont utilisées une unique fois, on peut utiliser une « expression de fonction immédiatement invoquée » (ou plus généralement appelée IIFE pour Immediately Invokable Function Expression en anglais).

- -
(function() {
-    /* instruction */
-})();
- -

Les IIFE sont des expressions de fonction appelées dès que la fonction est déclarée.

- -

Utiliser une déclaration de fonction génératrice (l'instruction function*)

- -

Il existe une syntaxe spéciale pour déclarer des générateurs (voir la page sur l'instruction {{jsxref('Instructions/function*', 'function*')}} pour plus de détails) :

- -
function* nom([param[, param[, ... param]]]) {
-   instructions
-}
- -
-
nom
-
Le nom de la fonction.
-
param
-
Le nom d'un argument à passer à la fonction.
-
instructions
-
Les instructions qui forment le corps de la fonction.
-
- -

Utiliser une expression de générateur (l'expression function*)

- -

Une expression de générateur est similaire à une déclaration de fonction génératrice et possède presque la même syntaxe (pour plus de détails, consulter la page sur l'expression {{jsxref('Opérateurs/function*', 'function*')}}) :

- -
function* [nom]([param[, param[, ... param]]]) {
-   instructions
-}
- -
-
nom
-
Le nom de la fonction. Ce paramètre peut être omis, auquel cas la fonction sera une fonction anonyme.
-
param
-
Le nom d'un argument à passer à la fonction.
-
instructions
-
Les instructions qui composent le corps de la fonction.
-
- -

Utiliser une expression de fonction fléchée (=>)

- -

Une expression de fonction fléchée possède une syntaxe plus courte et est liée, de façon lexicale, à sa valeur (voir la page sur les fonctions fléchées pour plus de détails) :

- -
([param[, param]]) => {
-   instructions
-}
-
-param => expression
-
- -
-
param
-
Le nom d'un argument. S'il n'y a pas d'arguments, cela doit être indiqué par ().  S'il y a un seul argument, les parenthèses ne sont pas obligatoires (par exemple :  toto => 1).
-
instructions ou expression
-
S'il y a plusieurs instructions, elles doivent être encadrées par des accolades. Une expression unique ne doit pas obligatoirement être entourée d'accolades. L'expression est également la valeur de retour implicite de la fonction.
-
- -

Le constructeur Function

- -
-

Note : L'utilisation du constructeur Function afin de créer des fonction n'est pas recommandée. En effet, il utilise une chaîne pour former le corps de la fonction et cela peut empêcher certaines optimisations du moteur JavaScript ainsi que provoquer d'autres problèmes.

-
- -

Comme tous les autres objets, les objets {{jsxref("Function")}} peuvent être créés grâce à l'opérateur new :

- -
new Function (arg1, arg2, ... argN, corpsDeLaFonction)
-
- -
-
arg1, arg2, ... argN
-
Plusieurs (zéro ou plus) noms qui seront utilisés par la fonction comme noms d'arguments formels. Chaque nom doit être une chaîne de caractères valide au sens d'un identifiant JavaScript ou alors être une liste de telles chaînes séparées par des virgules. On aura les exemples suivants : "x", "laValeur", ou "a,b".
-
corpsDeLaFonction
-
Une chaîne de caractères contenant les instructions JavaScript définissant la fonction.
-
- -

L'invocation du constructeur Function en tant que fonction (sans utiliser l'opérateur new) a le même effet que son invocation en tant que constructeur.

- -

Le constructeur GeneratorFunction

- -
-

Note : GeneratorFunction n'est pas un objet global mais pourrait être obtenu à partir de l'instance de la fonction génératrice (voir la page {{jsxref("GeneratorFunction")}} pour plus de détails).

-
- -
-

Note : Le constructeur GeneratorFunction ne doit pas être utilisé pour créer des fonctions. En effet, il utilise une chaîne pour former le corps de la fonction et cela peut empêcher certaines optimisations du moteur JavaScript ainsi que provoquer d'autres problèmes.

-
- -

Comme pour tous les autres objets, les objets {{jsxref("GeneratorFunction")}} peuvent être créés grâce à l'opérateur new :

- -
new GeneratorFunction (arg1, arg2, ... argN, corpsFonction)
- -
-
arg1, arg2, ... argN
-
Plusieurs (zéro ou plus) noms qui seront utilisés par la fonction comme noms d'arguments formels. Chaque nom doit être une chaîne de caractères valide au sens d'un identifiant JavaScript ou alors être une liste de telles chaînes séparées par des virgules. On aura les exemples suivants : "x", "theValue", ou "a,b".
-
corpsFonction
-
Une chaîne de caractères contenant les instructions JavaScript définissant la fonction.
-
- -

Les paramètres d'une fonction

- -

Les paramètres par défaut

- -

Les paramètres par défaut permettent aux paramètres déclarés d'une fonction de pouvoir être initialisés avec des valeurs par défaut s'ils ne sont pas fournis à la fonction ou s'ils valent undefined. Pour plus de détails, voir la page de la référence sur les paramètres par défaut.

- -

Les paramètres du reste

- -

Cette syntaxe permet de représenter un nombre indéfini d'arguments sous forme d'un tableau. Pour plus de détails, voir la page sur les paramètres du reste.

- -

L'objet arguments

- -

Il est possible de faire référence aux arguments d'une fonction au sein de cette fonction en utilisant l'objet arguments. Consulter la page arguments pour plus d'informations.

- - - -

Récursion

- -

Une fonction peut faire référence à elle-même et s'appeler elle-même. Il y a trois façons pour qu'une fonction fasse appel à elle-même :

- -
    -
  1. le nom de la fonction
  2. -
  3. arguments.callee
  4. -
  5. une variable interne faisant référence à la fonction
  6. -
- -

Avec l'exemple suivant :

- -
var truc = function toto() {
-   // instructions
-};
-
- -

Ce qui suit sera équivalent au sein de la fonction :

- -
    -
  1. toto()
  2. -
  3. arguments.callee()
  4. -
  5. truc()
  6. -
- -

Une fonction qui s'appelle elle-même est appelée une fonction récursive. D'une certaine manière, une récursion est semblable à une boucle. Une récursion et une boucle exécutent le même code plusieurs fois et s'appuient sur une condition (afin d'éviter une boucle infinie, ou plutôt une récursion infinie ici). Ainsi la boucle suivante :

- -
var x = 0;
-// "x < 10" est la condition de la boucle
-while (x < 10) {
-   // faire des choses
-   x++;
-}
-
- -

peut être convertie en une fonction récursive et un appel à cette fonction :

- -
function boucle(x) {
-   // "x >= 10" est la condition de sortie
-   // (et équivaut à "!(x < 10)")
-   if (x >= 10)
-      return;
-   // faire des choses
-   boucle(x + 1); // l'appel récursif
-}
-boucle(0);
-
- -

Cependant, certains algorithmes ne peuvent pas être traduits sous forme de boucles itératives. Ainsi, obtenir tous les nœuds d'un arbre (par exemple le DOM), est beaucoup plus facile à faire de manière récursive.

- -
function parcoursArbre(noeud) {
-   if (noeud == null) //
-      return;
-   // faire quelque chose avec le noeud
-   for (var i = 0; i < noeud.childNodes.length; i++) {
-      parcoursArbre(noeud.childNodes[i]);
-   }
-}
-
- -

Par rapport à la fonction boucle, chaque appel récursif enchaîne ici plusieurs appels récursifs successifs.

- -

Il est théoriquement possible de convertir tout algorithme récursif en un algorithme non-récursif. Cependant, la logique du problème est souvent beaucoup plus complexe et l'on doit faire recours à une pile pour le résoudre. Mais la récursion n'est en fait rien d'autre que l'utilisation d'une pile : la pile de la fonction.

- -

La comportement de la récursion en tant que pile peut être observée avec cet exemple :

- -
function truc(i) {
-   if (i < 0)
-      return;
-   console.log('début :' + i);
-   toto(i - 1);
-   console.log('fin :' + i);
-}
-truc(3);
-
- -

Elle produira le résultat suivant :

- -
début :3
-début :2
-début :1
-début :0
-fin :0
-fin :1
-fin :2
-fin :3
-
- -

Fonctions imbriquées et fermetures

- -

Il est possible d'imbriquer une fonction au sein d'une fonction. La fonction imbriquée (interne) est privée par rapport à la fonction (externe) qui la contient. Cela forme ce qu'on appelle une fermeture (closure en anglais).

- -

Une fermeture est une expression (généralement une fonction) possédant des variables libres ainsi qu'un environnement qui lie ces variable (autrement dit qui « ferme » l'expression).

- -

Étant donné qu'une fonction imbriquée est une fermeture, cela signifie que la fonction imbriquée peut « hériter » des arguments et des variables de la fonction qui la contient. En d'autres termes, la fonction interne contient la portée de la fonction externe.

- -

Pour résumer :

- - - - - -

L'exemple suivant, montre le cas de fonctions imbriquées :

- -
function ajouteCarres(a,b) {
-   function carre(x) {
-      return x * x;
-   }
-   return carre(a) + carre(b);
-}
-var a = ajouteCarres(2,3); // renvoie 13
-var b = ajouteCarres(3,4); // renvoie 25
-var c = ajouteCarres(4,5); // renvoie 41
-
- -

Étant donné que la fonction interne est une fermeture, il est possible d'appeler la fonction externe et de définir des arguments pour la fonction externe mais aussi pour la fonction interne :

- -
function externe(x) {
-   function interne(y) {
-      return x + y;
-   }
-   return interne;
-}
-var fn_interne = externe(3);
-var resultat = fn_interne(5); // renvoie 8
-
-var resultat1 = externe(3)(5); // renvoie 8
-
- -

Conservation des variables

- -

On voit alors que x est conservé lorsqu'interne est renvoyé. Une fermeture doit conserver les arguments et les variables au sein de toutes les portées auxquelles elle fait référence. Étant donné qu'éventuellement, chaque appel fournira des arguments différents, une nouvelle fermeture est créée pour chaque appel externe. La mémoire peut donc être libérée seulement lorsque inside n'est plus accessible.

- -

Cela n'est pas différent du stockage de références avec d'autres objets, mais ça reste plus délicat à observer puisqu'on ne peut inspecter ou définir soi-même les références en question.

- -

Imbrication multiple de fonctions

- -

On peut imbriquer plusieurs fonctions : une fonction (A) contien une fonction (B) qui contient une fonction (C). Ici les fonctions B et C forment des fermetures et aisni B peut accéder à A et C peut accéder à B. On peut donc en déduire, puisque C accède à B qui accède à A que C peut accéder à A. On voit donc que les fermetures peuvent contenir différentes portées. Elles peuvent, récursivement, contenir la portée des fonctions qui la contiennent. Ce mécanisme est appelé « chaînage de portée »  (scope chaining en anglais). (Cette dénomination sera expliquée par la suite.)

- -

On peut l'observer avec l'exemple suivant :

- -
function A(x) {
-   function B(y) {
-      function C(z) {
-         console.log(x + y + z);
-      }
-      C(3);
-   }
-   B(2);
-}
-A(1); // crée un message d'alerte avec 6 (= 1 + 2 + 3)
-
- -

Dans cet exemple, C accède à la variable y de B et à la variable x de A. Cela est possible parce que :

- -
    -
  1. B est une fermeture qui contient A, autrement dit B peut accéder aux arguments et aux variables de A
  2. -
  3. C est une fermeture qui contient B
  4. -
  5. Étant donné que la fermeture de B contient A et que celle de C contient B, C peut accéder à la fois aux arguments et variables de B et A. Autrement dit, C enchaîne les portées de  B et A dans cet ordre.
  6. -
- -

La réciproque n'est pas vraie. A ne peut avoir accès à C, parce que A ne peut accéder ni aux variables ni aux arguments de B, or C est une variable de B. C est donc privé et seulement pour B.

- -

Conflits de noms

- -

Lorsque deux arguments ou variables appartenant aux portées d'une fermeture ont le même nom, il y a un conflit de noms. La portée la plus interne l'emportera par rapport à la portée la plus externe. C'est ce qu'on appelle la chaîne de portée (scope chain en anglais). Le premier maillon de cette chaîne est la portée la plus interne tandis que le dernier maillon est représenté par la portée la plus externe. Regardons l'exemple suivant :

- -
function externe() {
-   var x = 10;
-   function interne(x) {
-      return x;
-   }
-   return interne;
-}
-resultat = externe()(20); // renvoie 20 et non pas 10
-
- -

Le conflit de nom apparaît avec l'instruction return x et vient de la dénomination commune de l'argument x de la fonction interne et la variable x de la fonction externe. La chaîne de portée est, pour cet exemple : {interne, externe, objet globalt}. On voit alors que le  x de la fonction interne l'emporte sur le x de la fonction externe. 20 (x de la fonction interne) est donc renvoyé plutôt que 10 (x de la fonction externe).

- -

Définition des méthodes

- -

Les accesseurs et mutateurs (getter et setter)

- -

Il est possible de définir des méthodes qui sont accesseurs ou des mutateurs sur n'importe quel objet qui peut avoir de nouvelles propriétés. La syntaxe utilisée pour définir les getters et setters est celle utilisée avec les littéraux objets.

- -
-
get
-
-

Permet de lier une propriété d'un objet à une fonction qui sera appelée lorsqu'on accèdera à la propriété.

-
-
set
-
Permet de lier une propriété d'un objet à une fonction qui sera appelée lorsqu'on tentera de modifier cette propriété.
-
- -

Syntaxe des définitions de méthode ECMAScript 2015

- -

Avec ECMAScript 2015, il est possible de définir des méthodes de façon plus concise (à la façon de ce qui est déjà possible pour les getters et setters). Voir la page sur les définitions de méthodes pour plus d'informations.

- -
var obj = {
-  toto() {},
-  truc() {}
-};
- -

Constructeur, déclaration, expression ?

- -

Comparons les exemples suivants :

- -
    -
  1. une fonction définie grâce au constructeur Function assignée à la variable multiplier - -
    var multiplier = new Function("x", "y", "return x * y;");
    -
    -
  2. -
  3. une déclaration de fonction d'une fonction appelée multiplier -
    function multiplier(x, y) {
    -   return x * y;
    -}
    -
    -
  4. -
  5. une expression de fonction d'une fonction anonyme assignée à la variable multiplier -
    var multiplier = function(x, y) {
    -   return x * y;
    -};
    -
    -
  6. -
  7. une expression de fonction d'une fonction nommée fonction_nom assignée à la variable multiplier -
    var multiplier = function function_nom(x, y) {
    -   return x * y;
    -};
    -
    -
  8. -
- -

Tous ces exemples effectuent à peu près la même chose, mais différent sur quelques points :

- - - -

Une déclaration de fonction peut très facilement (et souvent involontairement) être transformée en une expression de fonction. Une déclaration de fonction cesse d'en être une lorsque :

- - - -

Exemples :

- - - -

Définir une fonction de façon conditionnelle

- -

Il est possible de définir des fonctions de manière conditionnelle en utilisant soit : //function statements// (une extension autorisée par le standard ECMA-262 Edition 3) soit le constructeur Function. Il faut noter que de telles instructions ne sont plus autorisées dans le standard ES5 strict. Il faut également savoir que cela ne fonctionne pas de manière homogène sur les différents navigateurs. Il est donc déconseillé d'utiliser cette fonctionnalité.

- -

Dans le script qui suit, la fonction zero n'est jamais définie et ne peut donc être appelée car le test « if (0) » est toujours faux :

- -
if (0) {
-   function zero() {
-      console.log("C'est zero.");
-   }
-}
-
- -

Si le script est changé et que la condition devient « if (1) », la fonction zero sera alors définie.

- -

Bien que cette fonction ressemble à une déclaration de fonction, il s'agit en fait d'une expression (ou instruction) de fonction, car celle-ci est imbriquée au sein d'une autre instruction. (Consulter le paragraphe précédent pour une explication à ce sujet).

- -
-

Note : À la différence de SpiderMonkey, certains moteurs JavaScript traîtent incorrectement les expressions de fonction avec un nom comme des définitions de fonction. Cela conduirait à la définition de la fonction zero et ce même avec la condition if valant faux. Une façon plus sûre de définir des fonctions de manière conditionnelle est de définir la fonction et de l'assigner à une variable :

- -
if (0) {
-   var zero = function() {
-      console.log("C'est zero");
-   }
-}
-
-
- -

Les fonctions en tant que gestionnaires d'événements

- -

En JavaScript, les gestionnaires d'événements DOM (event handlers en anglais) sont des fonctions (différentes des objets contenant une méthode handleEvent dans d'autres langages de liaison avec le DOM -binding languages en anglais). Les fontions ont l'objet event comme seul et unique paramètre. Comme tous les autres paramètres, si l'objet événement, n'a pas besoin d'être utilisé, il peut être absent de la liste des paramètres formels.

- -

Les objets d'un document HTML susceptibles de recevoir des événements peuvent être par exemple : window (objets Window, y compris les objets frames), document (les objets HTMLDocument), et les éléments (les objets Element). Au sein du DOM HTML, les objets recevant des événements possède des propriétés gestionnaires d'événements. Ces propriétés sont les noms des événements en minuscules préfixés par « on » (par exemple onfocus). Une autre façon, plus fiable, d'ajouter des auditeurs d'événements, est offert par les événements DOM de niveau 2.

- -

Note : Les événements font partie de la logique DOM et non de celle de JavaScript. (JavaScript n'est qu'un langage permettant de manipuler le DOM.)

- -

L'exemple suivant assigne une fonction au gestionnaire de l'événement « focus ».

- -
window.onfocus = function() {
-   document.body.style.backgroundColor = 'white';
-};
-
- -

Si une fonction est assignée à une variable, il est possible d'assigner la variable à un gestionnaire d'événement. Le fragment de code qui suit assigne une fonction à la variable setBGColor.

- -
var setBGColor = new Function("document.body.style.backgroundColor = 'white';");
-
- -

Il est alors possible d'utiliser cette variable pour assigner une fonction à un gestionnaire d'événement. Cela peut se faire de plusieurs manières, en voici deux décrites ici :

- -
    -
  1. écrire dans les propriétés de l'évément DOM HTML -
    document.form1.colorButton.onclick = setBGColor;
    -
    -
  2. -
  3. l'attribut de l'événement HTML -
    <input type="button"
    -   value="Changer la couleur de fond"
    -   onclick="setBGColor();"/>
    -
    - -

    Un gestionnaire d'événement défini de cette manière sera une fonction, nommée selon l'attribut, encadré du code spécifique nécessaire. C'est pourquoi les parenthèses sont ici nécessaires (setBGColor() et non pas setBGColor). Cela est équivalent à :

    - -
    document.form1.colorButton.onclick = function onclick(event) {
    -   setBGColor();
    -};
    -
    - -

    Il faut noter la façon dont l'objet événement est passé à la fonction en tant que paramètre event. Cela permet au code d'utiliser l'objet Event :

    - -
    <input ...
    -    onclick="console.log(event.target.tagName);"/>
    -
    -
  4. -
- -

Tout comme les autres propriétés faisant référence à une fonction, le gestionnaire d'événement peut agir come une méthode et this ferait alors référence à l'élément contenant le gestionnaire d'événement. Dans l'exemple suivant, la fonction à laquelle onfocus fait référence est appelée avec this qui a la valeur window.

- -
window.onfocus();
-
- -

Une erreur faite souvent lorsque l'on commence à utiliser JavaScript est d'ajouter des parenthèses et/ou des paramètres à la fin de la variable. Cela revient à appeler le gestionnaire d'événement lorsqu'on l'assigne. Le fait d'ajouter ces parenthèses assignera la valeur de retour du gestionnaire d'événement. Cette valeur sera souvent undefined dans ces cas alors que l'on aurait souhaité obtenir le gestionnaire d'événement.

- -
document.form1.button1.onclick = setBGColor();
-
- -

Afin de passer des paramètres à un gestionnaire d'événements, le gestionnaire doit être enveloppé dans une autre fonction, comme dans l'exemple suivant :

- -
document.form1.button1.onclick = function() {
-   setBGColor('une valeur');
-};
-
- -

Les fonctions de bloc

- -

En mode strict, à partir d'ES2015 (ES6), la portée des fonctions définies dans un bloc est limitée à ce bloc. Avant ES2015, il était interdit d'utiliser les fonctions de bloc en mode strict..

- -
'use strict';
-
-function f() {
-  return 1;
-}
-
-{
-  function f() {
-    return 2;
-  }
-}
-
-f() === 1; // true
-
-// f() === 2 en mode non-strict
-
- -

Les fonctions de bloc dans du code non-strict

- -

Non.

- -

Dans du code non-strict, les déclarations de fonctions placées dans des blocs peuvent se comporter de façon étrange :

- -
if (onDevraitDéfinirZéro) {
-   function zéro() { // DANGER: risque de compatibilité
-      console.log("Voici zéro.");
-   }
-}
-
- -

ES2015 indique que si onDevraitDéfinirZéro vaut false, zéro ne devrait jamais être défini car le bloc n'est jamais exécuté. En revanche, c'est une nouveauté liée à cette version du standard, non spécifiée auparavant. Certains navigateurs définissent zéro que le bloc soit exécuté ou non.

- -

En mode strict, tous les navigateurs qui prennent en charge ES2015 gère cela de la même façon : zéro est uniquement défini si onDevraitDéfinirZéro vaut true et uniquement dans la portée du bloc induit par if.

- -

Une méthode plus sûre est d'utiliser des expressions de fonction :

- -
var zéro;
-if (0) {
-   zéro = function() {
-      console.log("Voici zéro.");
-   };
-}
-
- -

Exemples

- -

Renvoyer un nombre formaté

- -

La fonction qui suit renvoie une chaîne de caractères contenant la représentation formatée d'un nombre avec un certain nombre de zéros préfixant le nombre.

- -
// Cette fonction renvoie une chaîne de caractères complétée par un préfixe composé de zéros
-function padZeros(num, totalLen) {
-   var numStr = num.toString();             // On initialise la valeur à renvoyer en chaîne de caractères
-   var numZeros = totalLen - numStr.length; // On calcule le nombre de zéros
-   for (var i = 1; i <= numZeros; i++) {
-      numStr = "0" + numStr;
-   }
-   return numStr;
-}
-
- -

Les instructions qui suivent utilisent cette fonction

- -
var resultat;
-resultat = padZeros(42,4); // renvoie "0042"
-resultat = padZeros(42,2); // renvoie "42"
-resultat = padZeros(5,4);  // renvoie "0005"
-
- -

Déterminer si une fonction existe

- -

Il est possible de déterminer si oui ou non une fonction existe en utilisant l'opérateur typeof. Dans l'exemple qui suit, on teste pour savoir si l'objet window possède une propriété appelé noFunc qui serait une fonction. Si c'est le cas, elle sera utilisée, sinon on fera autre chose.

- -
 if ('function' === typeof window.noFunc) {
-   // utilisation de noFunc()
- } else {
-   // faire autre chose
- }
-
- -

Il est à noter que, dans le test if, on utilise une référence à noFunc - il n'y a pas de parenthèses après le nom de la fonction, la fonction n'est donc pas appelée.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0
{{SpecName('ES5.1', '#sec-13', 'Function Definition')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function-definitions', 'Function definitions')}}{{Spec2('ES6')}}Nouveautés : fonctions fléchées, générateurs, paramètres par défaut, paramètres du reste
{{SpecName('ES6', '#', 'function*')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ES6', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}{{Spec2('ES6')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/index.md b/files/fr/web/javascript/reference/functions/index.md new file mode 100644 index 0000000000..cfdd7e95b1 --- /dev/null +++ b/files/fr/web/javascript/reference/functions/index.md @@ -0,0 +1,825 @@ +--- +title: Fonctions et portée des fonctions +slug: Web/JavaScript/Reference/Functions +tags: + - Function + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Functions +original_slug: Web/JavaScript/Reference/Fonctions +--- +
{{jsSidebar("Functions")}}
+ +

De manière générale, une fonction est un « sous-programme » qui peut être appelé par du code extérieur à la fonction (ou du code interne dans le cas d'une récursion). Comme le programme, une fonction est composée d'une suite d'instructions qui forment le corps de la fonction. Il est parfois possible de passer des valeurs à une fonction et une fonction peut éventuellement retourner (ou renvoyer) une valeur.

+ +

En JavaScript, les fonctions sont des objets de première classe. Cela signifie qu'elles peuvent être manipulées et échangées, qu'elles peuvent avoir des propriétés et des méthodes, comme tous les autres objets JavaScript. Les fonctions sont des objets {{jsxref("Objets_globaux/Function","Function")}}.

+ +

Pour plus d'informations et d'exemples, on pourra également consulter le chapitre du Guide JavaScript sur les fonctions.

+ +

Description

+ +

Toute fonction JavaScript est en fait un objet Function. Voir la page {{jsxref("Objets_globaux/Function","Function")}} pour des informations sur les propriétés et les méthodes de ces objets.

+ +

Afin de renvoyer une valeur, la fonction doit comporter une instruction {{jsxref("Instructions/return","return")}} qui définit la valeur à renvoyer (sauf dans le cas d'un constructeur qui a été appelé avec le mot-clé {{jsxref("Opérateurs/L_opérateur_new")}}). Une fonction qui ne renvoie pas de valeur retourne {{jsxref("undefined")}}.

+ +

Les paramètres donnés lors de l'appel d'une fonction sont appelés les arguments de la fonction. Les arguments sont passés par valeur (by value en anglais). Si la fonction modifie la valeur d'un argument, ce changement ne se répercute pas en dehors de la fonction. Il existe cependant les références d'objets qui sont aussi des valeurs mais qui possèdent la particularité suivante : si la fonction modifie les propriété de l'objet de la référence, ce(s) changement(s) seront perceptibles en dehors de la fonction. Prenons l'exemple suivant :

+ +
 /* Déclaration de la fonction 'maFonction' */
+ function maFonction(monObjet)
+ {
+   monObjet.marque = "Toyota";
+ }
+
+ /*
+  * Déclaration de la variable 'mavoiture';
+  * création et initialisation d'un nouvel objet;
+  * assigner une référence à 'mavoiture'
+  */
+ var mavoiture = {
+   marque: "Honda",
+   modele: "Accord",
+   annee: 1998
+ };
+
+ /* Affiche 'Honda' */
+ console.log(mavoiture.marque);
+
+ /* Passer la référence de l'objet à la fonction */
+ maFonction(mavoiture);
+
+ /*
+  * Affiche 'Toyota' pour valeur de la propriété 'marque'
+  * de l'objet. C'est ce que la fonction a changé.
+  */
+ console.log(mavoiture.marque);
+
+ +

Le mot-clé this ne fait pas référence à la fonction en cours d'exécution. Il faut donc faire référence aux objets Function par leurs noms, et ce même au sein du corps de la fonction.

+ +

Définir des fonctions

+ +

Il y a plusieurs façons de définir des fonctions

+ +

Déclarer une fonction (l'instruction function)

+ +

Il existe une syntaxe spécifique pour la déclaration des fonctions (vous pouvez consulter la page de l'instruction {{jsxref("Instructions/function","function")}} pour plus de détails) :

+ +
function nom([param[, param[, ... param]]]) {
+   instructions
+}
+
+ +
+
nom
+
Le nom de la fonction.
+
param
+
Le nom d'un argument à passer à la fonction (une fonction pouvant avoir jusqu'à 255 arguments).
+
instructions
+
Les instructions qui forment le corps de la fonction.
+
+ +

Utiliser une expression de fonction (l'expression function)

+ +

L'expression d'une fonction se fait d'une façon similaire à la déclaration (veuillez consulter la page de l'expression {{jsxref("Opérateurs/L_opérateur_function","function")}} pour plus d'informations) :

+ +
function [nom]([param] [, param] [..., param]) {
+   instructions
+}
+
+ +
+
nom
+
Le nom de la fonction. Il est facultatif, auquel cas la fonction devient une fonction anonyme.
+
param
+
Le nom d'un argument à passer à la fonction.
+
instructions
+
Les instructions qui forment le corps de la fonction.
+
+ +

Voici un exemple d'expression de fonction anonyme (il n'y a pas de nom utilisé) :

+ +
var maFonction = function() {
+  /* instructions */
+}
+ +

Il est également possible de fournir un nom lors de la définition afin de créer une expression de fonction nommée :

+ +
var maFonction = function fonctionNommée(){
+  /* instructions */
+}
+
+ +

L'un des bénéfices d'utiliser une expression de fonction nommée est que son nom sera utilisé dans la pile d'appel lors qu'on aura une erreur. Avec le nom de la fonction, il sera plus facile de repérer l'origine de l'erreur.

+ +

Comme on peut le voir, ces deux derniers exemples ne commencent pas avec le mot-clé function. Les instructions qui déclarent des fonctions mais qui ne commencent pas avec function sont des expressions de fonction.

+ +

Lorsque les fonctions sont utilisées une unique fois, on peut utiliser une « expression de fonction immédiatement invoquée » (ou plus généralement appelée IIFE pour Immediately Invokable Function Expression en anglais).

+ +
(function() {
+    /* instruction */
+})();
+ +

Les IIFE sont des expressions de fonction appelées dès que la fonction est déclarée.

+ +

Utiliser une déclaration de fonction génératrice (l'instruction function*)

+ +

Il existe une syntaxe spéciale pour déclarer des générateurs (voir la page sur l'instruction {{jsxref('Instructions/function*', 'function*')}} pour plus de détails) :

+ +
function* nom([param[, param[, ... param]]]) {
+   instructions
+}
+ +
+
nom
+
Le nom de la fonction.
+
param
+
Le nom d'un argument à passer à la fonction.
+
instructions
+
Les instructions qui forment le corps de la fonction.
+
+ +

Utiliser une expression de générateur (l'expression function*)

+ +

Une expression de générateur est similaire à une déclaration de fonction génératrice et possède presque la même syntaxe (pour plus de détails, consulter la page sur l'expression {{jsxref('Opérateurs/function*', 'function*')}}) :

+ +
function* [nom]([param[, param[, ... param]]]) {
+   instructions
+}
+ +
+
nom
+
Le nom de la fonction. Ce paramètre peut être omis, auquel cas la fonction sera une fonction anonyme.
+
param
+
Le nom d'un argument à passer à la fonction.
+
instructions
+
Les instructions qui composent le corps de la fonction.
+
+ +

Utiliser une expression de fonction fléchée (=>)

+ +

Une expression de fonction fléchée possède une syntaxe plus courte et est liée, de façon lexicale, à sa valeur (voir la page sur les fonctions fléchées pour plus de détails) :

+ +
([param[, param]]) => {
+   instructions
+}
+
+param => expression
+
+ +
+
param
+
Le nom d'un argument. S'il n'y a pas d'arguments, cela doit être indiqué par ().  S'il y a un seul argument, les parenthèses ne sont pas obligatoires (par exemple :  toto => 1).
+
instructions ou expression
+
S'il y a plusieurs instructions, elles doivent être encadrées par des accolades. Une expression unique ne doit pas obligatoirement être entourée d'accolades. L'expression est également la valeur de retour implicite de la fonction.
+
+ +

Le constructeur Function

+ +
+

Note : L'utilisation du constructeur Function afin de créer des fonction n'est pas recommandée. En effet, il utilise une chaîne pour former le corps de la fonction et cela peut empêcher certaines optimisations du moteur JavaScript ainsi que provoquer d'autres problèmes.

+
+ +

Comme tous les autres objets, les objets {{jsxref("Function")}} peuvent être créés grâce à l'opérateur new :

+ +
new Function (arg1, arg2, ... argN, corpsDeLaFonction)
+
+ +
+
arg1, arg2, ... argN
+
Plusieurs (zéro ou plus) noms qui seront utilisés par la fonction comme noms d'arguments formels. Chaque nom doit être une chaîne de caractères valide au sens d'un identifiant JavaScript ou alors être une liste de telles chaînes séparées par des virgules. On aura les exemples suivants : "x", "laValeur", ou "a,b".
+
corpsDeLaFonction
+
Une chaîne de caractères contenant les instructions JavaScript définissant la fonction.
+
+ +

L'invocation du constructeur Function en tant que fonction (sans utiliser l'opérateur new) a le même effet que son invocation en tant que constructeur.

+ +

Le constructeur GeneratorFunction

+ +
+

Note : GeneratorFunction n'est pas un objet global mais pourrait être obtenu à partir de l'instance de la fonction génératrice (voir la page {{jsxref("GeneratorFunction")}} pour plus de détails).

+
+ +
+

Note : Le constructeur GeneratorFunction ne doit pas être utilisé pour créer des fonctions. En effet, il utilise une chaîne pour former le corps de la fonction et cela peut empêcher certaines optimisations du moteur JavaScript ainsi que provoquer d'autres problèmes.

+
+ +

Comme pour tous les autres objets, les objets {{jsxref("GeneratorFunction")}} peuvent être créés grâce à l'opérateur new :

+ +
new GeneratorFunction (arg1, arg2, ... argN, corpsFonction)
+ +
+
arg1, arg2, ... argN
+
Plusieurs (zéro ou plus) noms qui seront utilisés par la fonction comme noms d'arguments formels. Chaque nom doit être une chaîne de caractères valide au sens d'un identifiant JavaScript ou alors être une liste de telles chaînes séparées par des virgules. On aura les exemples suivants : "x", "theValue", ou "a,b".
+
corpsFonction
+
Une chaîne de caractères contenant les instructions JavaScript définissant la fonction.
+
+ +

Les paramètres d'une fonction

+ +

Les paramètres par défaut

+ +

Les paramètres par défaut permettent aux paramètres déclarés d'une fonction de pouvoir être initialisés avec des valeurs par défaut s'ils ne sont pas fournis à la fonction ou s'ils valent undefined. Pour plus de détails, voir la page de la référence sur les paramètres par défaut.

+ +

Les paramètres du reste

+ +

Cette syntaxe permet de représenter un nombre indéfini d'arguments sous forme d'un tableau. Pour plus de détails, voir la page sur les paramètres du reste.

+ +

L'objet arguments

+ +

Il est possible de faire référence aux arguments d'une fonction au sein de cette fonction en utilisant l'objet arguments. Consulter la page arguments pour plus d'informations.

+ + + +

Récursion

+ +

Une fonction peut faire référence à elle-même et s'appeler elle-même. Il y a trois façons pour qu'une fonction fasse appel à elle-même :

+ +
    +
  1. le nom de la fonction
  2. +
  3. arguments.callee
  4. +
  5. une variable interne faisant référence à la fonction
  6. +
+ +

Avec l'exemple suivant :

+ +
var truc = function toto() {
+   // instructions
+};
+
+ +

Ce qui suit sera équivalent au sein de la fonction :

+ +
    +
  1. toto()
  2. +
  3. arguments.callee()
  4. +
  5. truc()
  6. +
+ +

Une fonction qui s'appelle elle-même est appelée une fonction récursive. D'une certaine manière, une récursion est semblable à une boucle. Une récursion et une boucle exécutent le même code plusieurs fois et s'appuient sur une condition (afin d'éviter une boucle infinie, ou plutôt une récursion infinie ici). Ainsi la boucle suivante :

+ +
var x = 0;
+// "x < 10" est la condition de la boucle
+while (x < 10) {
+   // faire des choses
+   x++;
+}
+
+ +

peut être convertie en une fonction récursive et un appel à cette fonction :

+ +
function boucle(x) {
+   // "x >= 10" est la condition de sortie
+   // (et équivaut à "!(x < 10)")
+   if (x >= 10)
+      return;
+   // faire des choses
+   boucle(x + 1); // l'appel récursif
+}
+boucle(0);
+
+ +

Cependant, certains algorithmes ne peuvent pas être traduits sous forme de boucles itératives. Ainsi, obtenir tous les nœuds d'un arbre (par exemple le DOM), est beaucoup plus facile à faire de manière récursive.

+ +
function parcoursArbre(noeud) {
+   if (noeud == null) //
+      return;
+   // faire quelque chose avec le noeud
+   for (var i = 0; i < noeud.childNodes.length; i++) {
+      parcoursArbre(noeud.childNodes[i]);
+   }
+}
+
+ +

Par rapport à la fonction boucle, chaque appel récursif enchaîne ici plusieurs appels récursifs successifs.

+ +

Il est théoriquement possible de convertir tout algorithme récursif en un algorithme non-récursif. Cependant, la logique du problème est souvent beaucoup plus complexe et l'on doit faire recours à une pile pour le résoudre. Mais la récursion n'est en fait rien d'autre que l'utilisation d'une pile : la pile de la fonction.

+ +

La comportement de la récursion en tant que pile peut être observée avec cet exemple :

+ +
function truc(i) {
+   if (i < 0)
+      return;
+   console.log('début :' + i);
+   toto(i - 1);
+   console.log('fin :' + i);
+}
+truc(3);
+
+ +

Elle produira le résultat suivant :

+ +
début :3
+début :2
+début :1
+début :0
+fin :0
+fin :1
+fin :2
+fin :3
+
+ +

Fonctions imbriquées et fermetures

+ +

Il est possible d'imbriquer une fonction au sein d'une fonction. La fonction imbriquée (interne) est privée par rapport à la fonction (externe) qui la contient. Cela forme ce qu'on appelle une fermeture (closure en anglais).

+ +

Une fermeture est une expression (généralement une fonction) possédant des variables libres ainsi qu'un environnement qui lie ces variable (autrement dit qui « ferme » l'expression).

+ +

Étant donné qu'une fonction imbriquée est une fermeture, cela signifie que la fonction imbriquée peut « hériter » des arguments et des variables de la fonction qui la contient. En d'autres termes, la fonction interne contient la portée de la fonction externe.

+ +

Pour résumer :

+ + + + + +

L'exemple suivant, montre le cas de fonctions imbriquées :

+ +
function ajouteCarres(a,b) {
+   function carre(x) {
+      return x * x;
+   }
+   return carre(a) + carre(b);
+}
+var a = ajouteCarres(2,3); // renvoie 13
+var b = ajouteCarres(3,4); // renvoie 25
+var c = ajouteCarres(4,5); // renvoie 41
+
+ +

Étant donné que la fonction interne est une fermeture, il est possible d'appeler la fonction externe et de définir des arguments pour la fonction externe mais aussi pour la fonction interne :

+ +
function externe(x) {
+   function interne(y) {
+      return x + y;
+   }
+   return interne;
+}
+var fn_interne = externe(3);
+var resultat = fn_interne(5); // renvoie 8
+
+var resultat1 = externe(3)(5); // renvoie 8
+
+ +

Conservation des variables

+ +

On voit alors que x est conservé lorsqu'interne est renvoyé. Une fermeture doit conserver les arguments et les variables au sein de toutes les portées auxquelles elle fait référence. Étant donné qu'éventuellement, chaque appel fournira des arguments différents, une nouvelle fermeture est créée pour chaque appel externe. La mémoire peut donc être libérée seulement lorsque inside n'est plus accessible.

+ +

Cela n'est pas différent du stockage de références avec d'autres objets, mais ça reste plus délicat à observer puisqu'on ne peut inspecter ou définir soi-même les références en question.

+ +

Imbrication multiple de fonctions

+ +

On peut imbriquer plusieurs fonctions : une fonction (A) contien une fonction (B) qui contient une fonction (C). Ici les fonctions B et C forment des fermetures et aisni B peut accéder à A et C peut accéder à B. On peut donc en déduire, puisque C accède à B qui accède à A que C peut accéder à A. On voit donc que les fermetures peuvent contenir différentes portées. Elles peuvent, récursivement, contenir la portée des fonctions qui la contiennent. Ce mécanisme est appelé « chaînage de portée »  (scope chaining en anglais). (Cette dénomination sera expliquée par la suite.)

+ +

On peut l'observer avec l'exemple suivant :

+ +
function A(x) {
+   function B(y) {
+      function C(z) {
+         console.log(x + y + z);
+      }
+      C(3);
+   }
+   B(2);
+}
+A(1); // crée un message d'alerte avec 6 (= 1 + 2 + 3)
+
+ +

Dans cet exemple, C accède à la variable y de B et à la variable x de A. Cela est possible parce que :

+ +
    +
  1. B est une fermeture qui contient A, autrement dit B peut accéder aux arguments et aux variables de A
  2. +
  3. C est une fermeture qui contient B
  4. +
  5. Étant donné que la fermeture de B contient A et que celle de C contient B, C peut accéder à la fois aux arguments et variables de B et A. Autrement dit, C enchaîne les portées de  B et A dans cet ordre.
  6. +
+ +

La réciproque n'est pas vraie. A ne peut avoir accès à C, parce que A ne peut accéder ni aux variables ni aux arguments de B, or C est une variable de B. C est donc privé et seulement pour B.

+ +

Conflits de noms

+ +

Lorsque deux arguments ou variables appartenant aux portées d'une fermeture ont le même nom, il y a un conflit de noms. La portée la plus interne l'emportera par rapport à la portée la plus externe. C'est ce qu'on appelle la chaîne de portée (scope chain en anglais). Le premier maillon de cette chaîne est la portée la plus interne tandis que le dernier maillon est représenté par la portée la plus externe. Regardons l'exemple suivant :

+ +
function externe() {
+   var x = 10;
+   function interne(x) {
+      return x;
+   }
+   return interne;
+}
+resultat = externe()(20); // renvoie 20 et non pas 10
+
+ +

Le conflit de nom apparaît avec l'instruction return x et vient de la dénomination commune de l'argument x de la fonction interne et la variable x de la fonction externe. La chaîne de portée est, pour cet exemple : {interne, externe, objet globalt}. On voit alors que le  x de la fonction interne l'emporte sur le x de la fonction externe. 20 (x de la fonction interne) est donc renvoyé plutôt que 10 (x de la fonction externe).

+ +

Définition des méthodes

+ +

Les accesseurs et mutateurs (getter et setter)

+ +

Il est possible de définir des méthodes qui sont accesseurs ou des mutateurs sur n'importe quel objet qui peut avoir de nouvelles propriétés. La syntaxe utilisée pour définir les getters et setters est celle utilisée avec les littéraux objets.

+ +
+
get
+
+

Permet de lier une propriété d'un objet à une fonction qui sera appelée lorsqu'on accèdera à la propriété.

+
+
set
+
Permet de lier une propriété d'un objet à une fonction qui sera appelée lorsqu'on tentera de modifier cette propriété.
+
+ +

Syntaxe des définitions de méthode ECMAScript 2015

+ +

Avec ECMAScript 2015, il est possible de définir des méthodes de façon plus concise (à la façon de ce qui est déjà possible pour les getters et setters). Voir la page sur les définitions de méthodes pour plus d'informations.

+ +
var obj = {
+  toto() {},
+  truc() {}
+};
+ +

Constructeur, déclaration, expression ?

+ +

Comparons les exemples suivants :

+ +
    +
  1. une fonction définie grâce au constructeur Function assignée à la variable multiplier + +
    var multiplier = new Function("x", "y", "return x * y;");
    +
    +
  2. +
  3. une déclaration de fonction d'une fonction appelée multiplier +
    function multiplier(x, y) {
    +   return x * y;
    +}
    +
    +
  4. +
  5. une expression de fonction d'une fonction anonyme assignée à la variable multiplier +
    var multiplier = function(x, y) {
    +   return x * y;
    +};
    +
    +
  6. +
  7. une expression de fonction d'une fonction nommée fonction_nom assignée à la variable multiplier +
    var multiplier = function function_nom(x, y) {
    +   return x * y;
    +};
    +
    +
  8. +
+ +

Tous ces exemples effectuent à peu près la même chose, mais différent sur quelques points :

+ + + +

Une déclaration de fonction peut très facilement (et souvent involontairement) être transformée en une expression de fonction. Une déclaration de fonction cesse d'en être une lorsque :

+ + + +

Exemples :

+ + + +

Définir une fonction de façon conditionnelle

+ +

Il est possible de définir des fonctions de manière conditionnelle en utilisant soit : //function statements// (une extension autorisée par le standard ECMA-262 Edition 3) soit le constructeur Function. Il faut noter que de telles instructions ne sont plus autorisées dans le standard ES5 strict. Il faut également savoir que cela ne fonctionne pas de manière homogène sur les différents navigateurs. Il est donc déconseillé d'utiliser cette fonctionnalité.

+ +

Dans le script qui suit, la fonction zero n'est jamais définie et ne peut donc être appelée car le test « if (0) » est toujours faux :

+ +
if (0) {
+   function zero() {
+      console.log("C'est zero.");
+   }
+}
+
+ +

Si le script est changé et que la condition devient « if (1) », la fonction zero sera alors définie.

+ +

Bien que cette fonction ressemble à une déclaration de fonction, il s'agit en fait d'une expression (ou instruction) de fonction, car celle-ci est imbriquée au sein d'une autre instruction. (Consulter le paragraphe précédent pour une explication à ce sujet).

+ +
+

Note : À la différence de SpiderMonkey, certains moteurs JavaScript traîtent incorrectement les expressions de fonction avec un nom comme des définitions de fonction. Cela conduirait à la définition de la fonction zero et ce même avec la condition if valant faux. Une façon plus sûre de définir des fonctions de manière conditionnelle est de définir la fonction et de l'assigner à une variable :

+ +
if (0) {
+   var zero = function() {
+      console.log("C'est zero");
+   }
+}
+
+
+ +

Les fonctions en tant que gestionnaires d'événements

+ +

En JavaScript, les gestionnaires d'événements DOM (event handlers en anglais) sont des fonctions (différentes des objets contenant une méthode handleEvent dans d'autres langages de liaison avec le DOM -binding languages en anglais). Les fontions ont l'objet event comme seul et unique paramètre. Comme tous les autres paramètres, si l'objet événement, n'a pas besoin d'être utilisé, il peut être absent de la liste des paramètres formels.

+ +

Les objets d'un document HTML susceptibles de recevoir des événements peuvent être par exemple : window (objets Window, y compris les objets frames), document (les objets HTMLDocument), et les éléments (les objets Element). Au sein du DOM HTML, les objets recevant des événements possède des propriétés gestionnaires d'événements. Ces propriétés sont les noms des événements en minuscules préfixés par « on » (par exemple onfocus). Une autre façon, plus fiable, d'ajouter des auditeurs d'événements, est offert par les événements DOM de niveau 2.

+ +

Note : Les événements font partie de la logique DOM et non de celle de JavaScript. (JavaScript n'est qu'un langage permettant de manipuler le DOM.)

+ +

L'exemple suivant assigne une fonction au gestionnaire de l'événement « focus ».

+ +
window.onfocus = function() {
+   document.body.style.backgroundColor = 'white';
+};
+
+ +

Si une fonction est assignée à une variable, il est possible d'assigner la variable à un gestionnaire d'événement. Le fragment de code qui suit assigne une fonction à la variable setBGColor.

+ +
var setBGColor = new Function("document.body.style.backgroundColor = 'white';");
+
+ +

Il est alors possible d'utiliser cette variable pour assigner une fonction à un gestionnaire d'événement. Cela peut se faire de plusieurs manières, en voici deux décrites ici :

+ +
    +
  1. écrire dans les propriétés de l'évément DOM HTML +
    document.form1.colorButton.onclick = setBGColor;
    +
    +
  2. +
  3. l'attribut de l'événement HTML +
    <input type="button"
    +   value="Changer la couleur de fond"
    +   onclick="setBGColor();"/>
    +
    + +

    Un gestionnaire d'événement défini de cette manière sera une fonction, nommée selon l'attribut, encadré du code spécifique nécessaire. C'est pourquoi les parenthèses sont ici nécessaires (setBGColor() et non pas setBGColor). Cela est équivalent à :

    + +
    document.form1.colorButton.onclick = function onclick(event) {
    +   setBGColor();
    +};
    +
    + +

    Il faut noter la façon dont l'objet événement est passé à la fonction en tant que paramètre event. Cela permet au code d'utiliser l'objet Event :

    + +
    <input ...
    +    onclick="console.log(event.target.tagName);"/>
    +
    +
  4. +
+ +

Tout comme les autres propriétés faisant référence à une fonction, le gestionnaire d'événement peut agir come une méthode et this ferait alors référence à l'élément contenant le gestionnaire d'événement. Dans l'exemple suivant, la fonction à laquelle onfocus fait référence est appelée avec this qui a la valeur window.

+ +
window.onfocus();
+
+ +

Une erreur faite souvent lorsque l'on commence à utiliser JavaScript est d'ajouter des parenthèses et/ou des paramètres à la fin de la variable. Cela revient à appeler le gestionnaire d'événement lorsqu'on l'assigne. Le fait d'ajouter ces parenthèses assignera la valeur de retour du gestionnaire d'événement. Cette valeur sera souvent undefined dans ces cas alors que l'on aurait souhaité obtenir le gestionnaire d'événement.

+ +
document.form1.button1.onclick = setBGColor();
+
+ +

Afin de passer des paramètres à un gestionnaire d'événements, le gestionnaire doit être enveloppé dans une autre fonction, comme dans l'exemple suivant :

+ +
document.form1.button1.onclick = function() {
+   setBGColor('une valeur');
+};
+
+ +

Les fonctions de bloc

+ +

En mode strict, à partir d'ES2015 (ES6), la portée des fonctions définies dans un bloc est limitée à ce bloc. Avant ES2015, il était interdit d'utiliser les fonctions de bloc en mode strict..

+ +
'use strict';
+
+function f() {
+  return 1;
+}
+
+{
+  function f() {
+    return 2;
+  }
+}
+
+f() === 1; // true
+
+// f() === 2 en mode non-strict
+
+ +

Les fonctions de bloc dans du code non-strict

+ +

Non.

+ +

Dans du code non-strict, les déclarations de fonctions placées dans des blocs peuvent se comporter de façon étrange :

+ +
if (onDevraitDéfinirZéro) {
+   function zéro() { // DANGER: risque de compatibilité
+      console.log("Voici zéro.");
+   }
+}
+
+ +

ES2015 indique que si onDevraitDéfinirZéro vaut false, zéro ne devrait jamais être défini car le bloc n'est jamais exécuté. En revanche, c'est une nouveauté liée à cette version du standard, non spécifiée auparavant. Certains navigateurs définissent zéro que le bloc soit exécuté ou non.

+ +

En mode strict, tous les navigateurs qui prennent en charge ES2015 gère cela de la même façon : zéro est uniquement défini si onDevraitDéfinirZéro vaut true et uniquement dans la portée du bloc induit par if.

+ +

Une méthode plus sûre est d'utiliser des expressions de fonction :

+ +
var zéro;
+if (0) {
+   zéro = function() {
+      console.log("Voici zéro.");
+   };
+}
+
+ +

Exemples

+ +

Renvoyer un nombre formaté

+ +

La fonction qui suit renvoie une chaîne de caractères contenant la représentation formatée d'un nombre avec un certain nombre de zéros préfixant le nombre.

+ +
// Cette fonction renvoie une chaîne de caractères complétée par un préfixe composé de zéros
+function padZeros(num, totalLen) {
+   var numStr = num.toString();             // On initialise la valeur à renvoyer en chaîne de caractères
+   var numZeros = totalLen - numStr.length; // On calcule le nombre de zéros
+   for (var i = 1; i <= numZeros; i++) {
+      numStr = "0" + numStr;
+   }
+   return numStr;
+}
+
+ +

Les instructions qui suivent utilisent cette fonction

+ +
var resultat;
+resultat = padZeros(42,4); // renvoie "0042"
+resultat = padZeros(42,2); // renvoie "42"
+resultat = padZeros(5,4);  // renvoie "0005"
+
+ +

Déterminer si une fonction existe

+ +

Il est possible de déterminer si oui ou non une fonction existe en utilisant l'opérateur typeof. Dans l'exemple qui suit, on teste pour savoir si l'objet window possède une propriété appelé noFunc qui serait une fonction. Si c'est le cas, elle sera utilisée, sinon on fera autre chose.

+ +
 if ('function' === typeof window.noFunc) {
+   // utilisation de noFunc()
+ } else {
+   // faire autre chose
+ }
+
+ +

Il est à noter que, dans le test if, on utilise une référence à noFunc - il n'y a pas de parenthèses après le nom de la fonction, la fonction n'est donc pas appelée.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0
{{SpecName('ES5.1', '#sec-13', 'Function Definition')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function-definitions', 'Function definitions')}}{{Spec2('ES6')}}Nouveautés : fonctions fléchées, générateurs, paramètres par défaut, paramètres du reste
{{SpecName('ES6', '#', 'function*')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ES6', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}{{Spec2('ES6')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/method_definitions/index.html b/files/fr/web/javascript/reference/functions/method_definitions/index.html deleted file mode 100644 index 13c6fdf0fa..0000000000 --- a/files/fr/web/javascript/reference/functions/method_definitions/index.html +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Définir une méthode -slug: Web/JavaScript/Reference/Functions/Method_definitions -tags: - - ECMAScript 2015 - - Fonctions - - JavaScript - - Object - - Reference - - Syntaxe -translation_of: Web/JavaScript/Reference/Functions/Method_definitions -original_slug: Web/JavaScript/Reference/Fonctions/Définition_de_méthode ---- -
{{JsSidebar("Functions")}}
- -

Avec ECMAScript 2015 (ES6), il est possible d'utiliser une notation plus courte pour définir des méthodes au sein des littéraux objets. On peut ainsi définir plus rapidement une fonction qui sera utilisée comme méthode.

- -
{{EmbedInteractiveExample("pages/js/functions-definitions.html")}}
- -

Syntaxe

- -
var obj = {
-  property( parameters… ) {},
-  *generator( parameters… ) {},
-  async property( parameters… ) {},
-  async* generator( parameters… ) {},
-
-  // avec les noms calculés :
-  [property]( parameters… ) {},
-  *[generator]( parameters… ) {},
-  async [property]( parameters… ) {},
-
-  // avec la syntaxe pour les accesseurs
-  // mutateurs :
-  get property() {},
-  set property(value) {}
-};
-
- -

Description

- -

La notation raccourcie est semblable à la syntaxe introduite par ECMAScript 5 pour les accesseurs et mutateurs.

- -

Le code suivant :

- -
var obj = {
-  toto: function() {
-    /* du code */
-  },
-  truc: function() {
-    /* du code */
-  }
-};
- -

Peut désormais être raccourci en :

- -
var obj = {
-  toto() {
-    /* du code */
-  },
-  truc() {
-    /* du code */
-  }
-};
- -

Notation raccourcie pour les générateurs

- -

Les générateurs sont des méthodes et peuvent donc être définis en utilisant la notation raccourci. Lorsqu'on les utilise :

- - - -
// Notation utilisant une propriété nommée (avant-ES2015)
-var obj2 = {
-  g: function*() {
-    var index = 0;
-    while(true)
-      yield index++;
-  }
-};
-
-// La même définition, en utilisant la notation raccourcie
-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
- -

Méthodes asynchrones avec notation raccourcie

- -

Les méthodes asynchrones peuvent également être définies grâce à une syntaxe raccourcie.

- -
// On utilise une propriété nommée
-var obj3 = {
-  f: async function () {
-    await une_promesse;
-  }
-};
-
-// Ici, on obtient le même résultat
-// avec la notation raccourcie
-var obj3 = {
-  async f() {
-    await une_promesse;
-  }
-};
-
- -

Méthodes génératrices asynchrones

- -

Les méthodes génératrices peuvent également être asynchrones (cf. async) :

- -
var obj4 = {
-  f: async function* () {
-    yield 1;
-    yield 2;
-    yield 3;
-  }
-};
-
-// Le code équivalent avec la
-// notation raccourcie
-var obj4 = {
-  async* f() {
-    yield 1;
-    yield 2;
-    yield 3;
-  }
-};
- -

Les définitions de méthodes ne sont pas constructibles

- -

Les définitions de méthodes ne sont pas des constructeurs et si on tente de les instancier, cela provoquera une exception {{jsxref("TypeError")}}.

- -
var obj = {
-  méthode() {},
-};
-new obj.méthode; // TypeError: obj.méthode is not a constructor
-
-var obj = {
-  * g() {}
-};
-new obj.g; // TypeError: obj.g is not a constructuer (changé avec ES2016)
-
- -

Exemples

- -

Cas de test

- -
var obj = {
-  a : "toto",
-  b(){ return this.a; }
-};
-console.log(obj.b()); // "toto"
-
- -

Noms de propriétés calculés

- -

Cette notation raccourcie peut également être utilisée avec des noms de propriétés calculés.

- -
var bar = {
-  toto0 : function (){return 0;},
-  toto1(){return 1;},
-  ["toto" + 2](){return 2;},
-};
-
-console.log(bar.toto0()); // 0
-console.log(bar.toto1()); // 1
-console.log(bar.toto2()); // 2
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2016')}}Les méthodes génératrices ne doivent pas implémenter la trappe [[Construct]] et déclencher une exception lorsqu'elles sont utilisées avec new.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.method_definitions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/method_definitions/index.md b/files/fr/web/javascript/reference/functions/method_definitions/index.md new file mode 100644 index 0000000000..13c6fdf0fa --- /dev/null +++ b/files/fr/web/javascript/reference/functions/method_definitions/index.md @@ -0,0 +1,216 @@ +--- +title: Définir une méthode +slug: Web/JavaScript/Reference/Functions/Method_definitions +tags: + - ECMAScript 2015 + - Fonctions + - JavaScript + - Object + - Reference + - Syntaxe +translation_of: Web/JavaScript/Reference/Functions/Method_definitions +original_slug: Web/JavaScript/Reference/Fonctions/Définition_de_méthode +--- +
{{JsSidebar("Functions")}}
+ +

Avec ECMAScript 2015 (ES6), il est possible d'utiliser une notation plus courte pour définir des méthodes au sein des littéraux objets. On peut ainsi définir plus rapidement une fonction qui sera utilisée comme méthode.

+ +
{{EmbedInteractiveExample("pages/js/functions-definitions.html")}}
+ +

Syntaxe

+ +
var obj = {
+  property( parameters… ) {},
+  *generator( parameters… ) {},
+  async property( parameters… ) {},
+  async* generator( parameters… ) {},
+
+  // avec les noms calculés :
+  [property]( parameters… ) {},
+  *[generator]( parameters… ) {},
+  async [property]( parameters… ) {},
+
+  // avec la syntaxe pour les accesseurs
+  // mutateurs :
+  get property() {},
+  set property(value) {}
+};
+
+ +

Description

+ +

La notation raccourcie est semblable à la syntaxe introduite par ECMAScript 5 pour les accesseurs et mutateurs.

+ +

Le code suivant :

+ +
var obj = {
+  toto: function() {
+    /* du code */
+  },
+  truc: function() {
+    /* du code */
+  }
+};
+ +

Peut désormais être raccourci en :

+ +
var obj = {
+  toto() {
+    /* du code */
+  },
+  truc() {
+    /* du code */
+  }
+};
+ +

Notation raccourcie pour les générateurs

+ +

Les générateurs sont des méthodes et peuvent donc être définis en utilisant la notation raccourci. Lorsqu'on les utilise :

+ + + +
// Notation utilisant une propriété nommée (avant-ES2015)
+var obj2 = {
+  g: function*() {
+    var index = 0;
+    while(true)
+      yield index++;
+  }
+};
+
+// La même définition, en utilisant la notation raccourcie
+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
+ +

Méthodes asynchrones avec notation raccourcie

+ +

Les méthodes asynchrones peuvent également être définies grâce à une syntaxe raccourcie.

+ +
// On utilise une propriété nommée
+var obj3 = {
+  f: async function () {
+    await une_promesse;
+  }
+};
+
+// Ici, on obtient le même résultat
+// avec la notation raccourcie
+var obj3 = {
+  async f() {
+    await une_promesse;
+  }
+};
+
+ +

Méthodes génératrices asynchrones

+ +

Les méthodes génératrices peuvent également être asynchrones (cf. async) :

+ +
var obj4 = {
+  f: async function* () {
+    yield 1;
+    yield 2;
+    yield 3;
+  }
+};
+
+// Le code équivalent avec la
+// notation raccourcie
+var obj4 = {
+  async* f() {
+    yield 1;
+    yield 2;
+    yield 3;
+  }
+};
+ +

Les définitions de méthodes ne sont pas constructibles

+ +

Les définitions de méthodes ne sont pas des constructeurs et si on tente de les instancier, cela provoquera une exception {{jsxref("TypeError")}}.

+ +
var obj = {
+  méthode() {},
+};
+new obj.méthode; // TypeError: obj.méthode is not a constructor
+
+var obj = {
+  * g() {}
+};
+new obj.g; // TypeError: obj.g is not a constructuer (changé avec ES2016)
+
+ +

Exemples

+ +

Cas de test

+ +
var obj = {
+  a : "toto",
+  b(){ return this.a; }
+};
+console.log(obj.b()); // "toto"
+
+ +

Noms de propriétés calculés

+ +

Cette notation raccourcie peut également être utilisée avec des noms de propriétés calculés.

+ +
var bar = {
+  toto0 : function (){return 0;},
+  toto1(){return 1;},
+  ["toto" + 2](){return 2;},
+};
+
+console.log(bar.toto0()); // 0
+console.log(bar.toto1()); // 1
+console.log(bar.toto2()); // 2
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES2016')}}Les méthodes génératrices ne doivent pas implémenter la trappe [[Construct]] et déclencher une exception lorsqu'elles sont utilisées avec new.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.method_definitions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/rest_parameters/index.html b/files/fr/web/javascript/reference/functions/rest_parameters/index.html deleted file mode 100644 index 90984a9267..0000000000 --- a/files/fr/web/javascript/reference/functions/rest_parameters/index.html +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Paramètres du reste (Rest parameters) -slug: Web/JavaScript/Reference/Functions/rest_parameters -tags: - - ECMAScript 2015 - - Functions - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Functions/rest_parameters -original_slug: Web/JavaScript/Reference/Fonctions/paramètres_du_reste ---- -
{{jsSidebar("Functions")}}
- -

Cette syntaxe permet de représenter un nombre indéfini d'arguments sous forme d'un tableau.

- -
{{EmbedInteractiveExample("pages/js/functions-restparameters.html")}}
- -

Syntaxe

- -
function f(a, b, ...lesArguments) {
-  // ...
-}
-
- -

Description

- -

Si le dernier paramètre nommé fourni à la fonction est préfixé de ... (trois points), il devient un tableau dont les éléments entre 0 (inclus) et lesArguments.length (exclus) sont fournis comme autres arguments à la fonction.

- -
function maFonction(a, b, ...plusDArguments) {
-  console.log("a", a);
-  console.log("b", b);
-  console.log("plusDArguments", plusDArguments);
-}
-
-maFonction("un", "deux", "trois", "quatre", "cinq");
-// affichera ceci dans la console :
-// a, "un"
-// b, "deux"
-// plusDArguments, ["trois", "quatre", "cinq"]
- -

Les différences entre les paramètres du reste et l'objet arguments

- -

Il y a trois principales différences entre les paramètres du reste et l'objet {{jsxref("Fonctions/arguments","arguments")}} :

- - - -

Convertir arguments en un tableau

- -

Ces paramètres ont été introduits afin de réduire le code passe-partout souvent induit par les arguments.

- -
// Avant les paramètres du reste, on observait souvent ce style de code :
-function f(a, b){
-  var args = Array.prototype.slice.call(arguments, f.length);
-  // ou encore
-  var args = [].slice.call(arguments);
-  // ou encore
-  var args = Array.from(arguments);
-
-  // et on pouvait alors écrire
-  var premier = args.shift(); // OK
-  // mais pas
-  var premier = arguments.shift(); // erreur car arguments n'est pas un tableau
-}
-
-// ce qui est l'équivalent de
-function f(...args) {
-  var tabNormal = args;
-  var premier = tabNormal.shift();
-}
-
- -

La décomposition sur les paramètres du reste

- -

On peut également décomposer les paramètres du reste en variables distinctes :

- -
function f(...[a, b, c]) {
-  return a + b + c;
-}
-
-f(1);          // NaN (b et c valent undefined)
-f(1, 2, 3);    // 6
-f(1, 2, 3, 4); // 6, le dernier paramètre n'est pas décomposé
-
- -

Vous pouvez également accéder aux éléments des paramètres du reste :

- -
function fun1(...lesArguments) {
-    console.log("valeur", lesArguments[0][0]);
-}
-
-fun1([5, 2], [5, 4]); // 5
-fun1([8, 2]); // 8
-fun1([9, 6, 7]); // 9
- -

Exemples

- -

S'il n'y a qu'un seul argument qui est décomposé par la syntaxe, la valeur sera toujours un tableau :

- -
function maFonction(a, b, ...autres);
-  console.log(a);
-  console.log(b);
-  console.log(autres);
-}
-
-maFonction("un", "deux", "trois");
-// affichera ceci dans la console
-// "un"
-// "deux"
-// ["trois"]
-
- -

De même, s'il n'y a pas suffisamment d'arguments, ce sera un tableau vide :

- -
function maFonction(a, b, ...autres);
-  console.log(a);
-  console.log(b);
-  console.log(autres);
-}
-
-maFonction("un", "deux");
-// affichera ceci dans la console
-// "un"
-// "deux"
-// []
- -

lesArguments est un tableau et dispose donc d'une propriété length permettant de compter ses éléments :

- -
function fun1(...lesArguments) {
-  console.log(lesArguments.length);
-}
-
-fun1();  // 0
-fun1(5); // 1
-fun1(5, 6, 7); // 3
-
- -

Dans l'exemple qui suit, on utilise le paramètre Rest pour collecter les arguments après le premier pour les multiplier par le premier :

- -
function multiplier(facteur, ...lesArguments) {
-  return lesArguments.map(function (element) {
-    return facteur * element;
-  });
-}
-
-var arr = multiplier(2, 1, 2, 3);
-console.log(arr); // [2, 4, 6]
-
- -

L'exemple qui suit illustre comment on peut utiliser des méthodes de Array sur le paramètre Rest mais pas sur l'objet arguments :

- -
function trierParamRest(...lesArguments) {
-  var argumentsTriés = lesArguments.sort();
-  return argumentsTriés;
-}
-
-console.log(trierParamRest(5,3,7,1)); // shows 1,3,5,7
-
-function trierArguments() {
-  var argumentsTriés = arguments.sort();
-  return argumentsTriés; // cela ne sera jamais appelé
-}
-
-// renvoie une exception TypeError: arguments.sort n'est pas une function
-console.log(trierArguments(5,3,7,1));
-
- -

Pour utiliser les méthodes propres aux instances d'Array sur l'objet arguments, il est nécessaire de le convertir.

- -
function trierAguments() {
-  var args = Array.from(arguments);
-  var argumentsTriés = args.sort();
-  return argumentsTriés;
-}
-console.log(trierArguments(5, 3, 7, 1)); // [1, 3, 5, 7]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.rest_parameters")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/rest_parameters/index.md b/files/fr/web/javascript/reference/functions/rest_parameters/index.md new file mode 100644 index 0000000000..90984a9267 --- /dev/null +++ b/files/fr/web/javascript/reference/functions/rest_parameters/index.md @@ -0,0 +1,216 @@ +--- +title: Paramètres du reste (Rest parameters) +slug: Web/JavaScript/Reference/Functions/rest_parameters +tags: + - ECMAScript 2015 + - Functions + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Functions/rest_parameters +original_slug: Web/JavaScript/Reference/Fonctions/paramètres_du_reste +--- +
{{jsSidebar("Functions")}}
+ +

Cette syntaxe permet de représenter un nombre indéfini d'arguments sous forme d'un tableau.

+ +
{{EmbedInteractiveExample("pages/js/functions-restparameters.html")}}
+ +

Syntaxe

+ +
function f(a, b, ...lesArguments) {
+  // ...
+}
+
+ +

Description

+ +

Si le dernier paramètre nommé fourni à la fonction est préfixé de ... (trois points), il devient un tableau dont les éléments entre 0 (inclus) et lesArguments.length (exclus) sont fournis comme autres arguments à la fonction.

+ +
function maFonction(a, b, ...plusDArguments) {
+  console.log("a", a);
+  console.log("b", b);
+  console.log("plusDArguments", plusDArguments);
+}
+
+maFonction("un", "deux", "trois", "quatre", "cinq");
+// affichera ceci dans la console :
+// a, "un"
+// b, "deux"
+// plusDArguments, ["trois", "quatre", "cinq"]
+ +

Les différences entre les paramètres du reste et l'objet arguments

+ +

Il y a trois principales différences entre les paramètres du reste et l'objet {{jsxref("Fonctions/arguments","arguments")}} :

+ + + +

Convertir arguments en un tableau

+ +

Ces paramètres ont été introduits afin de réduire le code passe-partout souvent induit par les arguments.

+ +
// Avant les paramètres du reste, on observait souvent ce style de code :
+function f(a, b){
+  var args = Array.prototype.slice.call(arguments, f.length);
+  // ou encore
+  var args = [].slice.call(arguments);
+  // ou encore
+  var args = Array.from(arguments);
+
+  // et on pouvait alors écrire
+  var premier = args.shift(); // OK
+  // mais pas
+  var premier = arguments.shift(); // erreur car arguments n'est pas un tableau
+}
+
+// ce qui est l'équivalent de
+function f(...args) {
+  var tabNormal = args;
+  var premier = tabNormal.shift();
+}
+
+ +

La décomposition sur les paramètres du reste

+ +

On peut également décomposer les paramètres du reste en variables distinctes :

+ +
function f(...[a, b, c]) {
+  return a + b + c;
+}
+
+f(1);          // NaN (b et c valent undefined)
+f(1, 2, 3);    // 6
+f(1, 2, 3, 4); // 6, le dernier paramètre n'est pas décomposé
+
+ +

Vous pouvez également accéder aux éléments des paramètres du reste :

+ +
function fun1(...lesArguments) {
+    console.log("valeur", lesArguments[0][0]);
+}
+
+fun1([5, 2], [5, 4]); // 5
+fun1([8, 2]); // 8
+fun1([9, 6, 7]); // 9
+ +

Exemples

+ +

S'il n'y a qu'un seul argument qui est décomposé par la syntaxe, la valeur sera toujours un tableau :

+ +
function maFonction(a, b, ...autres);
+  console.log(a);
+  console.log(b);
+  console.log(autres);
+}
+
+maFonction("un", "deux", "trois");
+// affichera ceci dans la console
+// "un"
+// "deux"
+// ["trois"]
+
+ +

De même, s'il n'y a pas suffisamment d'arguments, ce sera un tableau vide :

+ +
function maFonction(a, b, ...autres);
+  console.log(a);
+  console.log(b);
+  console.log(autres);
+}
+
+maFonction("un", "deux");
+// affichera ceci dans la console
+// "un"
+// "deux"
+// []
+ +

lesArguments est un tableau et dispose donc d'une propriété length permettant de compter ses éléments :

+ +
function fun1(...lesArguments) {
+  console.log(lesArguments.length);
+}
+
+fun1();  // 0
+fun1(5); // 1
+fun1(5, 6, 7); // 3
+
+ +

Dans l'exemple qui suit, on utilise le paramètre Rest pour collecter les arguments après le premier pour les multiplier par le premier :

+ +
function multiplier(facteur, ...lesArguments) {
+  return lesArguments.map(function (element) {
+    return facteur * element;
+  });
+}
+
+var arr = multiplier(2, 1, 2, 3);
+console.log(arr); // [2, 4, 6]
+
+ +

L'exemple qui suit illustre comment on peut utiliser des méthodes de Array sur le paramètre Rest mais pas sur l'objet arguments :

+ +
function trierParamRest(...lesArguments) {
+  var argumentsTriés = lesArguments.sort();
+  return argumentsTriés;
+}
+
+console.log(trierParamRest(5,3,7,1)); // shows 1,3,5,7
+
+function trierArguments() {
+  var argumentsTriés = arguments.sort();
+  return argumentsTriés; // cela ne sera jamais appelé
+}
+
+// renvoie une exception TypeError: arguments.sort n'est pas une function
+console.log(trierArguments(5,3,7,1));
+
+ +

Pour utiliser les méthodes propres aux instances d'Array sur l'objet arguments, il est nécessaire de le convertir.

+ +
function trierAguments() {
+  var args = Array.from(arguments);
+  var argumentsTriés = args.sort();
+  return argumentsTriés;
+}
+console.log(trierArguments(5, 3, 7, 1)); // [1, 3, 5, 7]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.rest_parameters")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/functions/set/index.html b/files/fr/web/javascript/reference/functions/set/index.html deleted file mode 100644 index 2e7778875e..0000000000 --- a/files/fr/web/javascript/reference/functions/set/index.html +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: L'opérateur set -slug: Web/JavaScript/Reference/Functions/set -tags: - - ECMAScript 5 - - Functions - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Functions/set -original_slug: Web/JavaScript/Reference/Fonctions/set ---- -
{{jsSidebar("Functions")}}
- -

La syntaxe set permet de lier une propriété d'un objet à une fonction qui sera appelée à chaque tentative de modification de cette propriété.

- -
{{EmbedInteractiveExample("pages/js/functions-setter.html")}}
- -

Syntaxe

- -
{set prop(val) { . . .}}
-{set [expression](val) { . . .}}
- -

Paramètres

- -
-
prop
-
Le nom de la propriété à lier à la fonction.
-
val
-
Un alias pour la variable qui contient la valeur qu'on souhaiterait affecter à prop.
-
expression
-
Avec ECMAScript 2015, il est également possible d'utiliser des expressions pour utiliser un nom de propriété calculé à lier à la fonction.
-
- -

Description

- -

En JavaScript, un mutateur (ou setter en anglais) peut être utiisé afin d'exécuter une fonction à chaque fois qu'on souhaite modifier la valeur d'une propriété donnée. La plupart du temps, les mutateurs sont utilisés avec les accesseurs (getters) afin de créer une pseudo-propriété. Il n'est pas possible d'avoir à la fois un mutateur et une valeur donnée pour une même propriété.

- -

On notera que set :

- -
- -
- -

On peut retirer un mutateur d'un objet grâce à l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}}.

- -

Exemples

- -

Définir un mutateur sur de nouveaux objets avec un littéral objet

- -

Dans l'exemple qui suit, on définit une pseudo-propriété courant pour un objet o qui, lorsqu'elle recevra une valeur, mettra à jour la propriété log avec la valeur reçue :

- -
var o = {
-  set courant (str) {
-    this.log[this.log.length] = str;
-  },
-  log: []
-}
-
- -

On notera que courant n'est pas défini. Toute tentative pour y accéder renverra undefined.

- -

Supprimer un mutateur grâce à l'opérateur delete

- -

Si on souhaite retirer un mutateur, on peut simplement utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}} :

- -
delete o.courant;
-
- -

Définir un mutateur sur un objet existant avec defineProperty

- -

On peut également ajouter un mutateur sur un objet d'ores et déjà créé. Pour cela, on utilisera la méthode {{jsxref("Object.defineProperty()")}}.

- -
var o = { a:0 };
-
-Object.defineProperty(o, "b", { set: function (x) { this.a = x / 2; } });
-
-o.b = 10; // On utilise le setter, qui affecte 10 / 2 (5) à 'a'
-console.log(o.a) // 5
- -

Utiliser un nom de propriété calculé

- -
var expr = "toto";
-
-var obj = {
-  bidule: "truc",
-  set [expr](v) { this.bidule = v; }
-};
-
-console.log(obj.bidule); // "truc"
-obj.toto = "bidule";      // le mutateur est utilisé
-console.log(obj.bidule); // "bidule"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES6')}}Ajout des noms de propriétés calculés
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.functions.set")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/functions/set/index.md b/files/fr/web/javascript/reference/functions/set/index.md new file mode 100644 index 0000000000..2e7778875e --- /dev/null +++ b/files/fr/web/javascript/reference/functions/set/index.md @@ -0,0 +1,139 @@ +--- +title: L'opérateur set +slug: Web/JavaScript/Reference/Functions/set +tags: + - ECMAScript 5 + - Functions + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Functions/set +original_slug: Web/JavaScript/Reference/Fonctions/set +--- +
{{jsSidebar("Functions")}}
+ +

La syntaxe set permet de lier une propriété d'un objet à une fonction qui sera appelée à chaque tentative de modification de cette propriété.

+ +
{{EmbedInteractiveExample("pages/js/functions-setter.html")}}
+ +

Syntaxe

+ +
{set prop(val) { . . .}}
+{set [expression](val) { . . .}}
+ +

Paramètres

+ +
+
prop
+
Le nom de la propriété à lier à la fonction.
+
val
+
Un alias pour la variable qui contient la valeur qu'on souhaiterait affecter à prop.
+
expression
+
Avec ECMAScript 2015, il est également possible d'utiliser des expressions pour utiliser un nom de propriété calculé à lier à la fonction.
+
+ +

Description

+ +

En JavaScript, un mutateur (ou setter en anglais) peut être utiisé afin d'exécuter une fonction à chaque fois qu'on souhaite modifier la valeur d'une propriété donnée. La plupart du temps, les mutateurs sont utilisés avec les accesseurs (getters) afin de créer une pseudo-propriété. Il n'est pas possible d'avoir à la fois un mutateur et une valeur donnée pour une même propriété.

+ +

On notera que set :

+ +
+ +
+ +

On peut retirer un mutateur d'un objet grâce à l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}}.

+ +

Exemples

+ +

Définir un mutateur sur de nouveaux objets avec un littéral objet

+ +

Dans l'exemple qui suit, on définit une pseudo-propriété courant pour un objet o qui, lorsqu'elle recevra une valeur, mettra à jour la propriété log avec la valeur reçue :

+ +
var o = {
+  set courant (str) {
+    this.log[this.log.length] = str;
+  },
+  log: []
+}
+
+ +

On notera que courant n'est pas défini. Toute tentative pour y accéder renverra undefined.

+ +

Supprimer un mutateur grâce à l'opérateur delete

+ +

Si on souhaite retirer un mutateur, on peut simplement utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}} :

+ +
delete o.courant;
+
+ +

Définir un mutateur sur un objet existant avec defineProperty

+ +

On peut également ajouter un mutateur sur un objet d'ores et déjà créé. Pour cela, on utilisera la méthode {{jsxref("Object.defineProperty()")}}.

+ +
var o = { a:0 };
+
+Object.defineProperty(o, "b", { set: function (x) { this.a = x / 2; } });
+
+o.b = 10; // On utilise le setter, qui affecte 10 / 2 (5) à 'a'
+console.log(o.a) // 5
+ +

Utiliser un nom de propriété calculé

+ +
var expr = "toto";
+
+var obj = {
+  bidule: "truc",
+  set [expr](v) { this.bidule = v; }
+};
+
+console.log(obj.bidule); // "truc"
+obj.toto = "bidule";      // le mutateur est utilisé
+console.log(obj.bidule); // "bidule"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ES6')}}Ajout des noms de propriétés calculés
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.functions.set")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/aggregateerror/index.html b/files/fr/web/javascript/reference/global_objects/aggregateerror/index.html deleted file mode 100644 index 408d49a007..0000000000 --- a/files/fr/web/javascript/reference/global_objects/aggregateerror/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: AggregateError -slug: Web/JavaScript/Reference/Global_Objects/AggregateError -tags: - - AggregateError - - Classe - - Experimental - - Interface - - JavaScript -translation_of: Web/JavaScript/Reference/Global_Objects/AggregateError -original_slug: Web/JavaScript/Reference/Objets_globaux/AggregateError ---- -
{{JSRef}}
- -

Un objet AggregateError représente une erreur lorsque plusieurs erreurs doivent être agrégées en une seule. Ce type d'exception est levée lorsque plusieurs erreurs sont rapportées par une opération, par exemple avec {{JSxRef("Promise.any()")}} lorsque l'ensemble des promesses qui lui sont passées échouent.

- -

Constructeur

- -
-
AggregateError()
-
Crée un nouvel objet AggregateError.
-
- -

Propriétés des instances

- -
-
{{JSxRef("Error.prototype.message", "AggregateError.prototype.message")}}
-
Le message d'erreur. La valeur par défaut est "".
-
{{JSxRef("Error.prototype.name", "AggregateError.prototype.name")}}
-
Le nom de l'erreur. La valeur par défaut est "AggregateError".
-
- -

Exemples

- -

Intercepter une erreur AggregateError

- -
Promise.any([
-  Promise.reject(new Error("une erreur")),
-]).catch(e => {
-  console.log(e instanceof AggregateError); // true
-  console.log(e.message);                   // "All Promises rejected"
-  console.log(e.name);                      // "AggregateError"
-  console.log(e.errors);                    // [ Error: "une erreur" ]
-});
-
- -

Créer un objet AggregateError

- -
try {
-  throw new AggregateError([
-    new Error("une erreur"),
-  ], 'Coucou');
-} catch (e) {
-  console.log(e instanceof AggregateError); // true
-  console.log(e.message);                   // "Coucou"
-  console.log(e.name);                      // "AggregateError"
-  console.log(e.errors);                    // [ Error: "une erreur" ]
-}
-
- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('Promise.any', '#sec-aggregate-error-object-structure', 'AggregateError')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir

- - diff --git a/files/fr/web/javascript/reference/global_objects/aggregateerror/index.md b/files/fr/web/javascript/reference/global_objects/aggregateerror/index.md new file mode 100644 index 0000000000..408d49a007 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/aggregateerror/index.md @@ -0,0 +1,84 @@ +--- +title: AggregateError +slug: Web/JavaScript/Reference/Global_Objects/AggregateError +tags: + - AggregateError + - Classe + - Experimental + - Interface + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/AggregateError +original_slug: Web/JavaScript/Reference/Objets_globaux/AggregateError +--- +
{{JSRef}}
+ +

Un objet AggregateError représente une erreur lorsque plusieurs erreurs doivent être agrégées en une seule. Ce type d'exception est levée lorsque plusieurs erreurs sont rapportées par une opération, par exemple avec {{JSxRef("Promise.any()")}} lorsque l'ensemble des promesses qui lui sont passées échouent.

+ +

Constructeur

+ +
+
AggregateError()
+
Crée un nouvel objet AggregateError.
+
+ +

Propriétés des instances

+ +
+
{{JSxRef("Error.prototype.message", "AggregateError.prototype.message")}}
+
Le message d'erreur. La valeur par défaut est "".
+
{{JSxRef("Error.prototype.name", "AggregateError.prototype.name")}}
+
Le nom de l'erreur. La valeur par défaut est "AggregateError".
+
+ +

Exemples

+ +

Intercepter une erreur AggregateError

+ +
Promise.any([
+  Promise.reject(new Error("une erreur")),
+]).catch(e => {
+  console.log(e instanceof AggregateError); // true
+  console.log(e.message);                   // "All Promises rejected"
+  console.log(e.name);                      // "AggregateError"
+  console.log(e.errors);                    // [ Error: "une erreur" ]
+});
+
+ +

Créer un objet AggregateError

+ +
try {
+  throw new AggregateError([
+    new Error("une erreur"),
+  ], 'Coucou');
+} catch (e) {
+  console.log(e instanceof AggregateError); // true
+  console.log(e.message);                   // "Coucou"
+  console.log(e.name);                      // "AggregateError"
+  console.log(e.errors);                    // [ Error: "une erreur" ]
+}
+
+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('Promise.any', '#sec-aggregate-error-object-structure', 'AggregateError')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/@@iterator/index.html b/files/fr/web/javascript/reference/global_objects/array/@@iterator/index.html deleted file mode 100644 index 44665dcba8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/@@iterator/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Array.prototype[@@iterator]() -slug: Web/JavaScript/Reference/Global_Objects/Array/@@iterator -tags: - - Array - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@iterator -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/@@iterator ---- -
{{JSRef}}
- -

La valeur initiale de la propriété @@iterator correspond à la valeur initiale fournie par l'itérateur {{jsxref("Array.prototype.values()", "values")}}.

- -

Syntaxe

- -
arr[Symbol.iterator]()
- -

Valeur de retour

- -

La première valeur fournie par {{jsxref("Array.prototype.values()","values()")}}. Si on utilise arr[Symbol.iterator] (sans les parenthèses) le navigateur renverra par défaut la fonction {{jsxref("Array.prototype.values()", "values()")}}.

- -

Exemples

- -

Parcourir un tableau avec une boucle for...of

- -
var arr = ['w', 'y', 'k', 'o', 'p'];
-var eArr  = arr[Symbol.iterator]();
-// il est nécessaire que l'environnement supporte
-// les boucles for..of et les variables
-// utilisées avec let ou const ou var
-for (let letter of eArr) {
-  console.log(letter);
-}
-
- -

Parcourir un tableau avec next

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

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.@@iterator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/@@iterator/index.md b/files/fr/web/javascript/reference/global_objects/array/@@iterator/index.md new file mode 100644 index 0000000000..44665dcba8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/@@iterator/index.md @@ -0,0 +1,89 @@ +--- +title: Array.prototype[@@iterator]() +slug: Web/JavaScript/Reference/Global_Objects/Array/@@iterator +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@iterator +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/@@iterator +--- +
{{JSRef}}
+ +

La valeur initiale de la propriété @@iterator correspond à la valeur initiale fournie par l'itérateur {{jsxref("Array.prototype.values()", "values")}}.

+ +

Syntaxe

+ +
arr[Symbol.iterator]()
+ +

Valeur de retour

+ +

La première valeur fournie par {{jsxref("Array.prototype.values()","values()")}}. Si on utilise arr[Symbol.iterator] (sans les parenthèses) le navigateur renverra par défaut la fonction {{jsxref("Array.prototype.values()", "values()")}}.

+ +

Exemples

+ +

Parcourir un tableau avec une boucle for...of

+ +
var arr = ['w', 'y', 'k', 'o', 'p'];
+var eArr  = arr[Symbol.iterator]();
+// il est nécessaire que l'environnement supporte
+// les boucles for..of et les variables
+// utilisées avec let ou const ou var
+for (let letter of eArr) {
+  console.log(letter);
+}
+
+ +

Parcourir un tableau avec next

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.@@iterator")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/@@species/index.html b/files/fr/web/javascript/reference/global_objects/array/@@species/index.html deleted file mode 100644 index 8275c5757d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/@@species/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: get Array[@@species] -slug: Web/JavaScript/Reference/Global_Objects/Array/@@species -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@species -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/@@species ---- -
{{JSRef}}
- -

La propriété d'accesseur Array[@@species] renvoie le constructeur Array.

- -

Syntaxe

- -
Array[Symbol.species]
-
- -

Valeur de retour

- -

Le constructeur {{jsxref("Array")}}.

- -

Description

- -

L'accesseur species renvoie le constructeur par défaut pour les objets Array. Les constructeurs des sous-classes peuvent le surcharger afin de modifier l'affectation du constructeur.

- -

Exemples

- -

La propriété renvoie le constructeur par défaut, dans le cas des objets Array, c'est le constructeur Array :

- -
Array[Symbol.species]; // function Array()
- -

Pour un objet dérivé, la valeur de species pour une classe MonArray sera le constructeur de cette classe. Vous pouvez surcharger ce comportement afin de renvoyer le constructeur Array :

- -
class MonArray extends Array {
-  // On surcharge le symbole species
-  // pour renvoyer le constructeur Array parent
-  static get [Symbol.species]() { return Array; }
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-array-@@species', 'get Array [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-array-@@species', 'get Array [ @@species ]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.@@species")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/@@species/index.md b/files/fr/web/javascript/reference/global_objects/array/@@species/index.md new file mode 100644 index 0000000000..8275c5757d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/@@species/index.md @@ -0,0 +1,75 @@ +--- +title: get Array[@@species] +slug: Web/JavaScript/Reference/Global_Objects/Array/@@species +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@species +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/@@species +--- +
{{JSRef}}
+ +

La propriété d'accesseur Array[@@species] renvoie le constructeur Array.

+ +

Syntaxe

+ +
Array[Symbol.species]
+
+ +

Valeur de retour

+ +

Le constructeur {{jsxref("Array")}}.

+ +

Description

+ +

L'accesseur species renvoie le constructeur par défaut pour les objets Array. Les constructeurs des sous-classes peuvent le surcharger afin de modifier l'affectation du constructeur.

+ +

Exemples

+ +

La propriété renvoie le constructeur par défaut, dans le cas des objets Array, c'est le constructeur Array :

+ +
Array[Symbol.species]; // function Array()
+ +

Pour un objet dérivé, la valeur de species pour une classe MonArray sera le constructeur de cette classe. Vous pouvez surcharger ce comportement afin de renvoyer le constructeur Array :

+ +
class MonArray extends Array {
+  // On surcharge le symbole species
+  // pour renvoyer le constructeur Array parent
+  static get [Symbol.species]() { return Array; }
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-array-@@species', 'get Array [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-array-@@species', 'get Array [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.@@species")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.html b/files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.html deleted file mode 100644 index c0f9883779..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Array.prototype[@@unscopables] -slug: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables -tags: - - Array - - ECMAScript 2015 - - JavaScript - - Propriété - - Prototype -translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/@@unscopables ---- -
{{JSRef}}
- -

La propriété symbol @@unscopable contient les noms des propriétés qui ne faisait pas partie du standard ECMAScript avant ES2015 (ES6). Ces propriétés sont exclues lors de liaisons effectuée via l'instruction with.

- -

Syntaxe

- -
arr[Symbol.unscopables]
- -

Description

- -

Les propriétés natives d'un objet Array qui sont exclues lorsqu'on utilise with sont copyWithin, entries, fill, find, findIndex, includes, keys et values.

- -

Voir la page sur le symbole {{jsxref("Symbol.unscopables")}} pour manipuler unscopables sur des objets personnalisés.

- -

{{js_property_attributes(0,0,1)}}

- -

Exemples

- -

Le code qui suit fonctionne bien pour ES5 et les versions antérieures. En revanche, pour ECMAScript 2015 (ES6) et les versions ultérieures où la méthode  {{jsxref("Array.prototype.keys()")}} existe, lorsqu'on utilise un environnement créé avec with, "keys" serait désormais la méthode et non la variable. C'est là que le symbole natif @@unscopables Array.prototype[@@unscopables] intervient et empêche d'explorer ces méthodes avec with.

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.@@unscopables")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.md b/files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.md new file mode 100644 index 0000000000..c0f9883779 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/@@unscopables/index.md @@ -0,0 +1,73 @@ +--- +title: Array.prototype[@@unscopables] +slug: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Propriété + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/@@unscopables +--- +
{{JSRef}}
+ +

La propriété symbol @@unscopable contient les noms des propriétés qui ne faisait pas partie du standard ECMAScript avant ES2015 (ES6). Ces propriétés sont exclues lors de liaisons effectuée via l'instruction with.

+ +

Syntaxe

+ +
arr[Symbol.unscopables]
+ +

Description

+ +

Les propriétés natives d'un objet Array qui sont exclues lorsqu'on utilise with sont copyWithin, entries, fill, find, findIndex, includes, keys et values.

+ +

Voir la page sur le symbole {{jsxref("Symbol.unscopables")}} pour manipuler unscopables sur des objets personnalisés.

+ +

{{js_property_attributes(0,0,1)}}

+ +

Exemples

+ +

Le code qui suit fonctionne bien pour ES5 et les versions antérieures. En revanche, pour ECMAScript 2015 (ES6) et les versions ultérieures où la méthode  {{jsxref("Array.prototype.keys()")}} existe, lorsqu'on utilise un environnement créé avec with, "keys" serait désormais la méthode et non la variable. C'est là que le symbole natif @@unscopables Array.prototype[@@unscopables] intervient et empêche d'explorer ces méthodes avec with.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.@@unscopables")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/array/index.html b/files/fr/web/javascript/reference/global_objects/array/array/index.html deleted file mode 100644 index c00ef0c0b3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/array/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Constructeur Array() -slug: Web/JavaScript/Reference/Global_Objects/Array/Array -tags: - - Array - - Constructeur - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/Array ---- -
{{JSRef}}
- -

Le constructeur Array() permet de créer des objets {{jsxref("Array")}}.

- -

Syntaxe

- -
[element0, element1, ..., elementN]
-
-new Array(element0, element1[, ...[, elementN]])
-new Array(longueurTableau)
- -

Paramètres

- -
-
elementN
-
Un tableau JavaScript est initialisé avec les éléments indiqués à moins qu'un seul argument ne soit passé (cf. longueurTableau ci-après). On notera que ce cas au limite ne s'applique qu'avec le constructeur Array. Si on utilise la forme littérale (avec les crochets), on peut initialiser un tableau avec un seul élément.
-
longueurTableau
-
Si le seul argument passé au constructeur Array est un entier entre 0 et 2^32-1 (inclus), le constructeur renverra un tableau dont la propriété length vaut ce nombre. Note : le tableau contiendra des éléments vides (à ne pas confondre avec des éléments qui vaudraient undefined). Si l'argument est un autre nombre, une exception {{jsxref("RangeError")}} sera levée.
-
- -

Exemples

- -

Utilisation de la notation littérale

- -

Les tableaux peuvent être créés avec une notation littérale :

- -
let fruits = ['Pomme', 'Banane'];
-
-console.log(fruits.length); // 2
-console.log(fruits[0]);     // "Pomme"
-
- -

Utilisation du constructeur avec un seul paramètre

- -

On peut créer des tableaux grâce au constructeur avec un seul paramètre numérique. On crée alors un tableau dont la propriété length vaut le nombre passé en argument et dont les éléments sont vides.

- -
let fruits = new Array(2);
-
-console.log(fruits.length); // 2
-console.log(fruits[0]);     // undefined
-
- -

Utilisation du constructeur avec plusieurs paramètres

- -

Si on utilise plus d'un argument, un nouveau tableau ({{jsxref("Array")}}) sera construit avec les éléments passés en arguments.

- -
let fruits = new Array('Pomme', 'Banane');
-
-console.log(fruits.length); // 2
-console.log(fruits[0]);     // "Pomme"
-
- -

Spécifications

- - - - - - - - - - -
Spécification
{{SpecName('ESDraft', '#sec-array-constructor', 'Array constructor')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/array/index.md b/files/fr/web/javascript/reference/global_objects/array/array/index.md new file mode 100644 index 0000000000..c00ef0c0b3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/array/index.md @@ -0,0 +1,85 @@ +--- +title: Constructeur Array() +slug: Web/JavaScript/Reference/Global_Objects/Array/Array +tags: + - Array + - Constructeur + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/Array +--- +
{{JSRef}}
+ +

Le constructeur Array() permet de créer des objets {{jsxref("Array")}}.

+ +

Syntaxe

+ +
[element0, element1, ..., elementN]
+
+new Array(element0, element1[, ...[, elementN]])
+new Array(longueurTableau)
+ +

Paramètres

+ +
+
elementN
+
Un tableau JavaScript est initialisé avec les éléments indiqués à moins qu'un seul argument ne soit passé (cf. longueurTableau ci-après). On notera que ce cas au limite ne s'applique qu'avec le constructeur Array. Si on utilise la forme littérale (avec les crochets), on peut initialiser un tableau avec un seul élément.
+
longueurTableau
+
Si le seul argument passé au constructeur Array est un entier entre 0 et 2^32-1 (inclus), le constructeur renverra un tableau dont la propriété length vaut ce nombre. Note : le tableau contiendra des éléments vides (à ne pas confondre avec des éléments qui vaudraient undefined). Si l'argument est un autre nombre, une exception {{jsxref("RangeError")}} sera levée.
+
+ +

Exemples

+ +

Utilisation de la notation littérale

+ +

Les tableaux peuvent être créés avec une notation littérale :

+ +
let fruits = ['Pomme', 'Banane'];
+
+console.log(fruits.length); // 2
+console.log(fruits[0]);     // "Pomme"
+
+ +

Utilisation du constructeur avec un seul paramètre

+ +

On peut créer des tableaux grâce au constructeur avec un seul paramètre numérique. On crée alors un tableau dont la propriété length vaut le nombre passé en argument et dont les éléments sont vides.

+ +
let fruits = new Array(2);
+
+console.log(fruits.length); // 2
+console.log(fruits[0]);     // undefined
+
+ +

Utilisation du constructeur avec plusieurs paramètres

+ +

Si on utilise plus d'un argument, un nouveau tableau ({{jsxref("Array")}}) sera construit avec les éléments passés en arguments.

+ +
let fruits = new Array('Pomme', 'Banane');
+
+console.log(fruits.length); // 2
+console.log(fruits[0]);     // "Pomme"
+
+ +

Spécifications

+ + + + + + + + + + +
Spécification
{{SpecName('ESDraft', '#sec-array-constructor', 'Array constructor')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/concat/index.html b/files/fr/web/javascript/reference/global_objects/array/concat/index.html deleted file mode 100644 index e39788b6a0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/concat/index.html +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: Array.prototype.concat() -slug: Web/JavaScript/Reference/Global_Objects/Array/concat -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/concat -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/concat ---- -
{{JSRef}}
- -

La méthode concat() est utilisée afin de fusionner un ou plusieurs tableaux en les concaténant. Cette méthode ne modifie pas les tableaux existants, elle renvoie un nouveau tableau qui est le résultat de l'opération.

- -
{{EmbedInteractiveExample("pages/js/array-concat.html")}}
- -

Syntaxe

- -
let nouveau_tableau = ancien_tableau.concat(valeur1[, valeur2[, ...[, valeurN]]])
- -

Paramètres

- -
-
valeurN{{optional_inline}}
-
Des tableaux et/ou des valeurs à concaténer dans le nouveau tableau. Si tous les arguments valeurN valent undefined, concat renverra une copie superficielle du tableau sur lequel elle est appelée. Voir ci-après pour plus de détails.
-
- -

Valeur de retour

- -

Une nouvelle instance de {{jsxref("Array")}}.

- -

Description

- -

La méthode concat permet de créer un nouveau tableau constitué des éléments de l'objet this sur lequel elle a été appelée, suivis dans l'ordre par, pour chaque paramètre, les éléments de ce paramètre (s'il s'agit d'un tableau) ou le paramètre lui-même (s'il ne s'agit pas d'un tableau). La concaténation ne « déplie » pas les tableaux imbriqués.

- -

La méthode concat ne modifie pas this ni aucun des tableaux passés en paramètres, mais renvoie une copie qui contient des copies des mêmes éléments combinées que ceux des tableaux originaux. Les éléments des tableaux originaux sont copiés dans le nouveau tableau comme suit :

- - - - - -
-

Note : La concaténation n'impactera pas les tableaux originaux. Par la suite, toute opération sur le nouveau tableau n'aura aucun effet sur les tableaux d'origine, et vice versa.

-
- -

Exemples

- -

Concaténer deux tableaux

- -

Le code qui suit concatène deux tableaux :

- -
let alpha = ["a", "b", "c"];
-let numerique = [1, 2, 3];
-
-alpha.concat(numerique);
-// donne : ["a", "b", "c", 1, 2, 3]
-
- -

Concaténer trois tableaux

- -

Le code qui suit concatène trois tableaux :

- -
let num1 = [1, 2, 3];
-let num2 = [4, 5, 6];
-let num3 = [7, 8, 9];
-
-let nums = num1.concat(num2, num3);
-
-console.log(nums);
-// [1, 2, 3, 4, 5, 6, 7, 8, 9]
-
- -

Concaténer des valeurs avec un tableau

- -

Le code qui suit ajoute trois valeurs à un tableau :

- -
let alpha = ['a', 'b', 'c'];
-
-let alphanumerique = alpha.concat(1, [2, 3]);
-
-console.log(alphanumerique);
-// ['a', 'b', 'c', 1, 2, 3]
-
- -

Concaténer des tableaux imbriqués

- -

Dans le code qui suit, on concatène deux tableaux qui ont plusieurs dimensions et on illustre la conservation des références :

- -
let num1 = [[1]];
-let num2 = [2, [3]];
-
-let nums = num1.concat(num2);
-
-console.log(nums);
-// affichera [[1], 2, [3]]
-
-// Ici, on modifie le premier élément de num1
-num1[0].push(4);
-
-console.log(nums);
-// affichera [[1, 4], 2, [3]]
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.4', 'Array.prototype.concat')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.concat', 'Array.prototype.concat')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.concat', 'Array.prototype.concat')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.concat")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/concat/index.md b/files/fr/web/javascript/reference/global_objects/array/concat/index.md new file mode 100644 index 0000000000..e39788b6a0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/concat/index.md @@ -0,0 +1,155 @@ +--- +title: Array.prototype.concat() +slug: Web/JavaScript/Reference/Global_Objects/Array/concat +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/concat +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/concat +--- +
{{JSRef}}
+ +

La méthode concat() est utilisée afin de fusionner un ou plusieurs tableaux en les concaténant. Cette méthode ne modifie pas les tableaux existants, elle renvoie un nouveau tableau qui est le résultat de l'opération.

+ +
{{EmbedInteractiveExample("pages/js/array-concat.html")}}
+ +

Syntaxe

+ +
let nouveau_tableau = ancien_tableau.concat(valeur1[, valeur2[, ...[, valeurN]]])
+ +

Paramètres

+ +
+
valeurN{{optional_inline}}
+
Des tableaux et/ou des valeurs à concaténer dans le nouveau tableau. Si tous les arguments valeurN valent undefined, concat renverra une copie superficielle du tableau sur lequel elle est appelée. Voir ci-après pour plus de détails.
+
+ +

Valeur de retour

+ +

Une nouvelle instance de {{jsxref("Array")}}.

+ +

Description

+ +

La méthode concat permet de créer un nouveau tableau constitué des éléments de l'objet this sur lequel elle a été appelée, suivis dans l'ordre par, pour chaque paramètre, les éléments de ce paramètre (s'il s'agit d'un tableau) ou le paramètre lui-même (s'il ne s'agit pas d'un tableau). La concaténation ne « déplie » pas les tableaux imbriqués.

+ +

La méthode concat ne modifie pas this ni aucun des tableaux passés en paramètres, mais renvoie une copie qui contient des copies des mêmes éléments combinées que ceux des tableaux originaux. Les éléments des tableaux originaux sont copiés dans le nouveau tableau comme suit :

+ + + + + +
+

Note : La concaténation n'impactera pas les tableaux originaux. Par la suite, toute opération sur le nouveau tableau n'aura aucun effet sur les tableaux d'origine, et vice versa.

+
+ +

Exemples

+ +

Concaténer deux tableaux

+ +

Le code qui suit concatène deux tableaux :

+ +
let alpha = ["a", "b", "c"];
+let numerique = [1, 2, 3];
+
+alpha.concat(numerique);
+// donne : ["a", "b", "c", 1, 2, 3]
+
+ +

Concaténer trois tableaux

+ +

Le code qui suit concatène trois tableaux :

+ +
let num1 = [1, 2, 3];
+let num2 = [4, 5, 6];
+let num3 = [7, 8, 9];
+
+let nums = num1.concat(num2, num3);
+
+console.log(nums);
+// [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+ +

Concaténer des valeurs avec un tableau

+ +

Le code qui suit ajoute trois valeurs à un tableau :

+ +
let alpha = ['a', 'b', 'c'];
+
+let alphanumerique = alpha.concat(1, [2, 3]);
+
+console.log(alphanumerique);
+// ['a', 'b', 'c', 1, 2, 3]
+
+ +

Concaténer des tableaux imbriqués

+ +

Dans le code qui suit, on concatène deux tableaux qui ont plusieurs dimensions et on illustre la conservation des références :

+ +
let num1 = [[1]];
+let num2 = [2, [3]];
+
+let nums = num1.concat(num2);
+
+console.log(nums);
+// affichera [[1], 2, [3]]
+
+// Ici, on modifie le premier élément de num1
+num1[0].push(4);
+
+console.log(nums);
+// affichera [[1, 4], 2, [3]]
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.4', 'Array.prototype.concat')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.concat', 'Array.prototype.concat')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.concat', 'Array.prototype.concat')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.concat")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/copywithin/index.html b/files/fr/web/javascript/reference/global_objects/array/copywithin/index.html deleted file mode 100644 index befc06152e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/copywithin/index.html +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: Array.prototype.copyWithin() -slug: Web/JavaScript/Reference/Global_Objects/Array/copyWithin -tags: - - Array - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/copyWithin -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/copyWithin ---- -
{{JSRef}}
- -

La méthode copyWithin() effectue une copie superficielle (shallow copy) d'une partie d'un tableau sur ce même tableau et le renvoie, sans modifier sa taille.

- -
{{EmbedInteractiveExample("pages/js/array-copywithin.html")}}
- -

Syntaxe

- -
arr.copyWithin(cible)
-arr.copyWithin(cible, début)
-arr.copyWithin(cible, début, fin)
-
- -

Paramètres

- -
-
cible
-
-

Indice à partir duquel la séquence sera copiée. Si la valeur est négative, cible sera compté à partir de la fin du tableau.

- -

Si cible est supérieur ou égal à arr.length, rien ne sera copié. Si cible est positionné apès début, la séquence copiée sera réduite pour correspondre à arr.length.

-
-
début {{optional_inline}}
-
Indice de début de la séquence a copier. Si la valeur est négative, début sera compté à partir de la fin du tableau. Si début est omis, copyWithin copiera à partir du début du tableau (par défaut 0).
-
fin {{optional_inline}}
-
Indice de fin de la séquence a copier. copyWithin copie jusqu'à fin (non-inclusif). Si la valeur est négative, end sera compté à partir de la fin du tableau. Si end est omis, copyWithin copiera jusqu'à la fin du tableau (par défaut arr.length).
-
- -

Valeur de retour

- -

Le tableau modifié par la méthode.

- -

Description

- -

La fonction copyWithin() fonctionne de la même façon que memmove en C/C++. C'est une méthode très performante pour décaler les données d'un {{jsxref("Array")}} ou d'un {{jsxref("TypedArray")}} (dans ce cas, on pourra utiliser {{jsxref("TypedArray/copyWithin", "TypedArray.copyWithin()")}}). La séquence est copiée et collée en une opération. La séquence collée aura les valeurs copiées même si les zones de copiage et de collage se chevauchent.

- -

La fonction copyWithin() est intentionnellement générique, il n'est pas nécessaire que this soit un objet {{jsxref("Array", "Array")}}.

- -

De plus, copyWithin() est une méthode qui modifie l'objet courant. Elle ne modifie pas la longueur de this, mais change son contenu et créé de nouvelles propriétés si nécessaire.

- -

Exemples

- -
[1, 2, 3, 4, 5].copyWithin(-2);
-// [1, 2, 3, 1, 2]
-
-[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(-2, -3, -1);
-// [1, 2, 3, 3, 4]
-
-[].copyWithin.call({length: 5, 3: 1}, 0, 3);
-// {0: 1, 3: 1, length: 5}
-
-// Les tableaux typés ES2015 sont des sous-classes d'Array
-var i32a = new Int32Array([1, 2, 3, 4, 5]);
-
-i32a.copyWithin(0, 2);
-// Int32Array [3, 4, 5, 4, 5]
-
-// Sur les plates-formes qui ne supportent pas encore ES2015 :
-[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
-// Int32Array [4, 2, 3, 4, 5]
-
- -

Prothèse d'émulation (polyfill)

- -

Cette méthode a été ajoutée à la spécification ECMAScript 6 et peut ne pas être utilisable dans tous les environnements. Voici un fragment de code qui permet d'émuler cette méthode :

- -
if (!Array.prototype.copyWithin) {
-  Object.defineProperty(Array.prototype, 'copyWithin', {
-    value: function(target, start/*, end*/) {
-    // Steps 1-2.
-    if (this == null) {
-      throw new TypeError('this is null or not defined');
-    }
-
-    var O = Object(this);
-
-    // Steps 3-5.
-    var len = O.length >>> 0;
-
-    // Steps 6-8.
-    var relativeTarget = target >> 0;
-
-    var to = relativeTarget < 0 ?
-      Math.max(len + relativeTarget, 0) :
-      Math.min(relativeTarget, len);
-
-    // Steps 9-11.
-    var relativeStart = start >> 0;
-
-    var from = relativeStart < 0 ?
-      Math.max(len + relativeStart, 0) :
-      Math.min(relativeStart, len);
-
-    // Steps 12-14.
-    var end = arguments[2];
-    var relativeEnd = end === undefined ? len : end >> 0;
-
-    var final = relativeEnd < 0 ?
-      Math.max(len + relativeEnd, 0) :
-      Math.min(relativeEnd, len);
-
-    // Step 15.
-    var count = Math.min(final - from, len - to);
-
-    // Steps 16-17.
-    var direction = 1;
-
-    if (from < to && to < (from + count)) {
-      direction = -1;
-      from += count - 1;
-      to += count - 1;
-    }
-
-    // Step 18.
-    while (count > 0) {
-      if (from in O) {
-        O[to] = O[from];
-      } else {
-        delete O[to];
-      }
-
-      from += direction;
-      to += direction;
-      count--;
-    }
-
-    // Step 19.
-    return O;
-  },
-  configurable: true,
-  writable: true
-  });
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.copywithin', 'Array.prototype.copyWithin')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-array.prototype.copywithin', 'Array.prototype.copyWithin')}}{{Spec2('ES2016')}} 
{{SpecName('ESDraft', '#sec-array.prototype.copywithin', 'Array.prototype.copyWithin')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.copyWithin")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/copywithin/index.md b/files/fr/web/javascript/reference/global_objects/array/copywithin/index.md new file mode 100644 index 0000000000..befc06152e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/copywithin/index.md @@ -0,0 +1,192 @@ +--- +title: Array.prototype.copyWithin() +slug: Web/JavaScript/Reference/Global_Objects/Array/copyWithin +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/copyWithin +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/copyWithin +--- +
{{JSRef}}
+ +

La méthode copyWithin() effectue une copie superficielle (shallow copy) d'une partie d'un tableau sur ce même tableau et le renvoie, sans modifier sa taille.

+ +
{{EmbedInteractiveExample("pages/js/array-copywithin.html")}}
+ +

Syntaxe

+ +
arr.copyWithin(cible)
+arr.copyWithin(cible, début)
+arr.copyWithin(cible, début, fin)
+
+ +

Paramètres

+ +
+
cible
+
+

Indice à partir duquel la séquence sera copiée. Si la valeur est négative, cible sera compté à partir de la fin du tableau.

+ +

Si cible est supérieur ou égal à arr.length, rien ne sera copié. Si cible est positionné apès début, la séquence copiée sera réduite pour correspondre à arr.length.

+
+
début {{optional_inline}}
+
Indice de début de la séquence a copier. Si la valeur est négative, début sera compté à partir de la fin du tableau. Si début est omis, copyWithin copiera à partir du début du tableau (par défaut 0).
+
fin {{optional_inline}}
+
Indice de fin de la séquence a copier. copyWithin copie jusqu'à fin (non-inclusif). Si la valeur est négative, end sera compté à partir de la fin du tableau. Si end est omis, copyWithin copiera jusqu'à la fin du tableau (par défaut arr.length).
+
+ +

Valeur de retour

+ +

Le tableau modifié par la méthode.

+ +

Description

+ +

La fonction copyWithin() fonctionne de la même façon que memmove en C/C++. C'est une méthode très performante pour décaler les données d'un {{jsxref("Array")}} ou d'un {{jsxref("TypedArray")}} (dans ce cas, on pourra utiliser {{jsxref("TypedArray/copyWithin", "TypedArray.copyWithin()")}}). La séquence est copiée et collée en une opération. La séquence collée aura les valeurs copiées même si les zones de copiage et de collage se chevauchent.

+ +

La fonction copyWithin() est intentionnellement générique, il n'est pas nécessaire que this soit un objet {{jsxref("Array", "Array")}}.

+ +

De plus, copyWithin() est une méthode qui modifie l'objet courant. Elle ne modifie pas la longueur de this, mais change son contenu et créé de nouvelles propriétés si nécessaire.

+ +

Exemples

+ +
[1, 2, 3, 4, 5].copyWithin(-2);
+// [1, 2, 3, 1, 2]
+
+[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(-2, -3, -1);
+// [1, 2, 3, 3, 4]
+
+[].copyWithin.call({length: 5, 3: 1}, 0, 3);
+// {0: 1, 3: 1, length: 5}
+
+// Les tableaux typés ES2015 sont des sous-classes d'Array
+var i32a = new Int32Array([1, 2, 3, 4, 5]);
+
+i32a.copyWithin(0, 2);
+// Int32Array [3, 4, 5, 4, 5]
+
+// Sur les plates-formes qui ne supportent pas encore ES2015 :
+[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
+// Int32Array [4, 2, 3, 4, 5]
+
+ +

Prothèse d'émulation (polyfill)

+ +

Cette méthode a été ajoutée à la spécification ECMAScript 6 et peut ne pas être utilisable dans tous les environnements. Voici un fragment de code qui permet d'émuler cette méthode :

+ +
if (!Array.prototype.copyWithin) {
+  Object.defineProperty(Array.prototype, 'copyWithin', {
+    value: function(target, start/*, end*/) {
+    // Steps 1-2.
+    if (this == null) {
+      throw new TypeError('this is null or not defined');
+    }
+
+    var O = Object(this);
+
+    // Steps 3-5.
+    var len = O.length >>> 0;
+
+    // Steps 6-8.
+    var relativeTarget = target >> 0;
+
+    var to = relativeTarget < 0 ?
+      Math.max(len + relativeTarget, 0) :
+      Math.min(relativeTarget, len);
+
+    // Steps 9-11.
+    var relativeStart = start >> 0;
+
+    var from = relativeStart < 0 ?
+      Math.max(len + relativeStart, 0) :
+      Math.min(relativeStart, len);
+
+    // Steps 12-14.
+    var end = arguments[2];
+    var relativeEnd = end === undefined ? len : end >> 0;
+
+    var final = relativeEnd < 0 ?
+      Math.max(len + relativeEnd, 0) :
+      Math.min(relativeEnd, len);
+
+    // Step 15.
+    var count = Math.min(final - from, len - to);
+
+    // Steps 16-17.
+    var direction = 1;
+
+    if (from < to && to < (from + count)) {
+      direction = -1;
+      from += count - 1;
+      to += count - 1;
+    }
+
+    // Step 18.
+    while (count > 0) {
+      if (from in O) {
+        O[to] = O[from];
+      } else {
+        delete O[to];
+      }
+
+      from += direction;
+      to += direction;
+      count--;
+    }
+
+    // Step 19.
+    return O;
+  },
+  configurable: true,
+  writable: true
+  });
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.copywithin', 'Array.prototype.copyWithin')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-array.prototype.copywithin', 'Array.prototype.copyWithin')}}{{Spec2('ES2016')}} 
{{SpecName('ESDraft', '#sec-array.prototype.copywithin', 'Array.prototype.copyWithin')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.copyWithin")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/entries/index.html b/files/fr/web/javascript/reference/global_objects/array/entries/index.html deleted file mode 100644 index 5ab8acec51..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/entries/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Array.prototype.entries() -slug: Web/JavaScript/Reference/Global_Objects/Array/entries -tags: - - Array - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype -translation_of: Web/JavaScript/Reference/Global_Objects/Array/entries -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/entries ---- -
{{JSRef}}
- -

La méthode entries() renvoie un nouvel objet de type  Array Iterator qui contient le couple clef/valeur pour chaque éléments du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-entries.html")}}
- -

Syntaxe

- -
arr.entries()
- -

Valeur de retour

- -

Un nouvel objet qui est un itérateur pour {{jsxref("Array")}}.

- -

Exemples

- -

Parcourir un tableau avec ses index et éléments

- -
const arr = ["a", "b", "c"];
-for (const [index, element] of arr.entries()) {
-  console.log(index, element);
-}
-// 0 "a"
-// 1 "b"
-// 2 "c"
-
- -

Boucle for...of

- -

On peut avoir le même résultat en utilisant une boucle for...of :

- -
var arr = ['a', 'b', 'c'];
-var eArr = arr.entries();
-
-for (let e of eArr) {
-  console.log(e);
-}
-// [0, 'a']
-// [1, 'b']
-// [2, 'c']
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.entries', 'Array.prototype.entries')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.entries', 'Array.prototype.entries')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.entries")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/entries/index.md b/files/fr/web/javascript/reference/global_objects/array/entries/index.md new file mode 100644 index 0000000000..5ab8acec51 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/entries/index.md @@ -0,0 +1,92 @@ +--- +title: Array.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Array/entries +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Array/entries +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/entries +--- +
{{JSRef}}
+ +

La méthode entries() renvoie un nouvel objet de type  Array Iterator qui contient le couple clef/valeur pour chaque éléments du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-entries.html")}}
+ +

Syntaxe

+ +
arr.entries()
+ +

Valeur de retour

+ +

Un nouvel objet qui est un itérateur pour {{jsxref("Array")}}.

+ +

Exemples

+ +

Parcourir un tableau avec ses index et éléments

+ +
const arr = ["a", "b", "c"];
+for (const [index, element] of arr.entries()) {
+  console.log(index, element);
+}
+// 0 "a"
+// 1 "b"
+// 2 "c"
+
+ +

Boucle for...of

+ +

On peut avoir le même résultat en utilisant une boucle for...of :

+ +
var arr = ['a', 'b', 'c'];
+var eArr = arr.entries();
+
+for (let e of eArr) {
+  console.log(e);
+}
+// [0, 'a']
+// [1, 'b']
+// [2, 'c']
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.entries', 'Array.prototype.entries')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.entries', 'Array.prototype.entries')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.entries")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/every/index.html b/files/fr/web/javascript/reference/global_objects/array/every/index.html deleted file mode 100644 index 65dfaf3c44..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/every/index.html +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Array.prototype.every() -slug: Web/JavaScript/Reference/Global_Objects/Array/every -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/every -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/every ---- -
{{JSRef}}
- -

La méthode every() permet de tester si tous les éléments d'un tableau vérifient une condition donnée par une fonction en argument. Cette méthode renvoie un booléen pour le résultat du test.

- -
-

Note : Cette méthode renvoie true pour n'importe quelle condition utilisée sur un tableau vide.

-
- -
{{EmbedInteractiveExample("pages/js/array-every.html")}}
- -

Syntaxe

- -
arr.every(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction sur laquelle on souhaite tester chaque élément du tableau. Elle prend en compte trois arguments : -
-
currentValue
-
La valeur de l'élément à traiter.
-
index{{Optional_inline}}
-
L'indice de l'élément du tableau à tester.
-
array{{Optional_inline}}
-
Le tableau sur lequel on a appelé la méthode every.
-
-
-
thisArg{{Optional_inline}}
-
Paramètre optionnel. La valeur à utiliser pour this lors de l'exécution de la fonction.
-
- -

Valeur de retour

- -

true si la fonction de rappel obtient une valeur équivalente à vrai (truthy) pour chaque élément du tableau et false sinon.

- -

Description

- -

La méthode every exécute la fonction callback fournie sur chacun des éléments contenus dans le tableau jusqu'à ce qu'un élément pour lequel la fonction callback renvoie une valeur fausse (falsy value) soit trouvé. Si un tel élément est trouvé, la méthode every renvoie directement false. Sinon, si la fonction callback a renvoyé une valeur vraie pour tous les éléments, la méthode every renverra true. La fonction callback n'est appelée que pour les indices du tableau pour lesquels il existe des valeurs affectées. Elle n'est pas appelée pour les indices supprimés ou ceux qui n'ont jamais reçu de valeur.

- -

callback est appelée avec trois arguments : la valeur de l'élément en cours de traitement, l'indice de l'élément dans le tableau et le tableau qui est parcouru.

- -

Si un paramètre thisArg est fourni à la méthode every, ce sera la valeur this de la fonction callback. Si ce paramètre n'est pas fourni, la valeur undefined sera utilisée comme valeur pour this. La valeur this « définitivement » utilisée par la fonction callback est déterminée selon les règles usuelles de détermination de this.

- -

every ne modifie pas le tableau sur lequel elle a été appelée.

- -

Les éléments traités par la méthode every sont définis lors du premier appel à callback. Les éléments ajoutés au tableau après que l'appel à every ait commencé ne seront pas traités par la fonction callback. Si des éléments du tableau sont modifiés, la valeur passée à la fonction callback sera celle qu'ils ont au moment où every les traitera. Les éléments qui sont supprimés ne sont pas traités par la fonction every.

- -

every agit de la même façon que le quantificateur mathématiques « pour tous », notamment pour le cas au limite d'un tableau vide pour lequel elle renvoie true (on dit qu'il est trivialement vrai que tous les éléments d'un ensemble vide respectent n'importe quelle condition).

- -

Exemples

- -

Tester la valeur des éléments d'un tableau

- -

Dans l'exemple suivant, on teste si tous les éléments du tableau sont supérieurs à 10.

- -
function estAssezGrand(element, index, array) {
-  return element >= 10;
-}
-[12, 5, 8, 130, 44].every(estAssezGrand);   // false
-[12, 54, 18, 130, 44].every(estAssezGrand); // true
-
- -

Utiliser les fonctions fléchées avec every

- -

{{jsxref("Fonctions/Fonctions_fl%C3%A9ch%C3%A9es","Les fonctions fléchées","","1")}} permettent d'utiliser une syntaxe plus concise pour effectuer le même test.

- -
[12, 5, 8, 130, 44].every(elem => elem >= 10); // false
-[12, 54, 18, 130, 44].every(elem => elem >= 10); // true
-[{a:1, b:2}, {a:1, b:3}].every(elem => elem.a === 1); // true
-[{a:2, b:2}, {a:1, b:3}].every(elem => elem.a === 1); // false
-
- -

Prothèse d'émulation (polyfill)

- -

every fut ajouté avec la cinquième édition du standard ECMA-262. Pour cette raison, il n'est pas nécessairement présent dans les différentes implémentations de ce standard. Afin de faire fonctionner du code dans un environnement qui ne possède pas cette fonctionnalité, on pourra utiliser le fragment de code suivant au début des scripts. Cet algorithme correspond exactement à celui défini dans la cinquième édition du standard ECMA-262. On prend l'hypothèse que Object et TypeError ont leurs valeurs originales (n'ont pas été modifiés) et que callbackfn.call correspond bien à la valeur originale de {{jsxref("Function.prototype.call")}}

- -
if (!Array.prototype.every) {
-  Array.prototype.every = function(callbackfn, thisArg) {
-    'use strict';
-    var T, k;
-
-    if (this == null) {
-      throw new TypeError('this vaut null ou n est pas défini');
-    }
-
-    // 1. Soit O le résultat de l'appel à ToObject auquel on a
-    // passé this comme argument
-    var O = Object(this);
-
-    // 2. Soit lenValue le résultat de l'appel de la méthode interne
-    //   Get sur O avec l'argument "length".
-    // 3. Soit len le résultat de ToUint32(lenValue).
-    var len = O.length >>> 0;
-
-    // 4. Si IsCallable(callbackfn) est faux, on lève une exception
-    // TypeError.
-    if (typeof callbackfn !== 'function') {
-      throw new TypeError();
-    }
-
-    // 5. Si thisArg a été fourni : soit T cette valeur thisArg, undefined sinon.
-    if (arguments.length > 1) {
-      T = thisArg;
-    }
-
-    // 6. Soit k égal à 0.
-    k = 0;
-
-    // 7. On répète tant que k < len
-    while (k < len) {
-
-      var kValue;
-
-      // a. Soit Pk la valeur de ToString(k).
-      //   (ce qui est implicite pour les opérandes gauche de in)
-      // b. Soit kPresent le résultat de l'appel de la méthode
-      //    interne de O avec l'argument Pk.
-      //    Cette étape peut être combinée avec l'étape c
-      // c. Si kPresent vaut true, alors
-      if (k in O) {
-
-        // i. Soit kValue le résultat de l'appel de la méthode
-        //    interne Get de O avec l'argument Pk.
-        kValue = O[k];
-
-        // ii. Soit testResult le résultat de l'appel de la méthode
-        //     interne Call de callbackfn avec T comme valeur this et
-        //     la liste d'argument contenant kValue, k, et O.
-        var testResult = callbackfn.call(T, kValue, k, O);
-
-        // iii. Si ToBoolean(testResult) vaut false, on renvoie false.
-        if (!testResult) {
-          return false;
-        }
-      }
-      k++;
-    }
-    return true;
-  };
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.16', 'Array.prototype.every')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.every', 'Array.prototype.every')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.every', 'Array.prototype.every')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.every")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/every/index.md b/files/fr/web/javascript/reference/global_objects/array/every/index.md new file mode 100644 index 0000000000..65dfaf3c44 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/every/index.md @@ -0,0 +1,196 @@ +--- +title: Array.prototype.every() +slug: Web/JavaScript/Reference/Global_Objects/Array/every +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/every +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/every +--- +
{{JSRef}}
+ +

La méthode every() permet de tester si tous les éléments d'un tableau vérifient une condition donnée par une fonction en argument. Cette méthode renvoie un booléen pour le résultat du test.

+ +
+

Note : Cette méthode renvoie true pour n'importe quelle condition utilisée sur un tableau vide.

+
+ +
{{EmbedInteractiveExample("pages/js/array-every.html")}}
+ +

Syntaxe

+ +
arr.every(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction sur laquelle on souhaite tester chaque élément du tableau. Elle prend en compte trois arguments : +
+
currentValue
+
La valeur de l'élément à traiter.
+
index{{Optional_inline}}
+
L'indice de l'élément du tableau à tester.
+
array{{Optional_inline}}
+
Le tableau sur lequel on a appelé la méthode every.
+
+
+
thisArg{{Optional_inline}}
+
Paramètre optionnel. La valeur à utiliser pour this lors de l'exécution de la fonction.
+
+ +

Valeur de retour

+ +

true si la fonction de rappel obtient une valeur équivalente à vrai (truthy) pour chaque élément du tableau et false sinon.

+ +

Description

+ +

La méthode every exécute la fonction callback fournie sur chacun des éléments contenus dans le tableau jusqu'à ce qu'un élément pour lequel la fonction callback renvoie une valeur fausse (falsy value) soit trouvé. Si un tel élément est trouvé, la méthode every renvoie directement false. Sinon, si la fonction callback a renvoyé une valeur vraie pour tous les éléments, la méthode every renverra true. La fonction callback n'est appelée que pour les indices du tableau pour lesquels il existe des valeurs affectées. Elle n'est pas appelée pour les indices supprimés ou ceux qui n'ont jamais reçu de valeur.

+ +

callback est appelée avec trois arguments : la valeur de l'élément en cours de traitement, l'indice de l'élément dans le tableau et le tableau qui est parcouru.

+ +

Si un paramètre thisArg est fourni à la méthode every, ce sera la valeur this de la fonction callback. Si ce paramètre n'est pas fourni, la valeur undefined sera utilisée comme valeur pour this. La valeur this « définitivement » utilisée par la fonction callback est déterminée selon les règles usuelles de détermination de this.

+ +

every ne modifie pas le tableau sur lequel elle a été appelée.

+ +

Les éléments traités par la méthode every sont définis lors du premier appel à callback. Les éléments ajoutés au tableau après que l'appel à every ait commencé ne seront pas traités par la fonction callback. Si des éléments du tableau sont modifiés, la valeur passée à la fonction callback sera celle qu'ils ont au moment où every les traitera. Les éléments qui sont supprimés ne sont pas traités par la fonction every.

+ +

every agit de la même façon que le quantificateur mathématiques « pour tous », notamment pour le cas au limite d'un tableau vide pour lequel elle renvoie true (on dit qu'il est trivialement vrai que tous les éléments d'un ensemble vide respectent n'importe quelle condition).

+ +

Exemples

+ +

Tester la valeur des éléments d'un tableau

+ +

Dans l'exemple suivant, on teste si tous les éléments du tableau sont supérieurs à 10.

+ +
function estAssezGrand(element, index, array) {
+  return element >= 10;
+}
+[12, 5, 8, 130, 44].every(estAssezGrand);   // false
+[12, 54, 18, 130, 44].every(estAssezGrand); // true
+
+ +

Utiliser les fonctions fléchées avec every

+ +

{{jsxref("Fonctions/Fonctions_fl%C3%A9ch%C3%A9es","Les fonctions fléchées","","1")}} permettent d'utiliser une syntaxe plus concise pour effectuer le même test.

+ +
[12, 5, 8, 130, 44].every(elem => elem >= 10); // false
+[12, 54, 18, 130, 44].every(elem => elem >= 10); // true
+[{a:1, b:2}, {a:1, b:3}].every(elem => elem.a === 1); // true
+[{a:2, b:2}, {a:1, b:3}].every(elem => elem.a === 1); // false
+
+ +

Prothèse d'émulation (polyfill)

+ +

every fut ajouté avec la cinquième édition du standard ECMA-262. Pour cette raison, il n'est pas nécessairement présent dans les différentes implémentations de ce standard. Afin de faire fonctionner du code dans un environnement qui ne possède pas cette fonctionnalité, on pourra utiliser le fragment de code suivant au début des scripts. Cet algorithme correspond exactement à celui défini dans la cinquième édition du standard ECMA-262. On prend l'hypothèse que Object et TypeError ont leurs valeurs originales (n'ont pas été modifiés) et que callbackfn.call correspond bien à la valeur originale de {{jsxref("Function.prototype.call")}}

+ +
if (!Array.prototype.every) {
+  Array.prototype.every = function(callbackfn, thisArg) {
+    'use strict';
+    var T, k;
+
+    if (this == null) {
+      throw new TypeError('this vaut null ou n est pas défini');
+    }
+
+    // 1. Soit O le résultat de l'appel à ToObject auquel on a
+    // passé this comme argument
+    var O = Object(this);
+
+    // 2. Soit lenValue le résultat de l'appel de la méthode interne
+    //   Get sur O avec l'argument "length".
+    // 3. Soit len le résultat de ToUint32(lenValue).
+    var len = O.length >>> 0;
+
+    // 4. Si IsCallable(callbackfn) est faux, on lève une exception
+    // TypeError.
+    if (typeof callbackfn !== 'function') {
+      throw new TypeError();
+    }
+
+    // 5. Si thisArg a été fourni : soit T cette valeur thisArg, undefined sinon.
+    if (arguments.length > 1) {
+      T = thisArg;
+    }
+
+    // 6. Soit k égal à 0.
+    k = 0;
+
+    // 7. On répète tant que k < len
+    while (k < len) {
+
+      var kValue;
+
+      // a. Soit Pk la valeur de ToString(k).
+      //   (ce qui est implicite pour les opérandes gauche de in)
+      // b. Soit kPresent le résultat de l'appel de la méthode
+      //    interne de O avec l'argument Pk.
+      //    Cette étape peut être combinée avec l'étape c
+      // c. Si kPresent vaut true, alors
+      if (k in O) {
+
+        // i. Soit kValue le résultat de l'appel de la méthode
+        //    interne Get de O avec l'argument Pk.
+        kValue = O[k];
+
+        // ii. Soit testResult le résultat de l'appel de la méthode
+        //     interne Call de callbackfn avec T comme valeur this et
+        //     la liste d'argument contenant kValue, k, et O.
+        var testResult = callbackfn.call(T, kValue, k, O);
+
+        // iii. Si ToBoolean(testResult) vaut false, on renvoie false.
+        if (!testResult) {
+          return false;
+        }
+      }
+      k++;
+    }
+    return true;
+  };
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.16', 'Array.prototype.every')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.every', 'Array.prototype.every')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.every', 'Array.prototype.every')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.every")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/fill/index.html b/files/fr/web/javascript/reference/global_objects/array/fill/index.html deleted file mode 100644 index dc4d155415..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/fill/index.html +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Array.prototype.fill() -slug: Web/JavaScript/Reference/Global_Objects/Array/fill -tags: - - Array - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/fill -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/fill ---- -
{{JSRef}}
- -

La méthode fill() remplit tous les éléments d'un tableau entre deux index avec une valeur statique. La valeur de l'index de fin n'est pas incluse. Cette méthode renvoie le tableau modifié.

- -
{{EmbedInteractiveExample("pages/js/array-fill.html")}}
- -

Syntaxe

- -
arr.fill(valeur)
-arr.fill(valeur, début)
-arr.fill(valeur, début, fin)
-
- -

Paramètres

- -
-
valeur
-
Valeur avec laquelle remplir le tableau.
-
début {{optional_inline}}
-
Index de début, la valeur par défaut est 0.
-
fin {{optional_inline}}
-
Index de fin, la valeur par défaut est this.length.
-
- -

Valeur de retour

- -

Le tableau modifié par la méthode.

- -

Description

- -

Les éléments pour lesquels on utilisera la valeur sont ceux contenus dans l'intervalle de positions [début, fin].

- -

La méthode fill() prend jusqu'à trois arguments : valeur, début et fin. Les arguments début et fin sont optionnels. Leurs valeurs par défaut sont respectivement 0 et la taille length de l'objet this.

- -

Si début est négatif, il sera traité comme length+débutlength est la taille du tableau. Si fin est négatif, il est traité comme length+fin.

- -

La fonction fill() est intentionnellement générique, il n'est pas nécessaire que sa valeur this soit un objet Array.

- -

La méthode fill() est une méthode de modification, elle changera l'objet this lui-même, et renverra l'objet modifié. Elle ne crée pas de copie. Lorsque cette méthode reçoit un objet comme valeur, elle copiera l'objet passé et remplira le tableau avec une référence vers cette copie.

- -

Exemples

- -
[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, -2);    // [4, 2, 3]
-[1, 2, 3].fill(4, 3, 3);      // [1, 2, 3]
-[1, 2, 3].fill(4, NaN, NaN);  // [1, 2, 3]
-Array(3).fill(4);             // [4, 4, 4]
-[].fill.call({length: 3}, 4); // {0: 4, 1: 4, 2: 4, length: 3}
-
-// Les objets sont copiés via une référence
-var arr = Array(3).fill({}); // [{}, {}, {}];
-arr[0].yop = "yop"; // [{yop: "yop"}, {yop: "yop"}, {yop: "yop"}]
-
- -

Prothèse d'émulation (polyfill)

- -
if (!Array.prototype.fill) {
-  Object.defineProperty(Array.prototype, 'fill', {
-    value: function(value) {
-
-      // Steps 1-2.
-      if (this == null) {
-        throw new TypeError('this is null or not defined');
-      }
-
-      var O = Object(this);
-
-      // Steps 3-5.
-      var len = O.length >>> 0;
-
-      // Steps 6-7.
-      var start = arguments[1];
-      var relativeStart = start >> 0;
-
-      // Step 8.
-      var k = relativeStart < 0 ?
-        Math.max(len + relativeStart, 0) :
-        Math.min(relativeStart, len);
-
-      // Steps 9-10.
-      var end = arguments[2];
-      var relativeEnd = end === undefined ?
-        len : end >> 0;
-
-      // Step 11.
-      var final = relativeEnd < 0 ?
-        Math.max(len + relativeEnd, 0) :
-        Math.min(relativeEnd, len);
-
-      // Step 12.
-      while (k < final) {
-        O[k] = value;
-        k++;
-      }
-
-      // Step 13.
-      return O;
-    }
-  });
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.fill', 'Array.prototype.fill')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.fill', 'Array.prototype.fill')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.fill")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/fill/index.md b/files/fr/web/javascript/reference/global_objects/array/fill/index.md new file mode 100644 index 0000000000..dc4d155415 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/fill/index.md @@ -0,0 +1,150 @@ +--- +title: Array.prototype.fill() +slug: Web/JavaScript/Reference/Global_Objects/Array/fill +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/fill +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/fill +--- +
{{JSRef}}
+ +

La méthode fill() remplit tous les éléments d'un tableau entre deux index avec une valeur statique. La valeur de l'index de fin n'est pas incluse. Cette méthode renvoie le tableau modifié.

+ +
{{EmbedInteractiveExample("pages/js/array-fill.html")}}
+ +

Syntaxe

+ +
arr.fill(valeur)
+arr.fill(valeur, début)
+arr.fill(valeur, début, fin)
+
+ +

Paramètres

+ +
+
valeur
+
Valeur avec laquelle remplir le tableau.
+
début {{optional_inline}}
+
Index de début, la valeur par défaut est 0.
+
fin {{optional_inline}}
+
Index de fin, la valeur par défaut est this.length.
+
+ +

Valeur de retour

+ +

Le tableau modifié par la méthode.

+ +

Description

+ +

Les éléments pour lesquels on utilisera la valeur sont ceux contenus dans l'intervalle de positions [début, fin].

+ +

La méthode fill() prend jusqu'à trois arguments : valeur, début et fin. Les arguments début et fin sont optionnels. Leurs valeurs par défaut sont respectivement 0 et la taille length de l'objet this.

+ +

Si début est négatif, il sera traité comme length+débutlength est la taille du tableau. Si fin est négatif, il est traité comme length+fin.

+ +

La fonction fill() est intentionnellement générique, il n'est pas nécessaire que sa valeur this soit un objet Array.

+ +

La méthode fill() est une méthode de modification, elle changera l'objet this lui-même, et renverra l'objet modifié. Elle ne crée pas de copie. Lorsque cette méthode reçoit un objet comme valeur, elle copiera l'objet passé et remplira le tableau avec une référence vers cette copie.

+ +

Exemples

+ +
[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, -2);    // [4, 2, 3]
+[1, 2, 3].fill(4, 3, 3);      // [1, 2, 3]
+[1, 2, 3].fill(4, NaN, NaN);  // [1, 2, 3]
+Array(3).fill(4);             // [4, 4, 4]
+[].fill.call({length: 3}, 4); // {0: 4, 1: 4, 2: 4, length: 3}
+
+// Les objets sont copiés via une référence
+var arr = Array(3).fill({}); // [{}, {}, {}];
+arr[0].yop = "yop"; // [{yop: "yop"}, {yop: "yop"}, {yop: "yop"}]
+
+ +

Prothèse d'émulation (polyfill)

+ +
if (!Array.prototype.fill) {
+  Object.defineProperty(Array.prototype, 'fill', {
+    value: function(value) {
+
+      // Steps 1-2.
+      if (this == null) {
+        throw new TypeError('this is null or not defined');
+      }
+
+      var O = Object(this);
+
+      // Steps 3-5.
+      var len = O.length >>> 0;
+
+      // Steps 6-7.
+      var start = arguments[1];
+      var relativeStart = start >> 0;
+
+      // Step 8.
+      var k = relativeStart < 0 ?
+        Math.max(len + relativeStart, 0) :
+        Math.min(relativeStart, len);
+
+      // Steps 9-10.
+      var end = arguments[2];
+      var relativeEnd = end === undefined ?
+        len : end >> 0;
+
+      // Step 11.
+      var final = relativeEnd < 0 ?
+        Math.max(len + relativeEnd, 0) :
+        Math.min(relativeEnd, len);
+
+      // Step 12.
+      while (k < final) {
+        O[k] = value;
+        k++;
+      }
+
+      // Step 13.
+      return O;
+    }
+  });
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.fill', 'Array.prototype.fill')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.fill', 'Array.prototype.fill')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.fill")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/filter/index.html b/files/fr/web/javascript/reference/global_objects/array/filter/index.html deleted file mode 100644 index 1894ac6f4c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/filter/index.html +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Array.prototype.filter() -slug: Web/JavaScript/Reference/Global_Objects/Array/filter -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/filter -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/filter ---- -
{{JSRef}}
- -

La méthode filter() crée et retourne un nouveau tableau contenant tous les éléments du tableau d'origine qui remplissent une condition déterminée par la fonction callback.

- -
{{EmbedInteractiveExample("pages/js/array-filter.html")}}
- -

Syntaxe

- -
arr.filter(callback); // callback(elementCourant[, index[, tableauEntier]])
-var nouveauTableau = arr.filter(callback, thisArg);
-
- -

Paramètres

- -
-
callback
-
La fonction de test (ou prédicat) à appliquer à chaque élément du tableau. Cette fonction est appelée avec les arguments suivants : -
-
elementCourant
-
L'élément à traiter
-
index
-
Son indice.
-
array
-
Le tableau complet
-
- Cette fonction renvoie true — ou une valeur équivalente — si l'élément doit être conservé pour le tableau résultat et false dans le cas contraire.
-
thisArg {{optional_inline}}
-
Objet à utiliser en tant que this quand la fonction callback est exécutée.
-
- -

Valeur de retour

- -

Un nouveau tableau contenant les éléments qui respectent la condition du filtre. Si aucun élément ne respecte la condition, c'est un tableau vide qui est renvoyé.

- -

Description

- -

filter() appelle la fonction callback fournie pour chacun des éléments d'un tableau, et construit un nouveau tableau contenant tous les éléments pour lesquels l'appel de callback retourne true ou une valeur équivalente à true dans un contexte booléen. La fonction callback n'est utilisée que pour les éléments du tableau ayant une valeur assignée — les index supprimés ou pour lesquels il n'y a jamais eu de valeur ne sont pas pris en compte. Les éléments du tableau qui ne passent pas le test effectué par la fonction callback sont ignorés, ils ne sont pas inclus dans le nouveau tableau.

- -

La fonction callback est appelée avec trois arguments :

- -
    -
  1. la valeur de l'élément courant,
  2. -
  3. l'index de l'élément courant,
  4. -
  5. l'objet Array parcouru.
  6. -
- -

Si le paramètre thisArg est fourni, il sera utilisé comme valeur this lors de l'appel de la fonction callback. S'il n'est pas fourni, la valeur undefined sera utilisée à la place. La valeur de this qui est finalement utilisée par la fonction callback est déterminée selon les règles usuelles pour déterminer la valeur this au sein d'une fonction.

- -

Noter que filter() ne modifie pas le tableau d'origine.

- -

La liste des éléments parcourus par filter() est définie avant la première invocation de la fonction callback. Les éléments qui sont ajoutés à la liste après le début de l'appel de filter() (grâce à la fonction callback par exemple) ne seront pas concernés par le filtre. Si des éléments de la liste sont modifiés ou supprimés au cours du traitement, la valeur fournie à la fonction callback sera la valeur de ces éléments au moment où filter() les traite — les éléments supprimés ne seront pas traités par la fonction.

- -

Exemples

- -

Filtrer les petites valeurs

- -

L'exemple suivant utilise filter pour créer une nouvelle liste où tous les éléments dont la valeur est inférieure à 10 ont été retirés.

- -
function suffisammentGrand(element) {
-  return element >= 10;
-}
-var filtre = [12, 5, 8, 130, 44].filter(suffisammentGrand);
-// filtre vaut [12, 130, 44]
-
- -

Filtrer des éléments JSON invalides et les trier en fonction d'un identifiant avec filter()

- -

Dans l'exemple qui suit, on utilise filter() pour créer un objet JSON qui contient des éléments dont l'id est un entier.

- -
var arr = [
-  { id: 15 },
-  { id: -1 },
-  { id: 0 },
-  { id: 3 },
-  { id: 12.2 },
-  { },
-  { id: null },
-  { id: NaN },
-  { id: 'undefined' }
-];
-
-var elementsInvalides = 0;
-
-function filtrerParID(obj) {
-  // Si c'est un nombre
-  if (obj.id !== undefined && typeof(obj.id) === 'number' && !isNaN(obj.id)) {
-    return true;
-  } else {
-    elementsInvalides++;
-    return false;
-  }
-}
-
-var arrByID = arr.filter(filtrerParID);
-
-console.log('Tableau filtré\n', arrByID);
-// Le tableau filtré est :
-// [{ id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 }]
-
-console.log('Nombre d\'éléments invalides = ', elementsInvalides);
-// Nombre d'éléments invalides 4
- -

Recherche dans un tableau

- -

Dans l'exemple qui suit, on utilise filter() pour filtrer le contenu d'un tableau selon un critère donné.

- -
var fruits = ['pomme', 'banane', 'raisin', 'mangue'];
-
-function filtreTexte(arr, requete) {
-  return arr.filter(function (el) {
-    return el.toLowerCase().indexOf(requete.toLowerCase()) !== -1;
-  })
-}
-
-console.log(filtreTexte(fruits, 'an')); // ['banane', 'mangue'];
-console.log(filtreTexte(fruits, 'm')); // ['pomme', 'mangue'];
-
- -

Implémentation avec la syntaxe ECMAScript 2015 (ES6)

- -

L'exemple suivant utilise les fonctions fléchées, et le mot clé const disponible en ES6.

- -
const fruits = ['pomme', 'banane', 'raisin', 'mangue'];
-
-const filtreTexte = (arr, requete) => {
-  return arr.filter(el =>  el.toLowerCase().indexOf(requete.toLowerCase()) !== -1);
-}
-
-console.log(filtreTexte(fruits, 'an')); // ['banane', 'mangue'];
-console.log(filtreTexte(fruits, 'm')); // ['pomme', 'mangue'];
- -

Prothèse d'émulation (polyfill)

- -

Array.prototype.filter() a été ajoutée avec la cinquième édition du standard ECMA-262 — ainsi elle pourrait ne pas être présente dans toutes les implémentations du standard. Ce problème peut être contourné en ajoutant le code suivant au début des scripts et permettra d'utiliser filter au sein d'implémentations qui n'en bénéficient pas nativement. Cet algorithme est strictement celui spécifié par la cinquième édition d'ECMA-262, en considérant que callbackfn.call est évaluée avec la valeur d'origine de {{jsxref("Function.prototype.call")}} et que {{jsxref("Array.prototype.push")}} a sa valeur d'origine.

- -
if (!Array.prototype.filter){
-  Array.prototype.filter = function(func, thisArg) {
-    'use strict';
-    if ( ! ((typeof func === 'Function' || typeof func === 'function') && this) )
-        throw new TypeError();
-
-    var len = this.length >>> 0,
-        res = new Array(len), // preallocate array
-        t = this, c = 0, i = -1;
-    if (thisArg === undefined){
-      while (++i !== len){
-        // checks to see if the key was set
-        if (i in this){
-          if (func(t[i], i, t)){
-            res[c++] = t[i];
-          }
-        }
-      }
-    }
-    else{
-      while (++i !== len){
-        // checks to see if the key was set
-        if (i in this){
-          if (func.call(thisArg, t[i], i, t)){
-            res[c++] = t[i];
-          }
-        }
-      }
-    }
-
-    res.length = c; // shrink down array to proper size
-    return res;
-  };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.20', 'Array.prototype.filter')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES2015', '#sec-array.prototype.filter', 'Array.prototype.filter')}}{{Spec2('ES2015')}} 
{{SpecName('ESDraft', '#sec-array.prototype.filter', 'Array.prototype.filter')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.filter")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/filter/index.md b/files/fr/web/javascript/reference/global_objects/array/filter/index.md new file mode 100644 index 0000000000..1894ac6f4c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/filter/index.md @@ -0,0 +1,223 @@ +--- +title: Array.prototype.filter() +slug: Web/JavaScript/Reference/Global_Objects/Array/filter +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/filter +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/filter +--- +
{{JSRef}}
+ +

La méthode filter() crée et retourne un nouveau tableau contenant tous les éléments du tableau d'origine qui remplissent une condition déterminée par la fonction callback.

+ +
{{EmbedInteractiveExample("pages/js/array-filter.html")}}
+ +

Syntaxe

+ +
arr.filter(callback); // callback(elementCourant[, index[, tableauEntier]])
+var nouveauTableau = arr.filter(callback, thisArg);
+
+ +

Paramètres

+ +
+
callback
+
La fonction de test (ou prédicat) à appliquer à chaque élément du tableau. Cette fonction est appelée avec les arguments suivants : +
+
elementCourant
+
L'élément à traiter
+
index
+
Son indice.
+
array
+
Le tableau complet
+
+ Cette fonction renvoie true — ou une valeur équivalente — si l'élément doit être conservé pour le tableau résultat et false dans le cas contraire.
+
thisArg {{optional_inline}}
+
Objet à utiliser en tant que this quand la fonction callback est exécutée.
+
+ +

Valeur de retour

+ +

Un nouveau tableau contenant les éléments qui respectent la condition du filtre. Si aucun élément ne respecte la condition, c'est un tableau vide qui est renvoyé.

+ +

Description

+ +

filter() appelle la fonction callback fournie pour chacun des éléments d'un tableau, et construit un nouveau tableau contenant tous les éléments pour lesquels l'appel de callback retourne true ou une valeur équivalente à true dans un contexte booléen. La fonction callback n'est utilisée que pour les éléments du tableau ayant une valeur assignée — les index supprimés ou pour lesquels il n'y a jamais eu de valeur ne sont pas pris en compte. Les éléments du tableau qui ne passent pas le test effectué par la fonction callback sont ignorés, ils ne sont pas inclus dans le nouveau tableau.

+ +

La fonction callback est appelée avec trois arguments :

+ +
    +
  1. la valeur de l'élément courant,
  2. +
  3. l'index de l'élément courant,
  4. +
  5. l'objet Array parcouru.
  6. +
+ +

Si le paramètre thisArg est fourni, il sera utilisé comme valeur this lors de l'appel de la fonction callback. S'il n'est pas fourni, la valeur undefined sera utilisée à la place. La valeur de this qui est finalement utilisée par la fonction callback est déterminée selon les règles usuelles pour déterminer la valeur this au sein d'une fonction.

+ +

Noter que filter() ne modifie pas le tableau d'origine.

+ +

La liste des éléments parcourus par filter() est définie avant la première invocation de la fonction callback. Les éléments qui sont ajoutés à la liste après le début de l'appel de filter() (grâce à la fonction callback par exemple) ne seront pas concernés par le filtre. Si des éléments de la liste sont modifiés ou supprimés au cours du traitement, la valeur fournie à la fonction callback sera la valeur de ces éléments au moment où filter() les traite — les éléments supprimés ne seront pas traités par la fonction.

+ +

Exemples

+ +

Filtrer les petites valeurs

+ +

L'exemple suivant utilise filter pour créer une nouvelle liste où tous les éléments dont la valeur est inférieure à 10 ont été retirés.

+ +
function suffisammentGrand(element) {
+  return element >= 10;
+}
+var filtre = [12, 5, 8, 130, 44].filter(suffisammentGrand);
+// filtre vaut [12, 130, 44]
+
+ +

Filtrer des éléments JSON invalides et les trier en fonction d'un identifiant avec filter()

+ +

Dans l'exemple qui suit, on utilise filter() pour créer un objet JSON qui contient des éléments dont l'id est un entier.

+ +
var arr = [
+  { id: 15 },
+  { id: -1 },
+  { id: 0 },
+  { id: 3 },
+  { id: 12.2 },
+  { },
+  { id: null },
+  { id: NaN },
+  { id: 'undefined' }
+];
+
+var elementsInvalides = 0;
+
+function filtrerParID(obj) {
+  // Si c'est un nombre
+  if (obj.id !== undefined && typeof(obj.id) === 'number' && !isNaN(obj.id)) {
+    return true;
+  } else {
+    elementsInvalides++;
+    return false;
+  }
+}
+
+var arrByID = arr.filter(filtrerParID);
+
+console.log('Tableau filtré\n', arrByID);
+// Le tableau filtré est :
+// [{ id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 }]
+
+console.log('Nombre d\'éléments invalides = ', elementsInvalides);
+// Nombre d'éléments invalides 4
+ +

Recherche dans un tableau

+ +

Dans l'exemple qui suit, on utilise filter() pour filtrer le contenu d'un tableau selon un critère donné.

+ +
var fruits = ['pomme', 'banane', 'raisin', 'mangue'];
+
+function filtreTexte(arr, requete) {
+  return arr.filter(function (el) {
+    return el.toLowerCase().indexOf(requete.toLowerCase()) !== -1;
+  })
+}
+
+console.log(filtreTexte(fruits, 'an')); // ['banane', 'mangue'];
+console.log(filtreTexte(fruits, 'm')); // ['pomme', 'mangue'];
+
+ +

Implémentation avec la syntaxe ECMAScript 2015 (ES6)

+ +

L'exemple suivant utilise les fonctions fléchées, et le mot clé const disponible en ES6.

+ +
const fruits = ['pomme', 'banane', 'raisin', 'mangue'];
+
+const filtreTexte = (arr, requete) => {
+  return arr.filter(el =>  el.toLowerCase().indexOf(requete.toLowerCase()) !== -1);
+}
+
+console.log(filtreTexte(fruits, 'an')); // ['banane', 'mangue'];
+console.log(filtreTexte(fruits, 'm')); // ['pomme', 'mangue'];
+ +

Prothèse d'émulation (polyfill)

+ +

Array.prototype.filter() a été ajoutée avec la cinquième édition du standard ECMA-262 — ainsi elle pourrait ne pas être présente dans toutes les implémentations du standard. Ce problème peut être contourné en ajoutant le code suivant au début des scripts et permettra d'utiliser filter au sein d'implémentations qui n'en bénéficient pas nativement. Cet algorithme est strictement celui spécifié par la cinquième édition d'ECMA-262, en considérant que callbackfn.call est évaluée avec la valeur d'origine de {{jsxref("Function.prototype.call")}} et que {{jsxref("Array.prototype.push")}} a sa valeur d'origine.

+ +
if (!Array.prototype.filter){
+  Array.prototype.filter = function(func, thisArg) {
+    'use strict';
+    if ( ! ((typeof func === 'Function' || typeof func === 'function') && this) )
+        throw new TypeError();
+
+    var len = this.length >>> 0,
+        res = new Array(len), // preallocate array
+        t = this, c = 0, i = -1;
+    if (thisArg === undefined){
+      while (++i !== len){
+        // checks to see if the key was set
+        if (i in this){
+          if (func(t[i], i, t)){
+            res[c++] = t[i];
+          }
+        }
+      }
+    }
+    else{
+      while (++i !== len){
+        // checks to see if the key was set
+        if (i in this){
+          if (func.call(thisArg, t[i], i, t)){
+            res[c++] = t[i];
+          }
+        }
+      }
+    }
+
+    res.length = c; // shrink down array to proper size
+    return res;
+  };
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.20', 'Array.prototype.filter')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES2015', '#sec-array.prototype.filter', 'Array.prototype.filter')}}{{Spec2('ES2015')}} 
{{SpecName('ESDraft', '#sec-array.prototype.filter', 'Array.prototype.filter')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.filter")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/find/index.html b/files/fr/web/javascript/reference/global_objects/array/find/index.html deleted file mode 100644 index 19ef805ebd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/find/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Array.prototype.find() -slug: Web/JavaScript/Reference/Global_Objects/Array/find -tags: - - Array - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/find -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/find ---- -
{{JSRef}}
- -

La méthode find() renvoie la valeur du premier élément trouvé dans le tableau qui respecte la condition donnée par la fonction de test passée en argument. Sinon, la valeur {{jsxref("undefined")}} est renvoyée.

- -
{{EmbedInteractiveExample("pages/js/array-find.html")}}
- - - -

Voir aussi la méthode {{jsxref("Array.findIndex", "findIndex()")}} qui renvoie l'index de l'élément trouvé et non sa valeur. Si on souhaite repérer la position d'un élément donné dans le tableau, on pourra utiliser {{jsxref("Array.prototype.indexOf()")}}. Si on souhaite déterminer si un tableau contient un élément donné, on pourra utiliser la méthode {{jsxref("Array.prototype.includes()")}}.

- -

Syntaxe

- -
arr.find(callback(element[, index[, tableau]])[, thisArg])
- -

Paramètres

- -
-
callback
-
Fonction à exécuter sur chaque valeur du tableau, elle prend 3 arguments : -
-
element
-
L'élément actuellement traité dans le tableau.
-
index{{optional_inline}}
-
L'index de l'élément actuellement traité dans le tableau
-
array{{optional_inline}}
-
Le tableau pour lequel la méthode find a été appelée.
-
-
-
thisArg {{optional_inline}}
-
Ce paramètre est optionnel. Objet à utiliser en tant que this lorsque la fonction callback est exécutée.
-
- -

Valeur de retour

- -

La valeur du premier élément du tableau qui réussit le test, sinon {{jsxref("undefined")}}.

- -

Description

- -

La méthode find exécute la fonction callback une fois pour chaque élément présent dans le tableau jusqu'à ce qu'elle retourne une valeur vraie (qui peut être convertie en true). Si un élément est trouvé, find retourne immédiatement la valeur de l'élément. Autrement, find retourne undefined. La méthode callback est seulement appelée pour les index du tableau pour lesquels on dispose d'une valeur. Elle n'est pas appelée pour les index supprimés ou pour ceux qui n'ont pas de valeur.

- -

La méthode callback est appelée avec trois arguments : la valeur de l'élément, l'index de l'élément, et l'objet correspondant au tableau traversé.

- -

Si le paramètre thisArg est fourni à find, il sera utilisé comme le this pour chaque exécution de la fonction callback. S'il n'est pas fourni, alors {{jsxref("undefined")}} sera utilisé.

- -

find ne modifie pas le tableau à partir duquel elle est appelée.

- -

L'intervalle des éléments inspectés par find est défini avant la première exécution de callback. Les éléments ajoutés au tableau après l'appel à find ne seront pas inspectés par la fonction callback. Si un élément existant est modifié avant le passage du callback, alors la valeur traitée par le callback sera celle présente lors du passage de find sur son index. Les éléments supprimés ne seront pas traités.

- -

Exemples

- -

Trouver un objet dans un tableau grâce à une de ses propriétés

- -
const inventaire = [
-  {nom: 'pommes', quantité: 2},
-  {nom: 'bananes', quantité: 0},
-  {nom: 'cerises', quantité: 5}
-];
-
-function estCerises(fruit) {
-  return fruit.nom === 'cerises';
-}
-
-console.log(inventaire.find(estCerises));
-// { nom: 'cerises', quantité: 5}
- -

Utiliser les fonctions fléchées ES6/ES2015

- -
const inventaire = [
-                     {nom: 'pommes', quantité: 2},
-                     {nom: 'bananes', quantité: 0},
-                     {nom: 'cerises', quantité: 5}
-                   ];
-
-const resultat = inventaire.find( fruit => fruit.nom === 'cerises');
-console.log(resultat);
-// { nom: 'cerises', quantité: 5}
- -

Trouver un nombre premier dans un tableau

- -

Dans l'exemple suivant, on cherche un nombre premier parmi les éléments d'un tableau (ou retourne undefined s'il n'y en a pas ).

- -
function estPremier(element, index, array) {
-    let début = 2;
-    while (début <= Math.sqrt(element)) {
-        if (element % début ++ < 1) return false;
-    }
-    return (element > 1);
-}
-
-console.log( [4, 6, 8, 12].find(estPremier) ); // undefined, rien trouvé
-console.log( [4, 5, 8, 12].find(estPremier) ); // 5
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.find', 'Array.prototype.find')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.find")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/find/index.md b/files/fr/web/javascript/reference/global_objects/array/find/index.md new file mode 100644 index 0000000000..19ef805ebd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/find/index.md @@ -0,0 +1,142 @@ +--- +title: Array.prototype.find() +slug: Web/JavaScript/Reference/Global_Objects/Array/find +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/find +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/find +--- +
{{JSRef}}
+ +

La méthode find() renvoie la valeur du premier élément trouvé dans le tableau qui respecte la condition donnée par la fonction de test passée en argument. Sinon, la valeur {{jsxref("undefined")}} est renvoyée.

+ +
{{EmbedInteractiveExample("pages/js/array-find.html")}}
+ + + +

Voir aussi la méthode {{jsxref("Array.findIndex", "findIndex()")}} qui renvoie l'index de l'élément trouvé et non sa valeur. Si on souhaite repérer la position d'un élément donné dans le tableau, on pourra utiliser {{jsxref("Array.prototype.indexOf()")}}. Si on souhaite déterminer si un tableau contient un élément donné, on pourra utiliser la méthode {{jsxref("Array.prototype.includes()")}}.

+ +

Syntaxe

+ +
arr.find(callback(element[, index[, tableau]])[, thisArg])
+ +

Paramètres

+ +
+
callback
+
Fonction à exécuter sur chaque valeur du tableau, elle prend 3 arguments : +
+
element
+
L'élément actuellement traité dans le tableau.
+
index{{optional_inline}}
+
L'index de l'élément actuellement traité dans le tableau
+
array{{optional_inline}}
+
Le tableau pour lequel la méthode find a été appelée.
+
+
+
thisArg {{optional_inline}}
+
Ce paramètre est optionnel. Objet à utiliser en tant que this lorsque la fonction callback est exécutée.
+
+ +

Valeur de retour

+ +

La valeur du premier élément du tableau qui réussit le test, sinon {{jsxref("undefined")}}.

+ +

Description

+ +

La méthode find exécute la fonction callback une fois pour chaque élément présent dans le tableau jusqu'à ce qu'elle retourne une valeur vraie (qui peut être convertie en true). Si un élément est trouvé, find retourne immédiatement la valeur de l'élément. Autrement, find retourne undefined. La méthode callback est seulement appelée pour les index du tableau pour lesquels on dispose d'une valeur. Elle n'est pas appelée pour les index supprimés ou pour ceux qui n'ont pas de valeur.

+ +

La méthode callback est appelée avec trois arguments : la valeur de l'élément, l'index de l'élément, et l'objet correspondant au tableau traversé.

+ +

Si le paramètre thisArg est fourni à find, il sera utilisé comme le this pour chaque exécution de la fonction callback. S'il n'est pas fourni, alors {{jsxref("undefined")}} sera utilisé.

+ +

find ne modifie pas le tableau à partir duquel elle est appelée.

+ +

L'intervalle des éléments inspectés par find est défini avant la première exécution de callback. Les éléments ajoutés au tableau après l'appel à find ne seront pas inspectés par la fonction callback. Si un élément existant est modifié avant le passage du callback, alors la valeur traitée par le callback sera celle présente lors du passage de find sur son index. Les éléments supprimés ne seront pas traités.

+ +

Exemples

+ +

Trouver un objet dans un tableau grâce à une de ses propriétés

+ +
const inventaire = [
+  {nom: 'pommes', quantité: 2},
+  {nom: 'bananes', quantité: 0},
+  {nom: 'cerises', quantité: 5}
+];
+
+function estCerises(fruit) {
+  return fruit.nom === 'cerises';
+}
+
+console.log(inventaire.find(estCerises));
+// { nom: 'cerises', quantité: 5}
+ +

Utiliser les fonctions fléchées ES6/ES2015

+ +
const inventaire = [
+                     {nom: 'pommes', quantité: 2},
+                     {nom: 'bananes', quantité: 0},
+                     {nom: 'cerises', quantité: 5}
+                   ];
+
+const resultat = inventaire.find( fruit => fruit.nom === 'cerises');
+console.log(resultat);
+// { nom: 'cerises', quantité: 5}
+ +

Trouver un nombre premier dans un tableau

+ +

Dans l'exemple suivant, on cherche un nombre premier parmi les éléments d'un tableau (ou retourne undefined s'il n'y en a pas ).

+ +
function estPremier(element, index, array) {
+    let début = 2;
+    while (début <= Math.sqrt(element)) {
+        if (element % début ++ < 1) return false;
+    }
+    return (element > 1);
+}
+
+console.log( [4, 6, 8, 12].find(estPremier) ); // undefined, rien trouvé
+console.log( [4, 5, 8, 12].find(estPremier) ); // 5
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.find', 'Array.prototype.find')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.find")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/findindex/index.html b/files/fr/web/javascript/reference/global_objects/array/findindex/index.html deleted file mode 100644 index 9564b24021..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/findindex/index.html +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: Array.prototype.findIndex() -slug: Web/JavaScript/Reference/Global_Objects/Array/findIndex -tags: - - Array - - ECMAScript6 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/findIndex -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/findIndex ---- -
{{JSRef}}
- -

La méthode findIndex() renvoie l'indice du premier élément du tableau qui satisfait une condition donnée par une fonction. Si la fonction renvoie faux pour tous les éléments du tableau, le résultat vaut -1.

- -
{{EmbedInteractiveExample("pages/js/array-findindex.html")}}
- - - -

Voir également la méthode {{jsxref("Array.find", "find()")}} qui renvoie la valeur (et non l'indice) d'un des éléments trouvés.

- -

Syntaxe

- -
arr.findIndex(callback(element[, index[, tableau]])[, thisArg])
- -

Paramètres

- -
-
callback
-
Une fonction à exécuter sur chaque valeur du tableau jusqu'à ce que celle-ci renvoie true. Cette fonction prend trois arguments : -
-
élément
-
L'élément du tableau qui doit être traité.
-
indice{{optional_inline}}
-
L'indice de l'élément du tableau en cours de traitement.
-
tableau{{optional_inline}}
-
Le tableau sur lequel a été appelé findIndex.
-
-
-
argumentThis{{optional_inline}}
-
L'objet à utiliser comme contexte this lorsque le callback est exécuté.
-
- -

Valeur de retour

- -

Un indice d'un élément du tableau qui réussit le test décrit, -1 sinon.

- -

Description

- -

La méthode findIndex exécute la fonction callback une fois pour chaque élément présent dans le tableau (le tableau est parcouru entre les indices 0 et length-1 compris) jusqu'à ce que callback renvoie une valeur vraie.

- -

S'il existe un tel élément, findIndex renverra immédiatement l'indice de l'élément concerné. Sinon, findIndex renverra -1. À la différence des autres méthodes liées aux tableaux comme some(), callback est également appelée pour les indices du tableau pour lesquels aucun élément n'est défini.

- -

callback possède trois arguments : la valeur de l'élément, l'indice de l'élément et l'objet Array qui est parcouru

- -

Si l'argument argumentThis est fourni à la méthode findIndex, il sera utilisé comme « contexte » this pour chaque appel de callback. S'il n'est pas fourni, {{jsxref("undefined")}} sera utilisé.

- -

findIndex ne modifie pas le tableau sur laquelle elle est appelée. Les éléments qui seront traités par findIndex sont « récoltés » avant le premier appel de callback. Tout élément qui sera ajouté au tableau après l'appel de findIndex ne sera pas utilisé avec callback. Si un élément existant, pas encore visité, est modifié par callback, la valeur qui sera passé au callback pour cet élément modifié sera celle que findIndex utilise lorsqu'elle utilise l'indice de l'élément en question. Les éléments supprimés sont bien parcourus.

- -

Exemples

- -

Trouver l'indice d'un nombre premier dans un tableau

- -

L'exemple qui suit illustre comment trouver l'indice d'un élément qui est un nombre premier dans un tableau (ou qui renvoie -1 s'il n'y a pas de nombre premier).

- -
function estPremier(élément, index, array) {
-  var début = 2;
-  while (début <= Math.sqrt(élément)) {
-    if (élément % début < 1) {
-      return false;
-    } else {
-      début++;
-    }
-  }
-  return élément > 1;
-}
-
-console.log([4, 6, 8, 12].findIndex(estPremier)); // -1, aucun trouvé
-console.log([4, 6, 7, 12].findIndex(estPremier)); // 2
- -

Trouver un indice avec une fonction fléchée

- -

Dans cet exemple, on utilise une fonction fléchée pour trouver l'indice d'un élément :

- -
const fruits = ["pomme", "banane", "melon", "fraise", "raisin"];
-
-const indice = fruits.findIndex(fruit => fruit === "fraise");
-console.log(indice); // 3
-console.log(fruits[indice]); // fraise 
- -

Prothèse d'émulation (polyfill)

- -
// https://tc39.github.io/ecma262/#sec-array.prototype.findindex
-if (!Array.prototype.findIndex) {
-  Object.defineProperty(Array.prototype, 'findIndex', {
-    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 >>> 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 < len
-      while (k < 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 k.
-        var kValue = o[k];
-        if (predicate.call(thisArg, kValue, k, o)) {
-          return k;
-        }
-        // e. Increase k by 1.
-        k++;
-      }
-
-      // 7. Return -1.
-      return -1;
-    },
-    configurable: true,
-    writable: true
-  });
-}
- -

S'il est vraiment nécessaire de prendre en charge les moteurs JavaScript qui ne prennent pas en charge {{jsxref("Object.defineProperty()")}}, mieux vaut ne pas ajouter de prothèse aux méthodes d'Array.prototype car on ne peut pas les rendre non-énumérables.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.findindex', 'Array.prototype.findIndex')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.findIndex', 'Array.prototype.findIndex')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.findIndex")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/findindex/index.md b/files/fr/web/javascript/reference/global_objects/array/findindex/index.md new file mode 100644 index 0000000000..9564b24021 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/findindex/index.md @@ -0,0 +1,176 @@ +--- +title: Array.prototype.findIndex() +slug: Web/JavaScript/Reference/Global_Objects/Array/findIndex +tags: + - Array + - ECMAScript6 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/findIndex +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/findIndex +--- +
{{JSRef}}
+ +

La méthode findIndex() renvoie l'indice du premier élément du tableau qui satisfait une condition donnée par une fonction. Si la fonction renvoie faux pour tous les éléments du tableau, le résultat vaut -1.

+ +
{{EmbedInteractiveExample("pages/js/array-findindex.html")}}
+ + + +

Voir également la méthode {{jsxref("Array.find", "find()")}} qui renvoie la valeur (et non l'indice) d'un des éléments trouvés.

+ +

Syntaxe

+ +
arr.findIndex(callback(element[, index[, tableau]])[, thisArg])
+ +

Paramètres

+ +
+
callback
+
Une fonction à exécuter sur chaque valeur du tableau jusqu'à ce que celle-ci renvoie true. Cette fonction prend trois arguments : +
+
élément
+
L'élément du tableau qui doit être traité.
+
indice{{optional_inline}}
+
L'indice de l'élément du tableau en cours de traitement.
+
tableau{{optional_inline}}
+
Le tableau sur lequel a été appelé findIndex.
+
+
+
argumentThis{{optional_inline}}
+
L'objet à utiliser comme contexte this lorsque le callback est exécuté.
+
+ +

Valeur de retour

+ +

Un indice d'un élément du tableau qui réussit le test décrit, -1 sinon.

+ +

Description

+ +

La méthode findIndex exécute la fonction callback une fois pour chaque élément présent dans le tableau (le tableau est parcouru entre les indices 0 et length-1 compris) jusqu'à ce que callback renvoie une valeur vraie.

+ +

S'il existe un tel élément, findIndex renverra immédiatement l'indice de l'élément concerné. Sinon, findIndex renverra -1. À la différence des autres méthodes liées aux tableaux comme some(), callback est également appelée pour les indices du tableau pour lesquels aucun élément n'est défini.

+ +

callback possède trois arguments : la valeur de l'élément, l'indice de l'élément et l'objet Array qui est parcouru

+ +

Si l'argument argumentThis est fourni à la méthode findIndex, il sera utilisé comme « contexte » this pour chaque appel de callback. S'il n'est pas fourni, {{jsxref("undefined")}} sera utilisé.

+ +

findIndex ne modifie pas le tableau sur laquelle elle est appelée. Les éléments qui seront traités par findIndex sont « récoltés » avant le premier appel de callback. Tout élément qui sera ajouté au tableau après l'appel de findIndex ne sera pas utilisé avec callback. Si un élément existant, pas encore visité, est modifié par callback, la valeur qui sera passé au callback pour cet élément modifié sera celle que findIndex utilise lorsqu'elle utilise l'indice de l'élément en question. Les éléments supprimés sont bien parcourus.

+ +

Exemples

+ +

Trouver l'indice d'un nombre premier dans un tableau

+ +

L'exemple qui suit illustre comment trouver l'indice d'un élément qui est un nombre premier dans un tableau (ou qui renvoie -1 s'il n'y a pas de nombre premier).

+ +
function estPremier(élément, index, array) {
+  var début = 2;
+  while (début <= Math.sqrt(élément)) {
+    if (élément % début < 1) {
+      return false;
+    } else {
+      début++;
+    }
+  }
+  return élément > 1;
+}
+
+console.log([4, 6, 8, 12].findIndex(estPremier)); // -1, aucun trouvé
+console.log([4, 6, 7, 12].findIndex(estPremier)); // 2
+ +

Trouver un indice avec une fonction fléchée

+ +

Dans cet exemple, on utilise une fonction fléchée pour trouver l'indice d'un élément :

+ +
const fruits = ["pomme", "banane", "melon", "fraise", "raisin"];
+
+const indice = fruits.findIndex(fruit => fruit === "fraise");
+console.log(indice); // 3
+console.log(fruits[indice]); // fraise 
+ +

Prothèse d'émulation (polyfill)

+ +
// https://tc39.github.io/ecma262/#sec-array.prototype.findindex
+if (!Array.prototype.findIndex) {
+  Object.defineProperty(Array.prototype, 'findIndex', {
+    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 >>> 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 < len
+      while (k < 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 k.
+        var kValue = o[k];
+        if (predicate.call(thisArg, kValue, k, o)) {
+          return k;
+        }
+        // e. Increase k by 1.
+        k++;
+      }
+
+      // 7. Return -1.
+      return -1;
+    },
+    configurable: true,
+    writable: true
+  });
+}
+ +

S'il est vraiment nécessaire de prendre en charge les moteurs JavaScript qui ne prennent pas en charge {{jsxref("Object.defineProperty()")}}, mieux vaut ne pas ajouter de prothèse aux méthodes d'Array.prototype car on ne peut pas les rendre non-énumérables.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.findindex', 'Array.prototype.findIndex')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.findIndex', 'Array.prototype.findIndex')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.findIndex")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/flat/index.html b/files/fr/web/javascript/reference/global_objects/array/flat/index.html deleted file mode 100644 index 160e1c350b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/flat/index.html +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Array.prototype.flat() -slug: Web/JavaScript/Reference/Global_Objects/Array/flat -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/flat -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/flat ---- -
{{JSRef}}
- -

La méthode flat() permet de créer un nouveau tableau contenant les éléments des sous-tableaux du tableau passé en argument, qui sont concaténés récursivement pour atteindre une profondeur donnée.

- -

Syntaxe

- -
var nouveauTableau = monTableau.flat([profondeur]);
- -

Paramètres

- -
-
profondeur {{optional_inline}}
-
Le niveau de profondeur en termes d'imbrication de tableau. Autrement dit, jusqu'à quel niveau d'imbrication un tableau imbriqué doit il être aplati. La valeur par défaut est 1.
-
- -

Valeur de retour

- -

Un nouveau tableau qui contient la concaténation des éléments des sous-tableaux du tableau passé en argument.

- -

Exemples

- -

Aplatir des tableaux imbriqués

- -
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]
-
- -

Aplatir et combler les trous

- -

La méthode flat() permet également de retirer les « trous » d'un tableau :

- -
var arr4 = [1, 2, , 4, 5];
-arr4.flat();
-// [1, 2, 4, 5]
- -

Équivalent

- -

reduce et concat

- -
var arr = [1, 2, [3, 4]];
-
-// pour un tableau avec un seul niveau de profondeur
-arr.flat();
-// est équivalent à
-arr.reduce((acc, val) => acc.concat(val), []);
-// [1, 2, 3, 4]
-
-// avec la décomposition et les compositions flechées, on peut écrire :
-const flat = arr => [].concat(...arr);
-
- -

reduceconcat + isArray + récursivité

- -
var arr = [1, 2, [3, 4, [5, 6]]];
-
-// Pour gérer plusieurs niveaux, on pourra utiliser
-// une méthode récursive avec reduce et concat
-function flatDeep(arr) {
-   return arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val) : val), []);
-};
-
-flatDeep(arr);
-// [1, 2, 3, 4, 5, 6]
-
- -

Utiliser une pile

- -
var arr = [1, 2, [3, 4]];
-
-// Version non récursive utilisant une pile
-function flatStack(input) {
-  const stack = [...input];
-  const res = [];
-  while (stack.length) {
-    // On sort une valeur de la pile
-    const next = stack.pop();
-    if (Array.isArray(next)) {
-      // On place les éléments qui sont des tableaux dans
-      // la pile sans modifier l'entrée
-      stack.push(...next);
-    } else {
-      res.push(next);
-    }
-  }
-  // On inverse le résultat pour revenir
-  // à l 'ordre de l'entrée
-  return res.reverse();
-}
-
-flatStack(arr);
-// [1, 2, 3, 4]
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
ECMAScript 2019FinaliséProposition initiale
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.flat")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/flat/index.md b/files/fr/web/javascript/reference/global_objects/array/flat/index.md new file mode 100644 index 0000000000..160e1c350b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/flat/index.md @@ -0,0 +1,143 @@ +--- +title: Array.prototype.flat() +slug: Web/JavaScript/Reference/Global_Objects/Array/flat +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flat +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/flat +--- +
{{JSRef}}
+ +

La méthode flat() permet de créer un nouveau tableau contenant les éléments des sous-tableaux du tableau passé en argument, qui sont concaténés récursivement pour atteindre une profondeur donnée.

+ +

Syntaxe

+ +
var nouveauTableau = monTableau.flat([profondeur]);
+ +

Paramètres

+ +
+
profondeur {{optional_inline}}
+
Le niveau de profondeur en termes d'imbrication de tableau. Autrement dit, jusqu'à quel niveau d'imbrication un tableau imbriqué doit il être aplati. La valeur par défaut est 1.
+
+ +

Valeur de retour

+ +

Un nouveau tableau qui contient la concaténation des éléments des sous-tableaux du tableau passé en argument.

+ +

Exemples

+ +

Aplatir des tableaux imbriqués

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

Aplatir et combler les trous

+ +

La méthode flat() permet également de retirer les « trous » d'un tableau :

+ +
var arr4 = [1, 2, , 4, 5];
+arr4.flat();
+// [1, 2, 4, 5]
+ +

Équivalent

+ +

reduce et concat

+ +
var arr = [1, 2, [3, 4]];
+
+// pour un tableau avec un seul niveau de profondeur
+arr.flat();
+// est équivalent à
+arr.reduce((acc, val) => acc.concat(val), []);
+// [1, 2, 3, 4]
+
+// avec la décomposition et les compositions flechées, on peut écrire :
+const flat = arr => [].concat(...arr);
+
+ +

reduceconcat + isArray + récursivité

+ +
var arr = [1, 2, [3, 4, [5, 6]]];
+
+// Pour gérer plusieurs niveaux, on pourra utiliser
+// une méthode récursive avec reduce et concat
+function flatDeep(arr) {
+   return arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val) : val), []);
+};
+
+flatDeep(arr);
+// [1, 2, 3, 4, 5, 6]
+
+ +

Utiliser une pile

+ +
var arr = [1, 2, [3, 4]];
+
+// Version non récursive utilisant une pile
+function flatStack(input) {
+  const stack = [...input];
+  const res = [];
+  while (stack.length) {
+    // On sort une valeur de la pile
+    const next = stack.pop();
+    if (Array.isArray(next)) {
+      // On place les éléments qui sont des tableaux dans
+      // la pile sans modifier l'entrée
+      stack.push(...next);
+    } else {
+      res.push(next);
+    }
+  }
+  // On inverse le résultat pour revenir
+  // à l 'ordre de l'entrée
+  return res.reverse();
+}
+
+flatStack(arr);
+// [1, 2, 3, 4]
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
ECMAScript 2019FinaliséProposition initiale
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.flat")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/flatmap/index.html b/files/fr/web/javascript/reference/global_objects/array/flatmap/index.html deleted file mode 100644 index 4117829f18..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/flatmap/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Array.prototype.flatMap() -slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/flatMap ---- -
{{JSRef}}
- -

La méthode flatMap() permet d'appliquer une fonction à chaque élément du tableau puis d'aplatir le résultat en un tableau. Cela correspond à l'enchaînement de {{jsxref("Array.prototype.map()")}} suivi de {{jsxref("Array.prototype.flat()")}} de profondeur 1. flatMap est plus efficace que la combinaison de ces deux opérations, souvent réalisées conjointement.

- -

Syntaxe

- -
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
-    // return element for new_array
-}[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction qui produit un élément du nouveau tableau et qui prend trois arguments : -
-
currentValue
-
La valeur du tableau qui est traitée.
-
index{{optional_inline}}
-
L'indice de l'élément du tableau qui est traitée.
-
array{{optional_inline}}
-
Le tableau sur lequel flatMap a été appelée.
-
-
-
thisArg{{optional_inline}}
-
La valeur à utiliser comme contexte this lors de l'exécution de callback.
-
- -

Valeur de retour

- -

Un nouveau tableau composé d'éléments résultants de la fonction de rappel (callback) et aplati d'un niveau de profondeur.

- -

Description

- -

Pour la fonction de rappel, voir {{jsxref("Array.prototype.map()")}}. La méthode flatMap() est identique à un appel de {{jsxref("Array.prototype.map()")}} suivi d'un appel de {{jsxref("Array.prototype.flat()")}} avec la profondeur 1.

- -

Exemples

- -

map() et flatMap()

- -
var arr1 = [1, 2, 3, 4];
-
-arr1.map(x => [x * 2]);
-// [[2], [4], [6], [8]]
-
-arr1.flatMap(x => [x * 2]);
-// [2, 4, 6, 8]
-
-// seul un niveau est aplati
-arr1.flatMap(x => [[x * 2]]);
-// [[2], [4], [6], [8]]
-
- -

On peut utiliser un autre exemple où on génère une liste de mots à partir d'une liste de phrases :

- -
let tableau1 = ["Coucou comment", "", "ça va ?"];
-
-tableau1.map(x => x.split(" "));
-// [["Coucou", "comment"], [""], ["ça", "va", "?"]]
-
-tableau1.flatMap(x => x.split(" "));
-// ["Coucou", "comment", "", "ça", "va", "?"]
-
- -

On notera que la longueur de la liste obtenue avec flatMap est différente de la longueur de la liste originale.

- -
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
- -

Équivalent

- -

reduce() et concat()

- -
var arr = [1, 2, 3, 4];
-
-arr.flatMap(x => [x, x * 2]);
-// est équivalent à
-arr.reduce((acc, x) => acc.concat([x, x * 2]), []);
-// [1, 2, 2, 4, 3, 6, 4, 8]
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
ECMAScript 2019FinaliséProposition initiale
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.flatMap")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/flatmap/index.md b/files/fr/web/javascript/reference/global_objects/array/flatmap/index.md new file mode 100644 index 0000000000..4117829f18 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/flatmap/index.md @@ -0,0 +1,120 @@ +--- +title: Array.prototype.flatMap() +slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/flatMap +--- +
{{JSRef}}
+ +

La méthode flatMap() permet d'appliquer une fonction à chaque élément du tableau puis d'aplatir le résultat en un tableau. Cela correspond à l'enchaînement de {{jsxref("Array.prototype.map()")}} suivi de {{jsxref("Array.prototype.flat()")}} de profondeur 1. flatMap est plus efficace que la combinaison de ces deux opérations, souvent réalisées conjointement.

+ +

Syntaxe

+ +
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
+    // return element for new_array
+}[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction qui produit un élément du nouveau tableau et qui prend trois arguments : +
+
currentValue
+
La valeur du tableau qui est traitée.
+
index{{optional_inline}}
+
L'indice de l'élément du tableau qui est traitée.
+
array{{optional_inline}}
+
Le tableau sur lequel flatMap a été appelée.
+
+
+
thisArg{{optional_inline}}
+
La valeur à utiliser comme contexte this lors de l'exécution de callback.
+
+ +

Valeur de retour

+ +

Un nouveau tableau composé d'éléments résultants de la fonction de rappel (callback) et aplati d'un niveau de profondeur.

+ +

Description

+ +

Pour la fonction de rappel, voir {{jsxref("Array.prototype.map()")}}. La méthode flatMap() est identique à un appel de {{jsxref("Array.prototype.map()")}} suivi d'un appel de {{jsxref("Array.prototype.flat()")}} avec la profondeur 1.

+ +

Exemples

+ +

map() et flatMap()

+ +
var arr1 = [1, 2, 3, 4];
+
+arr1.map(x => [x * 2]);
+// [[2], [4], [6], [8]]
+
+arr1.flatMap(x => [x * 2]);
+// [2, 4, 6, 8]
+
+// seul un niveau est aplati
+arr1.flatMap(x => [[x * 2]]);
+// [[2], [4], [6], [8]]
+
+ +

On peut utiliser un autre exemple où on génère une liste de mots à partir d'une liste de phrases :

+ +
let tableau1 = ["Coucou comment", "", "ça va ?"];
+
+tableau1.map(x => x.split(" "));
+// [["Coucou", "comment"], [""], ["ça", "va", "?"]]
+
+tableau1.flatMap(x => x.split(" "));
+// ["Coucou", "comment", "", "ça", "va", "?"]
+
+ +

On notera que la longueur de la liste obtenue avec flatMap est différente de la longueur de la liste originale.

+ +
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
+ +

Équivalent

+ +

reduce() et concat()

+ +
var arr = [1, 2, 3, 4];
+
+arr.flatMap(x => [x, x * 2]);
+// est équivalent à
+arr.reduce((acc, x) => acc.concat([x, x * 2]), []);
+// [1, 2, 2, 4, 3, 6, 4, 8]
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
ECMAScript 2019FinaliséProposition initiale
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.flatMap")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/foreach/index.html b/files/fr/web/javascript/reference/global_objects/array/foreach/index.html deleted file mode 100644 index 1b10baec33..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/foreach/index.html +++ /dev/null @@ -1,271 +0,0 @@ ---- -title: Array.prototype.forEach() -slug: Web/JavaScript/Reference/Global_Objects/Array/forEach -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/forEach -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/forEach ---- -
{{JSRef}}
- -

La méthode forEach() permet d'exécuter une fonction donnée sur chaque élément du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-foreach.html")}}
- -

Syntaxe

- -
arr.forEach(callback);
-arr.forEach(callback, thisArg);
- -

Paramètres

- -
-
callback
-
La fonction à utiliser pour chaque élément du tableau. Elle prend en compte trois arguments : -
-
valeurCourante
-
La valeur de l'élément du tableau en cours de traitement.
-
index {{optional_inline}}
-
L'indice de l'élément du tableau en cours de traitement.
-
array {{optional_inline}}
-
Le tableau sur lequel la méthode forEach est appliquée.
-
-
-
thisArg {{optional_inline}}
-
Paramètre optionnel. La valeur à utiliser pour this lors de l'exécution de callback.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Description

- -

forEach() exécute la fonction callback une fois pour chaque élément du tableau, dans l'ordre croissant des indices. Cette fonction n'est pas appelée pour les indices pour lesquels les éléments ont été supprimés ou qui n'ont pas été définis. Attention, en revanche elle est appelée pour les éléments qui sont présents et qui valent {{jsxref("undefined")}}.

- -

callback est appelé avec trois arguments :

- - - -

Si un paramètre thisArg est fourni à la méthode forEach, il sera utilisé en tant que valeur this pour chaque appel de callback. Sinon, ce sera la valeur undefined qui sera utilisée comme valeur this. La valeur this finalement prise en compte par la fonction callback est déterminée selon les règles usuelles pour déterminer la valeur de this utilisée dans une fonction.

- -

L'ensemble des éléments traités par forEach est défini avant le premier appel à callback. Les éléments ajoutés au tableau après que l'appel à forEach ait commencé ne seront pas visités par callback. Si des éléments déjà présents dans le tableau sont modifiés, leur valeur telle qu'elle est passée au callback sera la valeur au moment du passage du forEach ; les éléments supprimés ne sont pas parcourus. Voir l'exemple ci-après.

- -

forEach() exécute la fonction callback une fois pour chaque élément. À la différence de {{jsxref("Array.prototype.map()", "map()")}} ou de {{jsxref("Array.prototype.reduce()", "reduce()")}} il renvoie toujours la valeur {{jsxref("undefined")}} et ne peut donc pas être « enchaîné ». Généralement, l'effet voulu est de déclencher des effets de bord en fin de chaîne.

- -

forEach() ne modifie pas le tableau sur lequel elle est appelée, en revanche, la fonction de retour (callback) utilisée peut modifier le tableau.

- -

Note : Il n'existe aucun moyen d'arrêter une boucle forEach en dehors de lever une exception. Si vous avez besoin d'arrêter la boucle, étudiez plutôt :

- - - -

Les autres méthodes associées aux tableaux ({{jsxref("Array.prototype.every()")}}, {{jsxref("Array.prototype.some()")}}, {{jsxref("Array.prototype.find()")}}, {{jsxref("Array.prototype.findIndex()")}}) utilisent une fonction de texte qui permet de renvoyer une valeur équivalente à true si besoin de poursuivre la boucle.

-
- -

forEach exécute la fonction callback une fois pour chaque élément ; contrairement à every et some, cette méthode renvoie toujours undefined et ne peut pas être enchaînée.

- -

Exemples

- -

Équivalence entre une boucle for et une boucle forEach

- -

Voici un fragment de code simple qui utilise une boucle for

- -
var items = ["item1", "item2", "item3"];
-var copie = [];
-
-for (var i = 0; i < items.length; i++) {
-  copie.push(items[i]);
-}
-
- -

Et voici un fragment de code équivalent qui utilise forEach :

- -
var items = ["item1", "item2", "item3"]
-var copie = [];
-
-items.forEach(function(item){
-  copie.push(item);
-});
- -

Afficher le contenu d'un tableau

- -
-

Note : Pour afficher le contenu d'un tableau, on pourra utiliser console.table() qui met en forme les éléments du tableau. L'exemple suivant est laissé à titre d'illustration pour forEach().

-
- -

Le code suivant affiche une ligne pour chaque élément du tableau :

- -
function logArrayElements(element, index, array) {
-    console.log("a[" + index + "] = " + element);
-}
-[2, 5, , 9].forEach(logArrayElements);
-// logs:
-// a[0] = 2
-// a[1] = 5
-// a[3] = 9
-
-
- -

Utiliser l'argument pour this

- -

Dans l'exemple qui suit, on met à jour les propriétés d'un objet à partir des éléments d'un tableau :

- -
function Compteur() {
-  this.somme = 0;
-  this.compte = 0;
-}
-
-Compteur.prototype.ajouter = function(tableau) {
-  tableau.forEach(function(element) {
-    this.somme += element;
-    ++this.compte;
-  },  this);
-  //  ^---- On a ajouté l'argument this ici.
-};
-
-var obj = new Compteur();
-obj.ajouter([2, 5, 9]);
-console.log(obj.compte); // 3
-console.log(obj.somme);  // 16
-
- -
-

Note : Le paramètre pour this est passé à la méthode forEach(), à chaque appel du callback, celui-ci sera utilisé comme valeur pour this.

-
- -
-

Note : Si la fonction passée en argument est une fonction fléchée, il n'est pas nécessaire d'ajouter le paramètre this car les fonctions fléchées utilisent le this fourni par le contexte lexical.

-
- -

Stopper une boucle

- -

Le code qui suit utilise la méthode {{jsxref("Array.prototype.every")}} pour afficher le contenu d'un tableau et s'arrêter lorsqu'il atteint une valeur supérieure à SEUIL_MAX.

- -
var SEUIL_MAX = 12;
-var v = [5, 2, 16, 4, 3, 18, 20];
-var res;
-
-res = v.every(function(element, index, array) {
-  console.log('élément :', element);
-  if (element >= SEUIL_MAX) {
-    return false;
-  }
-
-  return true;
-});
-console.log('res:', res);
-// affiche :
-// élément : 5
-// élément : 2
-// élément : 16
-// res : false
-
-res = v.some(function(element, index, array) {
-  console.log('élément:', element);
-  if (element >= SEUIL_MAX) {
-    return true;
-  }
-
-  return false;
-});
-console.log('res:', res);
-// affiche :
-// élément : 5
-// élément : 2
-// élément : 16
-// res: true
- -

Une fonction de copie d'objet

- -

Le code qui suit permet de créer une copie d'un objet donné. Il existe différentes façons pour créer une copie d'un objet. L'exemple suivant illustre une de ces façons afin d'expliquer le fonctionnement d'Array.prototype.forEach et d'utiliser les fonctions ECMAScript 5 Object.*.

- -
function copie(obj) {
-  var copie = Object.create(Object.getPrototypeOf(obj));
-  var propNames = Object.getOwnPropertyNames(obj);
-
-  propNames.forEach(function(nom) {
-    var desc = Object.getOwnPropertyDescriptor(obj, nom);
-    Object.defineProperty(copie, nom, desc);
-  });
-
-  return copie;
-}
-
-var obj1 = { a: 1, b: 2 };
-var obj2 = copie(obj1); // obj2 ressemble désormais à obj1
- -

Attention aux modifications en cours

- -

Dans l'exemple qui suit, on utilise un tableau qui contient quatre élément : "un", "deux", "trois", "quatre". Lorsque le parcours du tableau arrive à l'élément "deux", on décale le tableau d'un cran vers les premiers éléments. Aussi, l'élément "quatre" est décalé à la place de "trois" et "trois" est déplacé à la place de "deux". Pour cette raison, lorsque forEach poursuit son parcours, elle saute la valeur "trois". Autrement dit, forEach n'utilise pas une copie du tableau au moment où elle est appelée, elle manipule le tableau directement. On voit aussi dans cet exemple que les éléments non initialisés ne sont pas traités par la fonction de rappel.

- -
var mots = ["un", "deux", "trois",, "quatre"];
-mots.forEach(function(mot) {
-  console.log(mot);
-  if (mot === "deux") {
-    mots.shift();
-  }
-});
-// un
-// deux
-// quatre
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.18', 'Array.prototype.forEach')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.forEach")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/foreach/index.md b/files/fr/web/javascript/reference/global_objects/array/foreach/index.md new file mode 100644 index 0000000000..1b10baec33 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/foreach/index.md @@ -0,0 +1,271 @@ +--- +title: Array.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/Array/forEach +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/forEach +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/forEach +--- +
{{JSRef}}
+ +

La méthode forEach() permet d'exécuter une fonction donnée sur chaque élément du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-foreach.html")}}
+ +

Syntaxe

+ +
arr.forEach(callback);
+arr.forEach(callback, thisArg);
+ +

Paramètres

+ +
+
callback
+
La fonction à utiliser pour chaque élément du tableau. Elle prend en compte trois arguments : +
+
valeurCourante
+
La valeur de l'élément du tableau en cours de traitement.
+
index {{optional_inline}}
+
L'indice de l'élément du tableau en cours de traitement.
+
array {{optional_inline}}
+
Le tableau sur lequel la méthode forEach est appliquée.
+
+
+
thisArg {{optional_inline}}
+
Paramètre optionnel. La valeur à utiliser pour this lors de l'exécution de callback.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Description

+ +

forEach() exécute la fonction callback une fois pour chaque élément du tableau, dans l'ordre croissant des indices. Cette fonction n'est pas appelée pour les indices pour lesquels les éléments ont été supprimés ou qui n'ont pas été définis. Attention, en revanche elle est appelée pour les éléments qui sont présents et qui valent {{jsxref("undefined")}}.

+ +

callback est appelé avec trois arguments :

+ + + +

Si un paramètre thisArg est fourni à la méthode forEach, il sera utilisé en tant que valeur this pour chaque appel de callback. Sinon, ce sera la valeur undefined qui sera utilisée comme valeur this. La valeur this finalement prise en compte par la fonction callback est déterminée selon les règles usuelles pour déterminer la valeur de this utilisée dans une fonction.

+ +

L'ensemble des éléments traités par forEach est défini avant le premier appel à callback. Les éléments ajoutés au tableau après que l'appel à forEach ait commencé ne seront pas visités par callback. Si des éléments déjà présents dans le tableau sont modifiés, leur valeur telle qu'elle est passée au callback sera la valeur au moment du passage du forEach ; les éléments supprimés ne sont pas parcourus. Voir l'exemple ci-après.

+ +

forEach() exécute la fonction callback une fois pour chaque élément. À la différence de {{jsxref("Array.prototype.map()", "map()")}} ou de {{jsxref("Array.prototype.reduce()", "reduce()")}} il renvoie toujours la valeur {{jsxref("undefined")}} et ne peut donc pas être « enchaîné ». Généralement, l'effet voulu est de déclencher des effets de bord en fin de chaîne.

+ +

forEach() ne modifie pas le tableau sur lequel elle est appelée, en revanche, la fonction de retour (callback) utilisée peut modifier le tableau.

+ +

Note : Il n'existe aucun moyen d'arrêter une boucle forEach en dehors de lever une exception. Si vous avez besoin d'arrêter la boucle, étudiez plutôt :

+ + + +

Les autres méthodes associées aux tableaux ({{jsxref("Array.prototype.every()")}}, {{jsxref("Array.prototype.some()")}}, {{jsxref("Array.prototype.find()")}}, {{jsxref("Array.prototype.findIndex()")}}) utilisent une fonction de texte qui permet de renvoyer une valeur équivalente à true si besoin de poursuivre la boucle.

+
+ +

forEach exécute la fonction callback une fois pour chaque élément ; contrairement à every et some, cette méthode renvoie toujours undefined et ne peut pas être enchaînée.

+ +

Exemples

+ +

Équivalence entre une boucle for et une boucle forEach

+ +

Voici un fragment de code simple qui utilise une boucle for

+ +
var items = ["item1", "item2", "item3"];
+var copie = [];
+
+for (var i = 0; i < items.length; i++) {
+  copie.push(items[i]);
+}
+
+ +

Et voici un fragment de code équivalent qui utilise forEach :

+ +
var items = ["item1", "item2", "item3"]
+var copie = [];
+
+items.forEach(function(item){
+  copie.push(item);
+});
+ +

Afficher le contenu d'un tableau

+ +
+

Note : Pour afficher le contenu d'un tableau, on pourra utiliser console.table() qui met en forme les éléments du tableau. L'exemple suivant est laissé à titre d'illustration pour forEach().

+
+ +

Le code suivant affiche une ligne pour chaque élément du tableau :

+ +
function logArrayElements(element, index, array) {
+    console.log("a[" + index + "] = " + element);
+}
+[2, 5, , 9].forEach(logArrayElements);
+// logs:
+// a[0] = 2
+// a[1] = 5
+// a[3] = 9
+
+
+ +

Utiliser l'argument pour this

+ +

Dans l'exemple qui suit, on met à jour les propriétés d'un objet à partir des éléments d'un tableau :

+ +
function Compteur() {
+  this.somme = 0;
+  this.compte = 0;
+}
+
+Compteur.prototype.ajouter = function(tableau) {
+  tableau.forEach(function(element) {
+    this.somme += element;
+    ++this.compte;
+  },  this);
+  //  ^---- On a ajouté l'argument this ici.
+};
+
+var obj = new Compteur();
+obj.ajouter([2, 5, 9]);
+console.log(obj.compte); // 3
+console.log(obj.somme);  // 16
+
+ +
+

Note : Le paramètre pour this est passé à la méthode forEach(), à chaque appel du callback, celui-ci sera utilisé comme valeur pour this.

+
+ +
+

Note : Si la fonction passée en argument est une fonction fléchée, il n'est pas nécessaire d'ajouter le paramètre this car les fonctions fléchées utilisent le this fourni par le contexte lexical.

+
+ +

Stopper une boucle

+ +

Le code qui suit utilise la méthode {{jsxref("Array.prototype.every")}} pour afficher le contenu d'un tableau et s'arrêter lorsqu'il atteint une valeur supérieure à SEUIL_MAX.

+ +
var SEUIL_MAX = 12;
+var v = [5, 2, 16, 4, 3, 18, 20];
+var res;
+
+res = v.every(function(element, index, array) {
+  console.log('élément :', element);
+  if (element >= SEUIL_MAX) {
+    return false;
+  }
+
+  return true;
+});
+console.log('res:', res);
+// affiche :
+// élément : 5
+// élément : 2
+// élément : 16
+// res : false
+
+res = v.some(function(element, index, array) {
+  console.log('élément:', element);
+  if (element >= SEUIL_MAX) {
+    return true;
+  }
+
+  return false;
+});
+console.log('res:', res);
+// affiche :
+// élément : 5
+// élément : 2
+// élément : 16
+// res: true
+ +

Une fonction de copie d'objet

+ +

Le code qui suit permet de créer une copie d'un objet donné. Il existe différentes façons pour créer une copie d'un objet. L'exemple suivant illustre une de ces façons afin d'expliquer le fonctionnement d'Array.prototype.forEach et d'utiliser les fonctions ECMAScript 5 Object.*.

+ +
function copie(obj) {
+  var copie = Object.create(Object.getPrototypeOf(obj));
+  var propNames = Object.getOwnPropertyNames(obj);
+
+  propNames.forEach(function(nom) {
+    var desc = Object.getOwnPropertyDescriptor(obj, nom);
+    Object.defineProperty(copie, nom, desc);
+  });
+
+  return copie;
+}
+
+var obj1 = { a: 1, b: 2 };
+var obj2 = copie(obj1); // obj2 ressemble désormais à obj1
+ +

Attention aux modifications en cours

+ +

Dans l'exemple qui suit, on utilise un tableau qui contient quatre élément : "un", "deux", "trois", "quatre". Lorsque le parcours du tableau arrive à l'élément "deux", on décale le tableau d'un cran vers les premiers éléments. Aussi, l'élément "quatre" est décalé à la place de "trois" et "trois" est déplacé à la place de "deux". Pour cette raison, lorsque forEach poursuit son parcours, elle saute la valeur "trois". Autrement dit, forEach n'utilise pas une copie du tableau au moment où elle est appelée, elle manipule le tableau directement. On voit aussi dans cet exemple que les éléments non initialisés ne sont pas traités par la fonction de rappel.

+ +
var mots = ["un", "deux", "trois",, "quatre"];
+mots.forEach(function(mot) {
+  console.log(mot);
+  if (mot === "deux") {
+    mots.shift();
+  }
+});
+// un
+// deux
+// quatre
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.18', 'Array.prototype.forEach')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.forEach")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/from/index.html b/files/fr/web/javascript/reference/global_objects/array/from/index.html deleted file mode 100644 index de22e8feea..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/from/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: Array.from() -slug: Web/JavaScript/Reference/Global_Objects/Array/from -tags: - - Array - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/from -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/from ---- -
{{JSRef}}
- -

La méthode Array.from() permet de créer une nouvelle instance d'Array (une copie superficielle) à partir d'un objet itérable ou semblable à un tableau.

- -
{{EmbedInteractiveExample("pages/js/array-from.html")}}
- -

Syntaxe

- -
Array.from(arrayLike [, fonctionMap[, thisArg]])
- -

Paramètres

- -
-
arrayLike
-
Un objet semblable à un tableau ou bien un objet itérable dont on souhaite créer un tableau, instance d'Array.
-
fonctionMap {{optional_inline}}
-
Argument optionnel, une fonction à appliquer à chacun des éléments du tableau.
-
thisArg {{optional_inline}}
-
Argument optionnel. La valeur à utiliser pour this lors de l'exécution de la fonction fonctionMap.
-
- -

Valeur de retour

- -

Une nouvelle instance de {{jsxref("Array")}}.

- -

Description

- -

Array.from() permet de créer des instances d'Array à partir :

- - - -

Array.from() possède un paramètre optionnel fonctionMap, qui permet d'exécuter une fonction {{jsxref("Array.prototype.map", "map")}} sur chacun des éléments du tableau (ou de l'instance de la classe fille) qui est créé. Autrement dit Array.from(obj, mapFn, thisArg) correspond exactement à Array.from(obj).map(mapFn, thisArg), sauf qu'il n'y a pas de tableau intermédiaire de créé. Cet aspect est notamment important pour certaines classes filles, comme les tableaux typés (en effet, un tableau intermédiaire aurait eu ses valeurs tronquées pour qu'elles soient du type approprié).

- -

La propriété length de la méthode from() est 1.

- -

Avec ES6, la syntaxe de classe permet d'avoir des sous-classes pour les objets natifs comme pour les objets définis par l'utilisateur. Ainsi, les méthodes statiques de classe comme Array.from() sont héritées par les sous-classes d'Array et créent de nouvelles instances de la sous-classe d'Array.

- -

Exemples

- -
// créer une instance d'Array à partir de l'objet arguments qui est semblable à un tableau
-function f() {
-  return Array.from(arguments);
-}
-
-f(1, 2, 3);
-// [1, 2, 3]
-
-
-// Ça fonctionne avec tous les objets itérables...
-// Set
-const s = new Set(["toto", "truc", "truc", "bidule"]);
-Array.from(s);
-// ["toto", "truc", "bidule"]
-
-
-// Map
-const m = new Map([[1, 2], [2, 4], [4, 8]]);
-Array.from(m);
-// [[1, 2], [2, 4], [4, 8]]
-
-const mapper = new Map([["1", "a"], ["2", "b"]]);
-Array.from(mapper.values());
-// ["a", "b"]
-
-Array.from(mapper.keys());
-// ["1", "2"]
-
-// String
-Array.from("toto");
-// ["t", "o", "t", "o"]
-
-
-// En utilisant une fonction fléchée pour remplacer map
-// et manipuler des éléments
-Array.from([1, 2, 3], x => x + x);
-// [2, 4, 6]
-
-
-// Pour générer une séquence de nombres
-Array.from({length: 5}, (v, k) => k);
-// [0, 1, 2, 3, 4]
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.from', 'Array.from')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.from', 'Array.from')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.from")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/from/index.md b/files/fr/web/javascript/reference/global_objects/array/from/index.md new file mode 100644 index 0000000000..de22e8feea --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/from/index.md @@ -0,0 +1,135 @@ +--- +title: Array.from() +slug: Web/JavaScript/Reference/Global_Objects/Array/from +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/from +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/from +--- +
{{JSRef}}
+ +

La méthode Array.from() permet de créer une nouvelle instance d'Array (une copie superficielle) à partir d'un objet itérable ou semblable à un tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-from.html")}}
+ +

Syntaxe

+ +
Array.from(arrayLike [, fonctionMap[, thisArg]])
+ +

Paramètres

+ +
+
arrayLike
+
Un objet semblable à un tableau ou bien un objet itérable dont on souhaite créer un tableau, instance d'Array.
+
fonctionMap {{optional_inline}}
+
Argument optionnel, une fonction à appliquer à chacun des éléments du tableau.
+
thisArg {{optional_inline}}
+
Argument optionnel. La valeur à utiliser pour this lors de l'exécution de la fonction fonctionMap.
+
+ +

Valeur de retour

+ +

Une nouvelle instance de {{jsxref("Array")}}.

+ +

Description

+ +

Array.from() permet de créer des instances d'Array à partir :

+ + + +

Array.from() possède un paramètre optionnel fonctionMap, qui permet d'exécuter une fonction {{jsxref("Array.prototype.map", "map")}} sur chacun des éléments du tableau (ou de l'instance de la classe fille) qui est créé. Autrement dit Array.from(obj, mapFn, thisArg) correspond exactement à Array.from(obj).map(mapFn, thisArg), sauf qu'il n'y a pas de tableau intermédiaire de créé. Cet aspect est notamment important pour certaines classes filles, comme les tableaux typés (en effet, un tableau intermédiaire aurait eu ses valeurs tronquées pour qu'elles soient du type approprié).

+ +

La propriété length de la méthode from() est 1.

+ +

Avec ES6, la syntaxe de classe permet d'avoir des sous-classes pour les objets natifs comme pour les objets définis par l'utilisateur. Ainsi, les méthodes statiques de classe comme Array.from() sont héritées par les sous-classes d'Array et créent de nouvelles instances de la sous-classe d'Array.

+ +

Exemples

+ +
// créer une instance d'Array à partir de l'objet arguments qui est semblable à un tableau
+function f() {
+  return Array.from(arguments);
+}
+
+f(1, 2, 3);
+// [1, 2, 3]
+
+
+// Ça fonctionne avec tous les objets itérables...
+// Set
+const s = new Set(["toto", "truc", "truc", "bidule"]);
+Array.from(s);
+// ["toto", "truc", "bidule"]
+
+
+// Map
+const m = new Map([[1, 2], [2, 4], [4, 8]]);
+Array.from(m);
+// [[1, 2], [2, 4], [4, 8]]
+
+const mapper = new Map([["1", "a"], ["2", "b"]]);
+Array.from(mapper.values());
+// ["a", "b"]
+
+Array.from(mapper.keys());
+// ["1", "2"]
+
+// String
+Array.from("toto");
+// ["t", "o", "t", "o"]
+
+
+// En utilisant une fonction fléchée pour remplacer map
+// et manipuler des éléments
+Array.from([1, 2, 3], x => x + x);
+// [2, 4, 6]
+
+
+// Pour générer une séquence de nombres
+Array.from({length: 5}, (v, k) => k);
+// [0, 1, 2, 3, 4]
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.from', 'Array.from')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.from', 'Array.from')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.from")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/includes/index.html b/files/fr/web/javascript/reference/global_objects/array/includes/index.html deleted file mode 100644 index e63134919f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/includes/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Array.prototype.includes() -slug: Web/JavaScript/Reference/Global_Objects/Array/includes -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/includes ---- -
{{JSRef}}
- -

La méthode includes() permet de déterminer si un tableau contient une valeur et renvoie true si c'est le cas, false sinon.

- -
{{EmbedInteractiveExample("pages/js/array-includes.html")}}
- - - -
-

Note : Cette méthode utilise l'algorithme de comparaison SameValueZero qui fonctionne comme l'égalité stricte, à la différence que NaN est ici égal à lui même.

-
- -

Syntaxe

- -
array.includes(élémentRecherché)
-array.includes(élémentRecherché, indiceDépart)
-
- -

Paramètres

- -
-
élémentRecherché
-
La valeur qu'on souhaite trouver dans le tableau (lorsqu'on manipule des caractères et des chaînes, la comparaison est sensible à la casse).
-
indiceDépart {{optional_inline}}
-
La position du tableau à partir de laquelle commencer à chercher élémentRecherché. Si on utilise une valeur négative, la recherche commencera à partir de la fin du tableau (autrement dit à l'indice array.length - indiceDépart). La valeur par défaut est 0.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} qui vaut true si élémentRecherché est trouvé dans le tableau (à partir de l'indiceDépart si celui-ci est indiqué). Les valeurs -0, +0 et 0 sont considérées comme équivalentes mais false n'est pas considéré comme équivalent à 0.

- -
-

Note : Pour être tout à fait précis, includes() utilise l'algorithme SameValueZero afin de déterminer si un élément donné est trouvé.

-
- -

Exemples

- -
[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
-
-['a', 'b', 'c'].includes('c', 5);    // false
-['a', 'b', 'c'].includes('c', -100); // true
-
- -

indiceDépart supérieur ou égal à la longueur du tableau

- -

SI indiceDépart est supérieur ou égal à la longueur du tableau, la méthode retourne false. Le tableau n'est pas parcouru.

- -
var arr = ['a', 'b', 'c'];
-
-arr.includes('c', 3);   // false
-arr.includes('c', 100); // false
-
- -

indiceDépart strictement négatif

- -

Si indiceDépart est strictement négatif, l'indice de départ effectif est la somme entre la taille du tableau et indiceDépart. Si cette somme est toujours négative, le tableau est intégralement parcouru.

- -
// Le tableau a une taille de 3
-// indiceDépart vaut -2
-// L'indice de départ effectif vaut is 3 + (-2) = 1
-
-var arr = ['a', 'b', 'c'];
-
-arr.includes('a', -2); // false
-arr.includes('b', -2); // true
-arr.includes('c', -100); // true
-
- -

Utilisation d'includes() comme méthode générique

- -

includes() est une méhtode générique : l'objet sur lequel elle est appelée ne doit pas nécessairement être un tableau. On peut l'utiliser sur des objets semblables à des tableaux (ex. arguments ou des chaînes de caractères) :

- -
function argumentsContientA(){
-  return [].includes.call(arguments, 'a');
-}
-
-console.log(argumentsContientA('a','b','c')); // true
-console.log(argumentsContientA('d','e','f')); // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES7', '#sec-array.prototype.includes', 'Array.prototype.includes')}}{{Spec2('ES7')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.includes', 'Array.prototype.includes')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.includes")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/includes/index.md b/files/fr/web/javascript/reference/global_objects/array/includes/index.md new file mode 100644 index 0000000000..e63134919f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/includes/index.md @@ -0,0 +1,134 @@ +--- +title: Array.prototype.includes() +slug: Web/JavaScript/Reference/Global_Objects/Array/includes +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/includes +--- +
{{JSRef}}
+ +

La méthode includes() permet de déterminer si un tableau contient une valeur et renvoie true si c'est le cas, false sinon.

+ +
{{EmbedInteractiveExample("pages/js/array-includes.html")}}
+ + + +
+

Note : Cette méthode utilise l'algorithme de comparaison SameValueZero qui fonctionne comme l'égalité stricte, à la différence que NaN est ici égal à lui même.

+
+ +

Syntaxe

+ +
array.includes(élémentRecherché)
+array.includes(élémentRecherché, indiceDépart)
+
+ +

Paramètres

+ +
+
élémentRecherché
+
La valeur qu'on souhaite trouver dans le tableau (lorsqu'on manipule des caractères et des chaînes, la comparaison est sensible à la casse).
+
indiceDépart {{optional_inline}}
+
La position du tableau à partir de laquelle commencer à chercher élémentRecherché. Si on utilise une valeur négative, la recherche commencera à partir de la fin du tableau (autrement dit à l'indice array.length - indiceDépart). La valeur par défaut est 0.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} qui vaut true si élémentRecherché est trouvé dans le tableau (à partir de l'indiceDépart si celui-ci est indiqué). Les valeurs -0, +0 et 0 sont considérées comme équivalentes mais false n'est pas considéré comme équivalent à 0.

+ +
+

Note : Pour être tout à fait précis, includes() utilise l'algorithme SameValueZero afin de déterminer si un élément donné est trouvé.

+
+ +

Exemples

+ +
[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
+
+['a', 'b', 'c'].includes('c', 5);    // false
+['a', 'b', 'c'].includes('c', -100); // true
+
+ +

indiceDépart supérieur ou égal à la longueur du tableau

+ +

SI indiceDépart est supérieur ou égal à la longueur du tableau, la méthode retourne false. Le tableau n'est pas parcouru.

+ +
var arr = ['a', 'b', 'c'];
+
+arr.includes('c', 3);   // false
+arr.includes('c', 100); // false
+
+ +

indiceDépart strictement négatif

+ +

Si indiceDépart est strictement négatif, l'indice de départ effectif est la somme entre la taille du tableau et indiceDépart. Si cette somme est toujours négative, le tableau est intégralement parcouru.

+ +
// Le tableau a une taille de 3
+// indiceDépart vaut -2
+// L'indice de départ effectif vaut is 3 + (-2) = 1
+
+var arr = ['a', 'b', 'c'];
+
+arr.includes('a', -2); // false
+arr.includes('b', -2); // true
+arr.includes('c', -100); // true
+
+ +

Utilisation d'includes() comme méthode générique

+ +

includes() est une méhtode générique : l'objet sur lequel elle est appelée ne doit pas nécessairement être un tableau. On peut l'utiliser sur des objets semblables à des tableaux (ex. arguments ou des chaînes de caractères) :

+ +
function argumentsContientA(){
+  return [].includes.call(arguments, 'a');
+}
+
+console.log(argumentsContientA('a','b','c')); // true
+console.log(argumentsContientA('d','e','f')); // false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES7', '#sec-array.prototype.includes', 'Array.prototype.includes')}}{{Spec2('ES7')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.includes', 'Array.prototype.includes')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.includes")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/index.html b/files/fr/web/javascript/reference/global_objects/array/index.html deleted file mode 100644 index 3604ce3910..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/index.html +++ /dev/null @@ -1,456 +0,0 @@ ---- -title: Array -slug: Web/JavaScript/Reference/Global_Objects/Array -tags: - - Array - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Array ---- -
{{JSRef}}
- -

L'objet global Array est utilisé pour créer des tableaux. Les tableaux sont des objets de haut-niveau (en termes de complexité homme-machine) semblables à des listes.

- -

Créer un tableau

- -
var fruits = ['Apple', 'Banana'];
-
-console.log(fruits.length);
-// 2
-
- -

Accéder (via son index) à un élément du tableau

- -
var first = fruits[0];
-// Apple
-
-var last = fruits[fruits.length - 1];
-// Banana
-
- -

Boucler sur un tableau

- -
fruits.forEach(function(item, index, array) {
-  console.log(item, index);
-});
-// Apple 0
-// Banana 1
-
- -

Ajouter à la fin du tableau

- -
var newLength = fruits.push('Orange');
-// ["Apple", "Banana", "Orange"]
-
- -

Supprimer le dernier élément du tableau

- -
var last = fruits.pop(); // supprime Orange (à la fin)
-// ["Apple", "Banana"];
-
- -

Supprimer le premier élément du tableau

- -
var first = fruits.shift(); // supprime Apple (au début)
-// ["Banana"];
-
- -

Ajouter au début du tableau

- -
var newLength = fruits.unshift('Strawberry') // ajoute au début
-// ["Strawberry", "Banana"];
-
- -

Trouver l'index d'un élément dans le tableau

- -
fruits.push('Mango');
-// ["Strawberry", "Banana", "Mango"]
-
-var pos = fruits.indexOf('Banana');
-// 1
-
- -

Supprimer un élément par son index

- -
var removedItem = fruits.splice(pos, 1); // supprime 1 élément à la position pos
-
-// ["Strawberry", "Mango"]
-
- -

Supprimer des éléments à partir d'un index

- -
var vegetables = ['Cabbage', 'Turnip', 'Radish', 'Carrot'];
-console.log(vegetables);
-// ["Cabbage", "Turnip", "Radish", "Carrot"]
-
-var pos = 1, n = 2;
-
-var removedItems = vegetables.splice(pos, n);
-// n définit le nombre d'éléments à supprimer,
-// à partir de la position pos
-
-console.log(vegetables);
-// ["Cabbage", "Carrot"] (le tableau d'origine est changé)
-
-console.log(removedItems);
-// ["Turnip", "Radish"] (splice retourne la liste des éléments supprimés)
-
- -

Copier un tableau

- -
var shallowCopy = fruits.slice(); // crée un nouveau tableau qui contient les éléments de fruits
-// ["Strawberry", "Mango"]
-
- -

Syntaxe

- -
[element0, element1, ..., elementN]
-new Array(element0, element1[, ...[, elementN]])
-new Array(arrayLength)
- -

Paramètres

-
-
element0, element1, ..., elementN
-
Un tableau est initialisé avec les éléments donnés, sauf dans le cas où un seul argument est passé au constructeur Array et que cet argument est un nombre. (Voir ci-après.) Notez que ce cas spécial s'applique aux tableaux créés avec le constructeur Array, et non aux tableaux créés avec la syntaxe crochets.
-
arrayLength
-
Si le seul argument passé au constructeur Array est un entier entre 0 et 2^32-1 (inclus), un nouveau tableau sera créé avec ce nombre d'éléments (note : le tableau sera créé avec arrayLength emplacements vides, et non avec de véritables valeurs undefined). Si l'argument est un nombre en dehors de la plage autorisée, une exception {{jsxref("RangeError")}} est levée.
-
- -

Description

- -

Les tableaux sont des objets qui servent de liste et possèdent plusieurs méthodes incorporées pour exécuter des opérations de parcours et de modification.

- -

Ni la taille d'un tableau ni le types de ses éléments n'est fixé. Puisque la dimension d'un tableau peut augmenter ou diminuer à tout moment, et que les éléments du tableau peuvent être stockés à des emplacements non contigus, les tableaux ne sont pas garantis d'être compacts. En général, ce sont des caractéristiques pratiques, mais si ces fonctionnalités ne sont pas souhaitables pour votre cas d'utilisation, vous pouvez envisager d'utiliser des tableaux typés.

- -

Les tableaux ne peuvent pas utiliser de chaîne de caractères comme indice (comme dans un tableau associatif) mais des entiers. Utiliser ou accéder à des index non entiers, en utilisant la notation avec crochets (ou avec point) ne va pas définir ou récupérer un élément sur le tableau lui-même, mais une variable associée à la  collection de propriétés d'objet de ce tableau.  Les propriétés du tableau et la liste de ses éléments sont séparées, et les opérations de parcours et de modification ne s'appliquent pas à ces propriétés.

- -

Accéder aux éléments d'un tableau

- -

Les tableaux sont indexés à partir de zéro: le premier élément d'un tableau a pour indice 0, et la position du dernier élément est donnée par {{jsxref("Array.length", "length")}} moins 1. Si on utilise un indice en dehors de cet intervalle, le résultat sera {{jsxref("undefined")}} (sous réserve qu'aucune propriété n'ait été ajoutée au préalable avec cet indice).

- -
var arr = ["le premier élément", "le deuxième élément", "le dernier élément"];
-console.log(arr[0]);             // affiche "le premier élément"
-console.log(arr[1]);             // affiche "le deuxième élément"
-console.log(arr[arr.length - 1]);// affiche "le dernier élément"
- -

Les éléments d'un tableau sont des propriétés d'objets de la même manière que toString est une propriété. Cependant, essayer d'accéder à un élément du tableau comme suit renverra une erreur car le nom de la propriété utilisé est invalide :

- -
console.log(arr.0); // erreur de syntaxe
- -

Ce comportement est tout à fait normal. En effet, il n'est pas possible d'accéder aux propriétés dont le nom commence par un chiffre avec cette notation (le point). Il est nécessaire d'utiliser la syntaxe avec les crochets pour accéder à ces propriétés. Ainsi, si pour un objet quelconque, on avait une propriété nommée '3d', on ne pourra y faire référence qu'en utilisant les crochets. Exemple :

- -
var années = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
-
-console.log(années.0);  // erreur de syntaxe
-console.log(années[0]); // fonctionne correctement
- -
renderer.3d.setTexture(model, "personnage.png");   // erreur de syntaxe
-renderer["3d"].setTexture(model, "personnage.png");// fonctionne correctement 
- -

Dans cet exemple, on utilise des doubles quotes autour de 3d. On peut aussi utiliser les doubles quotes pour accéder aux éléments d'un tableau (ex. : années["2"] au lieu de années[2]), mais ce n'est pas obligatoire. Dans l'instruction années[2], le nombre sera converti en une chaîne de caractères par le moteur JavaScript. Pour cette raison, si on utilise les noms de propriété "2" et "02", on fera référence à deux propriétés différentes, et le fragment de code suivant renvoie donc true:

- -
console.log(années["2"] != années["02"]); 
- -

De manière similaire, les propriétés nommées avec des mots-clés réservés ne peuvent être consultées qu'en utilisant la syntaxe avec crochets :

- -
var promise = {
-  'var' : 'text',
-  'array': [1, 2, 3, 4]
-};
-
-console.log(promise['var']);
- -
-

Note : Depuis Firefox 40.0a2, il est possible d'utiliser la notation avec le point pour accéder aux propriétés dont les noms ne sont pas des identifiants valides.

-
- -

Relation entre length et les propriétés numériques

- -

La propriété {{jsxref("Array.length", "length")}} d'un tableau est liée aux propriétés numériques du tableau. Plusieurs méthodes natives utilisent cette propriété : {{jsxref("Array.join", "join()")}}, {{jsxref("Array.slice", "slice()")}}, {{jsxref("Array.indexOf", "indexOf()")}}, etc. D'autres méthodes comme {{jsxref("Array.push", "push()")}} et {{jsxref("Array.splice", "splice()")}} modifient le tableau et la propriété {{jsxref("Array.length", "length")}}.

- -
var fruits = [];
-fruits.push("banane", "pomme", "pêche");
-
-console.log(fruits.length); // 3
- -

Lorsqu'on définit une nouvelle propriété numérique pour un tableau, que l'index utilisé est valide et que celui-ci est dehors des limites actuelles du tableau, le moteur JavaScript mettra à jour la propriété {{jsxref("Array.length", "length")}} :

- -
fruits[5] = "mangue";
-console.log(fruits[5]);  // "mangue"
-console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
-console.log(fruits.length); // 6 
- -

On peut également modifier la propriété directement (cela n'ajoutera pas de nouveaux éléments) :

- -
fruits.length = 10;
-console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
-console.log(fruits.length);  // 10
- -

En revanche, si on diminue la valeur de {{jsxref("Array.length", "length")}}, cela supprimera des éléments :

- -
fruits.length = 2;
-console.log(Object.keys(fruits)); // ['0', '1']
-console.log(fruits.length); // 2
- -

Pour plus d'informations sur le comportement de cette propriété, voir la page {{jsxref("Array.length")}}.

- -

Création d'un tableau utilisant le résultat d'une correspondance

- -

Le résultat d'une correspondance entre une expression rationnelle et une chaîne peut créer un tableau. Ce tableau possède des propriétés et des éléments qui fournissent des informations sur cette correspondance. Il est possible d'obtenir un tableau grâce aux méthodes {{jsxref("RegExp.exec")}}, {{jsxref("String.match")}}, and {{jsxref("String.replace")}}. Pour mieux comprendre le fonctionnement de ces propriétés et de ces éléments, on pourra utiliser l'exemple et le tableau qui suivent :

- -
// Matche un "d" suivit par un ou plusieurs "b" et suivit d'un "d"
-// Capture les "b" et le "d" qui suit
-// Ignore la casse
-
-var maRegexp = /d(b+)(d)/i;
-var monTableau = maRegexp.exec("cdbBdbsbz");
-
-console.log(monTableau);
-// [ 0:"dbBd", 1:"bB", 2:"d", index:1, input:"cdbBdbsbz", length:3 ]
- -

Les propriétés et les éléments retournés depuis cette correspondance sont les suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Propriété/ÉlémentDescriptionExemple
inputUne propriété en lecture seule qui reflète la chaîne originale sur laquelle l'expression rationnelle a été appliquée.cdbBdbsbz
indexUne propriété en lecture seule qui est l'indice de la correspondance dans la chaîne (les indices commencent à 0)1
[0]Une propriété en lecture seule qui spécifie les derniers caractères correspondants.dbBd
[1], ...[n]Des éléments en lecture seule qui contiennent les groupes capturés, s'il y en a dans l'expression régulière. Le nombre de groupes capturés possibles est illimité.[1]: bB
- [2]: d
- -

Propriétés

- -
-
{{jsxref("Array.prototype.length")}}
-
La propriété de longueur pour le constructeur Array, elle vaut 1.
-
{{jsxref("Array.@@species", "get Array[@@species]")}}
-
La fonction de construction utilisée pour créer les objets dérivés.
-
{{jsxref("Array.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à tous les tableaux.
-
- -

Méthodes

- -
-
{{jsxref("Array.from()")}}
-
Cette méthode permet de créer une nouvelle instance d'Array à partir d'un objet semblable à un tableau ou d'un itérable.
-
{{jsxref("Array.isArray()")}}
-
Cette méthode renvoie true si la variable est un tableau, false sinon.
-
{{jsxref("Array.of()")}}
-
Cette méthode permet de créer une nouvelle instance d'Array à partir d'un nombre variable d'arguments (peu importe la quantité ou le type des arguments utilisés).
-
- -

Instances d'Array

- -

Toutes les instances d'Array héritent de {{jsxref("Array.prototype")}}. Le prototype du constructeur Array peut être modifié afin d'affecter l'ensemble des instances grâce à l'héritage.

- -

Les propriétés

- -
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Propriétés')}}
- -

Les méthodes

- -

Les mutateurs

- -
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Mutateurs')}}
- -

Les accesseurs

- -
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Accesseurs')}}
- -

Les méthodes d'itération

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Méthodes_itératives')}}
- -

Les méthodes génériques de manipulation de tableaux

- -
-

Attention : Ces méthodes génériques ne sont pas standard. Elles sont dépréciées et seront retirées dans un avenir proche. Celles-ci ne peuvent être utilisées sur tous les navigateurs. Toutefois, il existe un shim disponible sur GitHub.

-
- -

Parfois, on peut vouloir appliquer des méthodes pour les tableaux sur des chaînes ou d'autres objets semblables aux tableaux (ex. : l'objet {{jsxref("Fonctions/arguments", "arguments", "", 1)}}). Une chaîne sera donc traitée comme un tableau de caractères. Ainsi, si on souhaite vérifier que chaque caractère d'une chaîne str est bien une lettre comprise entre 'a' et 'z', on pourra utiliser :

- -
function estUneLettre(caractère) {
-  return caractère >= 'a' && caractère <= 'z';
-}
-
-if (Array.prototype.every.call(str, estUneLettre)) {
-  console.log("La chaîne '" + str + "' ne contient que des lettres entre a et z!");
-}
-
- -

Cette notation étant plutôt verbeuse, une notation raccourcie a été introduite avec JavaScript 1.6 :

- -
if (Array.every(str,estUneLettre)) {
-  console.log("La chaîne '" + str + "' ne contient que des lettres entre a et z !");
-}
-
- -

Des {{jsxref("Objets_globaux/String", "méthodes génériques", "#Méthodes_génériques_de_String", 1)}} sont également disponibles pour les {{jsxref("Objets_globaux/String", "String")}}.

- -

Cette fonctionnalité ne fait pas partie du standard ECMAScript et n'est pas prise en charge par les navigateurs qui ne sont pas basés sur Gecko. Comme alternative standard, vous pouvez convertir votre objet en véritable tableau grâce à la méthode {{jsxref("Array.from()")}} (attention, cette méthode n'est pas supportée dans les anciens navigateurs) :

- -
if (Array.from(str).every(estUneLettre)) {
-  console.log("La chaîne '" + str + "' contient uniquement des lettres !");
-}
- -

Exemples

- -

Créer un tableau

- -

Dans l'exemple suivant, on crée un tableau tableauMsg, d'une longueur nulle. Ensuite, on lui affecte des valeurs pour tableauMsg[0] et tableauMsg[99], ce qui aura pour effet de modifier la propriété length (qui vaudra alors 100).

- -
var tableauMsg = [];
-tableauMsg[0] = 'Coucou';
-tableauMsg[99] = 'monde';
-
-if (tableauMsg.length === 100) {
-  console.log('La longueur du tableau vaut 100.');
-}
-
- -

Créer un tableau à deux dimensions

- -

Dans l'exemple qui suit, on crée un plateau d'échec grâce à un tableau en deux dimensions qui contient des caractères. Le premier mouvement est effectué en copiant 'p' de (6,4) vers (4,4). La position anciennement occupée par le pion (6,4) devient vide.

- -
var plateau = [
-  ['T','C','F','R','K','F','C','T'],
-  ['P','P','P','P','P','P','P','P'],
-  [' ',' ',' ',' ',' ',' ',' ',' '],
-  [' ',' ',' ',' ',' ',' ',' ',' '],
-  [' ',' ',' ',' ',' ',' ',' ',' '],
-  [' ',' ',' ',' ',' ',' ',' ',' '],
-  ['p','p','p','p','p','p','p','p'],
-  ['t','c','f','k','r','f','c','t'] ];
-
-console.log(plateau.join('\n') + '\n\n');
-
-// On déplace le pion de deux cases en avant 2
-plateau[4][4] = plateau[6][4];
-plateau[6][4] = ' ';
-console.log(plateau.join('\n'));
-
- -

Voici le résultat affiché :

- -
T,C,F,R,K,F,C,T
-P,P,P,P,P,P,P,P
- , , , , , , ,
- , , , , , , ,
- , , , , , , ,
- , , , , , , ,
-p,p,p,p,p,p,p,p
-t,c,f,k,r,f,c,t
-
-T,C,F,R,K,F,C,T
-P,P,P,P,P,P,P,P
- , , , , , , ,
- , , , , , , ,
- , , , ,p, , ,
- , , , , , , ,
-p,p,p,p, ,p,p,p
-t,c,f,k,r,f,c,t
-
- -

Utiliser un tableau pour tabuler un ensemble de valeurs

- -
values = [];
-for (var x = 0; x < 10; x++){
- values.push([
-  2 ** x,
-  2 * x ** 2
- ])
-};
-console.table(values)
-
- -

Résulte en

- -
0	1	0
-1	2	2
-2	4	8
-3	8	18
-4	16	32
-5	32	50
-6	64	72
-7	128	98
-8	256	128
-9	512	162
-
- -

(Le première colonne est l'index)

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale
{{SpecName('ES5.1', '#sec-15.4', 'Array')}}{{Spec2('ES5.1')}}Ajout de nouvelles méthodes : {{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")}}
{{SpecName('ES6', '#sec-array-objects', 'Array')}}{{Spec2('ES6')}}Ajout de nouvelles méthodes : {{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")}}
{{SpecName('ES7', '#sec-array-objects', 'Array')}}{{Spec2('ES7')}}Ajout de la méthode {{jsxref("Array.prototype.includes()")}}.
{{SpecName('ESDraft', '#sec-array-objects', 'Array')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/index.md b/files/fr/web/javascript/reference/global_objects/array/index.md new file mode 100644 index 0000000000..3604ce3910 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/index.md @@ -0,0 +1,456 @@ +--- +title: Array +slug: Web/JavaScript/Reference/Global_Objects/Array +tags: + - Array + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Array +--- +
{{JSRef}}
+ +

L'objet global Array est utilisé pour créer des tableaux. Les tableaux sont des objets de haut-niveau (en termes de complexité homme-machine) semblables à des listes.

+ +

Créer un tableau

+ +
var fruits = ['Apple', 'Banana'];
+
+console.log(fruits.length);
+// 2
+
+ +

Accéder (via son index) à un élément du tableau

+ +
var first = fruits[0];
+// Apple
+
+var last = fruits[fruits.length - 1];
+// Banana
+
+ +

Boucler sur un tableau

+ +
fruits.forEach(function(item, index, array) {
+  console.log(item, index);
+});
+// Apple 0
+// Banana 1
+
+ +

Ajouter à la fin du tableau

+ +
var newLength = fruits.push('Orange');
+// ["Apple", "Banana", "Orange"]
+
+ +

Supprimer le dernier élément du tableau

+ +
var last = fruits.pop(); // supprime Orange (à la fin)
+// ["Apple", "Banana"];
+
+ +

Supprimer le premier élément du tableau

+ +
var first = fruits.shift(); // supprime Apple (au début)
+// ["Banana"];
+
+ +

Ajouter au début du tableau

+ +
var newLength = fruits.unshift('Strawberry') // ajoute au début
+// ["Strawberry", "Banana"];
+
+ +

Trouver l'index d'un élément dans le tableau

+ +
fruits.push('Mango');
+// ["Strawberry", "Banana", "Mango"]
+
+var pos = fruits.indexOf('Banana');
+// 1
+
+ +

Supprimer un élément par son index

+ +
var removedItem = fruits.splice(pos, 1); // supprime 1 élément à la position pos
+
+// ["Strawberry", "Mango"]
+
+ +

Supprimer des éléments à partir d'un index

+ +
var vegetables = ['Cabbage', 'Turnip', 'Radish', 'Carrot'];
+console.log(vegetables);
+// ["Cabbage", "Turnip", "Radish", "Carrot"]
+
+var pos = 1, n = 2;
+
+var removedItems = vegetables.splice(pos, n);
+// n définit le nombre d'éléments à supprimer,
+// à partir de la position pos
+
+console.log(vegetables);
+// ["Cabbage", "Carrot"] (le tableau d'origine est changé)
+
+console.log(removedItems);
+// ["Turnip", "Radish"] (splice retourne la liste des éléments supprimés)
+
+ +

Copier un tableau

+ +
var shallowCopy = fruits.slice(); // crée un nouveau tableau qui contient les éléments de fruits
+// ["Strawberry", "Mango"]
+
+ +

Syntaxe

+ +
[element0, element1, ..., elementN]
+new Array(element0, element1[, ...[, elementN]])
+new Array(arrayLength)
+ +

Paramètres

+
+
element0, element1, ..., elementN
+
Un tableau est initialisé avec les éléments donnés, sauf dans le cas où un seul argument est passé au constructeur Array et que cet argument est un nombre. (Voir ci-après.) Notez que ce cas spécial s'applique aux tableaux créés avec le constructeur Array, et non aux tableaux créés avec la syntaxe crochets.
+
arrayLength
+
Si le seul argument passé au constructeur Array est un entier entre 0 et 2^32-1 (inclus), un nouveau tableau sera créé avec ce nombre d'éléments (note : le tableau sera créé avec arrayLength emplacements vides, et non avec de véritables valeurs undefined). Si l'argument est un nombre en dehors de la plage autorisée, une exception {{jsxref("RangeError")}} est levée.
+
+ +

Description

+ +

Les tableaux sont des objets qui servent de liste et possèdent plusieurs méthodes incorporées pour exécuter des opérations de parcours et de modification.

+ +

Ni la taille d'un tableau ni le types de ses éléments n'est fixé. Puisque la dimension d'un tableau peut augmenter ou diminuer à tout moment, et que les éléments du tableau peuvent être stockés à des emplacements non contigus, les tableaux ne sont pas garantis d'être compacts. En général, ce sont des caractéristiques pratiques, mais si ces fonctionnalités ne sont pas souhaitables pour votre cas d'utilisation, vous pouvez envisager d'utiliser des tableaux typés.

+ +

Les tableaux ne peuvent pas utiliser de chaîne de caractères comme indice (comme dans un tableau associatif) mais des entiers. Utiliser ou accéder à des index non entiers, en utilisant la notation avec crochets (ou avec point) ne va pas définir ou récupérer un élément sur le tableau lui-même, mais une variable associée à la  collection de propriétés d'objet de ce tableau.  Les propriétés du tableau et la liste de ses éléments sont séparées, et les opérations de parcours et de modification ne s'appliquent pas à ces propriétés.

+ +

Accéder aux éléments d'un tableau

+ +

Les tableaux sont indexés à partir de zéro: le premier élément d'un tableau a pour indice 0, et la position du dernier élément est donnée par {{jsxref("Array.length", "length")}} moins 1. Si on utilise un indice en dehors de cet intervalle, le résultat sera {{jsxref("undefined")}} (sous réserve qu'aucune propriété n'ait été ajoutée au préalable avec cet indice).

+ +
var arr = ["le premier élément", "le deuxième élément", "le dernier élément"];
+console.log(arr[0]);             // affiche "le premier élément"
+console.log(arr[1]);             // affiche "le deuxième élément"
+console.log(arr[arr.length - 1]);// affiche "le dernier élément"
+ +

Les éléments d'un tableau sont des propriétés d'objets de la même manière que toString est une propriété. Cependant, essayer d'accéder à un élément du tableau comme suit renverra une erreur car le nom de la propriété utilisé est invalide :

+ +
console.log(arr.0); // erreur de syntaxe
+ +

Ce comportement est tout à fait normal. En effet, il n'est pas possible d'accéder aux propriétés dont le nom commence par un chiffre avec cette notation (le point). Il est nécessaire d'utiliser la syntaxe avec les crochets pour accéder à ces propriétés. Ainsi, si pour un objet quelconque, on avait une propriété nommée '3d', on ne pourra y faire référence qu'en utilisant les crochets. Exemple :

+ +
var années = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
+
+console.log(années.0);  // erreur de syntaxe
+console.log(années[0]); // fonctionne correctement
+ +
renderer.3d.setTexture(model, "personnage.png");   // erreur de syntaxe
+renderer["3d"].setTexture(model, "personnage.png");// fonctionne correctement 
+ +

Dans cet exemple, on utilise des doubles quotes autour de 3d. On peut aussi utiliser les doubles quotes pour accéder aux éléments d'un tableau (ex. : années["2"] au lieu de années[2]), mais ce n'est pas obligatoire. Dans l'instruction années[2], le nombre sera converti en une chaîne de caractères par le moteur JavaScript. Pour cette raison, si on utilise les noms de propriété "2" et "02", on fera référence à deux propriétés différentes, et le fragment de code suivant renvoie donc true:

+ +
console.log(années["2"] != années["02"]); 
+ +

De manière similaire, les propriétés nommées avec des mots-clés réservés ne peuvent être consultées qu'en utilisant la syntaxe avec crochets :

+ +
var promise = {
+  'var' : 'text',
+  'array': [1, 2, 3, 4]
+};
+
+console.log(promise['var']);
+ +
+

Note : Depuis Firefox 40.0a2, il est possible d'utiliser la notation avec le point pour accéder aux propriétés dont les noms ne sont pas des identifiants valides.

+
+ +

Relation entre length et les propriétés numériques

+ +

La propriété {{jsxref("Array.length", "length")}} d'un tableau est liée aux propriétés numériques du tableau. Plusieurs méthodes natives utilisent cette propriété : {{jsxref("Array.join", "join()")}}, {{jsxref("Array.slice", "slice()")}}, {{jsxref("Array.indexOf", "indexOf()")}}, etc. D'autres méthodes comme {{jsxref("Array.push", "push()")}} et {{jsxref("Array.splice", "splice()")}} modifient le tableau et la propriété {{jsxref("Array.length", "length")}}.

+ +
var fruits = [];
+fruits.push("banane", "pomme", "pêche");
+
+console.log(fruits.length); // 3
+ +

Lorsqu'on définit une nouvelle propriété numérique pour un tableau, que l'index utilisé est valide et que celui-ci est dehors des limites actuelles du tableau, le moteur JavaScript mettra à jour la propriété {{jsxref("Array.length", "length")}} :

+ +
fruits[5] = "mangue";
+console.log(fruits[5]);  // "mangue"
+console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
+console.log(fruits.length); // 6 
+ +

On peut également modifier la propriété directement (cela n'ajoutera pas de nouveaux éléments) :

+ +
fruits.length = 10;
+console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
+console.log(fruits.length);  // 10
+ +

En revanche, si on diminue la valeur de {{jsxref("Array.length", "length")}}, cela supprimera des éléments :

+ +
fruits.length = 2;
+console.log(Object.keys(fruits)); // ['0', '1']
+console.log(fruits.length); // 2
+ +

Pour plus d'informations sur le comportement de cette propriété, voir la page {{jsxref("Array.length")}}.

+ +

Création d'un tableau utilisant le résultat d'une correspondance

+ +

Le résultat d'une correspondance entre une expression rationnelle et une chaîne peut créer un tableau. Ce tableau possède des propriétés et des éléments qui fournissent des informations sur cette correspondance. Il est possible d'obtenir un tableau grâce aux méthodes {{jsxref("RegExp.exec")}}, {{jsxref("String.match")}}, and {{jsxref("String.replace")}}. Pour mieux comprendre le fonctionnement de ces propriétés et de ces éléments, on pourra utiliser l'exemple et le tableau qui suivent :

+ +
// Matche un "d" suivit par un ou plusieurs "b" et suivit d'un "d"
+// Capture les "b" et le "d" qui suit
+// Ignore la casse
+
+var maRegexp = /d(b+)(d)/i;
+var monTableau = maRegexp.exec("cdbBdbsbz");
+
+console.log(monTableau);
+// [ 0:"dbBd", 1:"bB", 2:"d", index:1, input:"cdbBdbsbz", length:3 ]
+ +

Les propriétés et les éléments retournés depuis cette correspondance sont les suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Propriété/ÉlémentDescriptionExemple
inputUne propriété en lecture seule qui reflète la chaîne originale sur laquelle l'expression rationnelle a été appliquée.cdbBdbsbz
indexUne propriété en lecture seule qui est l'indice de la correspondance dans la chaîne (les indices commencent à 0)1
[0]Une propriété en lecture seule qui spécifie les derniers caractères correspondants.dbBd
[1], ...[n]Des éléments en lecture seule qui contiennent les groupes capturés, s'il y en a dans l'expression régulière. Le nombre de groupes capturés possibles est illimité.[1]: bB
+ [2]: d
+ +

Propriétés

+ +
+
{{jsxref("Array.prototype.length")}}
+
La propriété de longueur pour le constructeur Array, elle vaut 1.
+
{{jsxref("Array.@@species", "get Array[@@species]")}}
+
La fonction de construction utilisée pour créer les objets dérivés.
+
{{jsxref("Array.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à tous les tableaux.
+
+ +

Méthodes

+ +
+
{{jsxref("Array.from()")}}
+
Cette méthode permet de créer une nouvelle instance d'Array à partir d'un objet semblable à un tableau ou d'un itérable.
+
{{jsxref("Array.isArray()")}}
+
Cette méthode renvoie true si la variable est un tableau, false sinon.
+
{{jsxref("Array.of()")}}
+
Cette méthode permet de créer une nouvelle instance d'Array à partir d'un nombre variable d'arguments (peu importe la quantité ou le type des arguments utilisés).
+
+ +

Instances d'Array

+ +

Toutes les instances d'Array héritent de {{jsxref("Array.prototype")}}. Le prototype du constructeur Array peut être modifié afin d'affecter l'ensemble des instances grâce à l'héritage.

+ +

Les propriétés

+ +
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Propriétés')}}
+ +

Les méthodes

+ +

Les mutateurs

+ +
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Mutateurs')}}
+ +

Les accesseurs

+ +
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Accesseurs')}}
+ +

Les méthodes d'itération

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/prototype', 'Méthodes_itératives')}}
+ +

Les méthodes génériques de manipulation de tableaux

+ +
+

Attention : Ces méthodes génériques ne sont pas standard. Elles sont dépréciées et seront retirées dans un avenir proche. Celles-ci ne peuvent être utilisées sur tous les navigateurs. Toutefois, il existe un shim disponible sur GitHub.

+
+ +

Parfois, on peut vouloir appliquer des méthodes pour les tableaux sur des chaînes ou d'autres objets semblables aux tableaux (ex. : l'objet {{jsxref("Fonctions/arguments", "arguments", "", 1)}}). Une chaîne sera donc traitée comme un tableau de caractères. Ainsi, si on souhaite vérifier que chaque caractère d'une chaîne str est bien une lettre comprise entre 'a' et 'z', on pourra utiliser :

+ +
function estUneLettre(caractère) {
+  return caractère >= 'a' && caractère <= 'z';
+}
+
+if (Array.prototype.every.call(str, estUneLettre)) {
+  console.log("La chaîne '" + str + "' ne contient que des lettres entre a et z!");
+}
+
+ +

Cette notation étant plutôt verbeuse, une notation raccourcie a été introduite avec JavaScript 1.6 :

+ +
if (Array.every(str,estUneLettre)) {
+  console.log("La chaîne '" + str + "' ne contient que des lettres entre a et z !");
+}
+
+ +

Des {{jsxref("Objets_globaux/String", "méthodes génériques", "#Méthodes_génériques_de_String", 1)}} sont également disponibles pour les {{jsxref("Objets_globaux/String", "String")}}.

+ +

Cette fonctionnalité ne fait pas partie du standard ECMAScript et n'est pas prise en charge par les navigateurs qui ne sont pas basés sur Gecko. Comme alternative standard, vous pouvez convertir votre objet en véritable tableau grâce à la méthode {{jsxref("Array.from()")}} (attention, cette méthode n'est pas supportée dans les anciens navigateurs) :

+ +
if (Array.from(str).every(estUneLettre)) {
+  console.log("La chaîne '" + str + "' contient uniquement des lettres !");
+}
+ +

Exemples

+ +

Créer un tableau

+ +

Dans l'exemple suivant, on crée un tableau tableauMsg, d'une longueur nulle. Ensuite, on lui affecte des valeurs pour tableauMsg[0] et tableauMsg[99], ce qui aura pour effet de modifier la propriété length (qui vaudra alors 100).

+ +
var tableauMsg = [];
+tableauMsg[0] = 'Coucou';
+tableauMsg[99] = 'monde';
+
+if (tableauMsg.length === 100) {
+  console.log('La longueur du tableau vaut 100.');
+}
+
+ +

Créer un tableau à deux dimensions

+ +

Dans l'exemple qui suit, on crée un plateau d'échec grâce à un tableau en deux dimensions qui contient des caractères. Le premier mouvement est effectué en copiant 'p' de (6,4) vers (4,4). La position anciennement occupée par le pion (6,4) devient vide.

+ +
var plateau = [
+  ['T','C','F','R','K','F','C','T'],
+  ['P','P','P','P','P','P','P','P'],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  ['p','p','p','p','p','p','p','p'],
+  ['t','c','f','k','r','f','c','t'] ];
+
+console.log(plateau.join('\n') + '\n\n');
+
+// On déplace le pion de deux cases en avant 2
+plateau[4][4] = plateau[6][4];
+plateau[6][4] = ' ';
+console.log(plateau.join('\n'));
+
+ +

Voici le résultat affiché :

+ +
T,C,F,R,K,F,C,T
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+p,p,p,p,p,p,p,p
+t,c,f,k,r,f,c,t
+
+T,C,F,R,K,F,C,T
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , ,p, , ,
+ , , , , , , ,
+p,p,p,p, ,p,p,p
+t,c,f,k,r,f,c,t
+
+ +

Utiliser un tableau pour tabuler un ensemble de valeurs

+ +
values = [];
+for (var x = 0; x < 10; x++){
+ values.push([
+  2 ** x,
+  2 * x ** 2
+ ])
+};
+console.table(values)
+
+ +

Résulte en

+ +
0	1	0
+1	2	2
+2	4	8
+3	8	18
+4	16	32
+5	32	50
+6	64	72
+7	128	98
+8	256	128
+9	512	162
+
+ +

(Le première colonne est l'index)

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale
{{SpecName('ES5.1', '#sec-15.4', 'Array')}}{{Spec2('ES5.1')}}Ajout de nouvelles méthodes : {{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")}}
{{SpecName('ES6', '#sec-array-objects', 'Array')}}{{Spec2('ES6')}}Ajout de nouvelles méthodes : {{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")}}
{{SpecName('ES7', '#sec-array-objects', 'Array')}}{{Spec2('ES7')}}Ajout de la méthode {{jsxref("Array.prototype.includes()")}}.
{{SpecName('ESDraft', '#sec-array-objects', 'Array')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/indexof/index.html b/files/fr/web/javascript/reference/global_objects/array/indexof/index.html deleted file mode 100644 index cdd545abc9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/indexof/index.html +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: Array.prototype.indexOf() -slug: Web/JavaScript/Reference/Global_Objects/Array/indexOf -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/indexOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/indexOf ---- -
{{JSRef}}
- -

La méthode indexOf() renvoie le premier indice pour lequel on trouve un élément donné dans un tableau. Si l'élément cherché n'est pas présent dans le tableau, la méthode renverra -1.

- -
-

Note : pour la méthode associée aux chaînes de caractères, voir la page {{jsxref("String.prototype.indexOf()")}}.

-
- -
{{EmbedInteractiveExample("pages/js/array-indexof.html")}}
- -

Syntaxe

- -
arr.indexOf(élémentRecherché)
-arr.indexOf(élémentRecherché, indiceDébut)
-
- -

Paramètres

- -
-
élémentRecherché
-
L'élément qu'on cherche dans le tableau
-
indiceDébut {{optional_inline}}
-
L'index à partir duquel commencer la recherche. La valeur par défaut est 0 (le tableau sera parcouru dans sa totalité). Si l'index est plus grand ou égal à la longueur du tableau, la méthode renverra -1. Si l'index est négatif, la recherche commencera d'autant d'éléments, à partir de la fin du tableau. À noter que même si l'index est négatif, la recherche s'effectue toujours du début jusqu'à la fin du tableau. Si l'index fourni est inférieur à 0, le tableau sera entièrement parcouru.
-
- -

Valeur de retour

- -

Le premier index de l'élément dans le tableau ou -1 si la valeur n'est pas trouvée.

- -

Description

- -

indexOf compare élémentRecherché aux éléments contenus dans le tableau en utilisant une égalité stricte (la même méthode utilisée par l'opérateur ===).

- -

Exemples

- -

Utiliser indexOf()

- -

Dans l'exemple qui suit, on peut utiliser indexOf afin de trouver l'emplacement d'un élément dans un tableau.

- -
var tableau = [2, 9, 9];
-tableau.indexOf(2);     // 0
-tableau.indexOf(7);     // -1
-tableau.indexOf(9, 2);  // 2
-tableau.indexOf(2, -1); // -1
-tableau.indexOf(2, -3); // 0
- -

Trouver toutes les occurences d'un élément

- -

Dans l'exemple qui suit, on utilise indexOf() afin de trouver tous les indices d'un élément dans un tableau. On peut utiliser la méthode {{jsxref("Array.prototype.push", "push")}} afin d'ajouter ces indices dans un autre tableau.

- -
var indices = [];
-var tableau = ['a', 'b', 'a', 'c', 'a', 'd'];
-var élément = 'a';
-var idx = tableau.indexOf(élément);
-while (idx != -1) {
-  indices.push(idx);
-  idx = tableau.indexOf(élément, idx + 1);
-}
-console.log(indices);
-// [0, 2, 4]
- -

Trouver si un élément existe et l'ajouter dans le tableau si ce n'est pas le cas

- -
function mettreAJourLegumes(tabLégumes, légume) {
-    if (tabLégumes.indexOf(légume) === -1) {
-        tabLégumes.push(légume);
-        console.log('Le nouveau tableau est : ' + tabLégumes);
-    } else if (tabLégumes.indexOf(légume) > -1) {
-        console.log(légume + ' existe déjà dans le tableau.');
-    }
-}
-
-var tabLégumes = ['pomme de terre', 'tomate', 'poivron'];
-
-mettreAJourLegumes(tabLégumes, 'épinard');
-// Le nouveau tableau est : pomme de terre,tomate,poivron,épinard
-mettreAJourLegumes(tabLégumes, 'épinard');
-// épinard existe déjà dans le tableau.
- -

Prothèse d'émulation (polyfill)

- -

indexOf fut ajouté avec la cinquième édition du standard ECMA-262 ; il peut donc ne pas être présent dans tous les navigateurs web. Vous pouvez contourner ce problème en insérant le code suivant au début de vos scripts. Il permet d'utiliser indexOf dans les environnements qui ne le supportent pas nativement. L'algorithme est le même que celui spécifié dans ECMAScript 5 si on a bien {{jsxref("TypeError", "TypeError")}} et {{jsxref("Math.abs")}} qui ont leurs valeurs originales :

- -
// Production steps of ECMA-262, Edition 5, 15.4.4.14
-// Référence : http://es5.github.io/#x15.4.4.14
-if (!Array.prototype.indexOf) {
-  Array.prototype.indexOf = function(searchElement, fromIndex) {
-
-    var k;
-
-    // 1. Soit O le résultat de l'appel à ToObject avec
-    //    this en argument.
-    if (this == null) {
-      throw new TypeError('"this" vaut null ou n est pas défini');
-    }
-
-    var O = Object(this);
-
-    // 2. Soit lenValue le résultat de l'appel de la
-    //    méthode interne Get de O avec l'argument
-    //    "length".
-    // 3. Soit len le résultat de ToUint32(lenValue).
-    var len = O.length >>> 0;
-
-    // 4. Si len vaut 0, on renvoie -1.
-    if (len === 0) {
-      return -1;
-    }
-
-    // 5. Si l'argument fromIndex a été utilisé, soit
-    //    n le résultat de ToInteger(fromIndex)
-    //    0 sinon
-    var n = +fromIndex || 0;
-
-    if (Math.abs(n) === Infinity) {
-      n = 0;
-    }
-
-    // 6. Si n >= len, on renvoie -1.
-    if (n >= len) {
-      return -1;
-    }
-
-    // 7. Si n >= 0, soit k égal à n.
-    // 8. Sinon, si n<0, soit k égal à len - abs(n).
-    //    Si k est inférieur à 0, on ramène k égal à 0.
-    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
-
-    // 9. On répète tant que k < len
-    while (k < len) {
-      // a. Soit Pk égal à ToString(k).
-      //    Ceci est implicite pour l'opérande gauche de in
-      // b. Soit kPresent le résultat de l'appel de la
-      //    méthode interne HasProperty de O avec Pk en
-      //    argument. Cette étape peut être combinée avec
-      //    l'étape c
-      // c. Si kPresent vaut true, alors
-      //    i.  soit elementK le résultat de l'appel de la
-      //        méthode interne Get de O avec ToString(k) en
-      //        argument
-      //   ii.  Soit same le résultat de l'application de
-      //        l'algorithme d'égalité stricte entre
-      //        searchElement et elementK.
-      //  iii.  Si same vaut true, on renvoie k.
-      if (k in O && O[k] === searchElement) {
-        return k;
-      }
-      k++;
-    }
-    return -1;
-  };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.14', 'Array.prototype.indexOf')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.indexOf")}}

- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/indexof/index.md b/files/fr/web/javascript/reference/global_objects/array/indexof/index.md new file mode 100644 index 0000000000..cdd545abc9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/indexof/index.md @@ -0,0 +1,209 @@ +--- +title: Array.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/Array/indexOf +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/indexOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/indexOf +--- +
{{JSRef}}
+ +

La méthode indexOf() renvoie le premier indice pour lequel on trouve un élément donné dans un tableau. Si l'élément cherché n'est pas présent dans le tableau, la méthode renverra -1.

+ +
+

Note : pour la méthode associée aux chaînes de caractères, voir la page {{jsxref("String.prototype.indexOf()")}}.

+
+ +
{{EmbedInteractiveExample("pages/js/array-indexof.html")}}
+ +

Syntaxe

+ +
arr.indexOf(élémentRecherché)
+arr.indexOf(élémentRecherché, indiceDébut)
+
+ +

Paramètres

+ +
+
élémentRecherché
+
L'élément qu'on cherche dans le tableau
+
indiceDébut {{optional_inline}}
+
L'index à partir duquel commencer la recherche. La valeur par défaut est 0 (le tableau sera parcouru dans sa totalité). Si l'index est plus grand ou égal à la longueur du tableau, la méthode renverra -1. Si l'index est négatif, la recherche commencera d'autant d'éléments, à partir de la fin du tableau. À noter que même si l'index est négatif, la recherche s'effectue toujours du début jusqu'à la fin du tableau. Si l'index fourni est inférieur à 0, le tableau sera entièrement parcouru.
+
+ +

Valeur de retour

+ +

Le premier index de l'élément dans le tableau ou -1 si la valeur n'est pas trouvée.

+ +

Description

+ +

indexOf compare élémentRecherché aux éléments contenus dans le tableau en utilisant une égalité stricte (la même méthode utilisée par l'opérateur ===).

+ +

Exemples

+ +

Utiliser indexOf()

+ +

Dans l'exemple qui suit, on peut utiliser indexOf afin de trouver l'emplacement d'un élément dans un tableau.

+ +
var tableau = [2, 9, 9];
+tableau.indexOf(2);     // 0
+tableau.indexOf(7);     // -1
+tableau.indexOf(9, 2);  // 2
+tableau.indexOf(2, -1); // -1
+tableau.indexOf(2, -3); // 0
+ +

Trouver toutes les occurences d'un élément

+ +

Dans l'exemple qui suit, on utilise indexOf() afin de trouver tous les indices d'un élément dans un tableau. On peut utiliser la méthode {{jsxref("Array.prototype.push", "push")}} afin d'ajouter ces indices dans un autre tableau.

+ +
var indices = [];
+var tableau = ['a', 'b', 'a', 'c', 'a', 'd'];
+var élément = 'a';
+var idx = tableau.indexOf(élément);
+while (idx != -1) {
+  indices.push(idx);
+  idx = tableau.indexOf(élément, idx + 1);
+}
+console.log(indices);
+// [0, 2, 4]
+ +

Trouver si un élément existe et l'ajouter dans le tableau si ce n'est pas le cas

+ +
function mettreAJourLegumes(tabLégumes, légume) {
+    if (tabLégumes.indexOf(légume) === -1) {
+        tabLégumes.push(légume);
+        console.log('Le nouveau tableau est : ' + tabLégumes);
+    } else if (tabLégumes.indexOf(légume) > -1) {
+        console.log(légume + ' existe déjà dans le tableau.');
+    }
+}
+
+var tabLégumes = ['pomme de terre', 'tomate', 'poivron'];
+
+mettreAJourLegumes(tabLégumes, 'épinard');
+// Le nouveau tableau est : pomme de terre,tomate,poivron,épinard
+mettreAJourLegumes(tabLégumes, 'épinard');
+// épinard existe déjà dans le tableau.
+ +

Prothèse d'émulation (polyfill)

+ +

indexOf fut ajouté avec la cinquième édition du standard ECMA-262 ; il peut donc ne pas être présent dans tous les navigateurs web. Vous pouvez contourner ce problème en insérant le code suivant au début de vos scripts. Il permet d'utiliser indexOf dans les environnements qui ne le supportent pas nativement. L'algorithme est le même que celui spécifié dans ECMAScript 5 si on a bien {{jsxref("TypeError", "TypeError")}} et {{jsxref("Math.abs")}} qui ont leurs valeurs originales :

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.14
+// Référence : http://es5.github.io/#x15.4.4.14
+if (!Array.prototype.indexOf) {
+  Array.prototype.indexOf = function(searchElement, fromIndex) {
+
+    var k;
+
+    // 1. Soit O le résultat de l'appel à ToObject avec
+    //    this en argument.
+    if (this == null) {
+      throw new TypeError('"this" vaut null ou n est pas défini');
+    }
+
+    var O = Object(this);
+
+    // 2. Soit lenValue le résultat de l'appel de la
+    //    méthode interne Get de O avec l'argument
+    //    "length".
+    // 3. Soit len le résultat de ToUint32(lenValue).
+    var len = O.length >>> 0;
+
+    // 4. Si len vaut 0, on renvoie -1.
+    if (len === 0) {
+      return -1;
+    }
+
+    // 5. Si l'argument fromIndex a été utilisé, soit
+    //    n le résultat de ToInteger(fromIndex)
+    //    0 sinon
+    var n = +fromIndex || 0;
+
+    if (Math.abs(n) === Infinity) {
+      n = 0;
+    }
+
+    // 6. Si n >= len, on renvoie -1.
+    if (n >= len) {
+      return -1;
+    }
+
+    // 7. Si n >= 0, soit k égal à n.
+    // 8. Sinon, si n<0, soit k égal à len - abs(n).
+    //    Si k est inférieur à 0, on ramène k égal à 0.
+    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+    // 9. On répète tant que k < len
+    while (k < len) {
+      // a. Soit Pk égal à ToString(k).
+      //    Ceci est implicite pour l'opérande gauche de in
+      // b. Soit kPresent le résultat de l'appel de la
+      //    méthode interne HasProperty de O avec Pk en
+      //    argument. Cette étape peut être combinée avec
+      //    l'étape c
+      // c. Si kPresent vaut true, alors
+      //    i.  soit elementK le résultat de l'appel de la
+      //        méthode interne Get de O avec ToString(k) en
+      //        argument
+      //   ii.  Soit same le résultat de l'application de
+      //        l'algorithme d'égalité stricte entre
+      //        searchElement et elementK.
+      //  iii.  Si same vaut true, on renvoie k.
+      if (k in O && O[k] === searchElement) {
+        return k;
+      }
+      k++;
+    }
+    return -1;
+  };
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.14', 'Array.prototype.indexOf')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.indexOf")}}

+ +

Notes de compatibilité

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/isarray/index.html b/files/fr/web/javascript/reference/global_objects/array/isarray/index.html deleted file mode 100644 index f57266afff..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/isarray/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Array.isArray() -slug: Web/JavaScript/Reference/Global_Objects/Array/isArray -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/isArray -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/isArray ---- -
{{JSRef}}
- -

La méthode Array.isArray() permet de déterminer si l'objet passé en argument est un objet {{jsxref("Array")}}, elle renvoie true si le paramètre passé à la fonction est de type Array et false dans le cas contraire.

- -
Array.isArray([1, 2, 3]);   // true
-Array.isArray({toto: 123}); // false
-Array.isArray("tototruc");  // false
-Array.isArray(undefined);   // false
-
- -

Syntaxe

- -
Array.isArray(value)
- -

Paramètres

- -
-
value
-
La valeur dont on veut vérifier le type
-
- -

Valeur de retour

- -

true si la valeur est un tableau (une instance de {{jsxref("Array")}}), false sinon.

- -

Description

- -

Si l'objet indiqué en paramètre est un {{jsxref("Array")}}, la méthode renvoie true, sinon, elle renvoie false.

- -

Voir aussi : « Determining with absolute accuracy whether or not a JavaScript object is an array » (en anglais) pour avoir plus de détails. Si on passe un objet {{jsxref("TypedArray")}} en argument, ce sera toujours la valeur false qui sera renvoyée.

- -

Exemples

- -
// Tous les appels suivant renvoient true
-Array.isArray([]);
-Array.isArray([1]);
-Array.isArray(new Array());
-Array.isArray(new Array('a', 'b', 'c'));
-Array.isArray(new Array(3));
-// Une petite anecdote: Array.prototype lui même est un Array
-Array.isArray( Array.prototype );
-
-// Tous les appels suivant renvoient 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(new Uint8Array(32));
-Array.isArray({ __proto__ : Array.prototype });
-
- -

Prothèse d'émulation (polyfill)

- -

Exécuter ce code avant tout les autres aboutira à la création de la méthode Array.isArray()si elle n'est pas nativement prise en charge par le navigateur.

- -
if(!Array.isArray) {
-  Array.isArray = function(arg) {
-    return Object.prototype.toString.call(arg) === '[object Array]';
-  };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.3.2', 'Array.isArray')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-array.isarray', 'Array.isArray')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.isarray', 'Array.isArray')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.isArray")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/isarray/index.md b/files/fr/web/javascript/reference/global_objects/array/isarray/index.md new file mode 100644 index 0000000000..f57266afff --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/isarray/index.md @@ -0,0 +1,114 @@ +--- +title: Array.isArray() +slug: Web/JavaScript/Reference/Global_Objects/Array/isArray +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/isArray +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/isArray +--- +
{{JSRef}}
+ +

La méthode Array.isArray() permet de déterminer si l'objet passé en argument est un objet {{jsxref("Array")}}, elle renvoie true si le paramètre passé à la fonction est de type Array et false dans le cas contraire.

+ +
Array.isArray([1, 2, 3]);   // true
+Array.isArray({toto: 123}); // false
+Array.isArray("tototruc");  // false
+Array.isArray(undefined);   // false
+
+ +

Syntaxe

+ +
Array.isArray(value)
+ +

Paramètres

+ +
+
value
+
La valeur dont on veut vérifier le type
+
+ +

Valeur de retour

+ +

true si la valeur est un tableau (une instance de {{jsxref("Array")}}), false sinon.

+ +

Description

+ +

Si l'objet indiqué en paramètre est un {{jsxref("Array")}}, la méthode renvoie true, sinon, elle renvoie false.

+ +

Voir aussi : « Determining with absolute accuracy whether or not a JavaScript object is an array » (en anglais) pour avoir plus de détails. Si on passe un objet {{jsxref("TypedArray")}} en argument, ce sera toujours la valeur false qui sera renvoyée.

+ +

Exemples

+ +
// Tous les appels suivant renvoient true
+Array.isArray([]);
+Array.isArray([1]);
+Array.isArray(new Array());
+Array.isArray(new Array('a', 'b', 'c'));
+Array.isArray(new Array(3));
+// Une petite anecdote: Array.prototype lui même est un Array
+Array.isArray( Array.prototype );
+
+// Tous les appels suivant renvoient 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(new Uint8Array(32));
+Array.isArray({ __proto__ : Array.prototype });
+
+ +

Prothèse d'émulation (polyfill)

+ +

Exécuter ce code avant tout les autres aboutira à la création de la méthode Array.isArray()si elle n'est pas nativement prise en charge par le navigateur.

+ +
if(!Array.isArray) {
+  Array.isArray = function(arg) {
+    return Object.prototype.toString.call(arg) === '[object Array]';
+  };
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.3.2', 'Array.isArray')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-array.isarray', 'Array.isArray')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.isarray', 'Array.isArray')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.isArray")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/join/index.html b/files/fr/web/javascript/reference/global_objects/array/join/index.html deleted file mode 100644 index cdb8f6b0f6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/join/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Array.prototype.join() -slug: Web/JavaScript/Reference/Global_Objects/Array/join -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/join -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/join ---- -
{{JSRef}}
- -

La méthode join() crée et renvoie une nouvelle chaîne de caractères en concaténant tous les éléments d'un tableau (ou d'un objet semblable à un tableau). La concaténation utilise la virgule ou une autre chaîne, fournie en argument, comme séparateur.

- -
{{EmbedInteractiveExample("pages/js/array-join.html")}}
- -

Syntaxe

- -
arr.join()
-arr.join(séparateur)
-
- -

Paramètres

- -
-
séparateur {{optional_inline}}
-
Ce paramètre optionnel indique une chaine de caractères pour séparer chaque élément du tableau. Le séparateur est converti en une chaine de caractères si nécessaire. Si ce paramètre n'est pas utilisé, les éléments du tableau seront séparés par une virgule (,). Si ce paramètre est la chaîne vide, les éléments seront accolés les uns aux autres sans espace entre. La valeur par défaut de ce paramètre est ",".
-
- -

Valeur de retour

- -

Une chaîne de caractères composée de tous les éléments du tableau joints les uns aux autres. Si la longueur du tableau (arr.length) vaut 0, c'est la chaîne vide qui est renvoyée. Si le tableau ne contient qu'un élément, sa version texte sera renvoyée sans être suivie du séparateur.

- -

Description

- -

Les différents éléments du tableau sont convertis en une chaîne de caractères puis fusionnés en une seule chaîne. Si un élément vaut undefined ou null, il sera converti en la chaîne vide. Cette fonction est générique et peut donc être utilisée avec les objets semblables aux tableaux.

- -

Exemples

- -

Fusionner un tableau de quatre façons différentes

- -

L'exemple suivant crée un tableau, a, avec trois éléments, puis joint le tableau à trois reprises : en utilisant le séparateur par défaut, une virgule et un espace, puis un plus, puis avec la chaîne vide.

- -
var a = new Array("Vent","Pluie","Feu");
-a.join();      // "Vent,Pluie,Feu"
-a.join(", ");  // "Vent, Pluie, Feu"
-a.join(" + "); // "Vent + Pluie + Feu"
-a.join("");    // "VentPluieFeu"
- -

Fusionner un objet semblable à un tableau

- -

Dans l'exemple suivant, on effectue la fusion sur un objet semblable à un tableau (arguments) en appelant {{jsxref("Function.prototype.call")}} sur Array.prototype.join.

- -
function f(a, b, c) {
-  var s = Array.prototype.join.call(arguments);
-  console.log(s);
-}
-f(1, 'a', true); // '1,a,true'
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.5', 'Array.prototype.join')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.join', 'Array.prototype.join')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.join', 'Array.prototype.join')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.join")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/join/index.md b/files/fr/web/javascript/reference/global_objects/array/join/index.md new file mode 100644 index 0000000000..cdb8f6b0f6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/join/index.md @@ -0,0 +1,107 @@ +--- +title: Array.prototype.join() +slug: Web/JavaScript/Reference/Global_Objects/Array/join +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/join +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/join +--- +
{{JSRef}}
+ +

La méthode join() crée et renvoie une nouvelle chaîne de caractères en concaténant tous les éléments d'un tableau (ou d'un objet semblable à un tableau). La concaténation utilise la virgule ou une autre chaîne, fournie en argument, comme séparateur.

+ +
{{EmbedInteractiveExample("pages/js/array-join.html")}}
+ +

Syntaxe

+ +
arr.join()
+arr.join(séparateur)
+
+ +

Paramètres

+ +
+
séparateur {{optional_inline}}
+
Ce paramètre optionnel indique une chaine de caractères pour séparer chaque élément du tableau. Le séparateur est converti en une chaine de caractères si nécessaire. Si ce paramètre n'est pas utilisé, les éléments du tableau seront séparés par une virgule (,). Si ce paramètre est la chaîne vide, les éléments seront accolés les uns aux autres sans espace entre. La valeur par défaut de ce paramètre est ",".
+
+ +

Valeur de retour

+ +

Une chaîne de caractères composée de tous les éléments du tableau joints les uns aux autres. Si la longueur du tableau (arr.length) vaut 0, c'est la chaîne vide qui est renvoyée. Si le tableau ne contient qu'un élément, sa version texte sera renvoyée sans être suivie du séparateur.

+ +

Description

+ +

Les différents éléments du tableau sont convertis en une chaîne de caractères puis fusionnés en une seule chaîne. Si un élément vaut undefined ou null, il sera converti en la chaîne vide. Cette fonction est générique et peut donc être utilisée avec les objets semblables aux tableaux.

+ +

Exemples

+ +

Fusionner un tableau de quatre façons différentes

+ +

L'exemple suivant crée un tableau, a, avec trois éléments, puis joint le tableau à trois reprises : en utilisant le séparateur par défaut, une virgule et un espace, puis un plus, puis avec la chaîne vide.

+ +
var a = new Array("Vent","Pluie","Feu");
+a.join();      // "Vent,Pluie,Feu"
+a.join(", ");  // "Vent, Pluie, Feu"
+a.join(" + "); // "Vent + Pluie + Feu"
+a.join("");    // "VentPluieFeu"
+ +

Fusionner un objet semblable à un tableau

+ +

Dans l'exemple suivant, on effectue la fusion sur un objet semblable à un tableau (arguments) en appelant {{jsxref("Function.prototype.call")}} sur Array.prototype.join.

+ +
function f(a, b, c) {
+  var s = Array.prototype.join.call(arguments);
+  console.log(s);
+}
+f(1, 'a', true); // '1,a,true'
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.5', 'Array.prototype.join')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.join', 'Array.prototype.join')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.join', 'Array.prototype.join')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.join")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/keys/index.html b/files/fr/web/javascript/reference/global_objects/array/keys/index.html deleted file mode 100644 index 88e747da9c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/keys/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Array.prototype.keys() -slug: Web/JavaScript/Reference/Global_Objects/Array/keys -tags: - - Array - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/keys -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/keys ---- -
{{JSRef}}
- -

La méthode keys() renvoie un nouvel objet Array Iterator qui contient les clefs pour chaque indice du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-keys.html")}}
- -

Syntaxe

- -
arr.keys()
- -

Valeur de retour

- -

Un nouvel objet itérateur pour {{jsxref("Array")}}.

- -

Exemples

- -

Utilisation simple

- -
var arr = ["a","b","c"];
-var itérateur = arr.keys();
-
-console.log(itérateur.next()); // { value: 0, done: false }
-console.log(itérateur.next()); // { value: 1, done: false }
-console.log(itérateur.next()); // { value: 2, done: false }
-console.log(itérateur.next()); // { value: undefined, done: true }
-
- -

Un itérateur de clés prend en compte les trous

- -
var arr = ["a", , "c"];
-var clésCreuses = Object.keys(arr);
-var clésDenses = [...arr.keys()];
-console.log(clésCreuses); // ["0", "2"]
-console.log(clésDenses);  // [0, 1, 2]
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.keys', 'Array.prototype.keys')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.keys', 'Array.prototype.keys')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.keys")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/keys/index.md b/files/fr/web/javascript/reference/global_objects/array/keys/index.md new file mode 100644 index 0000000000..88e747da9c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/keys/index.md @@ -0,0 +1,82 @@ +--- +title: Array.prototype.keys() +slug: Web/JavaScript/Reference/Global_Objects/Array/keys +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/keys +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/keys +--- +
{{JSRef}}
+ +

La méthode keys() renvoie un nouvel objet Array Iterator qui contient les clefs pour chaque indice du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-keys.html")}}
+ +

Syntaxe

+ +
arr.keys()
+ +

Valeur de retour

+ +

Un nouvel objet itérateur pour {{jsxref("Array")}}.

+ +

Exemples

+ +

Utilisation simple

+ +
var arr = ["a","b","c"];
+var itérateur = arr.keys();
+
+console.log(itérateur.next()); // { value: 0, done: false }
+console.log(itérateur.next()); // { value: 1, done: false }
+console.log(itérateur.next()); // { value: 2, done: false }
+console.log(itérateur.next()); // { value: undefined, done: true }
+
+ +

Un itérateur de clés prend en compte les trous

+ +
var arr = ["a", , "c"];
+var clésCreuses = Object.keys(arr);
+var clésDenses = [...arr.keys()];
+console.log(clésCreuses); // ["0", "2"]
+console.log(clésDenses);  // [0, 1, 2]
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.keys', 'Array.prototype.keys')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.keys', 'Array.prototype.keys')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.keys")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/lastindexof/index.html b/files/fr/web/javascript/reference/global_objects/array/lastindexof/index.html deleted file mode 100644 index eb2c70d644..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/lastindexof/index.html +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Array.prototype.lastIndexOf() -slug: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/lastIndexOf ---- -
{{JSRef}}
- -

La méthode lastIndexOf() permet de renvoyer le dernier indice pour lequel une valeur donnée est présente dans un tableau. Si la valeur recherchée n'est pas présente, le résultat sera -1. Lors de la recherche, le tableau est parcouru dans le sens des index décroissants, à partir de l'index indexDébut.

- -
{{EmbedInteractiveExample("pages/js/array-lastindexof.html")}}
- -

Syntaxe

- -
arr.lastIndexOf(élémentRecherché)
-arr.lastIndexOf(élémentRecherché, indexDébut)
-
- -

Paramètres

- -
-
élémentRecherché
-
L'élément à qu'on cherche dans le tableau.
-
indexDébut {{optional_inline}}
-
L'index à partir duquel commencer la recherche dans le tableau (la recherche s'effectuant à l'envers). Si le paramètre est absent, sa valeur par défaut sera la longueur du tableau moins 1 (c'est-à-dire arr.length - 1), le tableau sera alors parcouru dans sa totalité. Si l'index est plus grand ou égal à la longueur du tableau, le tableau sera parcouru en entier. Si l'index est négatif, la recherche commencera d'autant d'éléments à partir de la fin du tableau. À noter que, même si l'index est négatif, la recherche s'effectuera toujours de la fin jusqu'au début du tableau. Si l'index calculé est inférieur à 0, la méthode renverra -1 et le tableau ne sera pas parcouru.
-
- -

Valeur de retour

- -

Le dernier index auquel on trouve la valeur dans le tableau, -1 si elle n'est pas trouvée.

- -

Description

- -

lastIndexOf compare élémentRecherché aux éléments contenus dans le tableau en utilisant une égalité stricte (l'égalité utilisée par l'opérateur ===).

- -

Exemples

- -

Utiliser lastIndexOf

- -

Dans l'exemple suivant, on utilise lastIndexOf afin de situer une valeur dans un tableau.

- -
var tableau = [2, 5, 9, 2];
-tableau.lastIndexOf(2);     // 3
-tableau.lastIndexOf(7);     // -1
-tableau.lastIndexOf(2, 3);  // 3
-tableau.lastIndexOf(2, 2);  // 0
-tableau.lastIndexOf(2, -2); // 0
-tableau.lastIndexOf(2, -1); // 3
- -

Trouver toutes les occurrences d'un élément

- -

L’exemple suivant utilise lastIndexOf pour trouver tous les index (indices) d’un élément dans un tableau donné, en utilisant {{jsxref("Array.prototype.push", "push")}} pour les ajouter dans un autre tableau quand ils sont trouvés.

- -
var indices = [];
-var tableau = ['a', 'b', 'a', 'c', 'a', 'd'];
-var élément = 'a';
-var idx = tableau.lastIndexOf(élément);
-while (idx !== -1) {
-  indices.push(idx);
-  idx = (idx > 0 ? tableau.lastIndexOf(élément, idx - 1) : -1);
-}
-
-console.log(indices);
-// [4, 2, 0]
- -

Remarquez que nous avons dû traiter le cas de idx === 0 séparément (idx > 0) parce que l’élément sera toujours trouvé, indépendamment du paramètre de fromIndex, si c’est le premier élément du tableau. C’est une différence avec la méthode {{jsxref("Array.prototype.indexOf", "indexOf")}}.

- - -

Prothèse d'émulation (polyfill)

- -

lastIndexOf a été ajouté avec la cinquième édition du standard ECMA-262 ; il peut donc ne pas être présent dans tous les navigateurs web. Vous pouvez contourner ce problème en insérant le code suivant au début de vos scripts. Il vous permettra d'utiliser lastIndexOf avec les navigateurs qui ne le supportent pas nativement. L'algorithme qui suit est le même que celui spécifié par ECMAScript 5 si {{jsxref("Object", "Object")}}, {{jsxref("TypeError", "TypeError")}}, {{jsxref("Number", "Number")}}, {{jsxref("Math.floor")}}, {{jsxref("Math.abs")}}, et {{jsxref("Math.min")}} n'ont pas été modifiés et conservent leurs valeurs originales.

- -
// Production steps of ECMA-262, Edition 5, 15.4.4.15
-// Reference: http://es5.github.io/#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 >>> 0;
-    if (len === 0) {
-      return -1;
-    }
-
-    n = len - 1;
-    if (arguments.length > 1) {
-      n = Number(arguments[1]);
-      if (n != n) {
-        n = 0;
-      }
-      else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) {
-        n = (n > 0 || -1) * Math.floor(Math.abs(n));
-      }
-    }
-
-    for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) {
-      if (k in t && t[k] === searchElement) {
-        return k;
-      }
-    }
-    return -1;
-  };
-}
- -

On notera que cette implémentation vise une compatibilité absolue de lastIndexOf dans Firefox et le moteur JavaScript SpiderMonkey, incluant plusieurs cas très particuliers. Si vous comptez l'utiliser dans une application, vous devriez pouvoir calculer from avec un code beaucoup moins compliqué.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.15', 'Array.prototype.lastIndexOf')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.lastIndexOf")}}

- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/lastindexof/index.md b/files/fr/web/javascript/reference/global_objects/array/lastindexof/index.md new file mode 100644 index 0000000000..eb2c70d644 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/lastindexof/index.md @@ -0,0 +1,162 @@ +--- +title: Array.prototype.lastIndexOf() +slug: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/lastIndexOf +--- +
{{JSRef}}
+ +

La méthode lastIndexOf() permet de renvoyer le dernier indice pour lequel une valeur donnée est présente dans un tableau. Si la valeur recherchée n'est pas présente, le résultat sera -1. Lors de la recherche, le tableau est parcouru dans le sens des index décroissants, à partir de l'index indexDébut.

+ +
{{EmbedInteractiveExample("pages/js/array-lastindexof.html")}}
+ +

Syntaxe

+ +
arr.lastIndexOf(élémentRecherché)
+arr.lastIndexOf(élémentRecherché, indexDébut)
+
+ +

Paramètres

+ +
+
élémentRecherché
+
L'élément à qu'on cherche dans le tableau.
+
indexDébut {{optional_inline}}
+
L'index à partir duquel commencer la recherche dans le tableau (la recherche s'effectuant à l'envers). Si le paramètre est absent, sa valeur par défaut sera la longueur du tableau moins 1 (c'est-à-dire arr.length - 1), le tableau sera alors parcouru dans sa totalité. Si l'index est plus grand ou égal à la longueur du tableau, le tableau sera parcouru en entier. Si l'index est négatif, la recherche commencera d'autant d'éléments à partir de la fin du tableau. À noter que, même si l'index est négatif, la recherche s'effectuera toujours de la fin jusqu'au début du tableau. Si l'index calculé est inférieur à 0, la méthode renverra -1 et le tableau ne sera pas parcouru.
+
+ +

Valeur de retour

+ +

Le dernier index auquel on trouve la valeur dans le tableau, -1 si elle n'est pas trouvée.

+ +

Description

+ +

lastIndexOf compare élémentRecherché aux éléments contenus dans le tableau en utilisant une égalité stricte (l'égalité utilisée par l'opérateur ===).

+ +

Exemples

+ +

Utiliser lastIndexOf

+ +

Dans l'exemple suivant, on utilise lastIndexOf afin de situer une valeur dans un tableau.

+ +
var tableau = [2, 5, 9, 2];
+tableau.lastIndexOf(2);     // 3
+tableau.lastIndexOf(7);     // -1
+tableau.lastIndexOf(2, 3);  // 3
+tableau.lastIndexOf(2, 2);  // 0
+tableau.lastIndexOf(2, -2); // 0
+tableau.lastIndexOf(2, -1); // 3
+ +

Trouver toutes les occurrences d'un élément

+ +

L’exemple suivant utilise lastIndexOf pour trouver tous les index (indices) d’un élément dans un tableau donné, en utilisant {{jsxref("Array.prototype.push", "push")}} pour les ajouter dans un autre tableau quand ils sont trouvés.

+ +
var indices = [];
+var tableau = ['a', 'b', 'a', 'c', 'a', 'd'];
+var élément = 'a';
+var idx = tableau.lastIndexOf(élément);
+while (idx !== -1) {
+  indices.push(idx);
+  idx = (idx > 0 ? tableau.lastIndexOf(élément, idx - 1) : -1);
+}
+
+console.log(indices);
+// [4, 2, 0]
+ +

Remarquez que nous avons dû traiter le cas de idx === 0 séparément (idx > 0) parce que l’élément sera toujours trouvé, indépendamment du paramètre de fromIndex, si c’est le premier élément du tableau. C’est une différence avec la méthode {{jsxref("Array.prototype.indexOf", "indexOf")}}.

+ + +

Prothèse d'émulation (polyfill)

+ +

lastIndexOf a été ajouté avec la cinquième édition du standard ECMA-262 ; il peut donc ne pas être présent dans tous les navigateurs web. Vous pouvez contourner ce problème en insérant le code suivant au début de vos scripts. Il vous permettra d'utiliser lastIndexOf avec les navigateurs qui ne le supportent pas nativement. L'algorithme qui suit est le même que celui spécifié par ECMAScript 5 si {{jsxref("Object", "Object")}}, {{jsxref("TypeError", "TypeError")}}, {{jsxref("Number", "Number")}}, {{jsxref("Math.floor")}}, {{jsxref("Math.abs")}}, et {{jsxref("Math.min")}} n'ont pas été modifiés et conservent leurs valeurs originales.

+ +
// Production steps of ECMA-262, Edition 5, 15.4.4.15
+// Reference: http://es5.github.io/#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 >>> 0;
+    if (len === 0) {
+      return -1;
+    }
+
+    n = len - 1;
+    if (arguments.length > 1) {
+      n = Number(arguments[1]);
+      if (n != n) {
+        n = 0;
+      }
+      else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) {
+        n = (n > 0 || -1) * Math.floor(Math.abs(n));
+      }
+    }
+
+    for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) {
+      if (k in t && t[k] === searchElement) {
+        return k;
+      }
+    }
+    return -1;
+  };
+}
+ +

On notera que cette implémentation vise une compatibilité absolue de lastIndexOf dans Firefox et le moteur JavaScript SpiderMonkey, incluant plusieurs cas très particuliers. Si vous comptez l'utiliser dans une application, vous devriez pouvoir calculer from avec un code beaucoup moins compliqué.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.15', 'Array.prototype.lastIndexOf')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.lastIndexOf")}}

+ +

Notes de compatibilité

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/length/index.html b/files/fr/web/javascript/reference/global_objects/array/length/index.html deleted file mode 100644 index 4e05fe8940..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/length/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Array.prototype.length -slug: Web/JavaScript/Reference/Global_Objects/Array/length -tags: - - Array - - JavaScript - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/length -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/length ---- -
{{JSRef}}
- -

La propriété length (longueur) est un entier non-signé de 32 bits qui indique le nombre d'éléments présents dans le tableau. Elle est toujours supérieure au plus grand indice du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-length.html")}}
- - - -

Description

- -

La valeur de la propriété length est un entier de signe positif dont la valeur est inférieure à 2 à la puissance 32 (2^32).

- -
var tableauA = new Array(4294967296); // 2 à la puissance 32 = 4294967296
-var tableauC = new Array(-100) // une valeur négative
-
-console.log(tableauA.length); // RangeError: Invalid array length
-console.log(tableauC.length); // RangeError: Invalid array length
-
-var tableauB = [];
-tableauB.length = Math.pow(2,32)-1; // On déclare une longueur inférieure à 2 puissance 32
-console.log(tableauB.length); // 4294967295
-
- -

Vous pouvez modifier la propriété length d'un tableau à loisir pour le tronquer. Quand vous étendez un tableau en modifiant la valeur de sa propriété length, le nombre d'éléments réellement présents dans ce tableau n'augmente pas : par exemple, si vous affectez la valeur 3 à la propriété length d'un tableau alors qu'elle vaut 2, le tableau contiendra toujours seulement 2 éléments. La troisième « case » ne sera pas itérable. De ce fait, la propriété length d'un tableau ne renseigne en rien sur le nombre de valeurs définies dans le tableau. Voir aussi la relation entre longueur et propriétés numériques.

- -
const arr = [1, 2, 3];
-console.table(arr);
-// [1, 2]
-
-arr.length = 5; // On définit une longueur à 5
-console.table(arr);
-// [1, 2, <3 éléments vides>]
-
-arr.forEach(element => console.log(element));
-// 1
-// 2
-
- -

{{js_property_attributes(1,0,0)}}

- -

Exemples

- -

Renvoyer la longueur d'un tableau

- -
var items = ["chaise", "bureau", "table", "sac"];
-items.length; // 4
-
- -

Parcourir un tableau

- -

Dans l'exemple suivant, on itère sur le tableau nombres en utilisant la propriété length afin de connaître son nombre d'élément. La valeur de chaque élément est ensuite multipliée par deux :

- -
var nombres = [1,2,3,4,5];
-
-for (var i = 0; i < nombres.length; i++) {
-  nombres[i] *= 2;
-}
-// nombres vaut maintenant [2,4,6,8,10];
-
- -

Tronquer un tableau

- -

L'exemple suivant raccourcit le tableau etatsUS à 50 si sa longueur actuelle est supérieure à 50.

- -
if (etatsUS.length > 50) {
-   etatsUS.length = 50;
-}
- -

Specifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.4.5.2', 'Array.length')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-properties-of-array-instances-length', 'Array.length')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-properties-of-array-instances-length', 'Array.length')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.length")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/length/index.md b/files/fr/web/javascript/reference/global_objects/array/length/index.md new file mode 100644 index 0000000000..4e05fe8940 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/length/index.md @@ -0,0 +1,120 @@ +--- +title: Array.prototype.length +slug: Web/JavaScript/Reference/Global_Objects/Array/length +tags: + - Array + - JavaScript + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/length +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/length +--- +
{{JSRef}}
+ +

La propriété length (longueur) est un entier non-signé de 32 bits qui indique le nombre d'éléments présents dans le tableau. Elle est toujours supérieure au plus grand indice du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-length.html")}}
+ + + +

Description

+ +

La valeur de la propriété length est un entier de signe positif dont la valeur est inférieure à 2 à la puissance 32 (2^32).

+ +
var tableauA = new Array(4294967296); // 2 à la puissance 32 = 4294967296
+var tableauC = new Array(-100) // une valeur négative
+
+console.log(tableauA.length); // RangeError: Invalid array length
+console.log(tableauC.length); // RangeError: Invalid array length
+
+var tableauB = [];
+tableauB.length = Math.pow(2,32)-1; // On déclare une longueur inférieure à 2 puissance 32
+console.log(tableauB.length); // 4294967295
+
+ +

Vous pouvez modifier la propriété length d'un tableau à loisir pour le tronquer. Quand vous étendez un tableau en modifiant la valeur de sa propriété length, le nombre d'éléments réellement présents dans ce tableau n'augmente pas : par exemple, si vous affectez la valeur 3 à la propriété length d'un tableau alors qu'elle vaut 2, le tableau contiendra toujours seulement 2 éléments. La troisième « case » ne sera pas itérable. De ce fait, la propriété length d'un tableau ne renseigne en rien sur le nombre de valeurs définies dans le tableau. Voir aussi la relation entre longueur et propriétés numériques.

+ +
const arr = [1, 2, 3];
+console.table(arr);
+// [1, 2]
+
+arr.length = 5; // On définit une longueur à 5
+console.table(arr);
+// [1, 2, <3 éléments vides>]
+
+arr.forEach(element => console.log(element));
+// 1
+// 2
+
+ +

{{js_property_attributes(1,0,0)}}

+ +

Exemples

+ +

Renvoyer la longueur d'un tableau

+ +
var items = ["chaise", "bureau", "table", "sac"];
+items.length; // 4
+
+ +

Parcourir un tableau

+ +

Dans l'exemple suivant, on itère sur le tableau nombres en utilisant la propriété length afin de connaître son nombre d'élément. La valeur de chaque élément est ensuite multipliée par deux :

+ +
var nombres = [1,2,3,4,5];
+
+for (var i = 0; i < nombres.length; i++) {
+  nombres[i] *= 2;
+}
+// nombres vaut maintenant [2,4,6,8,10];
+
+ +

Tronquer un tableau

+ +

L'exemple suivant raccourcit le tableau etatsUS à 50 si sa longueur actuelle est supérieure à 50.

+ +
if (etatsUS.length > 50) {
+   etatsUS.length = 50;
+}
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.4.5.2', 'Array.length')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-properties-of-array-instances-length', 'Array.length')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-properties-of-array-instances-length', 'Array.length')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.length")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/map/index.html b/files/fr/web/javascript/reference/global_objects/array/map/index.html deleted file mode 100644 index 48a9be07f5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/map/index.html +++ /dev/null @@ -1,210 +0,0 @@ ---- -title: Array.prototype.map() -slug: Web/JavaScript/Reference/Global_Objects/Array/map -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/map -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/map ---- -
{{JSRef}}
- -

La méthode map() crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément du tableau appelant.

- -
{{EmbedInteractiveExample("pages/js/array-map.html")}}
- -

Syntaxe

- -
var nouveauTableau = arr.map(callback [, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction qui est utilisée pour créer un élément du nouveau tableau. Elle utilise trois arguments : -
-
valeurCourante
-
La valeur de l'élément du tableau à traiter.
-
index{{optional_inline}}
-
L'index de l'élément qui est traité par la fonction.
-
tableau{{optional_inline}}
-
Le tableau sur lequel on a appelé la méthode map.
-
-
-
thisArg {{optional_inline}}
-
La valeur à utiliser pour this lors de l'exécution de callback. La valeur par défaut est l'objet global de l'environnement (Window pour un navigateur).
-
- -

Valeur de retour

- -

Un nouveau tableau composé des images de la fonction de rappel.

- -

Description

- -

Lorsqu'on utilise map, la fonction callback fournie en argument est exécutée une fois pour chacun des éléments du tableau, dans l'ordre du tableau. Chaque résultat de l'opération sur un élément sera un élément du nouveau tableau. La fonction callback est appelée uniquement pour les indices du tableau pour lesquels il y a des valeurs affectées (y compris si cette valeur est {{jsxref("undefined")}}). Si les valeurs ont été supprimées ou qu'elles n'ont jamais été initialisées, la fonction ne sera pas appelée.

- -

callback est appelée avec trois arguments : la valeur de l'élément du tableau, l'index de cet élément et l'objet {{jsxref("Array")}} qui est parcouru.

- -
-

Attention : map() construit un nouveau tableau. Si on utilise cette méthode sans utiliser le résultat, mieux vaudra utiliser forEach ou for...of.  Pour mieux décider si map()est adéquat, regardez si vous utilisez la valeur de retour et/ou si vous renvoyez une valeur avec la fonction callback : si ce n'est pas le cas, il ne faut pas utiliser map().

-
- -

Si le paramètre thisArg est utilisé, il sera utilisé en tant que this par la fonction callback lorsqu'elle sera appelée. S'il n'est pas utilisé, ce sera la valeur {{jsxref("undefined")}} qui sera utilisée pour définir this. La valeur this finalement prise en compte par la fonction callback est définie selon les règles usuelles qui déterminent la valeur this observée par une fonction.

- -

map ne modifie pas le tableau sur lequel elle est appelée (bien que la fonction callback, si elle est appelée, puisse modifier le tableau).

- -

La liste des éléments à traiter lors de l'opération map est définie avant le premier appel à callback. Les éléments qui sont ajoutés au tableau après que l'appel à map ait été initié ne seront pas traités par la fonction callback. Si des éléments ont été modifiés, la valeur utilisée par la fonction callback sera celle au moment où map est utilisée. Les éléments qui sont supprimés ne sont pas traités. De la même façon, si on applique map sur un tableau dont certains éléments sont indéfinis, le résultat possèdera également les mêmes éléments indéfinis.

- -

Exemples

- -

Créer un tableau des racines carrées d'un tableau de nombre

- -

Dans l'exemple suivant, on crée un tableau composé des racines carrées des éléments d'un premier tableau :

- -
var nombres = [1, 4, 9];
-var racines = nombres.map(Math.sqrt);
-// racines vaut désormais [1, 2, 3]
-// nombres vaut toujours [1, 4, 9]
-
- -

Créer un tableau de nombres avec une fonction à un argument

- -

Ici, on illustre le fonctionnement de map avec une fonction à un argument. Cet argument sera automatiquement remplacé par chaque élément du tableau au fur et à mesure que map parcourt le tableau :

- -
var nombres = [1, 4, 9];
-var doubles = nombres.map(function(num) {
-  return num * 2;
-});
-// doubles vaut désormais [2, 8, 18].
-// nombres vaut toujours [1, 4, 9]
-
- -

Utiliser map pour changer le format d'objets dans un tableau

- -

Dans le code qui suit, on utilise un tableau d'objets pour créer un autre tableau contenant de nouveaux objets dans un autre format :

- -
var tableauOrig = [{clé:1, valeur:10}, {clé:2, valeur:20}, {clé:3, valeur: 30}];
-var tableauFormaté = tableauOrig.map(obj => {
-  var rObj = {};
-  rObj[obj.clé] = obj.valeur;
-  return rObj;
-});
-// tableauFormaté vaut maintenant [{1:10}, {2:20}, {3:30}],
-// tableauOrig vaut toujours
-// [{clé:1, valeur:10},
-//  {clé:2, valeur:20},
-//  {clé:3, valeur: 30}
-// ]
-
- -

Utiliser map de façon générique

- -

Dans cet exemple, on voit comment utiliser la fonction map sur une chaîne de caractères pour obtenir un tableau contenant les codes ASCII des valeurs encodées :

- -
var map = Array.prototype.map;
-var a = map.call('Hello World', function(x) { return x.charCodeAt(0); });
-// a vaut désormais [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
-
- -

Utiliser map avec querySelectorAll

- -

Dans cet exemple, on illustre comment utiliser la méthode map de façon générique, sur un tableau d'objets collectés grâce à querySelectorAll :

- -
var elems = document.querySelectorAll('select option:checked');
-var values = Array.prototype.map.call(elems, function(obj) {
-  return obj.value;
-});
-
- -

On aurait également pu utiliser la méthode {{jsxref("Array.from()")}} qui permet de produire un tableau à partir d'un objet itérable.

- -

Un résultat inattendu

- -

Exemple inspiré par ce billet (en anglais)

- -

Il est fréquent d'utiliser la fonction callback avec un seul argument (l'élément en cours). Certaines fonctions natives sont également souvent appelées avec un unique argument même si elles peuvent prendre en compte plusieurs arguments. En combinant ces deux « habitudes », on peut obtenir certains résultats inattendus :

- -
// Si on utilise :
-['1', '2', '3'].map(parseInt);
-// On s'attend à obtenir [1, 2, 3]
-// Le résultat qu'on obtient est en fait [1, NaN, NaN]
-
-// parseInt est souvent utilisé avec un argument mais il
-// peut être utilisé avec deux arguments
-// Le premier correspond à l'expression à parser et le second
-// à la base dans laquelle convertir
-// Array.prototype.map passe 3 arguments à callback :
-// l'élément, l'index et le tableau
-// Le troisième argument sera ignoré par parseInt mais pas le
-// deuxième, ce qui donnera ce résultat étrange
-
-function returnInt(element) {
-  return parseInt(element, 10);
-}
-
-['1', '2', '3'].map(returnInt); // [1, 2, 3]
-// Le résultat qu'on obtient avec la fonction auxiliaire
-
-['1', '2', '3'].map(parseInt);  // [1, NaN, NaN]
-// car map passe trois argument à la fonction et que parseInt
-// considère le second argument comme base.
-// En détails :
-// Premier élément :   "1" à l'indice 0 : parseInt("1",0); donne 1
-// Deuxième élément :  "2" à l'indice 1 : parseInt("2",1); donne NaN
-// Troisième élément : "3" à l'indice 2 : parseInt("3",2); donne NaN
-
-
-// Formulation équivalente plus concise avec
-// une fonction fléchée
-['1', '2', '3'].map( str => parseInt(str));
-
-// Une autre méthode, plus simple
-['1', '2', '3'].map(Number); // [1, 2, 3]
-// à la différence de parseInt, cela fonctionnera pour les
-// nombres décimaux ou en notation exponentielle
-['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.19', 'Array.prototype.map')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.map', 'Array.prototype.map')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.map', 'Array.prototype.map')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.map")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/map/index.md b/files/fr/web/javascript/reference/global_objects/array/map/index.md new file mode 100644 index 0000000000..48a9be07f5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/map/index.md @@ -0,0 +1,210 @@ +--- +title: Array.prototype.map() +slug: Web/JavaScript/Reference/Global_Objects/Array/map +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/map +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/map +--- +
{{JSRef}}
+ +

La méthode map() crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément du tableau appelant.

+ +
{{EmbedInteractiveExample("pages/js/array-map.html")}}
+ +

Syntaxe

+ +
var nouveauTableau = arr.map(callback [, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction qui est utilisée pour créer un élément du nouveau tableau. Elle utilise trois arguments : +
+
valeurCourante
+
La valeur de l'élément du tableau à traiter.
+
index{{optional_inline}}
+
L'index de l'élément qui est traité par la fonction.
+
tableau{{optional_inline}}
+
Le tableau sur lequel on a appelé la méthode map.
+
+
+
thisArg {{optional_inline}}
+
La valeur à utiliser pour this lors de l'exécution de callback. La valeur par défaut est l'objet global de l'environnement (Window pour un navigateur).
+
+ +

Valeur de retour

+ +

Un nouveau tableau composé des images de la fonction de rappel.

+ +

Description

+ +

Lorsqu'on utilise map, la fonction callback fournie en argument est exécutée une fois pour chacun des éléments du tableau, dans l'ordre du tableau. Chaque résultat de l'opération sur un élément sera un élément du nouveau tableau. La fonction callback est appelée uniquement pour les indices du tableau pour lesquels il y a des valeurs affectées (y compris si cette valeur est {{jsxref("undefined")}}). Si les valeurs ont été supprimées ou qu'elles n'ont jamais été initialisées, la fonction ne sera pas appelée.

+ +

callback est appelée avec trois arguments : la valeur de l'élément du tableau, l'index de cet élément et l'objet {{jsxref("Array")}} qui est parcouru.

+ +
+

Attention : map() construit un nouveau tableau. Si on utilise cette méthode sans utiliser le résultat, mieux vaudra utiliser forEach ou for...of.  Pour mieux décider si map()est adéquat, regardez si vous utilisez la valeur de retour et/ou si vous renvoyez une valeur avec la fonction callback : si ce n'est pas le cas, il ne faut pas utiliser map().

+
+ +

Si le paramètre thisArg est utilisé, il sera utilisé en tant que this par la fonction callback lorsqu'elle sera appelée. S'il n'est pas utilisé, ce sera la valeur {{jsxref("undefined")}} qui sera utilisée pour définir this. La valeur this finalement prise en compte par la fonction callback est définie selon les règles usuelles qui déterminent la valeur this observée par une fonction.

+ +

map ne modifie pas le tableau sur lequel elle est appelée (bien que la fonction callback, si elle est appelée, puisse modifier le tableau).

+ +

La liste des éléments à traiter lors de l'opération map est définie avant le premier appel à callback. Les éléments qui sont ajoutés au tableau après que l'appel à map ait été initié ne seront pas traités par la fonction callback. Si des éléments ont été modifiés, la valeur utilisée par la fonction callback sera celle au moment où map est utilisée. Les éléments qui sont supprimés ne sont pas traités. De la même façon, si on applique map sur un tableau dont certains éléments sont indéfinis, le résultat possèdera également les mêmes éléments indéfinis.

+ +

Exemples

+ +

Créer un tableau des racines carrées d'un tableau de nombre

+ +

Dans l'exemple suivant, on crée un tableau composé des racines carrées des éléments d'un premier tableau :

+ +
var nombres = [1, 4, 9];
+var racines = nombres.map(Math.sqrt);
+// racines vaut désormais [1, 2, 3]
+// nombres vaut toujours [1, 4, 9]
+
+ +

Créer un tableau de nombres avec une fonction à un argument

+ +

Ici, on illustre le fonctionnement de map avec une fonction à un argument. Cet argument sera automatiquement remplacé par chaque élément du tableau au fur et à mesure que map parcourt le tableau :

+ +
var nombres = [1, 4, 9];
+var doubles = nombres.map(function(num) {
+  return num * 2;
+});
+// doubles vaut désormais [2, 8, 18].
+// nombres vaut toujours [1, 4, 9]
+
+ +

Utiliser map pour changer le format d'objets dans un tableau

+ +

Dans le code qui suit, on utilise un tableau d'objets pour créer un autre tableau contenant de nouveaux objets dans un autre format :

+ +
var tableauOrig = [{clé:1, valeur:10}, {clé:2, valeur:20}, {clé:3, valeur: 30}];
+var tableauFormaté = tableauOrig.map(obj => {
+  var rObj = {};
+  rObj[obj.clé] = obj.valeur;
+  return rObj;
+});
+// tableauFormaté vaut maintenant [{1:10}, {2:20}, {3:30}],
+// tableauOrig vaut toujours
+// [{clé:1, valeur:10},
+//  {clé:2, valeur:20},
+//  {clé:3, valeur: 30}
+// ]
+
+ +

Utiliser map de façon générique

+ +

Dans cet exemple, on voit comment utiliser la fonction map sur une chaîne de caractères pour obtenir un tableau contenant les codes ASCII des valeurs encodées :

+ +
var map = Array.prototype.map;
+var a = map.call('Hello World', function(x) { return x.charCodeAt(0); });
+// a vaut désormais [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
+
+ +

Utiliser map avec querySelectorAll

+ +

Dans cet exemple, on illustre comment utiliser la méthode map de façon générique, sur un tableau d'objets collectés grâce à querySelectorAll :

+ +
var elems = document.querySelectorAll('select option:checked');
+var values = Array.prototype.map.call(elems, function(obj) {
+  return obj.value;
+});
+
+ +

On aurait également pu utiliser la méthode {{jsxref("Array.from()")}} qui permet de produire un tableau à partir d'un objet itérable.

+ +

Un résultat inattendu

+ +

Exemple inspiré par ce billet (en anglais)

+ +

Il est fréquent d'utiliser la fonction callback avec un seul argument (l'élément en cours). Certaines fonctions natives sont également souvent appelées avec un unique argument même si elles peuvent prendre en compte plusieurs arguments. En combinant ces deux « habitudes », on peut obtenir certains résultats inattendus :

+ +
// Si on utilise :
+['1', '2', '3'].map(parseInt);
+// On s'attend à obtenir [1, 2, 3]
+// Le résultat qu'on obtient est en fait [1, NaN, NaN]
+
+// parseInt est souvent utilisé avec un argument mais il
+// peut être utilisé avec deux arguments
+// Le premier correspond à l'expression à parser et le second
+// à la base dans laquelle convertir
+// Array.prototype.map passe 3 arguments à callback :
+// l'élément, l'index et le tableau
+// Le troisième argument sera ignoré par parseInt mais pas le
+// deuxième, ce qui donnera ce résultat étrange
+
+function returnInt(element) {
+  return parseInt(element, 10);
+}
+
+['1', '2', '3'].map(returnInt); // [1, 2, 3]
+// Le résultat qu'on obtient avec la fonction auxiliaire
+
+['1', '2', '3'].map(parseInt);  // [1, NaN, NaN]
+// car map passe trois argument à la fonction et que parseInt
+// considère le second argument comme base.
+// En détails :
+// Premier élément :   "1" à l'indice 0 : parseInt("1",0); donne 1
+// Deuxième élément :  "2" à l'indice 1 : parseInt("2",1); donne NaN
+// Troisième élément : "3" à l'indice 2 : parseInt("3",2); donne NaN
+
+
+// Formulation équivalente plus concise avec
+// une fonction fléchée
+['1', '2', '3'].map( str => parseInt(str));
+
+// Une autre méthode, plus simple
+['1', '2', '3'].map(Number); // [1, 2, 3]
+// à la différence de parseInt, cela fonctionnera pour les
+// nombres décimaux ou en notation exponentielle
+['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.19', 'Array.prototype.map')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.map', 'Array.prototype.map')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.map', 'Array.prototype.map')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.map")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/of/index.html b/files/fr/web/javascript/reference/global_objects/array/of/index.html deleted file mode 100644 index 68508d936f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/of/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Array.of() -slug: Web/JavaScript/Reference/Global_Objects/Array/of -tags: - - Array - - ECMAScript 2015 - - JavaScript - - Méthode - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/of -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/of ---- -
{{JSRef}}
- -

La methode Array.of() permet de créer une nouvelle instance d'objet Array à partir d'un nombre variable d'arguments, quels que soient leur nombre ou leur type.

- -

La différence entre Array.of() et le constructeur Array se situe dans la gestion de d'arguments entiers : Array.of(7) crée un tableau avec un seul élément, 7, tandis que Array(7) produit un tableau avec 7 éléments vides (à ne pas confondre avec des éléments qui auraient explicitement la valeur undefined).

- -
Array.of(7);       // [7]
-Array.of(1, 2, 3); // [1, 2, 3]
-
-Array(7);          // un tableau avec 7 emplacements vides
-Array(1, 2, 3);    // [1, 2, 3]
-
- -

Syntaxe

- -
Array.of(element0[, element1[, ...[, elementN]]])
-
- -

Paramètres

- -
-
element0, element1, ..., elementN
-
Les éléments avec lesquels on souhaite construire le nouveau tableau.
-
- -

Valeur de retour

- -

Une nouvelle instance de {{jsxref("Array")}}.

- -

Description

- -

Cette fonction fait partie du standard ECMAScript 2015. Pour plus d'informations, voir les pages sur la proposition pour Array.of et Array.from ainsi que la page sur le fragment d'émulation pour Array.of.

- -
Array.of(7);       // [7]
-Array.of(1, 2, 3); // [1, 2, 3]
-
-Array(7);          // [ , , , , , , ]
-Array(1, 2, 3);    // [1, 2, 3]
-
- -

Exemples

- -
Array.of(1);         // [1]
-Array.of(1, 2, 3);   // [1, 2, 3]
-Array.of(undefined); // [undefined]
-
- -

Prothèse d'émulation (polyfill)

- -

Exécuter ce code avant tout autre code permettra de créer la méthode Array.of() si elle n'est pas prise en charge nativement.

- -
if (!Array.of) {
-  Array.of = function() {
-    return Array.prototype.slice.call(arguments);
-  };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.of', 'Array.of')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.of', 'Array.of')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.of")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/of/index.md b/files/fr/web/javascript/reference/global_objects/array/of/index.md new file mode 100644 index 0000000000..68508d936f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/of/index.md @@ -0,0 +1,102 @@ +--- +title: Array.of() +slug: Web/JavaScript/Reference/Global_Objects/Array/of +tags: + - Array + - ECMAScript 2015 + - JavaScript + - Méthode + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/of +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/of +--- +
{{JSRef}}
+ +

La methode Array.of() permet de créer une nouvelle instance d'objet Array à partir d'un nombre variable d'arguments, quels que soient leur nombre ou leur type.

+ +

La différence entre Array.of() et le constructeur Array se situe dans la gestion de d'arguments entiers : Array.of(7) crée un tableau avec un seul élément, 7, tandis que Array(7) produit un tableau avec 7 éléments vides (à ne pas confondre avec des éléments qui auraient explicitement la valeur undefined).

+ +
Array.of(7);       // [7]
+Array.of(1, 2, 3); // [1, 2, 3]
+
+Array(7);          // un tableau avec 7 emplacements vides
+Array(1, 2, 3);    // [1, 2, 3]
+
+ +

Syntaxe

+ +
Array.of(element0[, element1[, ...[, elementN]]])
+
+ +

Paramètres

+ +
+
element0, element1, ..., elementN
+
Les éléments avec lesquels on souhaite construire le nouveau tableau.
+
+ +

Valeur de retour

+ +

Une nouvelle instance de {{jsxref("Array")}}.

+ +

Description

+ +

Cette fonction fait partie du standard ECMAScript 2015. Pour plus d'informations, voir les pages sur la proposition pour Array.of et Array.from ainsi que la page sur le fragment d'émulation pour Array.of.

+ +
Array.of(7);       // [7]
+Array.of(1, 2, 3); // [1, 2, 3]
+
+Array(7);          // [ , , , , , , ]
+Array(1, 2, 3);    // [1, 2, 3]
+
+ +

Exemples

+ +
Array.of(1);         // [1]
+Array.of(1, 2, 3);   // [1, 2, 3]
+Array.of(undefined); // [undefined]
+
+ +

Prothèse d'émulation (polyfill)

+ +

Exécuter ce code avant tout autre code permettra de créer la méthode Array.of() si elle n'est pas prise en charge nativement.

+ +
if (!Array.of) {
+  Array.of = function() {
+    return Array.prototype.slice.call(arguments);
+  };
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.of', 'Array.of')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.of', 'Array.of')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.of")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/pop/index.html b/files/fr/web/javascript/reference/global_objects/array/pop/index.html deleted file mode 100644 index 6a5345dd88..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/pop/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Array.prototype.pop() -slug: Web/JavaScript/Reference/Global_Objects/Array/pop -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/pop -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/pop ---- -
{{JSRef}}
- -

La méthode pop() supprime le dernier élément d'un tableau et retourne cet élément. Cette méthode modifie la longueur du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-pop.html")}}
- -

Syntaxe

- -
arr.pop()
- -

Valeur de retour

- -

L'élément qui a été retiré du tableau. Si le tableau est vide, elle renvoie {{jsxref("undefined")}}.

- -

Description

- -

La méthode pop() supprime le dernier élément d'un tableau et retourne cette valeur.

- -

pop() est volontairement générique ; cette méthode peut être {{jsxref("Function.call", "appelée")}} ou {{jsxref("Function.apply", "appliquée")}} pour des objets ressemblant à des tableaux. Les objets qui ne contiennent pas une propriété length reflétant la fin d'une série de propriétés consécutives numérotées peuvent se comporter bizarrement.

- -

Si vous appelez pop() sur un tableau vide, il renverra la valeur {{jsxref("undefined")}}.

- -
-

Note : La méthode {{jsxref("Array.prototype.shift()")}} possède un comportement analogue mais retire le premier élément du tableau.

-
- -

Exemples

- -

Supprimer le dernier élément d'un tableau

- -

Le code suivant crée le tableau mesPoissons qui contient quatre éléments puis supprime le dernier élément.

- -
var mesPoissons = ["angel", "clown", "mandarin", "sturgeon"];
-
-var popped = mesPoissons.pop();
-
-console.table(mesPoissons); // angel, clown, madarin
-console.log(popped);        // sturgeon
- -

Utiliser apply() ou call() sur les objets semblables aux tableaux

- -

Le code suivant crée un objet mesPoissons semblable à un tableau, qui contient 4 propriétés indexées avec des nombres et une propriété length. On utilise la méthode {{jsxref("Function.call()")}} pour invoquer pop() sur cet objet :

- -
var mesPoissons = {0: 'angel', 1: 'clown', 2: 'mandarin', 3: 'sturgeon', length: 4};
-
-var popped = Array.prototype.pop.call(mesPoissons); // on aurait pu utiliser apply()
-console.log(mesPoissons); // {0: 'angel', 1: 'clown', 2: 'mandarin', length: 3}
-console.log(popped);      // 'sturgeon'
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.6', 'Array.prototype.pop')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.pop', 'Array.prototype.pop')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.pop', 'Array.prototype.pop')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.pop")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/pop/index.md b/files/fr/web/javascript/reference/global_objects/array/pop/index.md new file mode 100644 index 0000000000..6a5345dd88 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/pop/index.md @@ -0,0 +1,106 @@ +--- +title: Array.prototype.pop() +slug: Web/JavaScript/Reference/Global_Objects/Array/pop +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/pop +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/pop +--- +
{{JSRef}}
+ +

La méthode pop() supprime le dernier élément d'un tableau et retourne cet élément. Cette méthode modifie la longueur du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-pop.html")}}
+ +

Syntaxe

+ +
arr.pop()
+ +

Valeur de retour

+ +

L'élément qui a été retiré du tableau. Si le tableau est vide, elle renvoie {{jsxref("undefined")}}.

+ +

Description

+ +

La méthode pop() supprime le dernier élément d'un tableau et retourne cette valeur.

+ +

pop() est volontairement générique ; cette méthode peut être {{jsxref("Function.call", "appelée")}} ou {{jsxref("Function.apply", "appliquée")}} pour des objets ressemblant à des tableaux. Les objets qui ne contiennent pas une propriété length reflétant la fin d'une série de propriétés consécutives numérotées peuvent se comporter bizarrement.

+ +

Si vous appelez pop() sur un tableau vide, il renverra la valeur {{jsxref("undefined")}}.

+ +
+

Note : La méthode {{jsxref("Array.prototype.shift()")}} possède un comportement analogue mais retire le premier élément du tableau.

+
+ +

Exemples

+ +

Supprimer le dernier élément d'un tableau

+ +

Le code suivant crée le tableau mesPoissons qui contient quatre éléments puis supprime le dernier élément.

+ +
var mesPoissons = ["angel", "clown", "mandarin", "sturgeon"];
+
+var popped = mesPoissons.pop();
+
+console.table(mesPoissons); // angel, clown, madarin
+console.log(popped);        // sturgeon
+ +

Utiliser apply() ou call() sur les objets semblables aux tableaux

+ +

Le code suivant crée un objet mesPoissons semblable à un tableau, qui contient 4 propriétés indexées avec des nombres et une propriété length. On utilise la méthode {{jsxref("Function.call()")}} pour invoquer pop() sur cet objet :

+ +
var mesPoissons = {0: 'angel', 1: 'clown', 2: 'mandarin', 3: 'sturgeon', length: 4};
+
+var popped = Array.prototype.pop.call(mesPoissons); // on aurait pu utiliser apply()
+console.log(mesPoissons); // {0: 'angel', 1: 'clown', 2: 'mandarin', length: 3}
+console.log(popped);      // 'sturgeon'
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.6', 'Array.prototype.pop')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.pop', 'Array.prototype.pop')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.pop', 'Array.prototype.pop')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.pop")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/push/index.html b/files/fr/web/javascript/reference/global_objects/array/push/index.html deleted file mode 100644 index c7f18ce86b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/push/index.html +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: Array.prototype.push() -slug: Web/JavaScript/Reference/Global_Objects/Array/push -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/push -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/push ---- -
{{JSRef}}
- -

La méthode push() ajoute un ou plusieurs éléments à la fin d'un tableau et retourne la nouvelle taille du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-push.html")}}
- -

Syntaxe

- -
arr.push(élément1, ..., élémentN)
- -

Paramètres

- -
-
élément1, ...,élémentN
-
Les éléments à ajouter à la fin du tableau.
-
- -

Valeur de retour

- -

La nouvelle valeur de la propriété {{jsxref("Array.length", "length")}} de l'objet sur lequel la méthode a été appelée.

- -

Description

- -

La méthode push permet d'ajouter des valeurs à un tableau.

- -

push est une méthode générique. Cette méthode peut ainsi être utilisée avec les méthodes {{jsxref("Function.call()")}} ou {{jsxref("Function.apply()")}} sur des objets similaires aux tableaux.

- -

La méthode push se base sur la propriété length pour déterminer à partir de quel index les valeurs données doivent être insérées. Si la propriété length ne peut pas être convertie en nombre, l'index utilisé est 0. Si la propriété length n'est pas définie, elle est alors créée.

- -

Bien que push soit une méthode générique, elle ne peut pas être utilisée sur les chaînes de caractères ou sur l'objet arguments car ils sont immuables.

- -

Exemples

- -

Ajouter des éléments à un tableau

- -

Le code suivant crée un tableau sports contenant à sa création deux éléments, auxquels sont ajoutés deux nouveaux éléments. La variable total contient la nouvelle taille du tableau.

- -
var sports = ["plongée", "baseball"];
-var total = sports.push("football", "tennis");
-
-console.log(sports); // ["plongée", "baseball", "football", "tennis"]
-console.log(total);  // 4
-
- -

Fusionner deux tableaux

- -

Dans l'exemple qui suit, on utilise la méthode {{jsxref("Function.apply()")}} pour ajouter les différents éléments d'un second tableau

- -
var legumes = ['navet', 'pomme de terre'];
-var autresLegumes = ['céleri', 'radis'];
-
-// On fusionne les deux tableaux
-// Équivalent à legumes.push('céleri', 'radis');
-Array.prototype.push.apply(legumes, autresLegumes);
-
-console.log(legumes); // ['navet', 'pomme de terre', 'céleri', 'radis']
- -
-

Note : Attention à ne pas utiliser cette méthode lorsque les tableaux sont très grands car une fonction n'accepte qu'un nombre limité d'arguments. Voir {{jsxref("Function.apply","apply()")}} pour plus d'informations sur ces limites.

-
- -

Utiliser un objet comme on utiliserait un tableau

- -

Comme nous l'avons vu auparavant, push est une méthode générique et nous pouvons donc utiliser Array.prototype.push sur les objets. On notera qu'il n'est pas nécessaire de stocker un ensemble d'objets. En fait, on enregistre l'ensemble dans l'objet et on utilise call sur Array.prototype.push :

- -
var obj = {
-    length: 0,
-
-    ajoutElem: function ajoutElem (elem) {
-        // obj.length est automatiquement incrémenté
-        // quand on ajoute un élément
-        [].push.call(this, elem);
-    }
-};
-
-// Ajoutons quelques objets vides pour illustrer
-// l'exemple.
-obj.ajoutElem({});
-obj.ajoutElem({});
-console.log(obj.length);
-// → 2
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.7', 'Array.prototype.push')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.push', 'Array.prototype.push')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.push', 'Array.prototype.push')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.push")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/push/index.md b/files/fr/web/javascript/reference/global_objects/array/push/index.md new file mode 100644 index 0000000000..c7f18ce86b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/push/index.md @@ -0,0 +1,139 @@ +--- +title: Array.prototype.push() +slug: Web/JavaScript/Reference/Global_Objects/Array/push +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/push +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/push +--- +
{{JSRef}}
+ +

La méthode push() ajoute un ou plusieurs éléments à la fin d'un tableau et retourne la nouvelle taille du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-push.html")}}
+ +

Syntaxe

+ +
arr.push(élément1, ..., élémentN)
+ +

Paramètres

+ +
+
élément1, ...,élémentN
+
Les éléments à ajouter à la fin du tableau.
+
+ +

Valeur de retour

+ +

La nouvelle valeur de la propriété {{jsxref("Array.length", "length")}} de l'objet sur lequel la méthode a été appelée.

+ +

Description

+ +

La méthode push permet d'ajouter des valeurs à un tableau.

+ +

push est une méthode générique. Cette méthode peut ainsi être utilisée avec les méthodes {{jsxref("Function.call()")}} ou {{jsxref("Function.apply()")}} sur des objets similaires aux tableaux.

+ +

La méthode push se base sur la propriété length pour déterminer à partir de quel index les valeurs données doivent être insérées. Si la propriété length ne peut pas être convertie en nombre, l'index utilisé est 0. Si la propriété length n'est pas définie, elle est alors créée.

+ +

Bien que push soit une méthode générique, elle ne peut pas être utilisée sur les chaînes de caractères ou sur l'objet arguments car ils sont immuables.

+ +

Exemples

+ +

Ajouter des éléments à un tableau

+ +

Le code suivant crée un tableau sports contenant à sa création deux éléments, auxquels sont ajoutés deux nouveaux éléments. La variable total contient la nouvelle taille du tableau.

+ +
var sports = ["plongée", "baseball"];
+var total = sports.push("football", "tennis");
+
+console.log(sports); // ["plongée", "baseball", "football", "tennis"]
+console.log(total);  // 4
+
+ +

Fusionner deux tableaux

+ +

Dans l'exemple qui suit, on utilise la méthode {{jsxref("Function.apply()")}} pour ajouter les différents éléments d'un second tableau

+ +
var legumes = ['navet', 'pomme de terre'];
+var autresLegumes = ['céleri', 'radis'];
+
+// On fusionne les deux tableaux
+// Équivalent à legumes.push('céleri', 'radis');
+Array.prototype.push.apply(legumes, autresLegumes);
+
+console.log(legumes); // ['navet', 'pomme de terre', 'céleri', 'radis']
+ +
+

Note : Attention à ne pas utiliser cette méthode lorsque les tableaux sont très grands car une fonction n'accepte qu'un nombre limité d'arguments. Voir {{jsxref("Function.apply","apply()")}} pour plus d'informations sur ces limites.

+
+ +

Utiliser un objet comme on utiliserait un tableau

+ +

Comme nous l'avons vu auparavant, push est une méthode générique et nous pouvons donc utiliser Array.prototype.push sur les objets. On notera qu'il n'est pas nécessaire de stocker un ensemble d'objets. En fait, on enregistre l'ensemble dans l'objet et on utilise call sur Array.prototype.push :

+ +
var obj = {
+    length: 0,
+
+    ajoutElem: function ajoutElem (elem) {
+        // obj.length est automatiquement incrémenté
+        // quand on ajoute un élément
+        [].push.call(this, elem);
+    }
+};
+
+// Ajoutons quelques objets vides pour illustrer
+// l'exemple.
+obj.ajoutElem({});
+obj.ajoutElem({});
+console.log(obj.length);
+// → 2
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.7', 'Array.prototype.push')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.push', 'Array.prototype.push')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.push', 'Array.prototype.push')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.push")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/reduce/index.html b/files/fr/web/javascript/reference/global_objects/array/reduce/index.html deleted file mode 100644 index 6ec6af3488..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/reduce/index.html +++ /dev/null @@ -1,402 +0,0 @@ ---- -title: Array.prototype.reduce() -slug: Web/JavaScript/Reference/Global_Objects/Array/Reduce -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/Reduce -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/reduce ---- -
{{JSRef}}
- -

La méthode reduce() applique une fonction qui est un « accumulateur » et qui traite chaque valeur d'une liste (de la gauche vers la droite) afin de la réduire à une seule valeur.

- -
{{EmbedInteractiveExample("pages/js/array-reduce.html")}}
- -

Syntaxe

- -
arr.reduce(callback)
-arr.reduce(callback, valeurInitiale)
- -

Paramètres

- -
-
callback
-
La fonction à exécuter sur chaque valeur de la liste (sauf le premier si aucune valeurInitiale n'est fournie), elle prend quatre arguments en entrée : -
-
accumulateur
-
La valeur précédemment retournée par le dernier appel du callback, ou valeurInitiale, si elle est fournie (voir ci-après) (c'est la valeur « accumulée » au fur et à mesure des appels
-
valeurCourante
-
La valeur de l'élément courant actuellement manipulé dans le tableau.
-
index{{optional_inline}}
-
L'index de l'élément courant actuellement manipulé dans le tableau.
-
array{{optional_inline}}
-
Le tableau sur lequel on a appelé la méthode reduce().
-
-
-
valeurInitiale{{optional_inline}}
-
Une valeur utilisée comme premier argument lors du premier appel de la fonction callback. Si aucune valeur initiale n'est fournie, le premier élément du tableau est utilisé (et la boucle de traitement ne le parcourera pas). Si on appelle reduce() sur un tableau vide sans fournir de valeur initiale, on aura une erreur.
-
- -

Valeur de retour

- -

La valeur obtenue grâce à la fonction de réduction.

- -

Description

- -

reduce() exécute la fonction callback une fois pour chaque élément présent dans le tableau et ignore les éléments vides du tableau. La fonction callback utilise quatre arguments :

- -
    -
  1. L'accumulateur (la valeur retournée par le précédent appel de la fonction callback), ou la valeur initiale s'il sagit du premier appel ;
  2. -
  3. la valeur de l'élément courant ;
  4. -
  5. l'index de l'élément courant ;
  6. -
  7. le tableau parcouru par la méthode.
  8. -
- -

La première fois que la fonction callback est appelée, valeurInitiale et valeurCourante peuvent correspondre à un ou deux éléments. Si valeurInitiale est fournie dans l'appel de reduce(), alors accumulateur sera égale à valeurInitiale et valeurCourante sera égale à la première valeur de la liste. Si valeurInitiale n'est pas fournie, alors accumulateur sera égale à la première valeur de la liste, et valeurCourante sera alors égale à la seconde.

- -

Autrement dit, si valeurInitiale n'est pas fournie, reduce exécutera la fonction de rappel à partir de l'indice 1 et la première valeur du tableau (d'indice 0) sera utilisée pour valeurInitiale.

- -

En considérant le code suivant :

- -
[0, 1, 2, 3, 4].reduce(function(accumulateur, valeurCourante, index, array){
-  return accumulateur + valeurCourante;
-});
-
- -

La fonction callback sera appelée quatre fois, avec les arguments et les valeurs de retour de chaque appel suivant :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
accumulateurvaleurCouranteindexarrayvaleur retournée
premier appel011[0,1,2,3,4]1
deuxième appel122[0,1,2,3,4]3
troisième appel333[0,1,2,3,4]6
quatrième appel644[0,1,2,3,4]10
- -

La valeur retournée par reduce() sera alors celle du dernier appel de la callback (ici 10).

- -

Il est aussi possible d'utiliser une {{jsxref("Fonctions/Fonctions_fléchées","fonction fléchée","",1)}} au lieu d'une fonction classique. Le code suivant, par exemple, produit le même résultat que l'exemple précédent :

- -
[0, 1, 2, 3, 4].reduce(
-  (accumulateur, valeurCourante) => accumulateur + valeurCourante;
-);
- -

Si on fournit une valeur initiale comme second argument à l'appel de reduce(), le résultat sera alors le suivant :

- -
[0, 1, 2, 3, 4].reduce(function(accumulateur, valeurCourante, index, array){
-  return accumulateur + valeurCourante;
-}, 10);
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
accumulateurvaleurCouranteindexarrayvaleur retournée
premier appel1000[0,1,2,3,4]10
deuxième appel1011[0,1,2,3,4]11
troisième appel1122[0,1,2,3,4]13
quatrième appel1333[0,1,2,3,4]16
cinquième appel1644[0,1,2,3,4]20
- -

Ici, la valeur renvoyée par reduce() serait 20.

- -

Exemples

- -

Additionner toutes les valeurs d'un tableau

- -
var total = [0, 1, 2, 3].reduce((a, b)=> a + b,0);
-// total == 6
-
- -

Additionner les valeurs d'une propriétés pour un tableau d'objets

- -

Pour additionner les valeurs d'une propriété donnée des objets d'un tableau, il sera nécessaire de fournir une valeur initiale afin que tous les éléments soient parcourus :

- -
var valeurInitiale = 0;
-var somme = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulateur, valeurCourante) {
-    return accumulateur + valeurCourante.x;
-}, valeurInitiale);
-
-console.log(somme); // affiche 6 dans la console
-
- -

On peut également écrire une version plus concise avec les fonctions fléchées :

- -
var valeurInitiale = 0;
-var somme = [{x: 1}, {x:2}, {x:3}].reduce(
-    (accumulateur, valeurCourante) => accumulateur + valeurCourante.x
-    , valeurInitiale
-);
-
-console.log(somme); // affiche 6 dans la console
- -

Aplatir une liste de listes

- -
var applati = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
-    return a.concat(b);
-});
-// applati vaut [0, 1, 2, 3, 4, 5]
-
- -

Utiliser le paramètre valeurInitiale

- -
var amis = [
-  { "nom": "Quentin", "livres": ["City Hall", "Harry Potter"]},
-  { "nom": "Alice", "livres": ["L'Avare", "Les Fleurs du Mal"]}
-]
-
-var tousLivres = amis.reduce(function(prev, curr) {
-  return [...prev, ...curr.livres];
-}, ["Perceval"]);
-
-// tousLivres = ["Perceval", "City Hall", "Harry Potter",
-//               "L'Avare", "Les Fleurs du Mal"]
- -

Exécuter une suite de promesses stockées dans un tableau

- -
/**
- * Exécuter un enchaînement de promesses à partir d'un tableau
- *
- * @param {array} arr - un tableau de promesses
- * @return {Object} un objet Promise
- */
-function runPromiseInSequense(arr) {
-  return arr.reduce((promiseChain, currentPromise) => {
-    return promiseChain.then((chainedResult) => {
-      return currentPromise(chainedResult)
-        .then((res) => res)
-    })
-  }, Promise.resolve());
-}
-
-// promise function 1
-function p1() {
-  return new Promise((resolve, reject) => {
-    resolve(5);
-  });
-}
-
-// promise function 2
-function p2(a) {
-  return new Promise((resolve, reject) => {
-    resolve(a * 2);
-  });
-}
-
-// promise function 3
-function p3(a) {
-  return new Promise((resolve, reject) => {
-    resolve(a * 3);
-  });
-}
-
-const promiseArr = [p1, p2, p3];
-runPromiseInSequense(promiseArr)
-  .then((res) => {
-    console.log(res);   // 30
-  });
-
- -

Regrouper des objets selon une propriété

- -
var personnes = [
-  { nom: "Alice", age: 21 },
-  { nom: "Bob", age: 20 },
-  { nom: "Charlie", age: 20 }
-];
-
-function groupBy(tableauObjets, propriete){
-  return tableauObjets.reduce(function (acc, obj) {
-    var cle = obj[propriete];
-    if(!acc[cle]){
-      acc[cle] = [];
-    }
-    acc[cle].push(obj);
-    return acc;
-  }, {});
-}
-
-var personnesParAge = groupBy(personnes, "age");
-// personnesParAge aura la valeur :
-// {
-//    20: [
-//       { nom: "Bob", age: 20 },
-//       { nom: "Charlie", age: 20 }
-//    ],
-//    21: [{ nom: "Alice", age: 21 }]
-// }
-
- -

Composition de fonctions

- -
// Les briques de base que nous allons composer
-const double = x => x + x;
-const triple = x => 3 * x;
-const quadruple = x => 4 * x;
-
-// Une fonction qui permet d'appliquer une composition
-const pipe = (...functions) => input => functions.reduce(
-    (acc, fn) => fn(acc),
-    input
-);
-
-// On crée des fonctions pour multiplier par un facteur donné
-const multiply6 = pipe(double, triple);
-const multiply9 = pipe(triple, triple);
-const multiply16 = pipe(quadruple, quadruple);
-const multiply24 = pipe(double, triple, quadruple);
-
-// Utilisation
-multiply6(6); // 36
-multiply9(9); // 81
-multiply16(16); // 256
-multiply24(10); // 240
-
- -

Retirer les doublons d'un tableau

- -

Avec ECMAScript 2015 (ES6)

- -
let tableauAvecDoublons = [1, 2, 3, 1, 4, 5, 4, 6];
-let tableauSansDoublon = Array.from(new Set(tableauAvecDoublons));
-console.table(tableauSansDoublon); // [1, 2, 3, 4, 5, 6]
- -

Avec reduce()

- -
var tableauAvecDoublons = [1, 2, 3, 1, 4, 5, 4, 6];
-var tableauSansDoublon = tableauAvecDoublon.reduce(function (acc, valCourante) {
-  if(acc.indexOf(valCourante) === -1) {
-    acc.push(valCourante);
-  }
-  return acc
-}, []);
-
-console.log(tableauSansDoublon); // [1, 2, 3, 4, 5, 6]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.21', 'Array.prototype.reduce()')}}{{Spec2('ES5.1')}}Définition initiale.
- Implémenté dans JavaScript 1.8
{{SpecName('ES6', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.reduce")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/reduce/index.md b/files/fr/web/javascript/reference/global_objects/array/reduce/index.md new file mode 100644 index 0000000000..6ec6af3488 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/reduce/index.md @@ -0,0 +1,402 @@ +--- +title: Array.prototype.reduce() +slug: Web/JavaScript/Reference/Global_Objects/Array/Reduce +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/Reduce +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/reduce +--- +
{{JSRef}}
+ +

La méthode reduce() applique une fonction qui est un « accumulateur » et qui traite chaque valeur d'une liste (de la gauche vers la droite) afin de la réduire à une seule valeur.

+ +
{{EmbedInteractiveExample("pages/js/array-reduce.html")}}
+ +

Syntaxe

+ +
arr.reduce(callback)
+arr.reduce(callback, valeurInitiale)
+ +

Paramètres

+ +
+
callback
+
La fonction à exécuter sur chaque valeur de la liste (sauf le premier si aucune valeurInitiale n'est fournie), elle prend quatre arguments en entrée : +
+
accumulateur
+
La valeur précédemment retournée par le dernier appel du callback, ou valeurInitiale, si elle est fournie (voir ci-après) (c'est la valeur « accumulée » au fur et à mesure des appels
+
valeurCourante
+
La valeur de l'élément courant actuellement manipulé dans le tableau.
+
index{{optional_inline}}
+
L'index de l'élément courant actuellement manipulé dans le tableau.
+
array{{optional_inline}}
+
Le tableau sur lequel on a appelé la méthode reduce().
+
+
+
valeurInitiale{{optional_inline}}
+
Une valeur utilisée comme premier argument lors du premier appel de la fonction callback. Si aucune valeur initiale n'est fournie, le premier élément du tableau est utilisé (et la boucle de traitement ne le parcourera pas). Si on appelle reduce() sur un tableau vide sans fournir de valeur initiale, on aura une erreur.
+
+ +

Valeur de retour

+ +

La valeur obtenue grâce à la fonction de réduction.

+ +

Description

+ +

reduce() exécute la fonction callback une fois pour chaque élément présent dans le tableau et ignore les éléments vides du tableau. La fonction callback utilise quatre arguments :

+ +
    +
  1. L'accumulateur (la valeur retournée par le précédent appel de la fonction callback), ou la valeur initiale s'il sagit du premier appel ;
  2. +
  3. la valeur de l'élément courant ;
  4. +
  5. l'index de l'élément courant ;
  6. +
  7. le tableau parcouru par la méthode.
  8. +
+ +

La première fois que la fonction callback est appelée, valeurInitiale et valeurCourante peuvent correspondre à un ou deux éléments. Si valeurInitiale est fournie dans l'appel de reduce(), alors accumulateur sera égale à valeurInitiale et valeurCourante sera égale à la première valeur de la liste. Si valeurInitiale n'est pas fournie, alors accumulateur sera égale à la première valeur de la liste, et valeurCourante sera alors égale à la seconde.

+ +

Autrement dit, si valeurInitiale n'est pas fournie, reduce exécutera la fonction de rappel à partir de l'indice 1 et la première valeur du tableau (d'indice 0) sera utilisée pour valeurInitiale.

+ +

En considérant le code suivant :

+ +
[0, 1, 2, 3, 4].reduce(function(accumulateur, valeurCourante, index, array){
+  return accumulateur + valeurCourante;
+});
+
+ +

La fonction callback sera appelée quatre fois, avec les arguments et les valeurs de retour de chaque appel suivant :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accumulateurvaleurCouranteindexarrayvaleur retournée
premier appel011[0,1,2,3,4]1
deuxième appel122[0,1,2,3,4]3
troisième appel333[0,1,2,3,4]6
quatrième appel644[0,1,2,3,4]10
+ +

La valeur retournée par reduce() sera alors celle du dernier appel de la callback (ici 10).

+ +

Il est aussi possible d'utiliser une {{jsxref("Fonctions/Fonctions_fléchées","fonction fléchée","",1)}} au lieu d'une fonction classique. Le code suivant, par exemple, produit le même résultat que l'exemple précédent :

+ +
[0, 1, 2, 3, 4].reduce(
+  (accumulateur, valeurCourante) => accumulateur + valeurCourante;
+);
+ +

Si on fournit une valeur initiale comme second argument à l'appel de reduce(), le résultat sera alors le suivant :

+ +
[0, 1, 2, 3, 4].reduce(function(accumulateur, valeurCourante, index, array){
+  return accumulateur + valeurCourante;
+}, 10);
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accumulateurvaleurCouranteindexarrayvaleur retournée
premier appel1000[0,1,2,3,4]10
deuxième appel1011[0,1,2,3,4]11
troisième appel1122[0,1,2,3,4]13
quatrième appel1333[0,1,2,3,4]16
cinquième appel1644[0,1,2,3,4]20
+ +

Ici, la valeur renvoyée par reduce() serait 20.

+ +

Exemples

+ +

Additionner toutes les valeurs d'un tableau

+ +
var total = [0, 1, 2, 3].reduce((a, b)=> a + b,0);
+// total == 6
+
+ +

Additionner les valeurs d'une propriétés pour un tableau d'objets

+ +

Pour additionner les valeurs d'une propriété donnée des objets d'un tableau, il sera nécessaire de fournir une valeur initiale afin que tous les éléments soient parcourus :

+ +
var valeurInitiale = 0;
+var somme = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulateur, valeurCourante) {
+    return accumulateur + valeurCourante.x;
+}, valeurInitiale);
+
+console.log(somme); // affiche 6 dans la console
+
+ +

On peut également écrire une version plus concise avec les fonctions fléchées :

+ +
var valeurInitiale = 0;
+var somme = [{x: 1}, {x:2}, {x:3}].reduce(
+    (accumulateur, valeurCourante) => accumulateur + valeurCourante.x
+    , valeurInitiale
+);
+
+console.log(somme); // affiche 6 dans la console
+ +

Aplatir une liste de listes

+ +
var applati = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
+    return a.concat(b);
+});
+// applati vaut [0, 1, 2, 3, 4, 5]
+
+ +

Utiliser le paramètre valeurInitiale

+ +
var amis = [
+  { "nom": "Quentin", "livres": ["City Hall", "Harry Potter"]},
+  { "nom": "Alice", "livres": ["L'Avare", "Les Fleurs du Mal"]}
+]
+
+var tousLivres = amis.reduce(function(prev, curr) {
+  return [...prev, ...curr.livres];
+}, ["Perceval"]);
+
+// tousLivres = ["Perceval", "City Hall", "Harry Potter",
+//               "L'Avare", "Les Fleurs du Mal"]
+ +

Exécuter une suite de promesses stockées dans un tableau

+ +
/**
+ * Exécuter un enchaînement de promesses à partir d'un tableau
+ *
+ * @param {array} arr - un tableau de promesses
+ * @return {Object} un objet Promise
+ */
+function runPromiseInSequense(arr) {
+  return arr.reduce((promiseChain, currentPromise) => {
+    return promiseChain.then((chainedResult) => {
+      return currentPromise(chainedResult)
+        .then((res) => res)
+    })
+  }, Promise.resolve());
+}
+
+// promise function 1
+function p1() {
+  return new Promise((resolve, reject) => {
+    resolve(5);
+  });
+}
+
+// promise function 2
+function p2(a) {
+  return new Promise((resolve, reject) => {
+    resolve(a * 2);
+  });
+}
+
+// promise function 3
+function p3(a) {
+  return new Promise((resolve, reject) => {
+    resolve(a * 3);
+  });
+}
+
+const promiseArr = [p1, p2, p3];
+runPromiseInSequense(promiseArr)
+  .then((res) => {
+    console.log(res);   // 30
+  });
+
+ +

Regrouper des objets selon une propriété

+ +
var personnes = [
+  { nom: "Alice", age: 21 },
+  { nom: "Bob", age: 20 },
+  { nom: "Charlie", age: 20 }
+];
+
+function groupBy(tableauObjets, propriete){
+  return tableauObjets.reduce(function (acc, obj) {
+    var cle = obj[propriete];
+    if(!acc[cle]){
+      acc[cle] = [];
+    }
+    acc[cle].push(obj);
+    return acc;
+  }, {});
+}
+
+var personnesParAge = groupBy(personnes, "age");
+// personnesParAge aura la valeur :
+// {
+//    20: [
+//       { nom: "Bob", age: 20 },
+//       { nom: "Charlie", age: 20 }
+//    ],
+//    21: [{ nom: "Alice", age: 21 }]
+// }
+
+ +

Composition de fonctions

+ +
// Les briques de base que nous allons composer
+const double = x => x + x;
+const triple = x => 3 * x;
+const quadruple = x => 4 * x;
+
+// Une fonction qui permet d'appliquer une composition
+const pipe = (...functions) => input => functions.reduce(
+    (acc, fn) => fn(acc),
+    input
+);
+
+// On crée des fonctions pour multiplier par un facteur donné
+const multiply6 = pipe(double, triple);
+const multiply9 = pipe(triple, triple);
+const multiply16 = pipe(quadruple, quadruple);
+const multiply24 = pipe(double, triple, quadruple);
+
+// Utilisation
+multiply6(6); // 36
+multiply9(9); // 81
+multiply16(16); // 256
+multiply24(10); // 240
+
+ +

Retirer les doublons d'un tableau

+ +

Avec ECMAScript 2015 (ES6)

+ +
let tableauAvecDoublons = [1, 2, 3, 1, 4, 5, 4, 6];
+let tableauSansDoublon = Array.from(new Set(tableauAvecDoublons));
+console.table(tableauSansDoublon); // [1, 2, 3, 4, 5, 6]
+ +

Avec reduce()

+ +
var tableauAvecDoublons = [1, 2, 3, 1, 4, 5, 4, 6];
+var tableauSansDoublon = tableauAvecDoublon.reduce(function (acc, valCourante) {
+  if(acc.indexOf(valCourante) === -1) {
+    acc.push(valCourante);
+  }
+  return acc
+}, []);
+
+console.log(tableauSansDoublon); // [1, 2, 3, 4, 5, 6]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.21', 'Array.prototype.reduce()')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implémenté dans JavaScript 1.8
{{SpecName('ES6', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.reduce")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/reduceright/index.html b/files/fr/web/javascript/reference/global_objects/array/reduceright/index.html deleted file mode 100644 index 63222a2191..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/reduceright/index.html +++ /dev/null @@ -1,279 +0,0 @@ ---- -title: Array.prototype.reduceRight() -slug: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/reduceRight ---- -
{{JSRef}}
- -

La méthode reduceRight() applique une fonction sur un accumulateur et chaque valeur d'un tableau (de la droite vers la gauche) de sorte à réduire le tableau en une seule valeur.

- -
{{EmbedInteractiveExample("pages/js/array-reduce-right.html")}}
- - - -

Voir également {{jsxref("Array.prototype.reduce()")}} pour une méthode qui réduit de gauche à droite.

- -

Syntaxe

- -
arr.reduceRight(callback[, valeurInitiale])
- -

Paramètres

- -
-
callback
-
La fonction à éxécuter sur chaque valeur de la liste. Elle utilise quatres arguments : -
-
accumulator
-
La valeur précédemment retournée par le dernier appel de la fonction callback, ou valeurInitial si elle est fournie. (Voir ci-après.)
-
valeurCourante
-
La valeur de l'élément courant dans le tableau.
-
index
-
L'index de l'élément du tableau actuellement manipulé.
-
array
-
Le tableau sur lequel reduceRight() est appelée.
-
-
-
valeurInitiale {{optional_inline}}
-
C'est l'objet à utiliser comme accumulateur/premier argument lors du premier appel de la fonction callback. Si aucune valeur n'est fournie, c'est le dernier élément du tableau qui sera utilisé. Si on appelle reduce() ou reduceRight() sur un tableau vide sans fournir de valeur initiale, on aura une exception {{jsxref("TypeError")}}.
-
- -

Valeur de retour

- -

La valeur obtenue grâce à la fonction de réduction.

- -

Description

- -

reduceRight exécute la fonction callback une fois pour chaque élément présent dans le tableau, les éléments vides sont ignorés. La fonction callback utilise quatre arguments : la valeur initiale (ou la valeur retournée par le précédent appel de la fonction callback), la valeur de l'élément courant, l'index de l'élément courant, et le tableau qui est parcouru.

- -

L'usage de reduceRight avec définition d'un callback devrait ressembler à ceci :

- -
array.reduceRight(function(accumulator, valeurCourante, index, array) {
-    // ...
-});
- -

La première fois que la fonction de callback est appelée, accumulator et valeurCourante peuvent correspondre à un ou deux éléments. Si valeurInitiale est fournie lors de l'appel à reduceRight, alors accumulator sera égale à valeurInitiale et valeurCourante sera égale à la dernière valeur de la liste. Si valeurInitiale n'est pas fournie, alors accumulator sera égale à la dernière valeur de la liste, et valeurCourante sera alors égale à l'avant-dernière valeur du tableau.

- -

Si on utilise la méthode reduceRight de la façon suivante :

- -
[0, 1, 2, 3, 4].reduceRight(function(accumulator, valeurCourante, index, array) {
-    return accumulator + valeurCourante;
-});
-
- -

La fonction callback sera appelée quatre fois, avec les arguments et les valeurs de retour de chaque appel suivant :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
callbackaccumulatorvaleurCouranteindexarrayValeur renvoyée
premier appel433[0,1,2,3,4]7
second appel722[0,1,2,3,4]9
troisième appel911[0,1,2,3,4]10
quatrième appel1000[0,1,2,3,4]10
- -

La valeur retournée par reduceRight sera alors celle du dernier appel de la fonction callback (10).

- -

Si vous fournissez une valeur initiale comme second argument à l'appel de reduceRight, le résultat sera alors le suivant :

- -
[0, 1, 2, 3, 4].reduceRight(function(accumulator, valeurCourante, index, array) {
-    return accumulator + valeurCourante;
-}, 10);
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
accumulatorvaleurCouranteindexarrayValeur renvoyée
premier appel1044[0,1,2,3,4]14
second appel1433[0,1,2,3,4]17
troisième appel1722[0,1,2,3,4]19
quatrième appel1911[0,1,2,3,4]20
cinquième appel2000[0,1,2,3,4]20
- -

La valeur renvoyée par reduceRight sera ici 20.

- -

Exemples

- -

Additionner toutes les valeurs d'une liste

- -
var total = [0, 1, 2, 3].reduceRight(function(a, b) {
-    return a + b;
-});
-// total == 6
-
- -

Aplatir une liste de listes

- -
var aplati = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
-    return a.concat(b);
-}, []);
-// aplati [4, 5, 2, 3, 0, 1]
-
- -

Différence entre reduce et reduceRight

- -
var a = ['1', '2', '3', '4','5']
-var gauche = a.reduce(function(prev, cur) {
-  return prev + cur;
-});
-
-var droite = a.reduceRight(function(prev, cur) {
-  return prev + cur;
-});
-
-console.log(gauche); // "12345"
-console.log(droite); // "54321"
- -

Composition de fonctions à l'aide de reduce

- -

La composition de fonctions consiste en l'enchaînement de n fonctions l'une après l'autre (où les appels sont généralement exécutés de droite à gauche.

- -
/**
- *
- * h(x) = f(g(x))
- *
- * https://fr.wikipedia.org/wiki/Composition_de_fonctions
- */
-
-const compose = (...args) => (value) => args.reduceRight((acc, fn) => fn(acc), value)
-
-// On incrémente un nombre passé en argument
-const inc = (n) => n + 1
-
-// On double la valeur passée en argument
-const double = (n) => n * 2
-
-// On compose double(inc(x))
-compose(double, inc)(2) // 6
-
-// On compose inc(double(x))
-compose(inc, double)(2) // 5
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.22', 'Array.prototype.reduceRight')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.
{{SpecName('ES6', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.reduceRight")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/reduceright/index.md b/files/fr/web/javascript/reference/global_objects/array/reduceright/index.md new file mode 100644 index 0000000000..63222a2191 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/reduceright/index.md @@ -0,0 +1,279 @@ +--- +title: Array.prototype.reduceRight() +slug: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/reduceRight +--- +
{{JSRef}}
+ +

La méthode reduceRight() applique une fonction sur un accumulateur et chaque valeur d'un tableau (de la droite vers la gauche) de sorte à réduire le tableau en une seule valeur.

+ +
{{EmbedInteractiveExample("pages/js/array-reduce-right.html")}}
+ + + +

Voir également {{jsxref("Array.prototype.reduce()")}} pour une méthode qui réduit de gauche à droite.

+ +

Syntaxe

+ +
arr.reduceRight(callback[, valeurInitiale])
+ +

Paramètres

+ +
+
callback
+
La fonction à éxécuter sur chaque valeur de la liste. Elle utilise quatres arguments : +
+
accumulator
+
La valeur précédemment retournée par le dernier appel de la fonction callback, ou valeurInitial si elle est fournie. (Voir ci-après.)
+
valeurCourante
+
La valeur de l'élément courant dans le tableau.
+
index
+
L'index de l'élément du tableau actuellement manipulé.
+
array
+
Le tableau sur lequel reduceRight() est appelée.
+
+
+
valeurInitiale {{optional_inline}}
+
C'est l'objet à utiliser comme accumulateur/premier argument lors du premier appel de la fonction callback. Si aucune valeur n'est fournie, c'est le dernier élément du tableau qui sera utilisé. Si on appelle reduce() ou reduceRight() sur un tableau vide sans fournir de valeur initiale, on aura une exception {{jsxref("TypeError")}}.
+
+ +

Valeur de retour

+ +

La valeur obtenue grâce à la fonction de réduction.

+ +

Description

+ +

reduceRight exécute la fonction callback une fois pour chaque élément présent dans le tableau, les éléments vides sont ignorés. La fonction callback utilise quatre arguments : la valeur initiale (ou la valeur retournée par le précédent appel de la fonction callback), la valeur de l'élément courant, l'index de l'élément courant, et le tableau qui est parcouru.

+ +

L'usage de reduceRight avec définition d'un callback devrait ressembler à ceci :

+ +
array.reduceRight(function(accumulator, valeurCourante, index, array) {
+    // ...
+});
+ +

La première fois que la fonction de callback est appelée, accumulator et valeurCourante peuvent correspondre à un ou deux éléments. Si valeurInitiale est fournie lors de l'appel à reduceRight, alors accumulator sera égale à valeurInitiale et valeurCourante sera égale à la dernière valeur de la liste. Si valeurInitiale n'est pas fournie, alors accumulator sera égale à la dernière valeur de la liste, et valeurCourante sera alors égale à l'avant-dernière valeur du tableau.

+ +

Si on utilise la méthode reduceRight de la façon suivante :

+ +
[0, 1, 2, 3, 4].reduceRight(function(accumulator, valeurCourante, index, array) {
+    return accumulator + valeurCourante;
+});
+
+ +

La fonction callback sera appelée quatre fois, avec les arguments et les valeurs de retour de chaque appel suivant :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
callbackaccumulatorvaleurCouranteindexarrayValeur renvoyée
premier appel433[0,1,2,3,4]7
second appel722[0,1,2,3,4]9
troisième appel911[0,1,2,3,4]10
quatrième appel1000[0,1,2,3,4]10
+ +

La valeur retournée par reduceRight sera alors celle du dernier appel de la fonction callback (10).

+ +

Si vous fournissez une valeur initiale comme second argument à l'appel de reduceRight, le résultat sera alors le suivant :

+ +
[0, 1, 2, 3, 4].reduceRight(function(accumulator, valeurCourante, index, array) {
+    return accumulator + valeurCourante;
+}, 10);
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accumulatorvaleurCouranteindexarrayValeur renvoyée
premier appel1044[0,1,2,3,4]14
second appel1433[0,1,2,3,4]17
troisième appel1722[0,1,2,3,4]19
quatrième appel1911[0,1,2,3,4]20
cinquième appel2000[0,1,2,3,4]20
+ +

La valeur renvoyée par reduceRight sera ici 20.

+ +

Exemples

+ +

Additionner toutes les valeurs d'une liste

+ +
var total = [0, 1, 2, 3].reduceRight(function(a, b) {
+    return a + b;
+});
+// total == 6
+
+ +

Aplatir une liste de listes

+ +
var aplati = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
+    return a.concat(b);
+}, []);
+// aplati [4, 5, 2, 3, 0, 1]
+
+ +

Différence entre reduce et reduceRight

+ +
var a = ['1', '2', '3', '4','5']
+var gauche = a.reduce(function(prev, cur) {
+  return prev + cur;
+});
+
+var droite = a.reduceRight(function(prev, cur) {
+  return prev + cur;
+});
+
+console.log(gauche); // "12345"
+console.log(droite); // "54321"
+ +

Composition de fonctions à l'aide de reduce

+ +

La composition de fonctions consiste en l'enchaînement de n fonctions l'une après l'autre (où les appels sont généralement exécutés de droite à gauche.

+ +
/**
+ *
+ * h(x) = f(g(x))
+ *
+ * https://fr.wikipedia.org/wiki/Composition_de_fonctions
+ */
+
+const compose = (...args) => (value) => args.reduceRight((acc, fn) => fn(acc), value)
+
+// On incrémente un nombre passé en argument
+const inc = (n) => n + 1
+
+// On double la valeur passée en argument
+const double = (n) => n * 2
+
+// On compose double(inc(x))
+compose(double, inc)(2) // 6
+
+// On compose inc(double(x))
+compose(inc, double)(2) // 5
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.22', 'Array.prototype.reduceRight')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.
{{SpecName('ES6', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.reduceRight")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/reverse/index.html b/files/fr/web/javascript/reference/global_objects/array/reverse/index.html deleted file mode 100644 index cfd6d0029a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/reverse/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Array.prototype.reverse() -slug: Web/JavaScript/Reference/Global_Objects/Array/reverse -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/reverse -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/reverse ---- -
{{JSRef}}
- -

La méthode reverse() transpose les éléments d'un tableau : le premier élément devient le dernier et le dernier devient le premier et ainsi de suite.

- -
{{EmbedInteractiveExample("pages/js/array-reverse.html")}}
- -

Syntaxe

- -
arr.reverse()
- -

Valeur de retour

- -

Le tableau inversé.

- -

Description

- -

La méthode reverse() permet d'inverser l'ordre des éléments du tableau. La méthode modifie le tableau courant et renvoie une référence à ce tableau.

- -

Cette méthode est intentionnellement générique et peut être appelée (via {{jsxref("Function.call()")}}) ou appliquée (via {{jsxref("Function.apply()")}}) sur des objets semblables à des tableaux. Les objets qui ne contiennent pas de propriété length qui soit cohérente avec leurs propriétés indexées sur des nombres ne seront pas traités par reverse().

- -

Exemples

- -

Inverser l'ordre des éléments d'un tableau

- -

L'exemple qui suit crée un tableau monArray, qui contient trois éléments, puis inverse celui-ci.

- -
var monArray = ["un", "deux", "trois"];
-monArray.reverse();
-
-console.log(monArray) // ["trois", "deux", "un"]
-
- -

Inverser l'ordre des éléments d'un objet semblable à un tableau

- -

Dans l'exemple suivant, on crée un objet semblable à un tableau a qui contient trois éléments et une propriété length. On appelle ensuite reverse() grâce à call() sur cet objet pour inverser ses éléments :

- -
const a = {0: 1, 1: 2, 2: 3, length: 3};
-
-console.log(a); // {0: 1, 1: 2, 2: 3, length: 3}
-
-Array.prototype.reverse.call(a); // On aurait pu utiliser apply() également
-
-console.log(a); // {0: 3, 1: 2, 2 : 1, length: 3}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.8', 'Array.prototype.reverse')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.reverse")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/reverse/index.md b/files/fr/web/javascript/reference/global_objects/array/reverse/index.md new file mode 100644 index 0000000000..cfd6d0029a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/reverse/index.md @@ -0,0 +1,100 @@ +--- +title: Array.prototype.reverse() +slug: Web/JavaScript/Reference/Global_Objects/Array/reverse +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/reverse +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/reverse +--- +
{{JSRef}}
+ +

La méthode reverse() transpose les éléments d'un tableau : le premier élément devient le dernier et le dernier devient le premier et ainsi de suite.

+ +
{{EmbedInteractiveExample("pages/js/array-reverse.html")}}
+ +

Syntaxe

+ +
arr.reverse()
+ +

Valeur de retour

+ +

Le tableau inversé.

+ +

Description

+ +

La méthode reverse() permet d'inverser l'ordre des éléments du tableau. La méthode modifie le tableau courant et renvoie une référence à ce tableau.

+ +

Cette méthode est intentionnellement générique et peut être appelée (via {{jsxref("Function.call()")}}) ou appliquée (via {{jsxref("Function.apply()")}}) sur des objets semblables à des tableaux. Les objets qui ne contiennent pas de propriété length qui soit cohérente avec leurs propriétés indexées sur des nombres ne seront pas traités par reverse().

+ +

Exemples

+ +

Inverser l'ordre des éléments d'un tableau

+ +

L'exemple qui suit crée un tableau monArray, qui contient trois éléments, puis inverse celui-ci.

+ +
var monArray = ["un", "deux", "trois"];
+monArray.reverse();
+
+console.log(monArray) // ["trois", "deux", "un"]
+
+ +

Inverser l'ordre des éléments d'un objet semblable à un tableau

+ +

Dans l'exemple suivant, on crée un objet semblable à un tableau a qui contient trois éléments et une propriété length. On appelle ensuite reverse() grâce à call() sur cet objet pour inverser ses éléments :

+ +
const a = {0: 1, 1: 2, 2: 3, length: 3};
+
+console.log(a); // {0: 1, 1: 2, 2: 3, length: 3}
+
+Array.prototype.reverse.call(a); // On aurait pu utiliser apply() également
+
+console.log(a); // {0: 3, 1: 2, 2 : 1, length: 3}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.8', 'Array.prototype.reverse')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.reverse")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/shift/index.html b/files/fr/web/javascript/reference/global_objects/array/shift/index.html deleted file mode 100644 index aa853937b2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/shift/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Array.prototype.shift() -slug: Web/JavaScript/Reference/Global_Objects/Array/shift -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/shift -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/shift ---- -
{{JSRef}}
- -

La méthode shift() permet de retirer le premier élément d'un tableau et de renvoyer cet élément. Cette méthode modifie la longueur du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-shift.html")}}
- -

Syntaxe

- -
arr.shift()
- -

Valeur de retour

- -

L'élément retiré du tableau ou {{jsxref("undefined")}} si le tableau est vide.

- -

Description

- -

La méthode shift retire l'élément situé à l'index zéro et décrémente l'index des éléments suivant avant de retourner l'élément supprimé. Si la propriété {{jsxref("Array.length", "length")}} vaut 0, {{jsxref("undefined")}} est retourné.

- -

Cette méthode est générique et peut être {{jsxref("Function.call", "appelée","",1)}} ou {{jsxref("Function.apply", "appliquée","",1)}} sur des objets similaires à des tableaux. 

- -

Cette méthode n'est pas exploitable pour les objets dont la propriété length ne reflète pas la taille du contenu, ou pour lesquels la propriété length n'est pas définie.

- -
-

Note : La méthode {{jsxref("Array.prototype.pop()")}} possède un comportement similaire mais retire le dernier élément du tableau (et non le premier).

-
- -

Exemples

- -

Supprimer un élément d'un tableau

- -

Le code suivant affiche le tableau mesPoissons avant et après avoir enlevé le premier élément. Il affiche aussi l'élément supprimé :

- -
var mesPoissons = ["ange", "clown", "mandarin", "chirurgien"];
-
-console.log("mesPoissons avant : " + JSON.stringify(mesPoissons));
-// mesPoissons avant : ["ange","clown","mandarin","chirurgien"]
-
-var premierÉlément = mesPoissons.shift();
-
-console.log("mesPoissons après :", mesPoissons);
-// mesPoissons après : ["clown", "mandarin", "chirurgien"]
-
-console.log("Cet élément a été enlevé :", premierÉlément);
-// "Cet élément a été enlevé : ange"
-
- -

Utiliser shift() dans une boucle while

- -

La méthode shift() peut être utilisée dans une boucle while. Dans l'exemple suivant, chaque itération de la boucle retire un élément du tableau et l'affiche dans la console, jusqu'à ce que ce dernier soit vide.

- -
var noms = ["André", "Édouard", "Paul", "Christophe", "Jean"];
-while ( (i = noms.shift()) !== undefined ) {
-  console.log(i);
-}
-// André, Édouard, Paul, Christophe, Jean
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.9', 'Array.prototype.shift')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.shift', 'Array.prototype.shift')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.shift', 'Array.prototype.shift')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.shift")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/shift/index.md b/files/fr/web/javascript/reference/global_objects/array/shift/index.md new file mode 100644 index 0000000000..aa853937b2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/shift/index.md @@ -0,0 +1,113 @@ +--- +title: Array.prototype.shift() +slug: Web/JavaScript/Reference/Global_Objects/Array/shift +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/shift +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/shift +--- +
{{JSRef}}
+ +

La méthode shift() permet de retirer le premier élément d'un tableau et de renvoyer cet élément. Cette méthode modifie la longueur du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-shift.html")}}
+ +

Syntaxe

+ +
arr.shift()
+ +

Valeur de retour

+ +

L'élément retiré du tableau ou {{jsxref("undefined")}} si le tableau est vide.

+ +

Description

+ +

La méthode shift retire l'élément situé à l'index zéro et décrémente l'index des éléments suivant avant de retourner l'élément supprimé. Si la propriété {{jsxref("Array.length", "length")}} vaut 0, {{jsxref("undefined")}} est retourné.

+ +

Cette méthode est générique et peut être {{jsxref("Function.call", "appelée","",1)}} ou {{jsxref("Function.apply", "appliquée","",1)}} sur des objets similaires à des tableaux. 

+ +

Cette méthode n'est pas exploitable pour les objets dont la propriété length ne reflète pas la taille du contenu, ou pour lesquels la propriété length n'est pas définie.

+ +
+

Note : La méthode {{jsxref("Array.prototype.pop()")}} possède un comportement similaire mais retire le dernier élément du tableau (et non le premier).

+
+ +

Exemples

+ +

Supprimer un élément d'un tableau

+ +

Le code suivant affiche le tableau mesPoissons avant et après avoir enlevé le premier élément. Il affiche aussi l'élément supprimé :

+ +
var mesPoissons = ["ange", "clown", "mandarin", "chirurgien"];
+
+console.log("mesPoissons avant : " + JSON.stringify(mesPoissons));
+// mesPoissons avant : ["ange","clown","mandarin","chirurgien"]
+
+var premierÉlément = mesPoissons.shift();
+
+console.log("mesPoissons après :", mesPoissons);
+// mesPoissons après : ["clown", "mandarin", "chirurgien"]
+
+console.log("Cet élément a été enlevé :", premierÉlément);
+// "Cet élément a été enlevé : ange"
+
+ +

Utiliser shift() dans une boucle while

+ +

La méthode shift() peut être utilisée dans une boucle while. Dans l'exemple suivant, chaque itération de la boucle retire un élément du tableau et l'affiche dans la console, jusqu'à ce que ce dernier soit vide.

+ +
var noms = ["André", "Édouard", "Paul", "Christophe", "Jean"];
+while ( (i = noms.shift()) !== undefined ) {
+  console.log(i);
+}
+// André, Édouard, Paul, Christophe, Jean
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.9', 'Array.prototype.shift')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.shift', 'Array.prototype.shift')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.shift', 'Array.prototype.shift')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.shift")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/slice/index.html b/files/fr/web/javascript/reference/global_objects/array/slice/index.html deleted file mode 100644 index 988565123b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/slice/index.html +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Array.prototype.slice() -slug: Web/JavaScript/Reference/Global_Objects/Array/slice -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/slice ---- -
{{JSRef}}
- -

La méthode slice() renvoie un objet tableau, contenant une copie superficielle (shallow copy) d'une portion du tableau d'origine, la portion est définie par un indice de début et un indice de fin (exclus). Le tableau original ne sera pas modifié.

- -
{{EmbedInteractiveExample("pages/js/array-slice.html")}}
- -

Syntaxe

- -
arr.slice()
-arr.slice(début)
-arr.slice(début, fin)
-
- -

Paramètres

- -
-
début {{optional_inline}}
-
Indice (à partir de zéro) depuis lequel commencer l'extraction. S'il s'agit d'un indice négatif, début indique un décalage depuis la fin de la séquence. Par exemple, slice(-2) extrait les avant-dernier et dernier éléments dans la séquence.
-
- Si début est absent, slice() commencera depuis 0. Si début est supérieur à la taille du tableau, c'est un tableau vide qui sera renvoyé.
-
fin {{optional_inline}}
-
Indice (à partir de zéro) auquel arrêter l'extraction. slice() extrait jusqu'à cet indice, mais pas l'élément situé en fin lui-même. slice(1,4) extrait du deuxième au quatrième élément (les éléments d'indices 1, 2 et 3). S'il s'agit d'un indice négatif, fin indique un décalage depuis la fin de la séquence. slice(2,-1) extrait du troisième à l'avant-dernier élément dans la séquence. Si fin n'est pas fourni, slice() extraira jusqu'à la fin de la séquence (arr.length). Si fin est supérieur à la longueur de la séquence, slice() fera une extraction jusqu'à la fin de la séquence.
-
- -

Valeur de retour

- -

Un nouveau tableau contenant les éléments extraits.

- -

Description

- -

slice() ne modifie pas le tableau original, mais renvoie une nouvelle copie du tableau (shallow copy — copie superficielle) dont les éléments sont des copies des éléments extraits du tableau original. Les éléments du tableau original sont copiés dans le nouveau tableau de la manière suivante :

- - - -

Si un nouvel élément est ajouté à l'un ou l'autre tableau, le second n'est pas affecté.

- -

Exemples

- -

Renvoyer un fragment d'un tableau existant

- -
var fruits = ["Banane", "Orange", "Citron", "Pomme", "Mangue"];
-var agrumes = fruits.slice(1, 3);
-
-// fruits vaut --> ["Banane", "Orange", "Citron", "Pomme", "Mangue"]
-// agrumes vaut --> ["Orange", "Citron"]
- -

Utiliser slice()

- -

Dans l'exemple qui suit, slice() crée un nouveau tableau, nouvelleVoiture, à partir de maVoiture. Chacun d'entre eux contient une référence à l'objet maHonda. Lorsque la couleur de maHonda est changée en bordeaux, les deux tableaux reflètent ce changement.

- -
// Avec slice, crée nouvelleVoiture depuis maVoiture
-var maHonda = { couleur : "rouge", roues : 4, moteur : { cylindres : 4, capacité : 2.2 } };
-var maVoiture = [maHonda, 2, "excellente condition", "achetée en 1997"];
-var nouvelleVoiture = maVoiture.slice(0, 2);
-
-// Affiche les valeurs de maVoiture, nouvelleVoiture et la couleur de maHonda
-// référencées depuis chacun des tableaux.
-console.log("maVoiture = " + JSON.stringify(maVoiture));
-console.log("nouvelleVoiture = " + JSON.stringify(nouvelleVoiture));
-console.log("maVoiture[0].couleur = " + maVoiture[0].couleur);
-console.log("nouvelleVoiture[0].couleur = " + nouvelleVoiture[0].couleur);
-
-// Change la couleur de maHonda.
-maHonda.couleur = "bordeaux";
-console.log("La nouvelle couleur de ma Honda est " + maHonda.couleur);
-
-// Affiche la couleur de maHonda référencées depuis les deux tableaux.
-console.log("maVoiture[0].couleur = " + maVoiture[0].couleur);
-console.log("nouvelleVoiture[0].couleur = " + nouvelleVoiture[0].couleur);
-
- -

Ce script affichera :

- -
maVoiture = [{couleur:"rouge", roues:4, moteur:{cylindres:4, capacité:2.2}}, 2,
-             "excellente condition", "achetée en 1997"]
-nouvelleVoiture = [{couleur:"rouge", roues:4, moteur:{cylindres:4, capacité:2.2}}, 2]
-maVoiture[0].couleur = rouge
-nouvelleVoiture[0].couleur = rouge
-La nouvelle couleur de ma Honda est bordeaux
-maVoiture[0].couleur = bordeaux
-nouvelleVoiture[0].couleur = bordeaux
-
- -

Utilisation avec les objets similaires aux tableaux

- -

La méthode slice() peut aussi être appelée pour convertir des objets/collections similaires à des tableaux, en un nouveau tableau. L'objet {{jsxref("Fonctions/arguments", "arguments")}} d'une fonction est un exemple d'objet similaire à un tableau.

- -
function list() {
-  return Array.prototype.slice.call(arguments, 0);
-}
-
-var list1 = list(1, 2, 3); // [1, 2, 3]
-
- -

Il est possible de lier avec la fonction .call de {{jsxref("Function.prototype")}} et on peut effectuer la réduction avec [].slice.call(arguments) plutôt qu'avec Array.prototype.slice.call. Voici comment on peut simplifier avec {{jsxref("Function.prototype.bind", "bind")}} :

- -
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]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.10', 'Array.prototype.slice')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.slice', 'Array.prototype.slice')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.slice', 'Array.prototype.slice')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.slice")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/slice/index.md b/files/fr/web/javascript/reference/global_objects/array/slice/index.md new file mode 100644 index 0000000000..988565123b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/slice/index.md @@ -0,0 +1,166 @@ +--- +title: Array.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/Array/slice +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/slice +--- +
{{JSRef}}
+ +

La méthode slice() renvoie un objet tableau, contenant une copie superficielle (shallow copy) d'une portion du tableau d'origine, la portion est définie par un indice de début et un indice de fin (exclus). Le tableau original ne sera pas modifié.

+ +
{{EmbedInteractiveExample("pages/js/array-slice.html")}}
+ +

Syntaxe

+ +
arr.slice()
+arr.slice(début)
+arr.slice(début, fin)
+
+ +

Paramètres

+ +
+
début {{optional_inline}}
+
Indice (à partir de zéro) depuis lequel commencer l'extraction. S'il s'agit d'un indice négatif, début indique un décalage depuis la fin de la séquence. Par exemple, slice(-2) extrait les avant-dernier et dernier éléments dans la séquence.
+
+ Si début est absent, slice() commencera depuis 0. Si début est supérieur à la taille du tableau, c'est un tableau vide qui sera renvoyé.
+
fin {{optional_inline}}
+
Indice (à partir de zéro) auquel arrêter l'extraction. slice() extrait jusqu'à cet indice, mais pas l'élément situé en fin lui-même. slice(1,4) extrait du deuxième au quatrième élément (les éléments d'indices 1, 2 et 3). S'il s'agit d'un indice négatif, fin indique un décalage depuis la fin de la séquence. slice(2,-1) extrait du troisième à l'avant-dernier élément dans la séquence. Si fin n'est pas fourni, slice() extraira jusqu'à la fin de la séquence (arr.length). Si fin est supérieur à la longueur de la séquence, slice() fera une extraction jusqu'à la fin de la séquence.
+
+ +

Valeur de retour

+ +

Un nouveau tableau contenant les éléments extraits.

+ +

Description

+ +

slice() ne modifie pas le tableau original, mais renvoie une nouvelle copie du tableau (shallow copy — copie superficielle) dont les éléments sont des copies des éléments extraits du tableau original. Les éléments du tableau original sont copiés dans le nouveau tableau de la manière suivante :

+ + + +

Si un nouvel élément est ajouté à l'un ou l'autre tableau, le second n'est pas affecté.

+ +

Exemples

+ +

Renvoyer un fragment d'un tableau existant

+ +
var fruits = ["Banane", "Orange", "Citron", "Pomme", "Mangue"];
+var agrumes = fruits.slice(1, 3);
+
+// fruits vaut --> ["Banane", "Orange", "Citron", "Pomme", "Mangue"]
+// agrumes vaut --> ["Orange", "Citron"]
+ +

Utiliser slice()

+ +

Dans l'exemple qui suit, slice() crée un nouveau tableau, nouvelleVoiture, à partir de maVoiture. Chacun d'entre eux contient une référence à l'objet maHonda. Lorsque la couleur de maHonda est changée en bordeaux, les deux tableaux reflètent ce changement.

+ +
// Avec slice, crée nouvelleVoiture depuis maVoiture
+var maHonda = { couleur : "rouge", roues : 4, moteur : { cylindres : 4, capacité : 2.2 } };
+var maVoiture = [maHonda, 2, "excellente condition", "achetée en 1997"];
+var nouvelleVoiture = maVoiture.slice(0, 2);
+
+// Affiche les valeurs de maVoiture, nouvelleVoiture et la couleur de maHonda
+// référencées depuis chacun des tableaux.
+console.log("maVoiture = " + JSON.stringify(maVoiture));
+console.log("nouvelleVoiture = " + JSON.stringify(nouvelleVoiture));
+console.log("maVoiture[0].couleur = " + maVoiture[0].couleur);
+console.log("nouvelleVoiture[0].couleur = " + nouvelleVoiture[0].couleur);
+
+// Change la couleur de maHonda.
+maHonda.couleur = "bordeaux";
+console.log("La nouvelle couleur de ma Honda est " + maHonda.couleur);
+
+// Affiche la couleur de maHonda référencées depuis les deux tableaux.
+console.log("maVoiture[0].couleur = " + maVoiture[0].couleur);
+console.log("nouvelleVoiture[0].couleur = " + nouvelleVoiture[0].couleur);
+
+ +

Ce script affichera :

+ +
maVoiture = [{couleur:"rouge", roues:4, moteur:{cylindres:4, capacité:2.2}}, 2,
+             "excellente condition", "achetée en 1997"]
+nouvelleVoiture = [{couleur:"rouge", roues:4, moteur:{cylindres:4, capacité:2.2}}, 2]
+maVoiture[0].couleur = rouge
+nouvelleVoiture[0].couleur = rouge
+La nouvelle couleur de ma Honda est bordeaux
+maVoiture[0].couleur = bordeaux
+nouvelleVoiture[0].couleur = bordeaux
+
+ +

Utilisation avec les objets similaires aux tableaux

+ +

La méthode slice() peut aussi être appelée pour convertir des objets/collections similaires à des tableaux, en un nouveau tableau. L'objet {{jsxref("Fonctions/arguments", "arguments")}} d'une fonction est un exemple d'objet similaire à un tableau.

+ +
function list() {
+  return Array.prototype.slice.call(arguments, 0);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+
+ +

Il est possible de lier avec la fonction .call de {{jsxref("Function.prototype")}} et on peut effectuer la réduction avec [].slice.call(arguments) plutôt qu'avec Array.prototype.slice.call. Voici comment on peut simplifier avec {{jsxref("Function.prototype.bind", "bind")}} :

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.10', 'Array.prototype.slice')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.slice', 'Array.prototype.slice')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.slice', 'Array.prototype.slice')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.slice")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/some/index.html b/files/fr/web/javascript/reference/global_objects/array/some/index.html deleted file mode 100644 index b9a15a2855..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/some/index.html +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: Array.prototype.some() -slug: Web/JavaScript/Reference/Global_Objects/Array/some -tags: - - Array - - ECMAScript 5 - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/some -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/some ---- -
{{JSRef}}
- -

La méthode some() teste si au moins un élément du tableau passe le test implémenté par la fonction fournie. Elle renvoie un booléen indiquant le résultat du test.

- -
-

Note : Cette méthode renverra false, quelle que soit la condition, si elle est utilisée sur un tableau vide.

-
- -
{{EmbedInteractiveExample("pages/js/array-some.html")}}
- -

Syntaxe

- -
arr.some(callback[, objetThis])
- -

Paramètres

- -
-
callback
-
La fonction à tester pour chaque élément du tableau. Cette fonction utilise trois arguments : -
-
valeurCourante
-
L'élément du tableau à traiter par la fonction.
-
index {{optional_inline}}
-
L'indice de l'élément qui est traité par la fonction.
-
array {{optional_inline}}
-
Le tableau sur lequel on a appelé la méthode some.
-
-
-
objetThis {{optional_inline}}
-
Paramètre optionnel. Il correspond à la valeur à utiliser pour this lors de l'exécution de la fonction callback.
-
- -

Valeur de retour

- -

true si la fonction callback renvoie une valeur équivalente à true pour au moins un des éléments du tableau, sinon elle renvoie false.

- -

Description

- -

La méthode some() exécute la fonction callback une seule fois pour chaque élément présent dans le tableau jusqu'à ce qu'elle en trouve un pour lequel callback renvoie une valeur équivalente à true dans un contexte booléen. Si un tel élément est trouvé, some() renvoie immédiatement true. Dans le cas contraire, some renvoie false. callback n'est invoquée que pour les indices du tableau auxquels des valeurs sont assignées ; elle n'est pas invoquée pour les indices qui ont été supprimés ou auxquels aucune valeur n'a jamais été assignée.

- -

La fonction callback est invoquée avec trois paramètres : la valeur de l'élément, l'indice de l'élément et l'objet Array parcouru.

- -

Si un paramètre objetThis est fourni à some(), il sera utilisé comme valeur de this pour chaque invocation du callback. Sinon, la valeur  {{jsxref("undefined")}} sera passée pour utilisation comme valeur this. La valeur this finalement utilisée par callback est déterminée en fonction des règles habituelles pour déterminer this pour une fonction.

- -

La méthode some() ne modifie pas le tableau sur lequel elle est appelée.

- -

La liste des éléments traités par some() est définie avant la première invocation du callback. Les éléments qui sont ajoutés au tableau après le début de l'appel à some ne seront pas visités par callback. Si un élément existant non encore visité est modifié par callback, sa valeur passée à callback sera sa valeur au moment où some visite l'indice de cet élément ; les éléments supprimés ne seront pas visités.

- -

Exemples

- -

Tester la valeur des éléments d'un tableau

- -

L'exemple suivant teste si certains éléments d'un tableau sont plus grands que 10.

- -
function estAssezGrand(element, indice, array) {
-  return (element >= 10);
-}
-var resultat = [2, 5, 8, 1, 4].some(estAssezGrand);
-// resultat vaut false
-passed = [12, 5, 8, 1, 4].some(estAssezGrand);
-// passed vaut true
-
- -

Tester la valeur des éléments avec les fonctions fléchées

- -

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour réaliser la même opération que l'exemple précédent.

- -
[2, 5, 8, 1, 4].some(elem => elem > 10); // false
-[12, 5, 8, 1, 4].some(elem => elem > 10); // true
- -
-

Note : Si on veut vérifier qu'un élément est dans un tableau, on pourra utiliser la méthode {{jsxref("Array.prototype.includes()")}}.

-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.17', 'Array.prototype.some')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.some', 'Array.prototype.some')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.some', 'Array.prototype.some')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.some")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/some/index.md b/files/fr/web/javascript/reference/global_objects/array/some/index.md new file mode 100644 index 0000000000..b9a15a2855 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/some/index.md @@ -0,0 +1,128 @@ +--- +title: Array.prototype.some() +slug: Web/JavaScript/Reference/Global_Objects/Array/some +tags: + - Array + - ECMAScript 5 + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/some +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/some +--- +
{{JSRef}}
+ +

La méthode some() teste si au moins un élément du tableau passe le test implémenté par la fonction fournie. Elle renvoie un booléen indiquant le résultat du test.

+ +
+

Note : Cette méthode renverra false, quelle que soit la condition, si elle est utilisée sur un tableau vide.

+
+ +
{{EmbedInteractiveExample("pages/js/array-some.html")}}
+ +

Syntaxe

+ +
arr.some(callback[, objetThis])
+ +

Paramètres

+ +
+
callback
+
La fonction à tester pour chaque élément du tableau. Cette fonction utilise trois arguments : +
+
valeurCourante
+
L'élément du tableau à traiter par la fonction.
+
index {{optional_inline}}
+
L'indice de l'élément qui est traité par la fonction.
+
array {{optional_inline}}
+
Le tableau sur lequel on a appelé la méthode some.
+
+
+
objetThis {{optional_inline}}
+
Paramètre optionnel. Il correspond à la valeur à utiliser pour this lors de l'exécution de la fonction callback.
+
+ +

Valeur de retour

+ +

true si la fonction callback renvoie une valeur équivalente à true pour au moins un des éléments du tableau, sinon elle renvoie false.

+ +

Description

+ +

La méthode some() exécute la fonction callback une seule fois pour chaque élément présent dans le tableau jusqu'à ce qu'elle en trouve un pour lequel callback renvoie une valeur équivalente à true dans un contexte booléen. Si un tel élément est trouvé, some() renvoie immédiatement true. Dans le cas contraire, some renvoie false. callback n'est invoquée que pour les indices du tableau auxquels des valeurs sont assignées ; elle n'est pas invoquée pour les indices qui ont été supprimés ou auxquels aucune valeur n'a jamais été assignée.

+ +

La fonction callback est invoquée avec trois paramètres : la valeur de l'élément, l'indice de l'élément et l'objet Array parcouru.

+ +

Si un paramètre objetThis est fourni à some(), il sera utilisé comme valeur de this pour chaque invocation du callback. Sinon, la valeur  {{jsxref("undefined")}} sera passée pour utilisation comme valeur this. La valeur this finalement utilisée par callback est déterminée en fonction des règles habituelles pour déterminer this pour une fonction.

+ +

La méthode some() ne modifie pas le tableau sur lequel elle est appelée.

+ +

La liste des éléments traités par some() est définie avant la première invocation du callback. Les éléments qui sont ajoutés au tableau après le début de l'appel à some ne seront pas visités par callback. Si un élément existant non encore visité est modifié par callback, sa valeur passée à callback sera sa valeur au moment où some visite l'indice de cet élément ; les éléments supprimés ne seront pas visités.

+ +

Exemples

+ +

Tester la valeur des éléments d'un tableau

+ +

L'exemple suivant teste si certains éléments d'un tableau sont plus grands que 10.

+ +
function estAssezGrand(element, indice, array) {
+  return (element >= 10);
+}
+var resultat = [2, 5, 8, 1, 4].some(estAssezGrand);
+// resultat vaut false
+passed = [12, 5, 8, 1, 4].some(estAssezGrand);
+// passed vaut true
+
+ +

Tester la valeur des éléments avec les fonctions fléchées

+ +

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour réaliser la même opération que l'exemple précédent.

+ +
[2, 5, 8, 1, 4].some(elem => elem > 10); // false
+[12, 5, 8, 1, 4].some(elem => elem > 10); // true
+ +
+

Note : Si on veut vérifier qu'un élément est dans un tableau, on pourra utiliser la méthode {{jsxref("Array.prototype.includes()")}}.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.4.4.17', 'Array.prototype.some')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.6.
{{SpecName('ES6', '#sec-array.prototype.some', 'Array.prototype.some')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.some', 'Array.prototype.some')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.some")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/sort/index.html b/files/fr/web/javascript/reference/global_objects/array/sort/index.html deleted file mode 100644 index 84ce52113f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/sort/index.html +++ /dev/null @@ -1,283 +0,0 @@ ---- -title: Array.prototype.sort() -slug: Web/JavaScript/Reference/Global_Objects/Array/sort -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/sort -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/sort ---- -
{{JSRef}}
- -

La méthode sort() trie les éléments d'un tableau, dans ce même tableau, et renvoie le tableau. Par défaut, le tri s'effectue sur les éléments du tableau convertis en chaînes de caractères et triées selon les valeurs des unités de code UTF-16 des caractères.

- -

La complexité en espace mémoire et en temps utilisée pour le tri ne peut pas être garantie car elle dépend de l'implémentation.

- -
{{EmbedInteractiveExample("pages/js/array-sort.html")}}
- -

Syntaxe

- -
arr.sort()
-arr.sort(fonctionComparaison)
- -

Paramètres

- -
-
fonctionComparaison {{optional_inline}}
-
Ce paramètre optionnel permet de spécifier une fonction définissant l'ordre de tri. Si absente, le tableau est trié selon la valeur de point de code Unicode de chaque caractère, d'après la conversion en chaine de caractères de chaque élément. Cette fonction prendra deux arguments : le premier élément à comparer et le deuxième élément à comparer.
-
- -

Valeur de retour

- -

Le tableau trié (le tri est effectué sur le tableau courant qui est modifié, aucune copie n'est réalisée).

- -

Description

- -

Si le paramètre fonctionComparaison n'est pas fourni, les éléments qui ne valent pas undefined sont triés en les convertissant en chaines de caractères et en comparant ces chaines selon l'ordre des points de code Unicode. Par exemple, "banane" sera trié avant "cerise", mais "Cerise" arrivera avant "banane" à cause de la majuscule (les majuscules arrivent avant dans la liste). Dans un tri numérique, 9 sera trié avant 80, mais comme ces nombres sont convertis en chaînes de caractères, "80" arrive avant "9" selon l'ordre des unités de code UTF-16. Les éléments valant undefined sont placés à la fin du tableau.

- -
-

Note : En UTF-16, les caractères Unicode situés après \uFFFF sont encodés avec deux unités de code surrogates sur l'intervalle \uD800-\uDFFF. Pour comparer les chaînes de caractères entre elles, ce sont les unités de code séparées qui sont prises en compte. Ainsi, le caractère formé par la paire surrogate \uD655 \uDE55 sera trié avant le caractère \uFF3A.

-
- -

Si le paramètre fonctionComparaison est fourni, les éléments du tableau (qui ne valent pas undefined) sont triés selon la valeur de retour de la fonction de comparaison. Si a et b sont deux éléments à comparer, alors :

- - - -

Une fonction de comparaison aura donc généralement la forme suivante :

- -
function compare(a, b) {
-  if (a est inférieur à b selon les critères de tri)
-     return -1;
-  if (a est supérieur à b selon les critères de tri)
-     return 1;
-  // a doit être égal à b
-  return 0;
-}
-
- -

Pour comparer des nombres plutôt que des chaînes, la fonction de comparaison peut simplement soustraire b à a (cela fonctionnera si le tableau ne contient pas {{jsxref("NaN")}} ou {{jsxref("Infinity")}}) :

- -
function compareNombres(a, b) {
-  return a - b;
-}
-
- -

L'usage des {{jsxref("Opérateurs/L_opérateur_function", "expressions de fonctions","",11)}} s'avère très pratique avec la méthode sort() :

- -
var nombres = [4, 2, 5, 1, 3];
-nombres.sort(function(a, b) {
-  return a - b;
-});
-console.log(nombres);
-// [1, 2, 3, 4, 5]
-
- -

ECMAScript 2015 permet d'utiliser les fonctions fléchées et ainsi d'obtenir une syntaxe plus concise :

- -
let nombres = [4, 2, 5, 1, 3];
-nombres.sort((a, b) => a - b);
-console.log(nombres);
- -

Les objets peuvent être triés d'après les valeurs d'une de leurs propriétés.

- -
var items = [
-  { name: "Edward", value: 21 },
-  { name: "Sharpe", value: 37 },
-  { name: "And", value: 45 },
-  { name: "The", value: -12 },
-  { name: "Magnetic", value: 13 },
-  { name: "Zeros", value: 37 }
-];
-items.sort(function (a, b) {
-  return a.value - b.value;
-});
- -

Différences d'implémentation

- -

Certaines implémentations de JavaScript utilisent un tri stable : l'ordre partiel de a et b ne change pas si a et b sont égaux. Si l'indice de a était inférieur à celui de b avant le tri, il le sera toujours après, quels que soient les mouvements de a et b dus au tri.

- -

Le tri est stable dans SpiderMonkey et tous les navigateurs basés sur Mozilla à partir de Gecko 1.9 (voir le {{ Bug(224128) }}).

- -

Le comportement de la méthode sort() a changé entre JavaScript 1.1 et JavaScript 1.2.

- -

En JavaScript 1.1, sur certaines plateformes, la méthode sort ne fonctionnait pas. Le tri fonctionne sur toutes les plateformes à partir de JavaScript 1.2.

- -

En JavaScript 1.2, cette méthode ne convertit plus les éléments non définis (undefined) en null ; elle les place en fin de tableau. Par exemple, supposons que vous ayez ce script :

- -
var a = [];
-a[0] = "araignée";
-a[5] = "zèbre";
-
-function writeArray(x) {
-  for (i = 0; i < x.length; i++) {
-    console.log(x[i]);
-    if (i < x.length-1)
-      console.log(", ");
-  }
-}
-
-writeArray(a);
-a.sort();
-console.log("\n");
-writeArray(a);
-
- -

En JavaScript 1.1, cette fonction affichait :

- -
araignée, null, null, null, null, zèbre
-araignée, null, null, null, null, zèbre
-
- -

En JavaScript 1.2, elle affichera :

- -
araignée, undefined, undefined, undefined, undefined, zèbre
-araignée, zèbre, undefined, undefined, undefined, undefined
-
- -

Exemples

- -

Création, affichage et tri d'un tableau

- -

L'exemple qui suit crée quatre tableaux et affiche le tableau original, puis les tableaux triés. Les tableaux numériques sont triés d'abord sans, puis avec une fonction de comparaison.

- -
var stringArray = ["Bosse", "Bleue", "Béluga"];
-var numericStringArray = ["80", "9", "700"];
-var numberArray = [40, 1, 5, 200];
-var mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200];
-
-function compareNombres(a, b) {
-  return a - b;
-}
-
-console.log("Chaînes : " + stringArray.join() +"\n");
-console.log("Triées : " + stringArray.sort() +"\n\n");
-
-console.log("Nombres : " + numberArray.join() +"\n");
-console.log("Triés sans fonction de comparaison : " + numberArray.sort() +"\n");
-console.log("Triés avec compareNombres : " + numberArray.sort(compareNombres) +"\n\n");
-
-console.log("Chaînes numériques : " + numericStringArray.join() +"\n");
-console.log("Triées sans fonction de comparaison : " + numericStringArray.sort() +"\n");
-console.log("Triées avec compareNombres : " + numericStringArray.sort(compareNombres) +"\n\n");
-
-console.log("Nombres et chaînes numériques : " + mixedNumericArray.join() +"\n");
-console.log("Triés sans fonction de comparaison : " + mixedNumericArray.sort() +"\n");
-console.log("Triés avec compareNombres : " + mixedNumericArray.sort(compareNombres) +"\n\n");
-
- -

Cet exemple produit la sortie suivante. Comme on peut le voir, lorsqu'on utilise la fonction de comparaison, les nombres sont triés correctement qu'ils soient des nombres ou des chaînes numériques.

- -
Chaînes : Bosse,Bleue,Béluga
-Triées : Bleue,Bosse,Béluga
-
-Nombres : 40,1,5,200
-Triés sans fonction de comparaison : 1,200,40,5
-Triés avec compareNombres : 1,5,40,200
-
-Chaînes numériques : 80,9,700
-Triées sans fonction de comparaison : 700,80,9
-Triées avec compareNombres : 9,80,700
-
-Nombres et chaînes numériques : 80,9,700,40,1,5,200
-Triés sans fonction de comparaison : 1,200,40,5,700,80,9
-Triés avec compareNombres : 1,5,9,40,80,200,700
-
- -

Trier des caractères non-ASCII

- -

Pour des chaines de caractères contenant des caractères non ASCII, c'est à dire des chaines de caractères contenant par exemple des accents (é, è, a, ä, etc.) : utilisez {{jsxref("String.localeCompare")}}. Cette fonction peut comparer ces caractères afin qu'ils apparaissent dans le bon ordre.

- -
var items = ["réservé", "premier", "cliché", "communiqué", "café" ,"adieu"];
-items.sort(function (a, b) {
-  return a.localeCompare(b);
-});
-
-// items is [ 'adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé' ]
- -

Trier avec map

- -

La fonction de comparaison peut être amenée à être appelée plusieurs fois pour un même élément du tableau. Selon la fonction utilisée, cela peut entraîner des problèmes de performances. Plus le tableau est grand et plus la fonction de comparaison est complexe, plus il sera judicieux d'envisager des opérations de fonctions appliquées au tableau (map). L'idée est la suivante : on extrait les valeurs du tableau original, en appliquant des opérations dans un tableau temporaire, puis on trie ce tableau temporaire. Enfin, on recompose le tableau final avec les éléments du premier tableau et l'ordre obtenu.

- -
// le tableau à trier
-var liste = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
-
-// Création d'objet temporaire qui contient les positions
-// et les valeurs en minuscules
-var mapped = liste.map(function(e, i) {
-  return { index: i, value: e.toLowerCase() };
-})
-
-// on trie l'objet temporaire avec les valeurs réduites
-mapped.sort(function(a, b) {
-  if (a.value > b.value) {
-    return 1;
-  }
-  if (a.value < b.value) {
-    return -1;
-  }
-  return 0;
-});
-
-// on utilise un objet final pour les résultats
-var result = mapped.map(function(e){
-  return liste[e.index];
-});
-
- -
-

Note : Une bibliothèque open source utilise cette approche : mapsort.

-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.4.4.11', 'Array.prototype.sort')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.sort', 'Array.prototype.sort')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.sort', 'Array.prototype.sort')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.sort")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/sort/index.md b/files/fr/web/javascript/reference/global_objects/array/sort/index.md new file mode 100644 index 0000000000..84ce52113f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/sort/index.md @@ -0,0 +1,283 @@ +--- +title: Array.prototype.sort() +slug: Web/JavaScript/Reference/Global_Objects/Array/sort +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/sort +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/sort +--- +
{{JSRef}}
+ +

La méthode sort() trie les éléments d'un tableau, dans ce même tableau, et renvoie le tableau. Par défaut, le tri s'effectue sur les éléments du tableau convertis en chaînes de caractères et triées selon les valeurs des unités de code UTF-16 des caractères.

+ +

La complexité en espace mémoire et en temps utilisée pour le tri ne peut pas être garantie car elle dépend de l'implémentation.

+ +
{{EmbedInteractiveExample("pages/js/array-sort.html")}}
+ +

Syntaxe

+ +
arr.sort()
+arr.sort(fonctionComparaison)
+ +

Paramètres

+ +
+
fonctionComparaison {{optional_inline}}
+
Ce paramètre optionnel permet de spécifier une fonction définissant l'ordre de tri. Si absente, le tableau est trié selon la valeur de point de code Unicode de chaque caractère, d'après la conversion en chaine de caractères de chaque élément. Cette fonction prendra deux arguments : le premier élément à comparer et le deuxième élément à comparer.
+
+ +

Valeur de retour

+ +

Le tableau trié (le tri est effectué sur le tableau courant qui est modifié, aucune copie n'est réalisée).

+ +

Description

+ +

Si le paramètre fonctionComparaison n'est pas fourni, les éléments qui ne valent pas undefined sont triés en les convertissant en chaines de caractères et en comparant ces chaines selon l'ordre des points de code Unicode. Par exemple, "banane" sera trié avant "cerise", mais "Cerise" arrivera avant "banane" à cause de la majuscule (les majuscules arrivent avant dans la liste). Dans un tri numérique, 9 sera trié avant 80, mais comme ces nombres sont convertis en chaînes de caractères, "80" arrive avant "9" selon l'ordre des unités de code UTF-16. Les éléments valant undefined sont placés à la fin du tableau.

+ +
+

Note : En UTF-16, les caractères Unicode situés après \uFFFF sont encodés avec deux unités de code surrogates sur l'intervalle \uD800-\uDFFF. Pour comparer les chaînes de caractères entre elles, ce sont les unités de code séparées qui sont prises en compte. Ainsi, le caractère formé par la paire surrogate \uD655 \uDE55 sera trié avant le caractère \uFF3A.

+
+ +

Si le paramètre fonctionComparaison est fourni, les éléments du tableau (qui ne valent pas undefined) sont triés selon la valeur de retour de la fonction de comparaison. Si a et b sont deux éléments à comparer, alors :

+ + + +

Une fonction de comparaison aura donc généralement la forme suivante :

+ +
function compare(a, b) {
+  if (a est inférieur à b selon les critères de tri)
+     return -1;
+  if (a est supérieur à b selon les critères de tri)
+     return 1;
+  // a doit être égal à b
+  return 0;
+}
+
+ +

Pour comparer des nombres plutôt que des chaînes, la fonction de comparaison peut simplement soustraire b à a (cela fonctionnera si le tableau ne contient pas {{jsxref("NaN")}} ou {{jsxref("Infinity")}}) :

+ +
function compareNombres(a, b) {
+  return a - b;
+}
+
+ +

L'usage des {{jsxref("Opérateurs/L_opérateur_function", "expressions de fonctions","",11)}} s'avère très pratique avec la méthode sort() :

+ +
var nombres = [4, 2, 5, 1, 3];
+nombres.sort(function(a, b) {
+  return a - b;
+});
+console.log(nombres);
+// [1, 2, 3, 4, 5]
+
+ +

ECMAScript 2015 permet d'utiliser les fonctions fléchées et ainsi d'obtenir une syntaxe plus concise :

+ +
let nombres = [4, 2, 5, 1, 3];
+nombres.sort((a, b) => a - b);
+console.log(nombres);
+ +

Les objets peuvent être triés d'après les valeurs d'une de leurs propriétés.

+ +
var items = [
+  { name: "Edward", value: 21 },
+  { name: "Sharpe", value: 37 },
+  { name: "And", value: 45 },
+  { name: "The", value: -12 },
+  { name: "Magnetic", value: 13 },
+  { name: "Zeros", value: 37 }
+];
+items.sort(function (a, b) {
+  return a.value - b.value;
+});
+ +

Différences d'implémentation

+ +

Certaines implémentations de JavaScript utilisent un tri stable : l'ordre partiel de a et b ne change pas si a et b sont égaux. Si l'indice de a était inférieur à celui de b avant le tri, il le sera toujours après, quels que soient les mouvements de a et b dus au tri.

+ +

Le tri est stable dans SpiderMonkey et tous les navigateurs basés sur Mozilla à partir de Gecko 1.9 (voir le {{ Bug(224128) }}).

+ +

Le comportement de la méthode sort() a changé entre JavaScript 1.1 et JavaScript 1.2.

+ +

En JavaScript 1.1, sur certaines plateformes, la méthode sort ne fonctionnait pas. Le tri fonctionne sur toutes les plateformes à partir de JavaScript 1.2.

+ +

En JavaScript 1.2, cette méthode ne convertit plus les éléments non définis (undefined) en null ; elle les place en fin de tableau. Par exemple, supposons que vous ayez ce script :

+ +
var a = [];
+a[0] = "araignée";
+a[5] = "zèbre";
+
+function writeArray(x) {
+  for (i = 0; i < x.length; i++) {
+    console.log(x[i]);
+    if (i < x.length-1)
+      console.log(", ");
+  }
+}
+
+writeArray(a);
+a.sort();
+console.log("\n");
+writeArray(a);
+
+ +

En JavaScript 1.1, cette fonction affichait :

+ +
araignée, null, null, null, null, zèbre
+araignée, null, null, null, null, zèbre
+
+ +

En JavaScript 1.2, elle affichera :

+ +
araignée, undefined, undefined, undefined, undefined, zèbre
+araignée, zèbre, undefined, undefined, undefined, undefined
+
+ +

Exemples

+ +

Création, affichage et tri d'un tableau

+ +

L'exemple qui suit crée quatre tableaux et affiche le tableau original, puis les tableaux triés. Les tableaux numériques sont triés d'abord sans, puis avec une fonction de comparaison.

+ +
var stringArray = ["Bosse", "Bleue", "Béluga"];
+var numericStringArray = ["80", "9", "700"];
+var numberArray = [40, 1, 5, 200];
+var mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200];
+
+function compareNombres(a, b) {
+  return a - b;
+}
+
+console.log("Chaînes : " + stringArray.join() +"\n");
+console.log("Triées : " + stringArray.sort() +"\n\n");
+
+console.log("Nombres : " + numberArray.join() +"\n");
+console.log("Triés sans fonction de comparaison : " + numberArray.sort() +"\n");
+console.log("Triés avec compareNombres : " + numberArray.sort(compareNombres) +"\n\n");
+
+console.log("Chaînes numériques : " + numericStringArray.join() +"\n");
+console.log("Triées sans fonction de comparaison : " + numericStringArray.sort() +"\n");
+console.log("Triées avec compareNombres : " + numericStringArray.sort(compareNombres) +"\n\n");
+
+console.log("Nombres et chaînes numériques : " + mixedNumericArray.join() +"\n");
+console.log("Triés sans fonction de comparaison : " + mixedNumericArray.sort() +"\n");
+console.log("Triés avec compareNombres : " + mixedNumericArray.sort(compareNombres) +"\n\n");
+
+ +

Cet exemple produit la sortie suivante. Comme on peut le voir, lorsqu'on utilise la fonction de comparaison, les nombres sont triés correctement qu'ils soient des nombres ou des chaînes numériques.

+ +
Chaînes : Bosse,Bleue,Béluga
+Triées : Bleue,Bosse,Béluga
+
+Nombres : 40,1,5,200
+Triés sans fonction de comparaison : 1,200,40,5
+Triés avec compareNombres : 1,5,40,200
+
+Chaînes numériques : 80,9,700
+Triées sans fonction de comparaison : 700,80,9
+Triées avec compareNombres : 9,80,700
+
+Nombres et chaînes numériques : 80,9,700,40,1,5,200
+Triés sans fonction de comparaison : 1,200,40,5,700,80,9
+Triés avec compareNombres : 1,5,9,40,80,200,700
+
+ +

Trier des caractères non-ASCII

+ +

Pour des chaines de caractères contenant des caractères non ASCII, c'est à dire des chaines de caractères contenant par exemple des accents (é, è, a, ä, etc.) : utilisez {{jsxref("String.localeCompare")}}. Cette fonction peut comparer ces caractères afin qu'ils apparaissent dans le bon ordre.

+ +
var items = ["réservé", "premier", "cliché", "communiqué", "café" ,"adieu"];
+items.sort(function (a, b) {
+  return a.localeCompare(b);
+});
+
+// items is [ 'adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé' ]
+ +

Trier avec map

+ +

La fonction de comparaison peut être amenée à être appelée plusieurs fois pour un même élément du tableau. Selon la fonction utilisée, cela peut entraîner des problèmes de performances. Plus le tableau est grand et plus la fonction de comparaison est complexe, plus il sera judicieux d'envisager des opérations de fonctions appliquées au tableau (map). L'idée est la suivante : on extrait les valeurs du tableau original, en appliquant des opérations dans un tableau temporaire, puis on trie ce tableau temporaire. Enfin, on recompose le tableau final avec les éléments du premier tableau et l'ordre obtenu.

+ +
// le tableau à trier
+var liste = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
+
+// Création d'objet temporaire qui contient les positions
+// et les valeurs en minuscules
+var mapped = liste.map(function(e, i) {
+  return { index: i, value: e.toLowerCase() };
+})
+
+// on trie l'objet temporaire avec les valeurs réduites
+mapped.sort(function(a, b) {
+  if (a.value > b.value) {
+    return 1;
+  }
+  if (a.value < b.value) {
+    return -1;
+  }
+  return 0;
+});
+
+// on utilise un objet final pour les résultats
+var result = mapped.map(function(e){
+  return liste[e.index];
+});
+
+ +
+

Note : Une bibliothèque open source utilise cette approche : mapsort.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.4.4.11', 'Array.prototype.sort')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.sort', 'Array.prototype.sort')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.sort', 'Array.prototype.sort')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.sort")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/splice/index.html b/files/fr/web/javascript/reference/global_objects/array/splice/index.html deleted file mode 100644 index a4fc4f2ad5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/splice/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Array.prototype.splice() -slug: Web/JavaScript/Reference/Global_Objects/Array/splice -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/splice -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/splice ---- -
{{JSRef}}
- -

La méthode splice() modifie le contenu d'un tableau en retirant des éléments et/ou en ajoutant de nouveaux éléments à même le tableau.On peut ainsi vider ou remplacer une partie d'un tableau.

- -
{{EmbedInteractiveExample("pages/js/array-splice.html")}}
- -

Syntaxe

- -
var tabElementsSupprimes = array.splice(début, nbASupprimer[, élem1[, élem2[, ...]]])
-
- -

Paramètres

- -
-
début
-
L'indice à partir duquel commencer à changer le tableau (l'indice du premier élement étant 0). Si sa valeur est supérieure à la longueur du tableau array.length, début est ramené à la longueur du tableau array.length. S'il est négatif, le changement commencera d'autant d'éléments à partir de la fin du tableau, c'est à dire à partir de l'index  array.length + début. Si array.length + début est inférieur à 0, le changement commencera à l'index 0.
-
nbASupprimer
-
Un entier indiquant le nombre d'anciens éléments à remplacer.
- Si ce paramètre est absent ou si sa valeur est supérieure ou égale à array.length - début, alors les éléments entre début et la fin du tableau seront supprimés. Si nbASupprimer vaut 0, aucun élément ne sera supprimé. Dans ce cas, il est nécessaire de spécifier au moins un nouvel élément.
-
élemN
-
Les éléments à ajouter au tableau à partir de début. Si vous ne spécifiez pas de nouvel élément, les anciens éléments seront simplement supprimés du tableau.
-
- -

Valeur de retour

- -

Un tableau contenant les éléments supprimés. Si un seul élément est supprimé, un tableau contenant un unique élément est retourné.

- -

Description

- -

Si vous spécifiez un nombre différent d'éléments à insérer et d'éléments à supprimer, le tableau aura une longueur différente après l'appel de la méthode.

- -

Exemples

- -

Utiliser splice

- -

Le script suivant illustre l'utilisation de splice :

- -
var mesPoissons  = ["scalaire", "clown", "mandarin", "chirurgien"];
-
-// supprime 0 élément à partir de l'index 2, et insère "tambour"
-var enleves = mesPoissons.splice(2, 0, "tambour");
-// mesPoissons est ["scalaire", "clown", "tambour", "mandarin", "chirurgien"]
-// enleves est [], aucun élément supprimé
-
-// supprime 1 élément à partir de l'index 3
-enleves = mesPoissons.splice(3, 1);
-// mesPoissons est ["scalaire", "clown", "tambour", "chirurgien"]
-// enleves est ["mandarin"]
-
-// supprime 1 élément à partir de l'index 2, et insère "trompette"
-enleves = mesPoissons.splice(2, 1, "trompette");
-// mesPoissons est ["scalaire", "clown", "trompette", "chirurgien"]
-// enleves est ["tambour"]
-
-// supprime 2 éléments à partir de l'index 0, et insère "perroquet", "anémone" et"bleu"
-enleves = mesPoissons.splice(0, 2, "perroquet", "anémone", "bleu");
-// mesPoissons est ["perroquet", "anémone", "bleu", "trompette", "chirurgien"]
-// enleves est ["scalaire", "clown"]
-
-// supprime 2 éléments à partir de l'indice 2
-enleves = mesPoissons.splice(mesPoissons.length - 3, 2);
-// mesPoissons est ["perroquet", "anémone", "chirurgien"]
-// enleves est ["bleu", "trompette"]
-
-var mesPoissons = ["perroquet", "anémone", "bleu", "trompette", "chirurgien"];
-// on retire trois éléments à partir de l'indice 2
-enleves = mesPoissons.splice(2);
-// mesPoissons vaut ["perroquet", "anémone"]
-// enleves vaut ["bleu", "trompette", "chirurgien"]
-
-var mesAnimaux = ["cheval", "chien", "chat", "dauphin"];
-enleves = mesAnimaux.splice(-2, 1);
-
-// mesAnimaux vaut ["cheval", "chien", "dauphin"]
-// enleves vaut ["chat"]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-array.prototype.splice', 'Array.prototype.splice')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-array.prototype.splice', 'Array.prototype.splice')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-15.4.4.12', 'Array.prototype.splice')}}{{Spec2('ES5.1')}}
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.splice")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/splice/index.md b/files/fr/web/javascript/reference/global_objects/array/splice/index.md new file mode 100644 index 0000000000..a4fc4f2ad5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/splice/index.md @@ -0,0 +1,132 @@ +--- +title: Array.prototype.splice() +slug: Web/JavaScript/Reference/Global_Objects/Array/splice +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/splice +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/splice +--- +
{{JSRef}}
+ +

La méthode splice() modifie le contenu d'un tableau en retirant des éléments et/ou en ajoutant de nouveaux éléments à même le tableau.On peut ainsi vider ou remplacer une partie d'un tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-splice.html")}}
+ +

Syntaxe

+ +
var tabElementsSupprimes = array.splice(début, nbASupprimer[, élem1[, élem2[, ...]]])
+
+ +

Paramètres

+ +
+
début
+
L'indice à partir duquel commencer à changer le tableau (l'indice du premier élement étant 0). Si sa valeur est supérieure à la longueur du tableau array.length, début est ramené à la longueur du tableau array.length. S'il est négatif, le changement commencera d'autant d'éléments à partir de la fin du tableau, c'est à dire à partir de l'index  array.length + début. Si array.length + début est inférieur à 0, le changement commencera à l'index 0.
+
nbASupprimer
+
Un entier indiquant le nombre d'anciens éléments à remplacer.
+ Si ce paramètre est absent ou si sa valeur est supérieure ou égale à array.length - début, alors les éléments entre début et la fin du tableau seront supprimés. Si nbASupprimer vaut 0, aucun élément ne sera supprimé. Dans ce cas, il est nécessaire de spécifier au moins un nouvel élément.
+
élemN
+
Les éléments à ajouter au tableau à partir de début. Si vous ne spécifiez pas de nouvel élément, les anciens éléments seront simplement supprimés du tableau.
+
+ +

Valeur de retour

+ +

Un tableau contenant les éléments supprimés. Si un seul élément est supprimé, un tableau contenant un unique élément est retourné.

+ +

Description

+ +

Si vous spécifiez un nombre différent d'éléments à insérer et d'éléments à supprimer, le tableau aura une longueur différente après l'appel de la méthode.

+ +

Exemples

+ +

Utiliser splice

+ +

Le script suivant illustre l'utilisation de splice :

+ +
var mesPoissons  = ["scalaire", "clown", "mandarin", "chirurgien"];
+
+// supprime 0 élément à partir de l'index 2, et insère "tambour"
+var enleves = mesPoissons.splice(2, 0, "tambour");
+// mesPoissons est ["scalaire", "clown", "tambour", "mandarin", "chirurgien"]
+// enleves est [], aucun élément supprimé
+
+// supprime 1 élément à partir de l'index 3
+enleves = mesPoissons.splice(3, 1);
+// mesPoissons est ["scalaire", "clown", "tambour", "chirurgien"]
+// enleves est ["mandarin"]
+
+// supprime 1 élément à partir de l'index 2, et insère "trompette"
+enleves = mesPoissons.splice(2, 1, "trompette");
+// mesPoissons est ["scalaire", "clown", "trompette", "chirurgien"]
+// enleves est ["tambour"]
+
+// supprime 2 éléments à partir de l'index 0, et insère "perroquet", "anémone" et"bleu"
+enleves = mesPoissons.splice(0, 2, "perroquet", "anémone", "bleu");
+// mesPoissons est ["perroquet", "anémone", "bleu", "trompette", "chirurgien"]
+// enleves est ["scalaire", "clown"]
+
+// supprime 2 éléments à partir de l'indice 2
+enleves = mesPoissons.splice(mesPoissons.length - 3, 2);
+// mesPoissons est ["perroquet", "anémone", "chirurgien"]
+// enleves est ["bleu", "trompette"]
+
+var mesPoissons = ["perroquet", "anémone", "bleu", "trompette", "chirurgien"];
+// on retire trois éléments à partir de l'indice 2
+enleves = mesPoissons.splice(2);
+// mesPoissons vaut ["perroquet", "anémone"]
+// enleves vaut ["bleu", "trompette", "chirurgien"]
+
+var mesAnimaux = ["cheval", "chien", "chat", "dauphin"];
+enleves = mesAnimaux.splice(-2, 1);
+
+// mesAnimaux vaut ["cheval", "chien", "dauphin"]
+// enleves vaut ["chat"]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-array.prototype.splice', 'Array.prototype.splice')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-array.prototype.splice', 'Array.prototype.splice')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-15.4.4.12', 'Array.prototype.splice')}}{{Spec2('ES5.1')}}
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.splice")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.html b/files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.html deleted file mode 100644 index 8e790d06f6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.html +++ /dev/null @@ -1,185 +0,0 @@ ---- -title: Array.prototype.toLocaleString() -slug: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString -tags: - - Array - - Internationalisation - - JavaScript - - Méthode - - Prototype - - Reference - - i18n - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/toLocaleString ---- -
{{JSRef}}
- -

La méthode toLocaleString() renvoie une chaîne de caractères qui représente les éléments du tableau. Les éléments sont convertis en chaînes de caractères grâce à leurs méthodes toLocaleString et chacune de ces chaînes est séparée des autres avec un séparateur propre à la locale courante (par exemple une virgule ou un point).

- -
{{EmbedInteractiveExample("pages/js/array-tolocalestring.html")}}
- -

Syntaxe

- -
arr.toLocaleString();
-arr.toLocaleString(locales);
-arr.toLocaleString(locales, options);
-
- -

Paramètres

- -
-
locales {{optional_inline}}
-
Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales. Pour plus de détails quant à la forme et l'interprétation de l'argument locales, on consultera la page {{jsxref("Intl")}}.
-
options {{optional_inline}}
-
Un objet qui contient des propriétés de configuration. Pour les nombres, consulter {{jsxref("Number.prototype.toLocaleString()")}}, pour les dates, consulter {{jsxref("Date.prototype.toLocaleString()")}}.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente les éléments du tableau.

- -

Exemples

- -

Utiliser les arguments locales et options

- -

Les éléments du tableau sont converties en chaînes de caractères via leurs méthodes toLocaleString().

- - - -

Ici, on voit qu'on affiche le symbole de la devise de la locale pour chacun des éléments (nombres ou chaînes de caractères) du tableau prix :

- -
var prix = ["¥7", 500, 8123, 12];
-prix.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
-
-// "¥7,¥500,¥8,123,¥12"
-
- -

Pour plus d'exemples, on peut se référer aux pages {{jsxref("Intl")}}, {{jsxref("NumberFormat")}} et {{jsxref("DateTimeFormat")}}.

- -

Prothèse d'émulation (polyfill)

- -
// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
-if (!Array.prototype.toLocaleString) {
-  Object.defineProperty(Array.prototype, 'toLocaleString', {
-    value: function(locales, options) {
-      // 1. Let O be ? ToObject(this value).
-      if (this == null) {
-        throw new TypeError('"this" is null or not defined');
-      }
-
-      var a = Object(this);
-
-      // 2. Let len be ? ToLength(? Get(A, "length")).
-      var len = a.length >>> 0;
-
-      // 3. Let separator be the String value for the
-      //    list-separator String appropriate for the
-      //    host environment's current locale (this is
-      //    derived in an implementation-defined way).
-      // NOTE: In this case, we will use a comma
-      var separator = ',';
-
-      // 4. If len is zero, return the empty String.
-      if (len === 0) {
-        return '';
-      }
-
-      // 5. Let firstElement be ? Get(A, "0").
-      var firstElement = a[0];
-      // 6. If firstElement is undefined or null, then
-      //  a.Let R be the empty String.
-      // 7. Else,
-      //  a. Let R be ?
-      //     ToString(?
-      //       Invoke(
-      //        firstElement,
-      //        "toLocaleString",
-      //        « locales, options »
-      //       )
-      //     )
-      var r = firstElement == null ?
-        '' : firstElement.toLocaleString(locales, options);
-
-      // 8. Let k be 1.
-      var k = 1;
-
-      // 9. Repeat, while k < len
-      while (k < len) {
-        // a. Let S be a String value produced by
-        //   concatenating R and separator.
-        var s = r + separator;
-
-        // b. Let nextElement be ? Get(A, ToString(k)).
-        var nextElement = a[k];
-
-        // c. If nextElement is undefined or null, then
-        //   i. Let R be the empty String.
-        // d. Else,
-        //   i. Let R be ?
-        //     ToString(?
-        //       Invoke(
-        //        nextElement,
-        //        "toLocaleString",
-        //        « locales, options »
-        //       )
-        //     )
-        r = nextElement == null ?
-          '' : nextElement.toLocaleString(locales, options);
-
-        // e. Let R be a String value produced by
-        //   concatenating S and R.
-        r = s + r;
-
-        // f. Increase k by 1.
-        k++;
-      }
-
-      // 10. Return R.
-      return r;
-    }
-  });
-}
-
- -

S'il faut absolument prendre en charge les moteurs JavaScript qui ne supportent pas {{jsxref("Object.defineProperty()")}}, mieux vaut ne pas ajouter de prothèse pour les méthodes Array.prototype car elles ne peuvent pas être rendues non-énumérables.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}{{Spec2('ESDraft')}}Définition initiale dans ECMAScript 3.
{{SpecName('ES Int Draft', '#sup-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}{{Spec2('ES Int Draft')}}Cette définition remplace la définition fournit dans ECMA-262.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.toLocaleString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.md b/files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.md new file mode 100644 index 0000000000..8e790d06f6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/tolocalestring/index.md @@ -0,0 +1,185 @@ +--- +title: Array.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString +tags: + - Array + - Internationalisation + - JavaScript + - Méthode + - Prototype + - Reference + - i18n + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/toLocaleString +--- +
{{JSRef}}
+ +

La méthode toLocaleString() renvoie une chaîne de caractères qui représente les éléments du tableau. Les éléments sont convertis en chaînes de caractères grâce à leurs méthodes toLocaleString et chacune de ces chaînes est séparée des autres avec un séparateur propre à la locale courante (par exemple une virgule ou un point).

+ +
{{EmbedInteractiveExample("pages/js/array-tolocalestring.html")}}
+ +

Syntaxe

+ +
arr.toLocaleString();
+arr.toLocaleString(locales);
+arr.toLocaleString(locales, options);
+
+ +

Paramètres

+ +
+
locales {{optional_inline}}
+
Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales. Pour plus de détails quant à la forme et l'interprétation de l'argument locales, on consultera la page {{jsxref("Intl")}}.
+
options {{optional_inline}}
+
Un objet qui contient des propriétés de configuration. Pour les nombres, consulter {{jsxref("Number.prototype.toLocaleString()")}}, pour les dates, consulter {{jsxref("Date.prototype.toLocaleString()")}}.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente les éléments du tableau.

+ +

Exemples

+ +

Utiliser les arguments locales et options

+ +

Les éléments du tableau sont converties en chaînes de caractères via leurs méthodes toLocaleString().

+ + + +

Ici, on voit qu'on affiche le symbole de la devise de la locale pour chacun des éléments (nombres ou chaînes de caractères) du tableau prix :

+ +
var prix = ["¥7", 500, 8123, 12];
+prix.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
+
+// "¥7,¥500,¥8,123,¥12"
+
+ +

Pour plus d'exemples, on peut se référer aux pages {{jsxref("Intl")}}, {{jsxref("NumberFormat")}} et {{jsxref("DateTimeFormat")}}.

+ +

Prothèse d'émulation (polyfill)

+ +
// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
+if (!Array.prototype.toLocaleString) {
+  Object.defineProperty(Array.prototype, 'toLocaleString', {
+    value: function(locales, options) {
+      // 1. Let O be ? ToObject(this value).
+      if (this == null) {
+        throw new TypeError('"this" is null or not defined');
+      }
+
+      var a = Object(this);
+
+      // 2. Let len be ? ToLength(? Get(A, "length")).
+      var len = a.length >>> 0;
+
+      // 3. Let separator be the String value for the
+      //    list-separator String appropriate for the
+      //    host environment's current locale (this is
+      //    derived in an implementation-defined way).
+      // NOTE: In this case, we will use a comma
+      var separator = ',';
+
+      // 4. If len is zero, return the empty String.
+      if (len === 0) {
+        return '';
+      }
+
+      // 5. Let firstElement be ? Get(A, "0").
+      var firstElement = a[0];
+      // 6. If firstElement is undefined or null, then
+      //  a.Let R be the empty String.
+      // 7. Else,
+      //  a. Let R be ?
+      //     ToString(?
+      //       Invoke(
+      //        firstElement,
+      //        "toLocaleString",
+      //        « locales, options »
+      //       )
+      //     )
+      var r = firstElement == null ?
+        '' : firstElement.toLocaleString(locales, options);
+
+      // 8. Let k be 1.
+      var k = 1;
+
+      // 9. Repeat, while k < len
+      while (k < len) {
+        // a. Let S be a String value produced by
+        //   concatenating R and separator.
+        var s = r + separator;
+
+        // b. Let nextElement be ? Get(A, ToString(k)).
+        var nextElement = a[k];
+
+        // c. If nextElement is undefined or null, then
+        //   i. Let R be the empty String.
+        // d. Else,
+        //   i. Let R be ?
+        //     ToString(?
+        //       Invoke(
+        //        nextElement,
+        //        "toLocaleString",
+        //        « locales, options »
+        //       )
+        //     )
+        r = nextElement == null ?
+          '' : nextElement.toLocaleString(locales, options);
+
+        // e. Let R be a String value produced by
+        //   concatenating S and R.
+        r = s + r;
+
+        // f. Increase k by 1.
+        k++;
+      }
+
+      // 10. Return R.
+      return r;
+    }
+  });
+}
+
+ +

S'il faut absolument prendre en charge les moteurs JavaScript qui ne supportent pas {{jsxref("Object.defineProperty()")}}, mieux vaut ne pas ajouter de prothèse pour les méthodes Array.prototype car elles ne peuvent pas être rendues non-énumérables.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}{{Spec2('ESDraft')}}Définition initiale dans ECMAScript 3.
{{SpecName('ES Int Draft', '#sup-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}{{Spec2('ES Int Draft')}}Cette définition remplace la définition fournit dans ECMA-262.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.toLocaleString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/tosource/index.html b/files/fr/web/javascript/reference/global_objects/array/tosource/index.html deleted file mode 100644 index d4c832779b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/tosource/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Array.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Array/toSource -tags: - - Array - - JavaScript - - Méthode - - Non-standard - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/toSource ---- -
{{JSRef}}{{Non-standard_header}}
- -

La méthode toSource() renvoie une chaine de caractères représentant le code source du tableau.

- -

Syntaxe

- -
arr.toSource()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le code source du tableau.

- -

Description

- -

La méthode toSource() renvoie les valeurs suivantes :

- - - -

Cette méthode est habituellement appelée en interne par le moteur JavaScript et n'est pas utilisée explicitement dans du code. Il est cependant possible d'appeler toSource() lors du débogage pour examiner le contenu d'un tableau.

- -

Exemples

- -

Examiner le code source d'un tableau

- -

Pour examiner le code source d'un tableau :

- -
var alpha = new Array("a", "b", "c");
-alpha.toSource();
-// renvoie ["a", "b", "c"]
-
- -

Spécifications

- -

Ne fait partie d'aucun standard. Implémenté dans JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/tosource/index.md b/files/fr/web/javascript/reference/global_objects/array/tosource/index.md new file mode 100644 index 0000000000..d4c832779b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/tosource/index.md @@ -0,0 +1,67 @@ +--- +title: Array.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Array/toSource +tags: + - Array + - JavaScript + - Méthode + - Non-standard + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/toSource +--- +
{{JSRef}}{{Non-standard_header}}
+ +

La méthode toSource() renvoie une chaine de caractères représentant le code source du tableau.

+ +

Syntaxe

+ +
arr.toSource()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le code source du tableau.

+ +

Description

+ +

La méthode toSource() renvoie les valeurs suivantes :

+ + + +

Cette méthode est habituellement appelée en interne par le moteur JavaScript et n'est pas utilisée explicitement dans du code. Il est cependant possible d'appeler toSource() lors du débogage pour examiner le contenu d'un tableau.

+ +

Exemples

+ +

Examiner le code source d'un tableau

+ +

Pour examiner le code source d'un tableau :

+ +
var alpha = new Array("a", "b", "c");
+alpha.toSource();
+// renvoie ["a", "b", "c"]
+
+ +

Spécifications

+ +

Ne fait partie d'aucun standard. Implémenté dans JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/tostring/index.html b/files/fr/web/javascript/reference/global_objects/array/tostring/index.html deleted file mode 100644 index 2c9944f5dd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/tostring/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Array.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Array/toString -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaine de caractères représentant le tableau spécifié et ses éléments.

- -
{{EmbedInteractiveExample("pages/js/array-tostring.html")}}
- -

Syntaxe

- -
arr.toString()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente les éléments du tableau.

- -

Description

- -

L'objet {{jsxref("Array")}} redéfinit la méthode toString d'{{jsxref("Object")}}. Pour les objets Array, la méthode toString() concatène les éléments du tableau et renvoie une chaîne contenant chacun des éléments, séparés par des virgules.

- -

JavaScript appelle la méthode toString() automatiquement lorsqu'un tableau doit être représenté par une valeur texte ou lorsqu'on fait référence à un tableau dans une concaténation de chaines de caractères.

- -

Sémantique d'ECMAScript 5

- -

À partir de JavaScript 1.8.5 (Firefox 4), et en cohérence avec la 5e édition d'ECMAScript, la méthode toString() est générique et peut être utilisé avec n'importe quel objet. {{jsxref("Object.prototype.toString()")}} sera appelée, et la valeur résultante sera renvoyée.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.2', 'Array.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/tostring/index.md b/files/fr/web/javascript/reference/global_objects/array/tostring/index.md new file mode 100644 index 0000000000..2c9944f5dd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/tostring/index.md @@ -0,0 +1,78 @@ +--- +title: Array.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Array/toString +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaine de caractères représentant le tableau spécifié et ses éléments.

+ +
{{EmbedInteractiveExample("pages/js/array-tostring.html")}}
+ +

Syntaxe

+ +
arr.toString()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente les éléments du tableau.

+ +

Description

+ +

L'objet {{jsxref("Array")}} redéfinit la méthode toString d'{{jsxref("Object")}}. Pour les objets Array, la méthode toString() concatène les éléments du tableau et renvoie une chaîne contenant chacun des éléments, séparés par des virgules.

+ +

JavaScript appelle la méthode toString() automatiquement lorsqu'un tableau doit être représenté par une valeur texte ou lorsqu'on fait référence à un tableau dans une concaténation de chaines de caractères.

+ +

Sémantique d'ECMAScript 5

+ +

À partir de JavaScript 1.8.5 (Firefox 4), et en cohérence avec la 5e édition d'ECMAScript, la méthode toString() est générique et peut être utilisé avec n'importe quel objet. {{jsxref("Object.prototype.toString()")}} sera appelée, et la valeur résultante sera renvoyée.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.4.4.2', 'Array.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/unshift/index.html b/files/fr/web/javascript/reference/global_objects/array/unshift/index.html deleted file mode 100644 index 77ba3d8eeb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/unshift/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Array.prototype.unshift() -slug: Web/JavaScript/Reference/Global_Objects/Array/unshift -tags: - - Array - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/unshift -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/unshift ---- -
{{JSRef}}
- -

La méthode unshift() ajoute un ou plusieurs éléments au début d'un tableau et renvoie la nouvelle longueur du tableau.

- -
{{EmbedInteractiveExample("pages/js/array-unshift.html")}}
- -

Syntaxe

- -
arr.unshift([élém1[, ...[, élémN]]])
- -

Paramètres

- -
-
élémN
-
Les éléments que l'on souhaite ajouter en début de tableau.
-
- -

Valeur de retour

- -

La nouvelle valeur de la propriété {{jsxref("Array.length", "length")}} du tableau sur lequel a été appelée la méthode.

- -

Description

- -

La méthode unshift() insère les valeurs renseignées au début d'un objet ressemblant à un tableau.

- -

unshift() est volontairement générique ; cette méthode peut être {{jsxref("Function.call", "appelée","",1)}} ou {{jsxref("Function.apply", "appliquée","",1)}} sur des objets ressemblant à des tableaux. Les objets qui ne contiennent pas une propriété length reflètant la fin d'une série de propriétés indexées numériquement pourront ne pas avoir un comportement cohérent avec cette méthode.

- -

Attention, lorsqu'on utilise unshift() avec plusieurs arguments, ceux-ci sont insérés au début du tableau dans l'ordre selon lequel ils sont passés en arguments. Aussi, on n'obtiendra pas le même résultat en appelant unshift() n fois avec 1 arguments ou en appelant unshift() avec n arguments.

- -
let arr = [4, 5, 6];
-
-arr.unshift(1, 2, 3);
-console.table(arr);
-// [1, 2, 3, 4, 5, 6]
-
-let arr2 = [4, 5, 6];
-
-arr2.unshift(1);
-arr2.unshift(2);
-arr2.unshift(3);
-
-console.table(arr2);
-// [3, 2, 1, 4, 5, 6]
- -

Exemples

- -
var arr = [1, 2];
-
-arr.unshift(0); // renvoie 3, la nouvelle longueur du tableau
-// arr est [0, 1, 2]
-
-arr.unshift(-2, -1); // = 5
-// arr est [-2, -1, 0, 1, 2]
-
-arr.unshift( [-3] ); // 6
-// arr est [[-3], -2, -1, 0, 1, 2]
-
-arr.unshift([-7, -6], [-5]); // 8
-// arr est [[-7, -6], [-5], [-3], -2, -1, 0, 1, 2]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.13', 'Array.prototype.unshift')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.unshift")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/unshift/index.md b/files/fr/web/javascript/reference/global_objects/array/unshift/index.md new file mode 100644 index 0000000000..77ba3d8eeb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/unshift/index.md @@ -0,0 +1,117 @@ +--- +title: Array.prototype.unshift() +slug: Web/JavaScript/Reference/Global_Objects/Array/unshift +tags: + - Array + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/unshift +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/unshift +--- +
{{JSRef}}
+ +

La méthode unshift() ajoute un ou plusieurs éléments au début d'un tableau et renvoie la nouvelle longueur du tableau.

+ +
{{EmbedInteractiveExample("pages/js/array-unshift.html")}}
+ +

Syntaxe

+ +
arr.unshift([élém1[, ...[, élémN]]])
+ +

Paramètres

+ +
+
élémN
+
Les éléments que l'on souhaite ajouter en début de tableau.
+
+ +

Valeur de retour

+ +

La nouvelle valeur de la propriété {{jsxref("Array.length", "length")}} du tableau sur lequel a été appelée la méthode.

+ +

Description

+ +

La méthode unshift() insère les valeurs renseignées au début d'un objet ressemblant à un tableau.

+ +

unshift() est volontairement générique ; cette méthode peut être {{jsxref("Function.call", "appelée","",1)}} ou {{jsxref("Function.apply", "appliquée","",1)}} sur des objets ressemblant à des tableaux. Les objets qui ne contiennent pas une propriété length reflètant la fin d'une série de propriétés indexées numériquement pourront ne pas avoir un comportement cohérent avec cette méthode.

+ +

Attention, lorsqu'on utilise unshift() avec plusieurs arguments, ceux-ci sont insérés au début du tableau dans l'ordre selon lequel ils sont passés en arguments. Aussi, on n'obtiendra pas le même résultat en appelant unshift() n fois avec 1 arguments ou en appelant unshift() avec n arguments.

+ +
let arr = [4, 5, 6];
+
+arr.unshift(1, 2, 3);
+console.table(arr);
+// [1, 2, 3, 4, 5, 6]
+
+let arr2 = [4, 5, 6];
+
+arr2.unshift(1);
+arr2.unshift(2);
+arr2.unshift(3);
+
+console.table(arr2);
+// [3, 2, 1, 4, 5, 6]
+ +

Exemples

+ +
var arr = [1, 2];
+
+arr.unshift(0); // renvoie 3, la nouvelle longueur du tableau
+// arr est [0, 1, 2]
+
+arr.unshift(-2, -1); // = 5
+// arr est [-2, -1, 0, 1, 2]
+
+arr.unshift( [-3] ); // 6
+// arr est [[-3], -2, -1, 0, 1, 2]
+
+arr.unshift([-7, -6], [-5]); // 8
+// arr est [[-7, -6], [-5], [-3], -2, -1, 0, 1, 2]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.4.4.13', 'Array.prototype.unshift')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.unshift")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/array/values/index.html b/files/fr/web/javascript/reference/global_objects/array/values/index.html deleted file mode 100644 index 881e840bd4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/array/values/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Array.prototype.values() -slug: Web/JavaScript/Reference/Global_Objects/Array/values -tags: - - Array - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Array/values -original_slug: Web/JavaScript/Reference/Objets_globaux/Array/values ---- -
{{JSRef}}
- -

La méthode values() renvoie un nouvel objet Array Iterator qui contient les valeurs pour chaque indice du tableau. Cette méthode est l'implémentation par défaut de Array.prototype[Symbol.Iterator].

- -

{{EmbedInteractiveExample("pages/js/array-values.html")}}

- -
var a = ['t', 'i', 't', 'o', 'u'];
-var iterateur = a.values();
-
-console.log(iterateur.next().value); // t
-console.log(iterateur.next().value); // i
-console.log(iterateur.next().value); // t
-console.log(iterateur.next().value); // o
-console.log(iterateur.next().value); // u
-
- -

Syntaxe

- -
array.values()
- -

Valeur de retour

- -

Un nouvel objet itérateur sur {{jsxref("Array")}}.

- -

Exemples

- -

Itérer avec une boucle for...of

- -
var arr = ['w', 'y', 'k', 'o', 'p'];
-var eArr = arr.values();
-// votre navigateur doit supporter les boucles for..of
-// et les variables définies avec let
-for (let lettre of eArr) {
-  console.log(lettre);
-}
-
- -

Itérer avec next()

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Array.values")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/array/values/index.md b/files/fr/web/javascript/reference/global_objects/array/values/index.md new file mode 100644 index 0000000000..881e840bd4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/array/values/index.md @@ -0,0 +1,97 @@ +--- +title: Array.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Array/values +tags: + - Array + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Array/values +original_slug: Web/JavaScript/Reference/Objets_globaux/Array/values +--- +
{{JSRef}}
+ +

La méthode values() renvoie un nouvel objet Array Iterator qui contient les valeurs pour chaque indice du tableau. Cette méthode est l'implémentation par défaut de Array.prototype[Symbol.Iterator].

+ +

{{EmbedInteractiveExample("pages/js/array-values.html")}}

+ +
var a = ['t', 'i', 't', 'o', 'u'];
+var iterateur = a.values();
+
+console.log(iterateur.next().value); // t
+console.log(iterateur.next().value); // i
+console.log(iterateur.next().value); // t
+console.log(iterateur.next().value); // o
+console.log(iterateur.next().value); // u
+
+ +

Syntaxe

+ +
array.values()
+ +

Valeur de retour

+ +

Un nouvel objet itérateur sur {{jsxref("Array")}}.

+ +

Exemples

+ +

Itérer avec une boucle for...of

+ +
var arr = ['w', 'y', 'k', 'o', 'p'];
+var eArr = arr.values();
+// votre navigateur doit supporter les boucles for..of
+// et les variables définies avec let
+for (let lettre of eArr) {
+  console.log(lettre);
+}
+
+ +

Itérer avec next()

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-array.prototype.values', 'Array.prototype.values')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Array.values")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.html b/files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.html deleted file mode 100644 index d86f413799..0000000000 --- a/files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: get ArrayBuffer[@@species] -slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species -tags: - - ArrayBuffer - - JavaScript - - Propriété - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species -original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/@@species ---- -
{{JSRef}}
- -

La propriété d'accesseur ArrayBuffer[@@species] renvoie le constructeur ArrayBuffer.

- -

Syntaxe

- -
ArrayBuffer[Symbol.species]
-
- -

Description

- -

L'accesseur species renvoie le constructeur par défaut pour les objets ArrayBuffer. Les constructeurs des sous-classes peuvent surcharger ce symbole pour modifier l'affectation du constructeur.

- -

Exemples

- -

La propriété species renvoie le constructeur par défaut, soit ArrayBuffer dans le cas des objets ArrayBuffer :

- -
ArrayBuffer[Symbol.species]; // function ArrayBuffer()
- -

Pour un objet dérivé (par exemple une classe sur mesure MonArrayBuffer), le symbole species renverra le constructeur MonArrayBuffer. Il est possible de surcharger ce comportement pour renvoyer le constructeur ArrayBuffer :

- -
class MonArrayBuffer extends ArrayBuffer {
-  // On surcharge species pour renvoyer
-  // le constructeur parent ArrayBuffer
-  static get [Symbol.species]() { return ArrayBuffer; }
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.ArrayBuffer.@@species")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.md b/files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.md new file mode 100644 index 0000000000..d86f413799 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/arraybuffer/@@species/index.md @@ -0,0 +1,71 @@ +--- +title: get ArrayBuffer[@@species] +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +tags: + - ArrayBuffer + - JavaScript + - Propriété + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/@@species +--- +
{{JSRef}}
+ +

La propriété d'accesseur ArrayBuffer[@@species] renvoie le constructeur ArrayBuffer.

+ +

Syntaxe

+ +
ArrayBuffer[Symbol.species]
+
+ +

Description

+ +

L'accesseur species renvoie le constructeur par défaut pour les objets ArrayBuffer. Les constructeurs des sous-classes peuvent surcharger ce symbole pour modifier l'affectation du constructeur.

+ +

Exemples

+ +

La propriété species renvoie le constructeur par défaut, soit ArrayBuffer dans le cas des objets ArrayBuffer :

+ +
ArrayBuffer[Symbol.species]; // function ArrayBuffer()
+ +

Pour un objet dérivé (par exemple une classe sur mesure MonArrayBuffer), le symbole species renverra le constructeur MonArrayBuffer. Il est possible de surcharger ce comportement pour renvoyer le constructeur ArrayBuffer :

+ +
class MonArrayBuffer extends ArrayBuffer {
+  // On surcharge species pour renvoyer
+  // le constructeur parent ArrayBuffer
+  static get [Symbol.species]() { return ArrayBuffer; }
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.ArrayBuffer.@@species")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html b/files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html deleted file mode 100644 index 8839c62408..0000000000 --- a/files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: ArrayBuffer.prototype.byteLength -slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength -tags: - - ArrayBuffer - - JavaScript - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength -original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/byteLength ---- -
{{JSRef}}
- -

L'accesseur byteLength est une propriété représentant la longueur d'un {{jsxref("ArrayBuffer")}} en octets.

- -
{{EmbedInteractiveExample("pages/js/arraybuffer-bytelength.html")}}
- -

Syntaxe

- -
arraybuffer.byteLength
- -

Description

- -

La propriété byteLength est un accesseur dont le mutateur associé vaut undefined. Cela signifie que cette propriété est en lecture seule. La valeur est déterminée lors de la construction du tableau et ne peut pas être changée par la suite. Cette propriété renvoie 0 si ce ArrayBuffer a été détaché.

- -

Exemples

- -
var buffer = new ArrayBuffer(8);
-buffer.byteLength; // 8
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.ArrayBuffer.byteLength")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.md b/files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.md new file mode 100644 index 0000000000..8839c62408 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/arraybuffer/bytelength/index.md @@ -0,0 +1,68 @@ +--- +title: ArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +tags: + - ArrayBuffer + - JavaScript + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/byteLength +--- +
{{JSRef}}
+ +

L'accesseur byteLength est une propriété représentant la longueur d'un {{jsxref("ArrayBuffer")}} en octets.

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-bytelength.html")}}
+ +

Syntaxe

+ +
arraybuffer.byteLength
+ +

Description

+ +

La propriété byteLength est un accesseur dont le mutateur associé vaut undefined. Cela signifie que cette propriété est en lecture seule. La valeur est déterminée lors de la construction du tableau et ne peut pas être changée par la suite. Cette propriété renvoie 0 si ce ArrayBuffer a été détaché.

+ +

Exemples

+ +
var buffer = new ArrayBuffer(8);
+buffer.byteLength; // 8
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.ArrayBuffer.byteLength")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/index.html b/files/fr/web/javascript/reference/global_objects/arraybuffer/index.html deleted file mode 100644 index 7c46a860de..0000000000 --- a/files/fr/web/javascript/reference/global_objects/arraybuffer/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: ArrayBuffer -slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer -tags: - - ArrayBuffer - - Constructor - - JavaScript - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer -original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer ---- -
{{JSRef}}
- -

L'objet ArrayBuffer est utilisé afin de représenter un tampon (buffer) de données binaires de longueur fixe de façon générique. C'est un tableau d'octets. La manipulation du contenu d'un ArrayBuffer se fait de façon indirecte en créant un tableau typé ou un objet {{jsxref("DataView")}} qui permet de représenter le tampon dans un format donné qui permet de lire/écrire des contenus dans le tampon de mémoire.

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

Syntaxe

- -
new ArrayBuffer(longueur)
-
- -

Paramètres

- -
-
longueur
-
La taille, exprimée en octets, du tableau représentant le tampon.
-
- -

Valeur de retour

- -

Un nouvel objet ArrayBuffer de la taille donnée. Ses éléments sont initialisés à 0.

- -

Exceptions

- -

Une exception {{jsxref("RangeError")}} est levée lorsque l'argument longueur est supérieur à {{jsxref("Number.MAX_SAFE_INTEGER")}} (soit 2^53) ou s'il est négatif.

- -

Description

- -

Le constructeur ArrayBuffer crée une nouvelle instance d'ArrayBuffer dont la longueur est celle donnée lors de la construction.

- -

Obtenir un tampon mémoire depuis des données existantes

- - - -

Propriétés

- -
-
ArrayBuffer.length
-
La longueur du constructeur ArrayBuffer. Elle vaut 1.
-
{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}
-
La fonction de construction utilisée pour créer les objets dérivés.
-
{{jsxref("ArrayBuffer.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à tous les objets ArrayBuffer.
-
- -

Méthodes

- -
-
{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}
-
Cette méthode renvoie true si arg est une des vues sur l'ArrayBuffer telle qu'un tableau typé ou un objet {{jsxref("DataView")}}, sinon elle renvoie false.
-
{{jsxref("ArrayBuffer.transfer", "ArrayBuffer.transfer(ancienTampon [, nouvelleLongueur])")}} {{experimental_inline}}
-
-
Cette méthode renvoie un nouvel objet ArrayBuffer dont le contenu est transféré depuis les données de ancienTampon et qui est ensuite tronqué ou rallongé avec des zéros pour que la taille du nouveau tampon soit nouvelleLongueur.
-
-
- -

Les instances d'ArrayBuffer

- -

Toutes les instances d'ArrayBuffer héritent de {{jsxref("ArrayBuffer.prototype")}}.

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/prototype','Propri.C3.A9t.C3.A9s')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/prototype','M.C3.A9thodes')}}

- -
-
{{jsxref("ArrayBuffer.slice()")}} {{non-standard_inline}}
-
Cette méthode fournit la même fonctionnalité que {{jsxref("ArrayBuffer.prototype.slice()")}}.
-
- -

Exemple

- -

Dans cet exemple, on crée un tampon sur 8 octets avec une vue {{jsxref("Int32Array")}} qui fait référence à ce tampon :

- -
var tampon = new ArrayBuffer(8);
-var vue    = new Int32Array(tampon);
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 6.
{{SpecName('ES6', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligaoire pour utiliser le constructeur.
{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), ArrayBuffer doit être utilisée avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur ArrayBuffer comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = ArrayBuffer(10);
-// TypeError: calling a builtin ArrayBuffer constructor
-// without new is forbidden
- -
var dv = new ArrayBuffer(10);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/index.md b/files/fr/web/javascript/reference/global_objects/arraybuffer/index.md new file mode 100644 index 0000000000..7c46a860de --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/arraybuffer/index.md @@ -0,0 +1,142 @@ +--- +title: ArrayBuffer +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +tags: + - ArrayBuffer + - Constructor + - JavaScript + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer +--- +
{{JSRef}}
+ +

L'objet ArrayBuffer est utilisé afin de représenter un tampon (buffer) de données binaires de longueur fixe de façon générique. C'est un tableau d'octets. La manipulation du contenu d'un ArrayBuffer se fait de façon indirecte en créant un tableau typé ou un objet {{jsxref("DataView")}} qui permet de représenter le tampon dans un format donné qui permet de lire/écrire des contenus dans le tampon de mémoire.

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

Syntaxe

+ +
new ArrayBuffer(longueur)
+
+ +

Paramètres

+ +
+
longueur
+
La taille, exprimée en octets, du tableau représentant le tampon.
+
+ +

Valeur de retour

+ +

Un nouvel objet ArrayBuffer de la taille donnée. Ses éléments sont initialisés à 0.

+ +

Exceptions

+ +

Une exception {{jsxref("RangeError")}} est levée lorsque l'argument longueur est supérieur à {{jsxref("Number.MAX_SAFE_INTEGER")}} (soit 2^53) ou s'il est négatif.

+ +

Description

+ +

Le constructeur ArrayBuffer crée une nouvelle instance d'ArrayBuffer dont la longueur est celle donnée lors de la construction.

+ +

Obtenir un tampon mémoire depuis des données existantes

+ + + +

Propriétés

+ +
+
ArrayBuffer.length
+
La longueur du constructeur ArrayBuffer. Elle vaut 1.
+
{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}
+
La fonction de construction utilisée pour créer les objets dérivés.
+
{{jsxref("ArrayBuffer.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à tous les objets ArrayBuffer.
+
+ +

Méthodes

+ +
+
{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}
+
Cette méthode renvoie true si arg est une des vues sur l'ArrayBuffer telle qu'un tableau typé ou un objet {{jsxref("DataView")}}, sinon elle renvoie false.
+
{{jsxref("ArrayBuffer.transfer", "ArrayBuffer.transfer(ancienTampon [, nouvelleLongueur])")}} {{experimental_inline}}
+
+
Cette méthode renvoie un nouvel objet ArrayBuffer dont le contenu est transféré depuis les données de ancienTampon et qui est ensuite tronqué ou rallongé avec des zéros pour que la taille du nouveau tampon soit nouvelleLongueur.
+
+
+ +

Les instances d'ArrayBuffer

+ +

Toutes les instances d'ArrayBuffer héritent de {{jsxref("ArrayBuffer.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/prototype','Propri.C3.A9t.C3.A9s')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/prototype','M.C3.A9thodes')}}

+ +
+
{{jsxref("ArrayBuffer.slice()")}} {{non-standard_inline}}
+
Cette méthode fournit la même fonctionnalité que {{jsxref("ArrayBuffer.prototype.slice()")}}.
+
+ +

Exemple

+ +

Dans cet exemple, on crée un tampon sur 8 octets avec une vue {{jsxref("Int32Array")}} qui fait référence à ce tampon :

+ +
var tampon = new ArrayBuffer(8);
+var vue    = new Int32Array(tampon);
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 6.
{{SpecName('ES6', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligaoire pour utiliser le constructeur.
{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), ArrayBuffer doit être utilisée avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur ArrayBuffer comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = ArrayBuffer(10);
+// TypeError: calling a builtin ArrayBuffer constructor
+// without new is forbidden
+ +
var dv = new ArrayBuffer(10);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.html b/files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.html deleted file mode 100644 index 876fdd595b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: ArrayBuffer.isView() -slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView -tags: - - ArrayBuffer - - JavaScript - - Méthode - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView -original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/isView ---- -
{{JSRef}}
- -

La méthode ArrayBuffer.isView() renvoie true si l'argument passé est une des vues ArrayBuffer, comme par exemple un tableau typé ou une {{jsxref("DataView")}} ; false sinon.

- -
{{EmbedInteractiveExample("pages/js/arraybuffer-isview.html")}}
- -

Syntaxe

- -
ArrayBuffer.isView(arg)
- -

Paramètres

- -
-
arg
-
L'argument dont on souhaite savoir s'il est une vue.
-
- -

Valeur de retour

- -

true si la valeur passée en argument est une des vues du tableau ArrayBuffer, false sinon.

- -

Exemples

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

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015
{{SpecName('ES2015', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}{{Spec2('ES2015')}}Définition initiale dans un standard ECMA.
{{SpecName('ESDraft', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.ArrayBuffer.isView")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.md b/files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.md new file mode 100644 index 0000000000..876fdd595b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/arraybuffer/isview/index.md @@ -0,0 +1,87 @@ +--- +title: ArrayBuffer.isView() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +tags: + - ArrayBuffer + - JavaScript + - Méthode + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/isView +--- +
{{JSRef}}
+ +

La méthode ArrayBuffer.isView() renvoie true si l'argument passé est une des vues ArrayBuffer, comme par exemple un tableau typé ou une {{jsxref("DataView")}} ; false sinon.

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-isview.html")}}
+ +

Syntaxe

+ +
ArrayBuffer.isView(arg)
+ +

Paramètres

+ +
+
arg
+
L'argument dont on souhaite savoir s'il est une vue.
+
+ +

Valeur de retour

+ +

true si la valeur passée en argument est une des vues du tableau ArrayBuffer, false sinon.

+ +

Exemples

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015
{{SpecName('ES2015', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}{{Spec2('ES2015')}}Définition initiale dans un standard ECMA.
{{SpecName('ESDraft', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.ArrayBuffer.isView")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.html b/files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.html deleted file mode 100644 index e52b95fd86..0000000000 --- a/files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: ArrayBuffer.prototype.slice() -slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice -tags: - - ArrayBuffer - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice -original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/slice ---- -
{{JSRef}}
- -

La méthode slice() renvoie un nouvel ArrayBuffer dont le contenu est une copie des octets du ArrayBuffer courant, contenus entre début (compris) et fin (non-compris).

- -
{{EmbedInteractiveExample("pages/js/arraybuffer-slice.html")}}
- -

Syntaxe

- -
arraybuffer.slice(début[, fin])
- -

Paramètres

- -
-
début
-
Indice (numérotation commençant à zéro) de l'octet à partir duquel découper le tableau.
-
fin
-
Indice de l'octet auquel finir la découpe du tableau. Si ce paramètre n'est pas fourni, le nouvel ArrayBuffer contiendra tous les octets entre début et la fin du ArrayBuffer courant. L'intervalle défini par les valeurs début et fin est réduit à un intervalle valide pour le tableau courant si nécessaire. Si la longueur du nouveau tableau ArrayBuffer sera négative, l'intervalle est réduit à zéro.
-
- -

Valeur de retour

- -

Un nouvel objet ArrayBuffer.

- -

Description

- -

La méthode slice copie les octets contenus jusqu'au (au sens exclusif) paramètre fin. Si le paramètre début ou  fin est négatif, il fera référence à l'indice à partir de la fin du tableau et non pas à l'indice à partir du début du tableau.

- -

Exemples

- -

Copier un ArrayBuffer

- -
var buf1 = new ArrayBuffer(8);
-var buf2 = buf1.slice(0)
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans EMCAScript 6.
{{SpecName('ES6', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.ArrayBuffer.slice")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.md b/files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.md new file mode 100644 index 0000000000..e52b95fd86 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/arraybuffer/slice/index.md @@ -0,0 +1,82 @@ +--- +title: ArrayBuffer.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +tags: + - ArrayBuffer + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +original_slug: Web/JavaScript/Reference/Objets_globaux/ArrayBuffer/slice +--- +
{{JSRef}}
+ +

La méthode slice() renvoie un nouvel ArrayBuffer dont le contenu est une copie des octets du ArrayBuffer courant, contenus entre début (compris) et fin (non-compris).

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-slice.html")}}
+ +

Syntaxe

+ +
arraybuffer.slice(début[, fin])
+ +

Paramètres

+ +
+
début
+
Indice (numérotation commençant à zéro) de l'octet à partir duquel découper le tableau.
+
fin
+
Indice de l'octet auquel finir la découpe du tableau. Si ce paramètre n'est pas fourni, le nouvel ArrayBuffer contiendra tous les octets entre début et la fin du ArrayBuffer courant. L'intervalle défini par les valeurs début et fin est réduit à un intervalle valide pour le tableau courant si nécessaire. Si la longueur du nouveau tableau ArrayBuffer sera négative, l'intervalle est réduit à zéro.
+
+ +

Valeur de retour

+ +

Un nouvel objet ArrayBuffer.

+ +

Description

+ +

La méthode slice copie les octets contenus jusqu'au (au sens exclusif) paramètre fin. Si le paramètre début ou  fin est négatif, il fera référence à l'indice à partir de la fin du tableau et non pas à l'indice à partir du début du tableau.

+ +

Exemples

+ +

Copier un ArrayBuffer

+ +
var buf1 = new ArrayBuffer(8);
+var buf2 = buf1.slice(0)
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans EMCAScript 6.
{{SpecName('ES6', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.ArrayBuffer.slice")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/asyncfunction/index.html b/files/fr/web/javascript/reference/global_objects/asyncfunction/index.html deleted file mode 100644 index 778e94b924..0000000000 --- a/files/fr/web/javascript/reference/global_objects/asyncfunction/index.html +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: AsyncFunction -slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction -tags: - - Constructeur - - Experimental - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction -original_slug: Web/JavaScript/Reference/Objets_globaux/AsyncFunction ---- -
{{JSRef}}
- -

Le constructeur AsyncFunction crée un nouvel objet pour {{jsxref("Instructions/async function", "une fonction asynchrone","",1)}}. En JavaScript, chaque fonction asynchrone est en fait un objet AsyncFunction.

- -

Attention, AsyncFunction n'est pas un objet global. On peut l'obtenir grâce au code suivant :

- -
Object.getPrototypeOf(async function(){}).constructor
-
- -

Syntaxe

- -
new AsyncFunction ([arg1[, arg2[, ...argN]],] functionBody)
- -

Paramètres

- -
-
arg1, arg2, ... argN
-
Les noms des paramètres passés à la fonction. Chacun doit être une chaîne de caractères qui puisse être un identifiant JavaScript valide ou une liste de telles chaînes séparées par une virgule (ex. "x", "laValeur", ou "a,b").
-
functionBody
-
Une chaîne de caractères qui contient les instructions JavaScript définissant la définition de la fonction.
-
- -

Description

- -

Les objets des {{jsxref("Instructions/async_function", "fonctions asynchrones","",1)}} créés avec le constructeur AsyncFunction sont analysés lorsque la fonction est créée. C'est moins efficace que de déclarer une fonction asynchrone avec une {{jsxref("Instructions/async_function", "expression de fonction asynchrone")}} et de l'appeler depuis le code car ces fonctions sont analysées avec le reste du code.

- -

Tous les arguments passés à la fonction sont traités comme les noms des identifiants des paramètres de la fonction qui sera créée, dans l'ordre dans lequel ils sont passés.

- -
-

Note : Les fonctions asynchrones créées avec le constructeur AsyncFunction ne créent pas de fermetutres dans leurs contextes de création. Elles sont toujours créées dans la portée globale. Lorsqu'on les exécute, ellee ne pourront accéder qu'à leurs variables locales et aux variables globales, pas à celles qui appartiennent à la portée dans laquelle AsyncFunction a été appelé. On aurait donc un comportement différent  si on appelait {{jsxref("Objets_globaux/eval", "eval")}} avec le code de l'expression de la fonction asynchrone.

-
- -

Si on appelle AsyncFunction comme une fonction (c'est-à-dire sans new), cela aura le même effet que s'il est appelé comme un constructeur.

- -

Propriétés

- -
-
AsyncFunction.length
-
La propriété de longueur du constructeur AsyncFunction dont la valeur est 1.
-
{{jsxref("AsyncFunction.prototype")}}
-
Le prototype permet d'ajouter des propriétés à tous les objets représentant les fonctions asynchrones.
-
- -

Prototype de l'objet AsyncFunction

- -

Propriétés

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/AsyncFunction/prototype', 'Propriétés')}}
- -

Instances AsyncFunction

- -

Les instances d'AsyncFunction héritent des méthodes et des propriétés de {{jsxref("AsyncFunction.prototype")}}. Comme avec les autres constructeurs, on peut changer l'objet prototype du constructeur afin de modifier l'ensemble des instances AsyncFunction.

- -

Exemples

- -

Créer une fonction asynchrone avec un constructeur AsyncFunction

- -
function resolveAfter2Seconds(x) {
-  return new Promise(resolve => {
-    setTimeout(() => {
-      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 => {
-  console.log(v); // affiche 30 après 4 secondes
-});
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}}{{Spec2('ESDraft')}}Définition initiale dans ES2017.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/asyncfunction/index.md b/files/fr/web/javascript/reference/global_objects/asyncfunction/index.md new file mode 100644 index 0000000000..778e94b924 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/asyncfunction/index.md @@ -0,0 +1,118 @@ +--- +title: AsyncFunction +slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction +tags: + - Constructeur + - Experimental + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction +original_slug: Web/JavaScript/Reference/Objets_globaux/AsyncFunction +--- +
{{JSRef}}
+ +

Le constructeur AsyncFunction crée un nouvel objet pour {{jsxref("Instructions/async function", "une fonction asynchrone","",1)}}. En JavaScript, chaque fonction asynchrone est en fait un objet AsyncFunction.

+ +

Attention, AsyncFunction n'est pas un objet global. On peut l'obtenir grâce au code suivant :

+ +
Object.getPrototypeOf(async function(){}).constructor
+
+ +

Syntaxe

+ +
new AsyncFunction ([arg1[, arg2[, ...argN]],] functionBody)
+ +

Paramètres

+ +
+
arg1, arg2, ... argN
+
Les noms des paramètres passés à la fonction. Chacun doit être une chaîne de caractères qui puisse être un identifiant JavaScript valide ou une liste de telles chaînes séparées par une virgule (ex. "x", "laValeur", ou "a,b").
+
functionBody
+
Une chaîne de caractères qui contient les instructions JavaScript définissant la définition de la fonction.
+
+ +

Description

+ +

Les objets des {{jsxref("Instructions/async_function", "fonctions asynchrones","",1)}} créés avec le constructeur AsyncFunction sont analysés lorsque la fonction est créée. C'est moins efficace que de déclarer une fonction asynchrone avec une {{jsxref("Instructions/async_function", "expression de fonction asynchrone")}} et de l'appeler depuis le code car ces fonctions sont analysées avec le reste du code.

+ +

Tous les arguments passés à la fonction sont traités comme les noms des identifiants des paramètres de la fonction qui sera créée, dans l'ordre dans lequel ils sont passés.

+ +
+

Note : Les fonctions asynchrones créées avec le constructeur AsyncFunction ne créent pas de fermetutres dans leurs contextes de création. Elles sont toujours créées dans la portée globale. Lorsqu'on les exécute, ellee ne pourront accéder qu'à leurs variables locales et aux variables globales, pas à celles qui appartiennent à la portée dans laquelle AsyncFunction a été appelé. On aurait donc un comportement différent  si on appelait {{jsxref("Objets_globaux/eval", "eval")}} avec le code de l'expression de la fonction asynchrone.

+
+ +

Si on appelle AsyncFunction comme une fonction (c'est-à-dire sans new), cela aura le même effet que s'il est appelé comme un constructeur.

+ +

Propriétés

+ +
+
AsyncFunction.length
+
La propriété de longueur du constructeur AsyncFunction dont la valeur est 1.
+
{{jsxref("AsyncFunction.prototype")}}
+
Le prototype permet d'ajouter des propriétés à tous les objets représentant les fonctions asynchrones.
+
+ +

Prototype de l'objet AsyncFunction

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/AsyncFunction/prototype', 'Propriétés')}}
+ +

Instances AsyncFunction

+ +

Les instances d'AsyncFunction héritent des méthodes et des propriétés de {{jsxref("AsyncFunction.prototype")}}. Comme avec les autres constructeurs, on peut changer l'objet prototype du constructeur afin de modifier l'ensemble des instances AsyncFunction.

+ +

Exemples

+ +

Créer une fonction asynchrone avec un constructeur AsyncFunction

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      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 => {
+  console.log(v); // affiche 30 après 4 secondes
+});
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}}{{Spec2('ESDraft')}}Définition initiale dans ES2017.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/add/index.html b/files/fr/web/javascript/reference/global_objects/atomics/add/index.html deleted file mode 100644 index d09496b255..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/add/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Atomics.add() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/add -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/add -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/add ---- -
{{JSRef}}
- -

La méthode statique Atomics.add() ajoute une valeur donnée à un élément du tableau à une position donnée. Elle renvoie l'ancienne valeur qui était contenue à cet emplacement. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

- -
{{EmbedInteractiveExample("pages/js/atomics-add.html")}}
- -

Syntaxe

- -
Atomics.add(typedArray, index, valeur)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position du tableau typedArray auquel on souhaite ajouter une valeur.
-
valeur
-
La valeur à ajouter.
-
- -

Valeur de retour

- -

L'ancienne valeur qui était contenue à (typedArray[index]).

- -

Exceptions levées

- - - -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-
-Atomics.add(ta, 0, 12); // renvoie 0, l'ancienne valeur
-Atomics.load(ta, 0);    // 12
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.add', 'Atomics.add')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.add")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/add/index.md b/files/fr/web/javascript/reference/global_objects/atomics/add/index.md new file mode 100644 index 0000000000..d09496b255 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/add/index.md @@ -0,0 +1,81 @@ +--- +title: Atomics.add() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/add +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/add +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/add +--- +
{{JSRef}}
+ +

La méthode statique Atomics.add() ajoute une valeur donnée à un élément du tableau à une position donnée. Elle renvoie l'ancienne valeur qui était contenue à cet emplacement. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

+ +
{{EmbedInteractiveExample("pages/js/atomics-add.html")}}
+ +

Syntaxe

+ +
Atomics.add(typedArray, index, valeur)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position du tableau typedArray auquel on souhaite ajouter une valeur.
+
valeur
+
La valeur à ajouter.
+
+ +

Valeur de retour

+ +

L'ancienne valeur qui était contenue à (typedArray[index]).

+ +

Exceptions levées

+ + + +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+
+Atomics.add(ta, 0, 12); // renvoie 0, l'ancienne valeur
+Atomics.load(ta, 0);    // 12
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.add', 'Atomics.add')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.add")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/and/index.html b/files/fr/web/javascript/reference/global_objects/atomics/and/index.html deleted file mode 100644 index 80e18842ac..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/and/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Atomics.and() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/and -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/and -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/and ---- -
{{JSRef}}
- -

La méthode statique Atomics.and() calcule un ET binaire avec une valeur donnée, à un emplacement donné du tableau. Elle renvoie l'ancienne valeur qui était contenue à cet emplacement. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

- -
{{EmbedInteractiveExample("pages/js/atomics-and.html")}}
- -

Syntaxe

- -
Atomics.and(typedArray, index, valeur)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position dans typedArray où calculer le ET binaire.
-
valeur
-
Le nombre avec lequel on souhaite calculer le ET binaire.
-
- -

Valeur de retour

- -

L'ancienne valeur qui était contenue à (typedArray[index]).

- -

Exceptions levée

- - - -

Description

- -

Un ET binaire fournit la valeur 1 uniquement si a et b valent 1. La table de vérité pour l'opération ET est :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aba & b
000
010
100
111
- -

Ainsi, si on calcule le ET binaire de 5 et 1 avec l'instruction 5 & 1, cela fournira la valeur 0001, qui correspond à 1 en notation décimale.

- -
5  0101
-1  0001
-   ----
-1  0001
- -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-ta[0] = 5;
-
-Atomics.and(ta, 0, 1); // renvoie 0, l'ancienne valeur
-Atomics.load(ta, 0);   // 1
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.and', 'Atomics.and')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.and")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/and/index.md b/files/fr/web/javascript/reference/global_objects/atomics/and/index.md new file mode 100644 index 0000000000..80e18842ac --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/and/index.md @@ -0,0 +1,127 @@ +--- +title: Atomics.and() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/and +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/and +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/and +--- +
{{JSRef}}
+ +

La méthode statique Atomics.and() calcule un ET binaire avec une valeur donnée, à un emplacement donné du tableau. Elle renvoie l'ancienne valeur qui était contenue à cet emplacement. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

+ +
{{EmbedInteractiveExample("pages/js/atomics-and.html")}}
+ +

Syntaxe

+ +
Atomics.and(typedArray, index, valeur)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position dans typedArray où calculer le ET binaire.
+
valeur
+
Le nombre avec lequel on souhaite calculer le ET binaire.
+
+ +

Valeur de retour

+ +

L'ancienne valeur qui était contenue à (typedArray[index]).

+ +

Exceptions levée

+ + + +

Description

+ +

Un ET binaire fournit la valeur 1 uniquement si a et b valent 1. La table de vérité pour l'opération ET est :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba & b
000
010
100
111
+ +

Ainsi, si on calcule le ET binaire de 5 et 1 avec l'instruction 5 & 1, cela fournira la valeur 0001, qui correspond à 1 en notation décimale.

+ +
5  0101
+1  0001
+   ----
+1  0001
+ +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+ta[0] = 5;
+
+Atomics.and(ta, 0, 1); // renvoie 0, l'ancienne valeur
+Atomics.load(ta, 0);   // 1
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.and', 'Atomics.and')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.and")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.html b/files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.html deleted file mode 100644 index add0ccdd87..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Atomics.compareExchange() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/compareExchange ---- -
{{JSRef}}
- -

La méthode statique Atomics.compareExchange() échange une valeur d'un tableau à un emplacement donné si la valeur qui était dans le tableau correspond à une valeur donnée. Cette méthode renvoie l'ancienne valeur à cet emplacement, qu'il y ait eu remplacement ou non. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

- -
{{EmbedInteractiveExample("pages/js/atomics-compareexchange.html")}}
- -

Syntaxe

- -
Atomics.compareExchange(typedArray, index, valeurAttendue, valeurRemplacement)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position du tableau typedArray à laquelle on veut échanger les valeurs.
-
valeurAttendue
-
La valeur avec laquelle on teste l'égalité.
-
valeurRemplacement
-
Le nombre qu'on souhaite placer dans le tableau si l'ancienne valeur est égale avec valeurAttendue.
-
- -

Valeur de retour

- -

L'ancienne valeur présente à typedArray[index].

- -

Exceptions levées

- - - -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-ta[0] = 7;
-
-Atomics.compareExchange(ta, 0, 7, 12); // renvoie 7, l'ancienne valeur
-Atomics.load(ta, 0);                   // 12
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.compareexchange', 'Atomics.compareExchange')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.compareExchange")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.md b/files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.md new file mode 100644 index 0000000000..add0ccdd87 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/compareexchange/index.md @@ -0,0 +1,84 @@ +--- +title: Atomics.compareExchange() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/compareExchange +--- +
{{JSRef}}
+ +

La méthode statique Atomics.compareExchange() échange une valeur d'un tableau à un emplacement donné si la valeur qui était dans le tableau correspond à une valeur donnée. Cette méthode renvoie l'ancienne valeur à cet emplacement, qu'il y ait eu remplacement ou non. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

+ +
{{EmbedInteractiveExample("pages/js/atomics-compareexchange.html")}}
+ +

Syntaxe

+ +
Atomics.compareExchange(typedArray, index, valeurAttendue, valeurRemplacement)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position du tableau typedArray à laquelle on veut échanger les valeurs.
+
valeurAttendue
+
La valeur avec laquelle on teste l'égalité.
+
valeurRemplacement
+
Le nombre qu'on souhaite placer dans le tableau si l'ancienne valeur est égale avec valeurAttendue.
+
+ +

Valeur de retour

+ +

L'ancienne valeur présente à typedArray[index].

+ +

Exceptions levées

+ + + +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+ta[0] = 7;
+
+Atomics.compareExchange(ta, 0, 7, 12); // renvoie 7, l'ancienne valeur
+Atomics.load(ta, 0);                   // 12
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.compareexchange', 'Atomics.compareExchange')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.compareExchange")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/exchange/index.html b/files/fr/web/javascript/reference/global_objects/atomics/exchange/index.html deleted file mode 100644 index 7a01cb04b1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/exchange/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Atomics.exchange() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/exchange -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/exchange -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/exchange ---- -
{{JSRef}}
- -

La méthode statique Atomics.exchange() permet d'enregistrer une valeur à une position donnée d'un tableau et de renvoyer l'ancienne valeur qui était contenue dans le tableau. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

- -
{{EmbedInteractiveExample("pages/js/atomics-exchange.html")}}
- -

Syntaxe

- -
Atomics.exchange(typedArray, index, valeur)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position dans le tableau typedArray à laquelle on veut placer valeur.
-
valeur
-
Le nombre qu'on souhaite échanger.
-
- -

Valeur de retour

- -

L'ancienne valeur qui était contenue à (typedArray[index]).

- -

Exceptions levées

- - - -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-
-Atomics.exchange(ta, 0, 12);  // renvoie 0, l'ancienne valeur
-Atomics.load(ta, 0);          // 12
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-atomics.exchange', 'Atomics.exchange')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Atomics.exchange")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/exchange/index.md b/files/fr/web/javascript/reference/global_objects/atomics/exchange/index.md new file mode 100644 index 0000000000..7a01cb04b1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/exchange/index.md @@ -0,0 +1,83 @@ +--- +title: Atomics.exchange() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/exchange +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/exchange +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/exchange +--- +
{{JSRef}}
+ +

La méthode statique Atomics.exchange() permet d'enregistrer une valeur à une position donnée d'un tableau et de renvoyer l'ancienne valeur qui était contenue dans le tableau. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

+ +
{{EmbedInteractiveExample("pages/js/atomics-exchange.html")}}
+ +

Syntaxe

+ +
Atomics.exchange(typedArray, index, valeur)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position dans le tableau typedArray à laquelle on veut placer valeur.
+
valeur
+
Le nombre qu'on souhaite échanger.
+
+ +

Valeur de retour

+ +

L'ancienne valeur qui était contenue à (typedArray[index]).

+ +

Exceptions levées

+ + + +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+
+Atomics.exchange(ta, 0, 12);  // renvoie 0, l'ancienne valeur
+Atomics.load(ta, 0);          // 12
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-atomics.exchange', 'Atomics.exchange')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("javascript.builtins.Atomics.exchange")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/index.html b/files/fr/web/javascript/reference/global_objects/atomics/index.html deleted file mode 100644 index b358b66964..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Atomics -slug: Web/JavaScript/Reference/Global_Objects/Atomics -tags: - - JavaScript - - Mémoire partagée - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics ---- -
{{JSRef}}
- -

L'objet Atomics fournit des opérations atomiques sous la forme de méthodes statiques. Celles-ci sont utilisées avec les objets {{jsxref("SharedArrayBuffer")}}.

- -

Les opérations atomiques sont installées sur un module Atomics. À la différence des autres objets globaux, Atomics n'est pas un constructeur. Pour cette raison, il ne peut être utilisé avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new")}} et il ne peut pas être appelé comme une fonction. Les propriétés et les méthodes d'Atomics sont statiques (Atomics fonctionne ainsi comme l'objet {{jsxref("Math")}}).

- -

Propriétés

- -
-
Atomics[Symbol.toStringTag]
-
-

La valeur de cette propriété vaut "Atomics".

-
-
- -

Méthodes

- -

Opérations atomiques

- -

Lorsque la mémoire est partagée, plusieurs threads peuvent lire et écrire sur les mêmes données en mémoire. Les opérations atomiques permettent de s'assurer que des valeurs prévisibles sont écrites et lues, que les opérations sont finies avant que la prochaine débute et que les opérations ne sont pas interrompues.

- -
-
{{jsxref("Atomics.add()")}}
-
Cette méthode ajoute la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
-
{{jsxref("Atomics.and()")}}
-
Cette méthode calcule un ET binaire sur la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
-
{{jsxref("Atomics.compareExchange()")}}
-
Cette méthode stocke la valeur fournie à la position indiquée dans le tableau si elle est égale à une valeur donnée. Elle renvoie l'ancienne valeur.
-
{{jsxref("Atomics.exchange()")}}
-
Cette méthode stocke la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur.
-
{{jsxref("Atomics.load()")}}
-
Cette méthode renvoie la valeur à la position indiquée dans le tableau.
-
{{jsxref("Atomics.or()")}}
-
Cette méthode calcule un OU binaire entre la valeur fournie et la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
-
{{jsxref("Atomics.store()")}}
-
Cette méthode stocke une valeur à une position indiquée dans le tableau. Elle renvoie la valeur.
-
{{jsxref("Atomics.sub()")}}
-
Cette méthode soustrait la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était contenue à cette position.
-
{{jsxref("Atomics.xor()")}}
-
Cette méthode calcule un OU exclusif binaire sur une position donnée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
-
- -

Attente et notification (wait et notify)

- -

Le méthodes wait() et notify() sont basées sur les futex Linux (selon le vocabulaire employé sur Linux où ça signifie « fast user-space mutex » ou encore « mutex rapide pour l'espace utilisateur ») fournissent des outils pour attendre jusqu'à ce qu'une condition donnée soit vérifiée. Généralement ces méthodes sont utilisées pour bloquer des opérations.

- -
-
{{jsxref("Atomics.wait()")}}
-
Cette méthode vérifie qu'une position donnée du tableau contient bien une valeur donnée puis dort ou expire. Elle renvoie une des chaînes suivantes "ok", "not-equal", "timed-out". Si l'agent appelant ne permet pas d'attente, cela lèvera une exception Error (la plupart des navigateurs ne permettront pas que futexWait() soit utilisé sur le thread principal du navigateur).
-
{{jsxref("Atomics.notify()")}}
-
Cette méthode notifient les agents qui attendent dans la file d'attente à une position donnée. Elle renvoie le nombre d'agents notifiés.
-
{{jsxref("Atomics.isLockFree()")}}
-
Une primitive d'optimisation qui peut être utilisée afin de déterminer s'il faut utiliser des verrous (locks) ou des opérations atomiques. Elle renvoie true si la taille donnée est l'une des propriétés BYTES_PER_ELEMENT des types TypedArray et qu'on peut donc implémenter l'opération de façon atomique plutôt que d'utiliser un verrou.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}}{{Spec2('ESDraft')}} 
{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}}{{Spec2('ES8')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

Avant Firefox 48 {{geckoRelease(48)}}, les noms les plus récents et la sémantique la plus récente n'étaient pas encore implémentés. Les changements qui ont eu lieu entre la version 46 et la version 48 de Firefox sont :

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/index.md b/files/fr/web/javascript/reference/global_objects/atomics/index.md new file mode 100644 index 0000000000..b358b66964 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/index.md @@ -0,0 +1,114 @@ +--- +title: Atomics +slug: Web/JavaScript/Reference/Global_Objects/Atomics +tags: + - JavaScript + - Mémoire partagée + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics +--- +
{{JSRef}}
+ +

L'objet Atomics fournit des opérations atomiques sous la forme de méthodes statiques. Celles-ci sont utilisées avec les objets {{jsxref("SharedArrayBuffer")}}.

+ +

Les opérations atomiques sont installées sur un module Atomics. À la différence des autres objets globaux, Atomics n'est pas un constructeur. Pour cette raison, il ne peut être utilisé avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new")}} et il ne peut pas être appelé comme une fonction. Les propriétés et les méthodes d'Atomics sont statiques (Atomics fonctionne ainsi comme l'objet {{jsxref("Math")}}).

+ +

Propriétés

+ +
+
Atomics[Symbol.toStringTag]
+
+

La valeur de cette propriété vaut "Atomics".

+
+
+ +

Méthodes

+ +

Opérations atomiques

+ +

Lorsque la mémoire est partagée, plusieurs threads peuvent lire et écrire sur les mêmes données en mémoire. Les opérations atomiques permettent de s'assurer que des valeurs prévisibles sont écrites et lues, que les opérations sont finies avant que la prochaine débute et que les opérations ne sont pas interrompues.

+ +
+
{{jsxref("Atomics.add()")}}
+
Cette méthode ajoute la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
+
{{jsxref("Atomics.and()")}}
+
Cette méthode calcule un ET binaire sur la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
+
{{jsxref("Atomics.compareExchange()")}}
+
Cette méthode stocke la valeur fournie à la position indiquée dans le tableau si elle est égale à une valeur donnée. Elle renvoie l'ancienne valeur.
+
{{jsxref("Atomics.exchange()")}}
+
Cette méthode stocke la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur.
+
{{jsxref("Atomics.load()")}}
+
Cette méthode renvoie la valeur à la position indiquée dans le tableau.
+
{{jsxref("Atomics.or()")}}
+
Cette méthode calcule un OU binaire entre la valeur fournie et la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
+
{{jsxref("Atomics.store()")}}
+
Cette méthode stocke une valeur à une position indiquée dans le tableau. Elle renvoie la valeur.
+
{{jsxref("Atomics.sub()")}}
+
Cette méthode soustrait la valeur fournie à la position indiquée dans le tableau. Elle renvoie l'ancienne valeur qui était contenue à cette position.
+
{{jsxref("Atomics.xor()")}}
+
Cette méthode calcule un OU exclusif binaire sur une position donnée dans le tableau. Elle renvoie l'ancienne valeur qui était à cette position.
+
+ +

Attente et notification (wait et notify)

+ +

Le méthodes wait() et notify() sont basées sur les futex Linux (selon le vocabulaire employé sur Linux où ça signifie « fast user-space mutex » ou encore « mutex rapide pour l'espace utilisateur ») fournissent des outils pour attendre jusqu'à ce qu'une condition donnée soit vérifiée. Généralement ces méthodes sont utilisées pour bloquer des opérations.

+ +
+
{{jsxref("Atomics.wait()")}}
+
Cette méthode vérifie qu'une position donnée du tableau contient bien une valeur donnée puis dort ou expire. Elle renvoie une des chaînes suivantes "ok", "not-equal", "timed-out". Si l'agent appelant ne permet pas d'attente, cela lèvera une exception Error (la plupart des navigateurs ne permettront pas que futexWait() soit utilisé sur le thread principal du navigateur).
+
{{jsxref("Atomics.notify()")}}
+
Cette méthode notifient les agents qui attendent dans la file d'attente à une position donnée. Elle renvoie le nombre d'agents notifiés.
+
{{jsxref("Atomics.isLockFree()")}}
+
Une primitive d'optimisation qui peut être utilisée afin de déterminer s'il faut utiliser des verrous (locks) ou des opérations atomiques. Elle renvoie true si la taille donnée est l'une des propriétés BYTES_PER_ELEMENT des types TypedArray et qu'on peut donc implémenter l'opération de façon atomique plutôt que d'utiliser un verrou.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}}{{Spec2('ESDraft')}} 
{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}}{{Spec2('ES8')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

Avant Firefox 48 {{geckoRelease(48)}}, les noms les plus récents et la sémantique la plus récente n'étaient pas encore implémentés. Les changements qui ont eu lieu entre la version 46 et la version 48 de Firefox sont :

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.html b/files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.html deleted file mode 100644 index be1df1cda2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Atomics.isLockFree() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/isLockFree -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/isLockFree -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/isLockFree ---- -
{{JSRef}}
- -

La méthode statique Atomics.isLockFree() est utilisée afin de déterminer si on doit utiliser des verrous (locks) ou des opérations atomiques. Elle renvoie true si la taille donnée correspond à une des propriétés BYTES_PER_ELEMENT d'un des types TypedArray.

- -
{{EmbedInteractiveExample("pages/js/atomics-islockfree.html")}}
- -

Syntaxe

- -
Atomics.isLockFree(taille)
-
- -

Paramètres

- -
-
taille
-
La taille en octets qu'on souhaite vérifier.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} indiquant si l'opération se déroule sans verrou.

- -

Exemples

- -
Atomics.isLockFree(1); // true
-Atomics.isLockFree(2); // true
-Atomics.isLockFree(3); // false
-Atomics.isLockFree(4); // true
-Atomics.isLockFree(5); // false
-Atomics.isLockFree(6); // false
-Atomics.isLockFree(7); // false
-Atomics.isLockFree(8); // true
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.islockfree', 'Atomics.isLockFree')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.isLockFree")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.md b/files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.md new file mode 100644 index 0000000000..be1df1cda2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/islockfree/index.md @@ -0,0 +1,71 @@ +--- +title: Atomics.isLockFree() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/isLockFree +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/isLockFree +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/isLockFree +--- +
{{JSRef}}
+ +

La méthode statique Atomics.isLockFree() est utilisée afin de déterminer si on doit utiliser des verrous (locks) ou des opérations atomiques. Elle renvoie true si la taille donnée correspond à une des propriétés BYTES_PER_ELEMENT d'un des types TypedArray.

+ +
{{EmbedInteractiveExample("pages/js/atomics-islockfree.html")}}
+ +

Syntaxe

+ +
Atomics.isLockFree(taille)
+
+ +

Paramètres

+ +
+
taille
+
La taille en octets qu'on souhaite vérifier.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} indiquant si l'opération se déroule sans verrou.

+ +

Exemples

+ +
Atomics.isLockFree(1); // true
+Atomics.isLockFree(2); // true
+Atomics.isLockFree(3); // false
+Atomics.isLockFree(4); // true
+Atomics.isLockFree(5); // false
+Atomics.isLockFree(6); // false
+Atomics.isLockFree(7); // false
+Atomics.isLockFree(8); // true
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.islockfree', 'Atomics.isLockFree')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.isLockFree")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/load/index.html b/files/fr/web/javascript/reference/global_objects/atomics/load/index.html deleted file mode 100644 index 8e692f4ce8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/load/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Atomics.load() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/load -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/load -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/load ---- -
{{JSRef}}
- -

La méthode statique Atomics.load() renvoie une valeur située à une position donnée du tableau.

- -
{{EmbedInteractiveExample("pages/js/atomics-load.html")}}
- -

Syntaxe

- -
Atomics.load(typedArray, index)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position du tableau typedArray qu'on souhaite charger.
-
- -

Valeur de retour

- -

La valeur à la position indiquée (typedArray[index]).

- -

Exceptions levées

- - - -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-
-Atomics.add(ta, 0, 12);
-Atomics.load(ta, 0); // 12
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.load', 'Atomics.load')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.load")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/load/index.md b/files/fr/web/javascript/reference/global_objects/atomics/load/index.md new file mode 100644 index 0000000000..8e692f4ce8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/load/index.md @@ -0,0 +1,79 @@ +--- +title: Atomics.load() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/load +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/load +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/load +--- +
{{JSRef}}
+ +

La méthode statique Atomics.load() renvoie une valeur située à une position donnée du tableau.

+ +
{{EmbedInteractiveExample("pages/js/atomics-load.html")}}
+ +

Syntaxe

+ +
Atomics.load(typedArray, index)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position du tableau typedArray qu'on souhaite charger.
+
+ +

Valeur de retour

+ +

La valeur à la position indiquée (typedArray[index]).

+ +

Exceptions levées

+ + + +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+
+Atomics.add(ta, 0, 12);
+Atomics.load(ta, 0); // 12
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.load', 'Atomics.load')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.load")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/notify/index.html b/files/fr/web/javascript/reference/global_objects/atomics/notify/index.html deleted file mode 100644 index 81135aa541..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/notify/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Atomics.notify() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/notify -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/notify -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/notify ---- -
{{JSRef}}
- -

La méthode statique Atomics.notify() permet de réveiller des agents dormants qui sont dans la file d'attente.

- -
-

Note : Cette opération ne fonctionne que sur un tableau typé partagé de type {{jsxref("Int32Array")}}.

-
- -

Syntaxe

- -
Atomics.notify(typedArray, index, count)
-
- -

Paramètres

- -
-
typedArray
-
Un table typé partagé de type {{jsxref("Int32Array")}}.
-
index
-
La position sur le tableau typedArray pour laquelle réveiller les agents.
-
count
-
Le nombre d'agents dormants à réveiller.
-
- -

Valeur de retour

- -

Le nombre d'agents réveillés.

- -

Exceptions levées

- - - -

Exemples

- -

Soit un tableau typé partagé Int32Array:

- -
var sab = new SharedArrayBuffer(1024);
-var int32 = new Int32Array(sab);
-
- -

Un thread de lecture est en sommeil et surveille l'emplacement 0 et s'attend à ce que la valeur soit 0. Tant que cette condition est vérifiée, l'exécution n'ira pas plus loin. Lorsque le thread d'écriture a enregistré une nouvelle valeur, le thread de lecture sera réveillé par le thread d'écriture et renverra la nouvelle valeur (123).

- -
Atomics.wait(int32, 0, 0);
-console.log(int32[0]); // 123
- -

Un thread d'écriture stocke une nouvelle valeur et notifie le thread de lecture une fois que la valeur a bien été écrite :

- -
console.log(int32[0]); // 0;
-Atomics.store(int32, 0, 123);
-Atomics.notify(int32, 0, 1);
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-atomics.notify', 'Atomics.notify')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.notify")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/notify/index.md b/files/fr/web/javascript/reference/global_objects/atomics/notify/index.md new file mode 100644 index 0000000000..81135aa541 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/notify/index.md @@ -0,0 +1,93 @@ +--- +title: Atomics.notify() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/notify +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/notify +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/notify +--- +
{{JSRef}}
+ +

La méthode statique Atomics.notify() permet de réveiller des agents dormants qui sont dans la file d'attente.

+ +
+

Note : Cette opération ne fonctionne que sur un tableau typé partagé de type {{jsxref("Int32Array")}}.

+
+ +

Syntaxe

+ +
Atomics.notify(typedArray, index, count)
+
+ +

Paramètres

+ +
+
typedArray
+
Un table typé partagé de type {{jsxref("Int32Array")}}.
+
index
+
La position sur le tableau typedArray pour laquelle réveiller les agents.
+
count
+
Le nombre d'agents dormants à réveiller.
+
+ +

Valeur de retour

+ +

Le nombre d'agents réveillés.

+ +

Exceptions levées

+ + + +

Exemples

+ +

Soit un tableau typé partagé Int32Array:

+ +
var sab = new SharedArrayBuffer(1024);
+var int32 = new Int32Array(sab);
+
+ +

Un thread de lecture est en sommeil et surveille l'emplacement 0 et s'attend à ce que la valeur soit 0. Tant que cette condition est vérifiée, l'exécution n'ira pas plus loin. Lorsque le thread d'écriture a enregistré une nouvelle valeur, le thread de lecture sera réveillé par le thread d'écriture et renverra la nouvelle valeur (123).

+ +
Atomics.wait(int32, 0, 0);
+console.log(int32[0]); // 123
+ +

Un thread d'écriture stocke une nouvelle valeur et notifie le thread de lecture une fois que la valeur a bien été écrite :

+ +
console.log(int32[0]); // 0;
+Atomics.store(int32, 0, 123);
+Atomics.notify(int32, 0, 1);
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-atomics.notify', 'Atomics.notify')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.notify")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/or/index.html b/files/fr/web/javascript/reference/global_objects/atomics/or/index.html deleted file mode 100644 index 0147a2d36e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/or/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Atomics.or() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/or -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/or -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/or ---- -
{{JSRef}}
- -

La méthode statique Atomics.or() calcule le résultat d'un OU binaire entre une valeur donnée et une valeur du tableau typé et y place le résultat obtenu. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

- -
{{EmbedInteractiveExample("pages/js/atomics-or.html")}}
- -

Syntaxe

- -
Atomics.or(typedArray, index, value)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position du tableau typedArray sur laquelle calculer le OU binaire.
-
valeur
-
Le nombre avec lequel calculer le OU binaire.
-
- -

Valeur de retour

- -

L'ancienne valeur contenue à l'emplacement du tableau (typedArray[index]).

- -

Exceptions levées

- - - -

Description

- -

L'opération binaire OU renvoie 1 si a ou b valent 1. La table de vérité de cette opération est :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aba | b
000
011
101
111
- -

Par exemple, un OU binaire appliqué entre 5 et 1 (5 | 1) renvoie 0101, ce qui correspond à 5 en notation décimale.

- -
5  0101
-1  0001
-   ----
-5  0101
-
- -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-ta[0] = 2;
-
-Atomics.or(ta, 0, 1); // renvoie 2, l'ancienne valeur
-Atomics.load(ta, 0);  // 3
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.or', 'Atomics.or')}}{{Spec2('ESDraft')}}Définition initiale avec 2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.or")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/or/index.md b/files/fr/web/javascript/reference/global_objects/atomics/or/index.md new file mode 100644 index 0000000000..0147a2d36e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/or/index.md @@ -0,0 +1,127 @@ +--- +title: Atomics.or() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/or +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/or +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/or +--- +
{{JSRef}}
+ +

La méthode statique Atomics.or() calcule le résultat d'un OU binaire entre une valeur donnée et une valeur du tableau typé et y place le résultat obtenu. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

+ +
{{EmbedInteractiveExample("pages/js/atomics-or.html")}}
+ +

Syntaxe

+ +
Atomics.or(typedArray, index, value)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position du tableau typedArray sur laquelle calculer le OU binaire.
+
valeur
+
Le nombre avec lequel calculer le OU binaire.
+
+ +

Valeur de retour

+ +

L'ancienne valeur contenue à l'emplacement du tableau (typedArray[index]).

+ +

Exceptions levées

+ + + +

Description

+ +

L'opération binaire OU renvoie 1 si a ou b valent 1. La table de vérité de cette opération est :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba | b
000
011
101
111
+ +

Par exemple, un OU binaire appliqué entre 5 et 1 (5 | 1) renvoie 0101, ce qui correspond à 5 en notation décimale.

+ +
5  0101
+1  0001
+   ----
+5  0101
+
+ +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+ta[0] = 2;
+
+Atomics.or(ta, 0, 1); // renvoie 2, l'ancienne valeur
+Atomics.load(ta, 0);  // 3
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.or', 'Atomics.or')}}{{Spec2('ESDraft')}}Définition initiale avec 2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.or")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/store/index.html b/files/fr/web/javascript/reference/global_objects/atomics/store/index.html deleted file mode 100644 index 4f31079d58..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/store/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Atomics.store() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/store -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/store -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/store ---- -
{{JSRef}}
- -

La méthode statique Atomics.store() enregistre une valeur donnée à un emplacement donné du tableau partagé et renvoie cette valeur.

- -
{{EmbedInteractiveExample("pages/js/atomics-store.html")}}
- -

Syntaxe

- -
Atomics.store(typedArray, index, valeur)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position du tableau typedArray à laquelle on souhaite stocker la valeur.
-
valeur
-
Le nombre à enregistrer.
-
- -

Valeur de retour

- -

La valeur qui a été enregistrée.

- -

Exceptions

- - - -

Exemples

- -
var buffer = new ArrayBuffer(4);         // Buffer classique
-var float32 = new Float32Array(buffer);  // Nombre flottant
-var uint32 = new Uint32Array(buffer);    // Représentation IEEE754
-
-float32[0] = 0.5;
-console.log("0x" + uint32[0].toString(16));
-
-uint32[0] = 0x3f000000;   /// Représentation sur 32 bits de 0.5 (IEEE754)
-console.log(float32[0]);
-
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.store', 'Atomics.store')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.store")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/store/index.md b/files/fr/web/javascript/reference/global_objects/atomics/store/index.md new file mode 100644 index 0000000000..4f31079d58 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/store/index.md @@ -0,0 +1,87 @@ +--- +title: Atomics.store() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/store +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/store +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/store +--- +
{{JSRef}}
+ +

La méthode statique Atomics.store() enregistre une valeur donnée à un emplacement donné du tableau partagé et renvoie cette valeur.

+ +
{{EmbedInteractiveExample("pages/js/atomics-store.html")}}
+ +

Syntaxe

+ +
Atomics.store(typedArray, index, valeur)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position du tableau typedArray à laquelle on souhaite stocker la valeur.
+
valeur
+
Le nombre à enregistrer.
+
+ +

Valeur de retour

+ +

La valeur qui a été enregistrée.

+ +

Exceptions

+ + + +

Exemples

+ +
var buffer = new ArrayBuffer(4);         // Buffer classique
+var float32 = new Float32Array(buffer);  // Nombre flottant
+var uint32 = new Uint32Array(buffer);    // Représentation IEEE754
+
+float32[0] = 0.5;
+console.log("0x" + uint32[0].toString(16));
+
+uint32[0] = 0x3f000000;   /// Représentation sur 32 bits de 0.5 (IEEE754)
+console.log(float32[0]);
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.store', 'Atomics.store')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.store")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/sub/index.html b/files/fr/web/javascript/reference/global_objects/atomics/sub/index.html deleted file mode 100644 index 313fc0577e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/sub/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Atomics.sub() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/sub -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/sub -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/sub ---- -
{{JSRef}}
- -

La méthode statique Atomics.sub() permet de soustraire une valeur donnée à une position donnée du tableau partagé. Elle renvoie l'ancienne valeur qui était contenue dans le tableau avant l'opération. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

- -
{{EmbedInteractiveExample("pages/js/atomics-sub.html")}}
- -

Syntaxe

- -
Atomics.sub(typedArray, index, valeur)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position du tableau typé typedArray à laquelle on veut soustraire valeur.
-
valeur
-
La quantité qu'on souhaite soustraire.
-
- -

Valeur de retour

- -

L'ancienne valeur qui était contenue à (typedArray[index]).

- -

Exceptions levées

- - - -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-ta[0] = 48;
-
-Atomics.sub(ta, 0, 12); // renvoie 48, l'ancienne valeur
-Atomics.load(ta, 0);    // 36
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.sub', 'Atomics.sub')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.sub")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/sub/index.md b/files/fr/web/javascript/reference/global_objects/atomics/sub/index.md new file mode 100644 index 0000000000..313fc0577e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/sub/index.md @@ -0,0 +1,83 @@ +--- +title: Atomics.sub() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/sub +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/sub +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/sub +--- +
{{JSRef}}
+ +

La méthode statique Atomics.sub() permet de soustraire une valeur donnée à une position donnée du tableau partagé. Elle renvoie l'ancienne valeur qui était contenue dans le tableau avant l'opération. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

+ +
{{EmbedInteractiveExample("pages/js/atomics-sub.html")}}
+ +

Syntaxe

+ +
Atomics.sub(typedArray, index, valeur)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position du tableau typé typedArray à laquelle on veut soustraire valeur.
+
valeur
+
La quantité qu'on souhaite soustraire.
+
+ +

Valeur de retour

+ +

L'ancienne valeur qui était contenue à (typedArray[index]).

+ +

Exceptions levées

+ + + +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+ta[0] = 48;
+
+Atomics.sub(ta, 0, 12); // renvoie 48, l'ancienne valeur
+Atomics.load(ta, 0);    // 36
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.sub', 'Atomics.sub')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.sub")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/wait/index.html b/files/fr/web/javascript/reference/global_objects/atomics/wait/index.html deleted file mode 100644 index 0a25246d86..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/wait/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Atomics.wait() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/wait -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/wait -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/wait ---- -
{{JSRef}}
- -

La méthode statique Atomics.wait() permet de vérifier qu'un emplacement d'un tableau {{jsxref("Int32Array")}} contient toujours une valeur donnée et, si c'est le cas, l'agent dort en attendant un réveil ou un délai d'expiration. La méthode renvoie une chaîne qui vaut "ok", "not-equal" ou "timed-out".

- -
-

Note : Cette opération ne fonctionne qu'avec un tableau typé partagé {{jsxref("Int32Array")}} et peut ne pas être autorisée sur le thread principal.

-
- -

Syntaxe

- -
Atomics.wait(typedArray, index, valeur[, timeout])
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé partagé de type {{jsxref("Int32Array")}}.
-
index
-
La position du tableau typé typedArray sur laquelle on attend un changement.
-
valeur
-
La valeur attendue qu'on souhaite tester.
-
timeout {{optional_inline}}
-
Le temps à attendre pour le changement de valeur, exprimé en millisecondes. La valeur par défaut est {{jsxref("Infinity")}}.
-
- -

Valeur de retour

- -

Une chaîne de caractères ({{jsxref("String")}} qui vaut "ok", "not-equal" ou "timed-out" selon le cas.

- -

Exceptions levées

- - - -

Exemples

- -

Soit un tableau typé partagé Int32Array:

- -
var sab = new SharedArrayBuffer(1024);
-var int32 = new Int32Array(sab);
-
- -

Un thread de lecture est en sommeille et surveille l'emplacement 0 et s'attend à ce que la valeur soit 0. Tant que cette condition est vérifiée, l'exécution n'ira pas plus loin. Lorsque le thread d'écriture a enregistré une nouvelle valeur, le thread de lecture sera notifié par le thread d'écriture et renverra la nouvelle valeur (123).

- -
Atomics.wait(int32, 0, 0);
-console.log(int32[0]); // 123
- -

Un thread d'écriture stocke une nouvelle valeur et notifie le thread de lecture une fois que la valeur a bien été écrite :

- -
console.log(int32[0]); // 0;
-Atomics.store(int32, 0, 123);
-Atomics.notify(int32, 0, 1);
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.wait', 'Atomics.wait')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.wait")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/wait/index.md b/files/fr/web/javascript/reference/global_objects/atomics/wait/index.md new file mode 100644 index 0000000000..0a25246d86 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/wait/index.md @@ -0,0 +1,95 @@ +--- +title: Atomics.wait() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/wait +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/wait +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/wait +--- +
{{JSRef}}
+ +

La méthode statique Atomics.wait() permet de vérifier qu'un emplacement d'un tableau {{jsxref("Int32Array")}} contient toujours une valeur donnée et, si c'est le cas, l'agent dort en attendant un réveil ou un délai d'expiration. La méthode renvoie une chaîne qui vaut "ok", "not-equal" ou "timed-out".

+ +
+

Note : Cette opération ne fonctionne qu'avec un tableau typé partagé {{jsxref("Int32Array")}} et peut ne pas être autorisée sur le thread principal.

+
+ +

Syntaxe

+ +
Atomics.wait(typedArray, index, valeur[, timeout])
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé partagé de type {{jsxref("Int32Array")}}.
+
index
+
La position du tableau typé typedArray sur laquelle on attend un changement.
+
valeur
+
La valeur attendue qu'on souhaite tester.
+
timeout {{optional_inline}}
+
Le temps à attendre pour le changement de valeur, exprimé en millisecondes. La valeur par défaut est {{jsxref("Infinity")}}.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères ({{jsxref("String")}} qui vaut "ok", "not-equal" ou "timed-out" selon le cas.

+ +

Exceptions levées

+ + + +

Exemples

+ +

Soit un tableau typé partagé Int32Array:

+ +
var sab = new SharedArrayBuffer(1024);
+var int32 = new Int32Array(sab);
+
+ +

Un thread de lecture est en sommeille et surveille l'emplacement 0 et s'attend à ce que la valeur soit 0. Tant que cette condition est vérifiée, l'exécution n'ira pas plus loin. Lorsque le thread d'écriture a enregistré une nouvelle valeur, le thread de lecture sera notifié par le thread d'écriture et renverra la nouvelle valeur (123).

+ +
Atomics.wait(int32, 0, 0);
+console.log(int32[0]); // 123
+ +

Un thread d'écriture stocke une nouvelle valeur et notifie le thread de lecture une fois que la valeur a bien été écrite :

+ +
console.log(int32[0]); // 0;
+Atomics.store(int32, 0, 123);
+Atomics.notify(int32, 0, 1);
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.wait', 'Atomics.wait')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.wait")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/atomics/xor/index.html b/files/fr/web/javascript/reference/global_objects/atomics/xor/index.html deleted file mode 100644 index c3de46ad67..0000000000 --- a/files/fr/web/javascript/reference/global_objects/atomics/xor/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Atomics.xor() -slug: Web/JavaScript/Reference/Global_Objects/Atomics/xor -tags: - - Atomics - - JavaScript - - Mémoire partagée - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/xor -original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/xor ---- -
{{JSRef}}
- -

La méthode statique Atomics.xor() calcule le résultat d'un OU exclusif (XOR) binaire entre une valeur donnée et une valeur du tableau partagé à un emplacement donné. Elle renvoie l'ancienne valeur qui était contenue à cette position. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

- -
{{EmbedInteractiveExample("pages/js/atomics-xor.html")}}
- -

Syntaxe

- -
Atomics.xor(typedArray, index, valeur)
-
- -

Paramètres

- -
-
typedArray
-
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
-
index
-
La position du tableau typedArray à laquelle calculer le OU exclusif binaire.
-
valeur
-
La valeur avec laquelle on souhaite calculer le OU exclusif binaire.
-
- -

Valeur de retour

- -

L'ancienne valeur située à cet emplacement du tableau (typedArray[index]).

- -

Exceptions

- - - -

Description

- -

L'opération binaire OU exclusif (XOR) renvoie 1 si a et b sont différents. La table de vérité correspondante est :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aba ^ b
000
011
101
110
- -

Par exemple, le calcul d'un OU exclusif binaire entre 5 et 1 (5 ^ 1) renvoie 0100, qui correspond à 4 en notation décimale.

- -
5  0101
-1  0001
-   ----
-4  0100
-
- -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-var ta = new Uint8Array(sab);
-ta[0] = 5;
-
-Atomics.xor(ta, 0, 1); // renvoie 5, l'ancienne valeur
-Atomics.load(ta, 0);   // 4
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.xor', 'Atomics.xor')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Atomics.xor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/atomics/xor/index.md b/files/fr/web/javascript/reference/global_objects/atomics/xor/index.md new file mode 100644 index 0000000000..c3de46ad67 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/atomics/xor/index.md @@ -0,0 +1,127 @@ +--- +title: Atomics.xor() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/xor +tags: + - Atomics + - JavaScript + - Mémoire partagée + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/xor +original_slug: Web/JavaScript/Reference/Objets_globaux/Atomics/xor +--- +
{{JSRef}}
+ +

La méthode statique Atomics.xor() calcule le résultat d'un OU exclusif (XOR) binaire entre une valeur donnée et une valeur du tableau partagé à un emplacement donné. Elle renvoie l'ancienne valeur qui était contenue à cette position. Cette opération atomique garantit qu'aucune autre opération d'écriture n'est appliquée tant que la valeur modifiée n'est pas écrite.

+ +
{{EmbedInteractiveExample("pages/js/atomics-xor.html")}}
+ +

Syntaxe

+ +
Atomics.xor(typedArray, index, valeur)
+
+ +

Paramètres

+ +
+
typedArray
+
Un tableau typé entier partagé parmi {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} ou {{jsxref("Uint32Array")}}.
+
index
+
La position du tableau typedArray à laquelle calculer le OU exclusif binaire.
+
valeur
+
La valeur avec laquelle on souhaite calculer le OU exclusif binaire.
+
+ +

Valeur de retour

+ +

L'ancienne valeur située à cet emplacement du tableau (typedArray[index]).

+ +

Exceptions

+ + + +

Description

+ +

L'opération binaire OU exclusif (XOR) renvoie 1 si a et b sont différents. La table de vérité correspondante est :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba ^ b
000
011
101
110
+ +

Par exemple, le calcul d'un OU exclusif binaire entre 5 et 1 (5 ^ 1) renvoie 0100, qui correspond à 4 en notation décimale.

+ +
5  0101
+1  0001
+   ----
+4  0100
+
+ +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+ta[0] = 5;
+
+Atomics.xor(ta, 0, 1); // renvoie 5, l'ancienne valeur
+Atomics.load(ta, 0);   // 4
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-atomics.xor', 'Atomics.xor')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Atomics.xor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/bigint/asintn/index.html b/files/fr/web/javascript/reference/global_objects/bigint/asintn/index.html deleted file mode 100644 index 13023405cf..0000000000 --- a/files/fr/web/javascript/reference/global_objects/bigint/asintn/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: BigInt.asIntN() -slug: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN -tags: - - BigInt - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN -original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/asIntN ---- -

{{JSRef}}

- -

La méthode statique BigInt.asIntN() permet d'écréter un nombre BigInt pour obtenir un entier signé entre 2^(largeur-1) et 2^(largeur-1)-1.

- -
{{EmbedInteractiveExample("pages/js/bigint-asintn.html")}}
- -

Syntaxe

- -
var resultat = BigInt.asIntN(largeur, bigint);
- -

Paramètres

- -
-
largeur
-
La quantité de bits disponible pour stocker l'entier.
-
bigint
-
L'entier qu'on souhaite stocker sur le nombre de bits indiqués.
-
- -

Valeur de retour

- -

La valeur de bigint modulo 2^largeur comme entier signé.

- -

Exemples

- -

La méthode BigInt.asIntN() peut être utile pour rester dans une arithmétique sur 64 bits :

- -
const max = 2n ** (64n - 1n) - 1n;
-
-BigInt.asIntN(64, max);
-// ↪ 9223372036854775807n
-
-BigInt.asIntN(64, max + 1n);
-// ↪ -9223372036854775807n
-// négatif car dépassement sur le nombre de bits
-
- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
BigInt proposalProposition de niveau 3.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.BigInt.asIntN")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/bigint/asintn/index.md b/files/fr/web/javascript/reference/global_objects/bigint/asintn/index.md new file mode 100644 index 0000000000..13023405cf --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/bigint/asintn/index.md @@ -0,0 +1,73 @@ +--- +title: BigInt.asIntN() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN +tags: + - BigInt + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN +original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/asIntN +--- +

{{JSRef}}

+ +

La méthode statique BigInt.asIntN() permet d'écréter un nombre BigInt pour obtenir un entier signé entre 2^(largeur-1) et 2^(largeur-1)-1.

+ +
{{EmbedInteractiveExample("pages/js/bigint-asintn.html")}}
+ +

Syntaxe

+ +
var resultat = BigInt.asIntN(largeur, bigint);
+ +

Paramètres

+ +
+
largeur
+
La quantité de bits disponible pour stocker l'entier.
+
bigint
+
L'entier qu'on souhaite stocker sur le nombre de bits indiqués.
+
+ +

Valeur de retour

+ +

La valeur de bigint modulo 2^largeur comme entier signé.

+ +

Exemples

+ +

La méthode BigInt.asIntN() peut être utile pour rester dans une arithmétique sur 64 bits :

+ +
const max = 2n ** (64n - 1n) - 1n;
+
+BigInt.asIntN(64, max);
+// ↪ 9223372036854775807n
+
+BigInt.asIntN(64, max + 1n);
+// ↪ -9223372036854775807n
+// négatif car dépassement sur le nombre de bits
+
+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
BigInt proposalProposition de niveau 3.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.BigInt.asIntN")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.html b/files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.html deleted file mode 100644 index 5331dbae11..0000000000 --- a/files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: BigInt.asUintN() -slug: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN -tags: - - BigInt - - Experimental - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN -original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/asUintN ---- -

{{JSRef}}

- -

La méthode statique BigInt.asUintN() permet d'écréter un BigInt pour ramener sa valeur sur un entier non-signé entre 0 et 2^(largeur)-1.

- -
{{EmbedInteractiveExample("pages/js/bigint-asuintn.html")}}
- -

Syntaxe

- -
var résultat = BigInt.asUintN(largeur, bigint);
- -

Paramètres

- -
-
largeur
-
Le nombre de bits disponible pour stocker l'entier.
-
bigint
-
L'entier qu'on souhaite stocker sur le nombre de bits indiqués.
-
- -

Valeur de retour

- -

La valeur de bigint modulo 2^largeur comme un entier non signé.

- -

Exemples

- -

La méthode BigInt.asUintN() peut s'avérer utile pour rester dans une arithmétique exprimée sur 64 bits .

- -
const max = 2n ** 64n - 1n;
-
-BigInt.asUintN(64, max);
-// ↪ 18446744073709551615n
-
-BigInt.asUintN(64, max + 1n);
-// ↪ 0n
-// zéro en raison du dépassement
- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
Proposition pour BigIntProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.BigInt.asUintN")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.md b/files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.md new file mode 100644 index 0000000000..5331dbae11 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/bigint/asuintn/index.md @@ -0,0 +1,73 @@ +--- +title: BigInt.asUintN() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN +tags: + - BigInt + - Experimental + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN +original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/asUintN +--- +

{{JSRef}}

+ +

La méthode statique BigInt.asUintN() permet d'écréter un BigInt pour ramener sa valeur sur un entier non-signé entre 0 et 2^(largeur)-1.

+ +
{{EmbedInteractiveExample("pages/js/bigint-asuintn.html")}}
+ +

Syntaxe

+ +
var résultat = BigInt.asUintN(largeur, bigint);
+ +

Paramètres

+ +
+
largeur
+
Le nombre de bits disponible pour stocker l'entier.
+
bigint
+
L'entier qu'on souhaite stocker sur le nombre de bits indiqués.
+
+ +

Valeur de retour

+ +

La valeur de bigint modulo 2^largeur comme un entier non signé.

+ +

Exemples

+ +

La méthode BigInt.asUintN() peut s'avérer utile pour rester dans une arithmétique exprimée sur 64 bits .

+ +
const max = 2n ** 64n - 1n;
+
+BigInt.asUintN(64, max);
+// ↪ 18446744073709551615n
+
+BigInt.asUintN(64, max + 1n);
+// ↪ 0n
+// zéro en raison du dépassement
+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
Proposition pour BigIntProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.BigInt.asUintN")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/bigint/index.html b/files/fr/web/javascript/reference/global_objects/bigint/index.html deleted file mode 100644 index 6e842994cc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/bigint/index.html +++ /dev/null @@ -1,279 +0,0 @@ ---- -title: BigInt -slug: Web/JavaScript/Reference/Global_Objects/BigInt -tags: - - BigInt - - Experimental - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/BigInt -original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt ---- -
{{JSRef}}
- -

BigInt est un objet natif qui permet de représenter des nombres entiers supérieurs à 2^53 (la plus grande valeur entière qui puisse être représentée par le type primitif {{jsxref("Number")}}). BigInt peut être utilisé afin de représenter de grands entiers de n'importe quelle taille.

- -
-

Note : BigInt est actuellement une proposition de niveau 3 pour la spécification ECMAScript.

- -

Lorsque cette proposition atteindra le niveau 4 (soit la spécification finale), BigInt sera le deuxième type natif disponible en JavaScript pour représenter des valeurs numériques.

- -

BigInt sera ainsi le prochain type primitif ajouté à JavaScript depuis {{JSxRef("Symbol")}} avec ES2015

-
- -

Syntaxe

- -
BigInt(valeur);
-
- -

Paramètres

- -
-
valeur
-
La valeur numérique de l'objet qu'on souhaite créer. Cet argument peut être une chaîne de caractères ou un entier.
-
- -
-

Note : BigInt() n'est pas censé être utilisé avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

-
- -

Description

- -

Un objet BigInt est créé en ajoutant un n à la fin d'un littéral d'entier — 10n par exemple — ou en appelant la fonction BigInt().

- -
const plusGrandEntier = 9007199254740991n;
-
-const grandNombre = BigInt(9007199254740991);
-// ↪ 9007199254740991n
-
-const grandNombreEnChaîne = BigInt('9007199254740991');
-// ↪ 9007199254740991n
-
-const grandeNombreHexa = BigInt("0x1fffffffffffff");
-// ↪ 9007199254740991n
-
-const grandeNombreBinaire = BigInt("0b11111111111111111111111111111111111111111111111111111");
-// ↪ 9007199254740991n
- -

Les objets BigInt sont semblables aux objets {{jsxref("Number")}} selon certains aspects mais avec quelques différences clés. Les objets BigInt ne peuvent pas êre utilisés avec l'objet {{jsxref("Math")}} et ne peuvent pas être manipulés avec des opérations qui impliquent des objets {{jsxref("Number")}}.

- -
-

Attention : Il est nécessaire de convertir des valeurs {{jsxref("Number")}} ou BigInt dans les opérations qui les combinent.

- -

Attention lors de ces conversions car la précision d'une valeur BigInt peut être perdue lorsque ce dernier est converti en {{jsxref("Number")}}.

-
- -

Type

- -

Lorsqu'on utilise typeof sur une valeur BigInt, cet opérateur renverra "bigint" :

- -
typeof 1n === "bigint"; // true
-typeof BigInt("1") === "bigint"; // true
- -

Lorsqu'on « enveloppe » la valeur dans un objet, on aura alors un type "object" (comme pour les autres valeurs primitives lorsqu'on les enveloppe dans le constructeur objet) :

- -
typeof Object(1n) === "object"; // true
- -

Opérateurs

- -

On peut utiliser les opérateurs suivants avec les objets BigInt : +, `*`, `-`, `**`, `%` , les opérateurs binaires (à l'exception de >>> / décalage à droite avec des zéros) car les grands entiers sont signés. Le + unaire n'est pas non plus pris en charge (afin de ne pas casser asm.js).

- -
const nombreSain = BigInt(Number.MAX_SAFE_INTEGER);
-// ↪ 9007199254740991
-
-const maxPlusUn = nombreSain + 1n;
-// ↪ 9007199254740992n
-
-const leFutur = nombreSain + 2n;
-// ↪ 9007199254740993n, cela fonctionne désormais !
-
-const multi = nombreSain * 2n;
-// ↪ 18014398509481982n
-
-const subtr = multi – 10n;
-// ↪ 18014398509481972n
-
-const mod = multi % 10n;
-// ↪ 2n
-
-const bigN = 2n ** 54n;
-// ↪ 18014398509481984n
-
-bigN * -1n
-// ↪ –18014398509481984n
-
- -

L'opérateur / fonctionne de façon analogue aux nombres classiques. Toutefois, les objets BigInt permettent uniquement de représenter des entiers et non des nombres décimaux. Aussi, la division ne produira pas de partie décimale pour les BigInt.

- -
const attendu = 4n / 2n;
-// ↪ 2n
-
-const tronque = 5n / 2n;
-// ↪ 2n et pas 2.5n
-
-
- -

Comparaisons

- -

Un objet BigInt n'est pas strictement égal à {{jsxref( "Number")}} mais peut l'être au sens de l'égalité faible.

- -
0n === 0
-// ↪ false
-
-0n == 0
-// ↪ true
- -

On peut toutefois comparer des objets {{jsxref("Number")}} et BigInt :

- -
1n < 2
-// ↪ true
-
-2n > 1
-// ↪ true
-
-2 > 2
-// ↪ false
-
-2n > 2
-// ↪ false
-
-2n >= 2
-// ↪ true
- -

On peut également mélanger ces valeurs au sein de tableaux :

- -
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]
- -

On notera que les comparaisons entre les valeurs BigInt et les mêmes valeurs, passées dans le constructeur Object() ne seront pas équivalentes au sens strict :

- -
0n === Object(0n); // false
-Object(0n) === Object(0n); // false
-
-const o = Object(0n);
-o === o; // true
- -

Opérations conditionnelles

- -

Un objet BigInt se comporte comme un objet {{jsxref("Number")}} lorsqu'il est utilisé dans un contexte booléen : comme argument pour le constructeur {{jsxref("Boolean")}}, comme opérandes pour les opérateurs logiques ||, `&&` et ! ou avec les instructions conditonnelles telles que if.

- -
if (0n) {
-  console.log('Nous voici dans le if !');
-} else {
-  console.log('Et nous voilà dans le else !');
-}
-
-// ↪ "Et nous voilà dans le else !"
-
-0n || 12n
-// ↪ 12n
-
-0n && 12n
-// ↪ 0n
-
-Boolean(0n)
-// ↪ false
-
-Boolean(12n)
-// ↪ true
-
-!12n
-// ↪ false
-
-!0n
-// ↪ true
-
- -

Méthodes

- -
-
BigInt.asIntN()
-
Écrète un objet BigInt pour obtenir un entier signé entre -2^(largeur-1) et 2^(largeur-1)-1
-
BigInt.asUintN()
-
Écrète un objet BigInt pour obtenir un entier non-signé entre 0 et 2^(largeur)-1
-
- -

Propriétés

- -
-
{{jsxref("BigInt.prototype")}}
-
Cette propriété permet d'ajouter des propriétés aux objets BigInt.
-
- -

Instances de BigInt

- -

L'ensemble des instances de BigInt héritent de BigInt.prototype. Le prototype du constructeur BigInt peut être modifié afin de modifier l'ensemble des instances de BigInt.

- -

Méthodes

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/BigInt/prototype', 'Méthodes')}}

- -

Recommandations

- -

Coercition en Number

- -

Lorsqu'on convertit une valeur BigInt en {{jsxref("Objets_globaux/Number","Number")}}, on perd en précision. Si on effectue des allers-retours entre ces deux types, on ne conservera pas la même valeur. Aussi, il est recommandé d'utiliser uniquement BigInt lorsque les valeurs qu'on manipule seront supérieures à 2^53 et qu'il ne sera pas nécessaire de passer d'un type à l'autre.

- -

Cryptographie

- -

Les opérations prises en charge pour les valeurs BigInt ne s'effectuent pas à temps constant. Aussi, BigInt ne serait être utilisé à des fins cryptographiques.

- -

Exemples

- -

Calculer des nombres premiers

- -
function isPrime(p) {
-  for (let i = 2n; i * i <= p; i++) {
-    if (p % i === 0n) return false;
-  }
-  return true;
-}
-
-// Takes a BigInt as an argument and returns a BigInt
-function nthPrime(nth) {
-  let maybePrime = 2n;
-  let prime = 0n;
-
-  while (nth >= 0n) {
-    if (isPrime(maybePrime)) {
-      nth -= 1n;
-      prime = maybePrime;
-    }
-    maybePrime += 1n;
-  }
-
-  return prime;
-}
-
-nthPrime(20n)
-// ↪ 73n
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtat
BigIntBrouillon de niveau 3
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/bigint/index.md b/files/fr/web/javascript/reference/global_objects/bigint/index.md new file mode 100644 index 0000000000..6e842994cc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/bigint/index.md @@ -0,0 +1,279 @@ +--- +title: BigInt +slug: Web/JavaScript/Reference/Global_Objects/BigInt +tags: + - BigInt + - Experimental + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt +original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt +--- +
{{JSRef}}
+ +

BigInt est un objet natif qui permet de représenter des nombres entiers supérieurs à 2^53 (la plus grande valeur entière qui puisse être représentée par le type primitif {{jsxref("Number")}}). BigInt peut être utilisé afin de représenter de grands entiers de n'importe quelle taille.

+ +
+

Note : BigInt est actuellement une proposition de niveau 3 pour la spécification ECMAScript.

+ +

Lorsque cette proposition atteindra le niveau 4 (soit la spécification finale), BigInt sera le deuxième type natif disponible en JavaScript pour représenter des valeurs numériques.

+ +

BigInt sera ainsi le prochain type primitif ajouté à JavaScript depuis {{JSxRef("Symbol")}} avec ES2015

+
+ +

Syntaxe

+ +
BigInt(valeur);
+
+ +

Paramètres

+ +
+
valeur
+
La valeur numérique de l'objet qu'on souhaite créer. Cet argument peut être une chaîne de caractères ou un entier.
+
+ +
+

Note : BigInt() n'est pas censé être utilisé avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

+
+ +

Description

+ +

Un objet BigInt est créé en ajoutant un n à la fin d'un littéral d'entier — 10n par exemple — ou en appelant la fonction BigInt().

+ +
const plusGrandEntier = 9007199254740991n;
+
+const grandNombre = BigInt(9007199254740991);
+// ↪ 9007199254740991n
+
+const grandNombreEnChaîne = BigInt('9007199254740991');
+// ↪ 9007199254740991n
+
+const grandeNombreHexa = BigInt("0x1fffffffffffff");
+// ↪ 9007199254740991n
+
+const grandeNombreBinaire = BigInt("0b11111111111111111111111111111111111111111111111111111");
+// ↪ 9007199254740991n
+ +

Les objets BigInt sont semblables aux objets {{jsxref("Number")}} selon certains aspects mais avec quelques différences clés. Les objets BigInt ne peuvent pas êre utilisés avec l'objet {{jsxref("Math")}} et ne peuvent pas être manipulés avec des opérations qui impliquent des objets {{jsxref("Number")}}.

+ +
+

Attention : Il est nécessaire de convertir des valeurs {{jsxref("Number")}} ou BigInt dans les opérations qui les combinent.

+ +

Attention lors de ces conversions car la précision d'une valeur BigInt peut être perdue lorsque ce dernier est converti en {{jsxref("Number")}}.

+
+ +

Type

+ +

Lorsqu'on utilise typeof sur une valeur BigInt, cet opérateur renverra "bigint" :

+ +
typeof 1n === "bigint"; // true
+typeof BigInt("1") === "bigint"; // true
+ +

Lorsqu'on « enveloppe » la valeur dans un objet, on aura alors un type "object" (comme pour les autres valeurs primitives lorsqu'on les enveloppe dans le constructeur objet) :

+ +
typeof Object(1n) === "object"; // true
+ +

Opérateurs

+ +

On peut utiliser les opérateurs suivants avec les objets BigInt : +, `*`, `-`, `**`, `%` , les opérateurs binaires (à l'exception de >>> / décalage à droite avec des zéros) car les grands entiers sont signés. Le + unaire n'est pas non plus pris en charge (afin de ne pas casser asm.js).

+ +
const nombreSain = BigInt(Number.MAX_SAFE_INTEGER);
+// ↪ 9007199254740991
+
+const maxPlusUn = nombreSain + 1n;
+// ↪ 9007199254740992n
+
+const leFutur = nombreSain + 2n;
+// ↪ 9007199254740993n, cela fonctionne désormais !
+
+const multi = nombreSain * 2n;
+// ↪ 18014398509481982n
+
+const subtr = multi – 10n;
+// ↪ 18014398509481972n
+
+const mod = multi % 10n;
+// ↪ 2n
+
+const bigN = 2n ** 54n;
+// ↪ 18014398509481984n
+
+bigN * -1n
+// ↪ –18014398509481984n
+
+ +

L'opérateur / fonctionne de façon analogue aux nombres classiques. Toutefois, les objets BigInt permettent uniquement de représenter des entiers et non des nombres décimaux. Aussi, la division ne produira pas de partie décimale pour les BigInt.

+ +
const attendu = 4n / 2n;
+// ↪ 2n
+
+const tronque = 5n / 2n;
+// ↪ 2n et pas 2.5n
+
+
+ +

Comparaisons

+ +

Un objet BigInt n'est pas strictement égal à {{jsxref( "Number")}} mais peut l'être au sens de l'égalité faible.

+ +
0n === 0
+// ↪ false
+
+0n == 0
+// ↪ true
+ +

On peut toutefois comparer des objets {{jsxref("Number")}} et BigInt :

+ +
1n < 2
+// ↪ true
+
+2n > 1
+// ↪ true
+
+2 > 2
+// ↪ false
+
+2n > 2
+// ↪ false
+
+2n >= 2
+// ↪ true
+ +

On peut également mélanger ces valeurs au sein de tableaux :

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

On notera que les comparaisons entre les valeurs BigInt et les mêmes valeurs, passées dans le constructeur Object() ne seront pas équivalentes au sens strict :

+ +
0n === Object(0n); // false
+Object(0n) === Object(0n); // false
+
+const o = Object(0n);
+o === o; // true
+ +

Opérations conditionnelles

+ +

Un objet BigInt se comporte comme un objet {{jsxref("Number")}} lorsqu'il est utilisé dans un contexte booléen : comme argument pour le constructeur {{jsxref("Boolean")}}, comme opérandes pour les opérateurs logiques ||, `&&` et ! ou avec les instructions conditonnelles telles que if.

+ +
if (0n) {
+  console.log('Nous voici dans le if !');
+} else {
+  console.log('Et nous voilà dans le else !');
+}
+
+// ↪ "Et nous voilà dans le else !"
+
+0n || 12n
+// ↪ 12n
+
+0n && 12n
+// ↪ 0n
+
+Boolean(0n)
+// ↪ false
+
+Boolean(12n)
+// ↪ true
+
+!12n
+// ↪ false
+
+!0n
+// ↪ true
+
+ +

Méthodes

+ +
+
BigInt.asIntN()
+
Écrète un objet BigInt pour obtenir un entier signé entre -2^(largeur-1) et 2^(largeur-1)-1
+
BigInt.asUintN()
+
Écrète un objet BigInt pour obtenir un entier non-signé entre 0 et 2^(largeur)-1
+
+ +

Propriétés

+ +
+
{{jsxref("BigInt.prototype")}}
+
Cette propriété permet d'ajouter des propriétés aux objets BigInt.
+
+ +

Instances de BigInt

+ +

L'ensemble des instances de BigInt héritent de BigInt.prototype. Le prototype du constructeur BigInt peut être modifié afin de modifier l'ensemble des instances de BigInt.

+ +

Méthodes

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/BigInt/prototype', 'Méthodes')}}

+ +

Recommandations

+ +

Coercition en Number

+ +

Lorsqu'on convertit une valeur BigInt en {{jsxref("Objets_globaux/Number","Number")}}, on perd en précision. Si on effectue des allers-retours entre ces deux types, on ne conservera pas la même valeur. Aussi, il est recommandé d'utiliser uniquement BigInt lorsque les valeurs qu'on manipule seront supérieures à 2^53 et qu'il ne sera pas nécessaire de passer d'un type à l'autre.

+ +

Cryptographie

+ +

Les opérations prises en charge pour les valeurs BigInt ne s'effectuent pas à temps constant. Aussi, BigInt ne serait être utilisé à des fins cryptographiques.

+ +

Exemples

+ +

Calculer des nombres premiers

+ +
function isPrime(p) {
+  for (let i = 2n; i * i <= p; i++) {
+    if (p % i === 0n) return false;
+  }
+  return true;
+}
+
+// Takes a BigInt as an argument and returns a BigInt
+function nthPrime(nth) {
+  let maybePrime = 2n;
+  let prime = 0n;
+
+  while (nth >= 0n) {
+    if (isPrime(maybePrime)) {
+      nth -= 1n;
+      prime = maybePrime;
+    }
+    maybePrime += 1n;
+  }
+
+  return prime;
+}
+
+nthPrime(20n)
+// ↪ 73n
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtat
BigIntBrouillon de niveau 3
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.html b/files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.html deleted file mode 100644 index 05c8d2860a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: BigInt.prototype.toLocaleString() -slug: Web/JavaScript/Reference/Global_Objects/BigInt/toLocaleString -tags: - - BigInt - - Internationalisation - - Intl - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/toLocaleString -original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/toLocaleString ---- -
{{JSRef}}
- -

La méthode toLocaleString() renvoie une chaîne de caractères représentant le grand entier pour la ou les locale(s) indiquée(s).

- -
{{EmbedInteractiveExample("pages/js/bigint-tolocalestring.html")}}
- -

Syntaxe

- -
bigIntObj.toLocaleString([locales [, options]])
- -

Paramètres

- -
-
locales {{optional_inline}}
-
Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales. Pour plus de détails quant à la forme et l'interprétation de l'argument locales, on consultera la page {{jsxref("Intl")}}.
-
options {{optional_inline}}
-
Un objet qui contient des propriétés de configuration. Pour les nombres, consulter {{jsxref("Number.prototype.toLocaleString()")}}, pour les dates, consulter {{jsxref("Date.prototype.toLocaleString()")}}.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le grand entier selon la ou les locales et les options indiquées.

- -

Exemples

- -

Utiliser toLocaleString()

- -

Voici un exemple d'utilisation simple, sans indiquer de locale ni d'options.

- -
var bigint = 3500n;
-
-bigint.toLocaleString();
-// Affichera "3500" en français
-
- -

Utiliser locales

- -

Cet exemple illustre certaines variations pour la représentation d'une même valeur en fonction des différentes locales. En fonction de la langue utilisée par l'utilisateur et par votre interface, vous pourrez utiliser locales pour indiquer la locale ciblée :

- -
var bigint = 123456789123456789n;
-
-// En allemand, on utilise les points pour séparer
-// les milliers
-console.log(bigint.toLocaleString('de-DE'));
-// → 123.456.789.123.456.789
-
-// La plupart des pays arabes utilise
-// des chiffres hindoux-arabes
-console.log(bigint.toLocaleString('ar-EG'));
-// → ١٢٣٬٤٥٦٬٧٨٩٬١٢٣٬٤٥٦٬٧٨٩
-
-// India utilise des séparateurs pour
-// les milliers/lakh/crore
-console.log(bigint.toLocaleString('en-IN'));
-// → 1,23,45,67,89,12,34,56,789
-
-// La clé d'extension requiert un système de numérotation
-// par exemple, le système décimal chinois
-console.log(bigint.toLocaleString('zh-Hans-CN-u-nu-hanidec'));
-// → 一二三,四五六,七八九,一二三,四五六,七八九
-
-// Lorsqu'on demande une langue qui peut ne pas être prise
-// en charge (ici le balinais), on peut ajouter une autre
-// locale qui sera utilisée en recours (ici l'indonésien)
-console.log(bigint.toLocaleString(['ban', 'id']));
-// → 123.456.789.123.456.789
-
- -

Utiliser options

- -

Ici, on personnalise le résultat fourni par toLocaleString() grâce à l'argument options :

- -
var bigint = 123456789123456789n;
-
-// On utilise un format avec une devise
-console.log(bigint.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
-// → 123.456.789.123.456.789,00 €
-
-// Le yen japonais n'utilise pas de sous-unité
-console.log(bigint.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
-// → ¥123,456,789,123,456,789
-
-// On limite l'écriture aux trois premiers chiffres significatifs
-console.log(bigint.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
-// → 1,23,00,00,00,00,00,00,000
-
- -

Performance

- -

Lorsqu'on souhaite mettre en forme une grande quantité de nombres, mieux vaudra créer un objet {{jsxref("NumberFormat")}} et utiliser la fonction fournie par sa propriété {{jsxref("NumberFormat.format")}}.

- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
BigIntProposition de niveau 3.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.BigInt.toLocaleString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.md b/files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.md new file mode 100644 index 0000000000..05c8d2860a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/bigint/tolocalestring/index.md @@ -0,0 +1,129 @@ +--- +title: BigInt.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/toLocaleString +tags: + - BigInt + - Internationalisation + - Intl + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/toLocaleString +original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/toLocaleString +--- +
{{JSRef}}
+ +

La méthode toLocaleString() renvoie une chaîne de caractères représentant le grand entier pour la ou les locale(s) indiquée(s).

+ +
{{EmbedInteractiveExample("pages/js/bigint-tolocalestring.html")}}
+ +

Syntaxe

+ +
bigIntObj.toLocaleString([locales [, options]])
+ +

Paramètres

+ +
+
locales {{optional_inline}}
+
Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales. Pour plus de détails quant à la forme et l'interprétation de l'argument locales, on consultera la page {{jsxref("Intl")}}.
+
options {{optional_inline}}
+
Un objet qui contient des propriétés de configuration. Pour les nombres, consulter {{jsxref("Number.prototype.toLocaleString()")}}, pour les dates, consulter {{jsxref("Date.prototype.toLocaleString()")}}.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le grand entier selon la ou les locales et les options indiquées.

+ +

Exemples

+ +

Utiliser toLocaleString()

+ +

Voici un exemple d'utilisation simple, sans indiquer de locale ni d'options.

+ +
var bigint = 3500n;
+
+bigint.toLocaleString();
+// Affichera "3500" en français
+
+ +

Utiliser locales

+ +

Cet exemple illustre certaines variations pour la représentation d'une même valeur en fonction des différentes locales. En fonction de la langue utilisée par l'utilisateur et par votre interface, vous pourrez utiliser locales pour indiquer la locale ciblée :

+ +
var bigint = 123456789123456789n;
+
+// En allemand, on utilise les points pour séparer
+// les milliers
+console.log(bigint.toLocaleString('de-DE'));
+// → 123.456.789.123.456.789
+
+// La plupart des pays arabes utilise
+// des chiffres hindoux-arabes
+console.log(bigint.toLocaleString('ar-EG'));
+// → ١٢٣٬٤٥٦٬٧٨٩٬١٢٣٬٤٥٦٬٧٨٩
+
+// India utilise des séparateurs pour
+// les milliers/lakh/crore
+console.log(bigint.toLocaleString('en-IN'));
+// → 1,23,45,67,89,12,34,56,789
+
+// La clé d'extension requiert un système de numérotation
+// par exemple, le système décimal chinois
+console.log(bigint.toLocaleString('zh-Hans-CN-u-nu-hanidec'));
+// → 一二三,四五六,七八九,一二三,四五六,七八九
+
+// Lorsqu'on demande une langue qui peut ne pas être prise
+// en charge (ici le balinais), on peut ajouter une autre
+// locale qui sera utilisée en recours (ici l'indonésien)
+console.log(bigint.toLocaleString(['ban', 'id']));
+// → 123.456.789.123.456.789
+
+ +

Utiliser options

+ +

Ici, on personnalise le résultat fourni par toLocaleString() grâce à l'argument options :

+ +
var bigint = 123456789123456789n;
+
+// On utilise un format avec une devise
+console.log(bigint.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
+// → 123.456.789.123.456.789,00 €
+
+// Le yen japonais n'utilise pas de sous-unité
+console.log(bigint.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
+// → ¥123,456,789,123,456,789
+
+// On limite l'écriture aux trois premiers chiffres significatifs
+console.log(bigint.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
+// → 1,23,00,00,00,00,00,00,000
+
+ +

Performance

+ +

Lorsqu'on souhaite mettre en forme une grande quantité de nombres, mieux vaudra créer un objet {{jsxref("NumberFormat")}} et utiliser la fonction fournie par sa propriété {{jsxref("NumberFormat.format")}}.

+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
BigIntProposition de niveau 3.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.BigInt.toLocaleString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/bigint/tostring/index.html b/files/fr/web/javascript/reference/global_objects/bigint/tostring/index.html deleted file mode 100644 index 4fbc9eab99..0000000000 --- a/files/fr/web/javascript/reference/global_objects/bigint/tostring/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: BigInt.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/BigInt/toString -tags: - - BigInt - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/toString ---- -
{{JSRef}}
- -

The toString() method returns a string representing the specified {{jsxref("BigInt")}} object. The trailing "n" is not part of the string.

- -
{{EmbedInteractiveExample("pages/js/bigint-tostring.html")}}
- -

Syntaxe

- -
bigIntObj.toString([base])
- -

Paramètres

- -
-
base{{optional_inline}}
-
Ce paramètre optionnel est compris entre 2 et 36 et indique la base à utiliser pour représenter les valeurs numériques.
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant l'objet {{jsxref("BigInt")}} courant.

- -

Exceptions

- -
-
{{jsxref("RangeError")}}
-
Si la base fournie comme argument toString() est inférieure à 2 ou supérieure à 36, cela déclenchera une exception {{jsxref("RangeError")}}.
-
- -

Description

- -

L'objet {{jsxref("BigInt")}} surcharge la méthode toString() de {{jsxref("Object")}}. Il n'hérite pas ou n'utilise pas {{jsxref("Object.prototype.toString()")}}. Pour les objets {{jsxref( "BigInt")}}, la méthode toString() renvoie une représentation textuelle de l'objet dans la base indiquée.

- -

La méthode toString() analyse le premier argument qui lui est passé et tente de renvoyer une représentation textuelle dans cette base. Pour les bases supérieures à 10, ce seront les lettres de l'alphabet pour indiquer les chiffres supérieurs à 9. Pour les nombres hexadécimaux (base 16), les lettres a à f sont utilisées par exemple.

- -

Si l'argument base n'est pas indiquée, ce sera la base 10 qui sera considérée par défaut.

- -

Si bigIntObj est négatif, le signe est conservé, y compris lorsque la base est 2 (dans ce cas, la chaîne renvoyée sera la représentation binaire précédée par un signe - et non le complément à deux de bigIntObj).

- -

Exemples

- -

Utiliser toString()

- -
17n.toString();      // '17'
-66n.toString(2);     // '1000010'
-254n.toString(16);   // 'fe'
--10n.toString(2);    // -1010'
--0xffn.toString(2);  // '-11111111'
-
- -

Gestion du zéro négatif en BigInt

- -

Il n'existe pas de zéro négatif pour BigInt car les entiers ne gèrent pas de concept de zéro négatif. -0.0 est un concept relatif à la représentation flottante IEEE et n'est présent que pour le type {{jsxref("Number")}}.

- -
(-0n).toString();      // '0'
-BigInt(-0).toString(); // '0'
- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
Proposition pour BigIntProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.BigInt.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/bigint/tostring/index.md b/files/fr/web/javascript/reference/global_objects/bigint/tostring/index.md new file mode 100644 index 0000000000..4fbc9eab99 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/bigint/tostring/index.md @@ -0,0 +1,94 @@ +--- +title: BigInt.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/toString +tags: + - BigInt + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/toString +--- +
{{JSRef}}
+ +

The toString() method returns a string representing the specified {{jsxref("BigInt")}} object. The trailing "n" is not part of the string.

+ +
{{EmbedInteractiveExample("pages/js/bigint-tostring.html")}}
+ +

Syntaxe

+ +
bigIntObj.toString([base])
+ +

Paramètres

+ +
+
base{{optional_inline}}
+
Ce paramètre optionnel est compris entre 2 et 36 et indique la base à utiliser pour représenter les valeurs numériques.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant l'objet {{jsxref("BigInt")}} courant.

+ +

Exceptions

+ +
+
{{jsxref("RangeError")}}
+
Si la base fournie comme argument toString() est inférieure à 2 ou supérieure à 36, cela déclenchera une exception {{jsxref("RangeError")}}.
+
+ +

Description

+ +

L'objet {{jsxref("BigInt")}} surcharge la méthode toString() de {{jsxref("Object")}}. Il n'hérite pas ou n'utilise pas {{jsxref("Object.prototype.toString()")}}. Pour les objets {{jsxref( "BigInt")}}, la méthode toString() renvoie une représentation textuelle de l'objet dans la base indiquée.

+ +

La méthode toString() analyse le premier argument qui lui est passé et tente de renvoyer une représentation textuelle dans cette base. Pour les bases supérieures à 10, ce seront les lettres de l'alphabet pour indiquer les chiffres supérieurs à 9. Pour les nombres hexadécimaux (base 16), les lettres a à f sont utilisées par exemple.

+ +

Si l'argument base n'est pas indiquée, ce sera la base 10 qui sera considérée par défaut.

+ +

Si bigIntObj est négatif, le signe est conservé, y compris lorsque la base est 2 (dans ce cas, la chaîne renvoyée sera la représentation binaire précédée par un signe - et non le complément à deux de bigIntObj).

+ +

Exemples

+ +

Utiliser toString()

+ +
17n.toString();      // '17'
+66n.toString(2);     // '1000010'
+254n.toString(16);   // 'fe'
+-10n.toString(2);    // -1010'
+-0xffn.toString(2);  // '-11111111'
+
+ +

Gestion du zéro négatif en BigInt

+ +

Il n'existe pas de zéro négatif pour BigInt car les entiers ne gèrent pas de concept de zéro négatif. -0.0 est un concept relatif à la représentation flottante IEEE et n'est présent que pour le type {{jsxref("Number")}}.

+ +
(-0n).toString();      // '0'
+BigInt(-0).toString(); // '0'
+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
Proposition pour BigIntProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.BigInt.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/bigint/valueof/index.html b/files/fr/web/javascript/reference/global_objects/bigint/valueof/index.html deleted file mode 100644 index 92a6e74350..0000000000 --- a/files/fr/web/javascript/reference/global_objects/bigint/valueof/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: BigInt.prototype.valueOf() -slug: Web/JavaScript/Reference/Global_Objects/BigInt/valueOf -tags: - - BigInt - - JavaScript - - Method - - Prototype - - Reference - - valueOf() -translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/valueOf -original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/valueOf ---- -
{{JSRef}}
- -

La méthode valueOf() renvoie la valeur primitive encapsulée dans un objet {{jsxref("BigInt")}}.

- -
{{EmbedInteractiveExample("pages/js/bigint-valueof.html")}}
- -

Syntaxe

- -
bigIntObj.valueOf()
- -

Valeur de retour

- -

Un grand entier (big int) représentant la valeur primitive de l'objet {{jsxref("BigInt")}} courant.

- -

Exemples

- -

Utiliser valueOf()

- -
typeof Object(1n); // object
-typeof Object(1n).valueOf(); // bigint
-
- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
Proposition pour BigIntProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.BigInt.valueOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/bigint/valueof/index.md b/files/fr/web/javascript/reference/global_objects/bigint/valueof/index.md new file mode 100644 index 0000000000..92a6e74350 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/bigint/valueof/index.md @@ -0,0 +1,59 @@ +--- +title: BigInt.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/BigInt/valueOf +tags: + - BigInt + - JavaScript + - Method + - Prototype + - Reference + - valueOf() +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/valueOf +original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt/valueOf +--- +
{{JSRef}}
+ +

La méthode valueOf() renvoie la valeur primitive encapsulée dans un objet {{jsxref("BigInt")}}.

+ +
{{EmbedInteractiveExample("pages/js/bigint-valueof.html")}}
+ +

Syntaxe

+ +
bigIntObj.valueOf()
+ +

Valeur de retour

+ +

Un grand entier (big int) représentant la valeur primitive de l'objet {{jsxref("BigInt")}} courant.

+ +

Exemples

+ +

Utiliser valueOf()

+ +
typeof Object(1n); // object
+typeof Object(1n).valueOf(); // bigint
+
+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
Proposition pour BigIntProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.BigInt.valueOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/bigint64array/index.html b/files/fr/web/javascript/reference/global_objects/bigint64array/index.html deleted file mode 100644 index 3631f56e60..0000000000 --- a/files/fr/web/javascript/reference/global_objects/bigint64array/index.html +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: BigInt64Array -slug: Web/JavaScript/Reference/Global_Objects/BigInt64Array -tags: - - BigInt - - Constructeur - - JavaScript - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/BigInt64Array -original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt64Array ---- -
{{JSRef}}
- -

Le tableau typé BigInt64Array permet de représenter un tableau d'entiers signés représentés sur 64 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0n. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

- -

Syntaxe

- -
new BigInt64Array();
-new BigInt64Array(longueur);
-new BigInt64Array(tableauTypé);
-new BigInt64Array(objet);
-new BigInt64Array(tampon [, décalage [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "BigInt64Array.BYTES_PER_ELEMENT")}}
-
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'BigInt64Array, ce sera 8.
-
BigInt64Array.length
-
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "BigInt64Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "BigInt64Array.name")}}
-
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour BigInt64Array ce sera : "BigInt64Array".
-
{{jsxref("TypedArray.prototype", "BigInt64Array.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "BigInt64Array.from()")}}
-
Cette méthode permet de créer un nouveau tableau typé BigInt64Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "BigInt64Array.of()")}}
-
Cette méthode permet de créer un nouvel objet BigInt64Array à partir d'un nombre d'arguments variables. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype BigInt64Array

- -

Tous les objets BigInt64Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
BigInt64Array.prototype.constructor
-
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur BigInt64Array.
-
{{jsxref("TypedArray.prototype.buffer", "BigInt64Array.prototype.buffer")}} {{readonlyInline}}
-
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet BigInt64Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "BigInt64Array.prototype.byteLength")}} {{readonlyInline}}
-
Cette propriété renvoie la longueur, exprimée en octets, de l'objet BigInt64Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "BigInt64Array.prototype.byteOffset")}} {{readonlyInline}}
-
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "BigInt64Array.prototype.length")}} {{readonlyInline}}
-
Cette propriété renvoie le nombre d'éléments contenus dans le tableau BigInt64Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "BigInt64Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "BigInt64Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "BigInt64Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "BigInt64Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "BigInt64Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "BigInt64Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "BigInt64Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "BigInt64Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "BigInt64Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "BigInt64Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "BigInt64Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "BigInt64Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "BigInt64Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "BigInt64Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.reduce", "BigInt64Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "BigInt64Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "BigInt64Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "BigInt64Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "BigInt64Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "BigInt64Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "BigInt64Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "BigInt64Array.prototype.subarray()")}}
-
Renvoie un nouvel objet BigInt64Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "BigInt64Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "BigInt64Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "BigInt64Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "BigInt64Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet BigInt64Array :

- -
// Construction à partir d'une longueur
-var bigInt64 = new BigInt64Array(2);
-bigInt64[0] = 42n;
-console.log(bigInt64[0]); // 42n
-console.log(bigInt64.length); // 2
-console.log(bigInt64.BYTES_PER_ELEMENT); // 8
-
-// Construction à partir d'un tableau
-var arr = new BigInt64Array([21n,31n]);
-console.log(arr[1]); // 31n
-
-// Construction à partir d'un tableau typé
-var x = new BigInt64Array([21n, 31n]);
-var y = new BigInt64Array(x);
-console.log(y[0]); // 21n
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(32);
-var z = new BigInt64Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1n, 2n, 3n]; }();
-var BigInt64 = new BigInt64Array(iterable);
-// BigInt64Array[1n, 2n, 3n]
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour BigIntProposition de niveau 3
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/bigint64array/index.md b/files/fr/web/javascript/reference/global_objects/bigint64array/index.md new file mode 100644 index 0000000000..3631f56e60 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/bigint64array/index.md @@ -0,0 +1,183 @@ +--- +title: BigInt64Array +slug: Web/JavaScript/Reference/Global_Objects/BigInt64Array +tags: + - BigInt + - Constructeur + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/BigInt64Array +original_slug: Web/JavaScript/Reference/Objets_globaux/BigInt64Array +--- +
{{JSRef}}
+ +

Le tableau typé BigInt64Array permet de représenter un tableau d'entiers signés représentés sur 64 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0n. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

+ +

Syntaxe

+ +
new BigInt64Array();
+new BigInt64Array(longueur);
+new BigInt64Array(tableauTypé);
+new BigInt64Array(objet);
+new BigInt64Array(tampon [, décalage [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "BigInt64Array.BYTES_PER_ELEMENT")}}
+
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'BigInt64Array, ce sera 8.
+
BigInt64Array.length
+
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "BigInt64Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "BigInt64Array.name")}}
+
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour BigInt64Array ce sera : "BigInt64Array".
+
{{jsxref("TypedArray.prototype", "BigInt64Array.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "BigInt64Array.from()")}}
+
Cette méthode permet de créer un nouveau tableau typé BigInt64Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "BigInt64Array.of()")}}
+
Cette méthode permet de créer un nouvel objet BigInt64Array à partir d'un nombre d'arguments variables. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype BigInt64Array

+ +

Tous les objets BigInt64Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
BigInt64Array.prototype.constructor
+
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur BigInt64Array.
+
{{jsxref("TypedArray.prototype.buffer", "BigInt64Array.prototype.buffer")}} {{readonlyInline}}
+
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet BigInt64Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "BigInt64Array.prototype.byteLength")}} {{readonlyInline}}
+
Cette propriété renvoie la longueur, exprimée en octets, de l'objet BigInt64Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "BigInt64Array.prototype.byteOffset")}} {{readonlyInline}}
+
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "BigInt64Array.prototype.length")}} {{readonlyInline}}
+
Cette propriété renvoie le nombre d'éléments contenus dans le tableau BigInt64Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "BigInt64Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "BigInt64Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "BigInt64Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "BigInt64Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "BigInt64Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "BigInt64Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "BigInt64Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "BigInt64Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "BigInt64Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "BigInt64Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "BigInt64Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "BigInt64Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "BigInt64Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "BigInt64Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.reduce", "BigInt64Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "BigInt64Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "BigInt64Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "BigInt64Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "BigInt64Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "BigInt64Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "BigInt64Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "BigInt64Array.prototype.subarray()")}}
+
Renvoie un nouvel objet BigInt64Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "BigInt64Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "BigInt64Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "BigInt64Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "BigInt64Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet BigInt64Array :

+ +
// Construction à partir d'une longueur
+var bigInt64 = new BigInt64Array(2);
+bigInt64[0] = 42n;
+console.log(bigInt64[0]); // 42n
+console.log(bigInt64.length); // 2
+console.log(bigInt64.BYTES_PER_ELEMENT); // 8
+
+// Construction à partir d'un tableau
+var arr = new BigInt64Array([21n,31n]);
+console.log(arr[1]); // 31n
+
+// Construction à partir d'un tableau typé
+var x = new BigInt64Array([21n, 31n]);
+var y = new BigInt64Array(x);
+console.log(y[0]); // 21n
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new BigInt64Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1n, 2n, 3n]; }();
+var BigInt64 = new BigInt64Array(iterable);
+// BigInt64Array[1n, 2n, 3n]
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour BigIntProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/biguint64array/index.html b/files/fr/web/javascript/reference/global_objects/biguint64array/index.html deleted file mode 100644 index 3eca7d67bd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/biguint64array/index.html +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: BigUint64Array -slug: Web/JavaScript/Reference/Global_Objects/BigUint64Array -tags: - - BigInt - - Constructeur - - JavaScript - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/BigUint64Array -original_slug: Web/JavaScript/Reference/Objets_globaux/BigUint64Array ---- -
{{JSRef}}
- -

Le tableau typé BigUint64Array permet de représenter un tableau d'entiers non signés représentés sur 64 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0n. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

- -

Syntaxe

- -
new BigUint64Array();
-new BigUint64Array(longueur);
-new BigUint64Array(tableauTypé);
-new BigUint64Array(objet);
-new BigUint64Array(tampon [, décalage [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "BigUint64Array.BYTES_PER_ELEMENT")}}
-
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'BigUint64Array, ce sera 8.
-
BigUint64Array.length
-
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "BigUint64Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "BigUint64Array.name")}}
-
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour BigUint64Array ce sera : "BigUint64Array".
-
{{jsxref("TypedArray.prototype", "BigUint64Array.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "BigUint64Array.from()")}}
-
Cette méthode permet de créer un nouveau tableau typé BigUint64Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "BigUint64Array.of()")}}
-
Cette méthode permet de créer un nouvel objet BigUint64Array à partir d'un nombre d'arguments variables. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype BigUint64Array

- -

Tous les objets BigUint64Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
BigUint64Array.prototype.constructor
-
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur BigUint64Array.
-
{{jsxref("TypedArray.prototype.buffer", "BigUint64Array.prototype.buffer")}} {{readonlyInline}}
-
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet BigUint64Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "BigUint64Array.prototype.byteLength")}} {{readonlyInline}}
-
Cette propriété renvoie la longueur, exprimée en octets, de l'objet BigUint64Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "BigUint64Array.prototype.byteOffset")}} {{readonlyInline}}
-
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "BigUint64Array.prototype.length")}} {{readonlyInline}}
-
Cette propriété renvoie le nombre d'éléments contenus dans le tableau BigUint64Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "BigUint64Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "BigUint64Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "BigUint64Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "BigUint64Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "BigUint64Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "BigUint64Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "BigUint64Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "BigUint64Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "BigUint64Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "BigUint64Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "BigUint64Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "BigUint64Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "BigUint64Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "BigUint64Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.reduce", "BigUint64Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "BigUint64Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "BigUint64Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "BigUint64Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "BigUint64Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "BigUint64Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "BigUint64Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "BigUint64Array.prototype.subarray()")}}
-
Renvoie un nouvel objet BigUint64Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "BigUint64Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "BigUint64Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "BigUint64Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "BigUint64Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet BigUint64Array :

- -
// Construction à partir d'une longueur
-var bigInt64 = new BigUint64Array(2);
-bigInt64[0] = 42n;
-console.log(bigInt64[0]); // 42n
-console.log(bigInt64.length); // 2
-console.log(bigInt64.BYTES_PER_ELEMENT); // 8
-
-// Construction à partir d'un tableau
-var arr = new BigUint64Array([21n,31n]);
-console.log(arr[1]); // 31n
-
-// Construction à partir d'un tableau typé
-var x = new BigUint64Array([21n, 31n]);
-var y = new BigUint64Array(x);
-console.log(y[0]); // 21n
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(32);
-var z = new BigUint64Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1n, 2n, 3n]; }();
-var BigInt64 = new BigUint64Array(iterable);
-// BigUint64Array[1n, 2n, 3n]
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour BigIntProposition de niveau 3
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/biguint64array/index.md b/files/fr/web/javascript/reference/global_objects/biguint64array/index.md new file mode 100644 index 0000000000..3eca7d67bd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/biguint64array/index.md @@ -0,0 +1,183 @@ +--- +title: BigUint64Array +slug: Web/JavaScript/Reference/Global_Objects/BigUint64Array +tags: + - BigInt + - Constructeur + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/BigUint64Array +original_slug: Web/JavaScript/Reference/Objets_globaux/BigUint64Array +--- +
{{JSRef}}
+ +

Le tableau typé BigUint64Array permet de représenter un tableau d'entiers non signés représentés sur 64 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0n. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

+ +

Syntaxe

+ +
new BigUint64Array();
+new BigUint64Array(longueur);
+new BigUint64Array(tableauTypé);
+new BigUint64Array(objet);
+new BigUint64Array(tampon [, décalage [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "BigUint64Array.BYTES_PER_ELEMENT")}}
+
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'BigUint64Array, ce sera 8.
+
BigUint64Array.length
+
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "BigUint64Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "BigUint64Array.name")}}
+
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour BigUint64Array ce sera : "BigUint64Array".
+
{{jsxref("TypedArray.prototype", "BigUint64Array.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "BigUint64Array.from()")}}
+
Cette méthode permet de créer un nouveau tableau typé BigUint64Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "BigUint64Array.of()")}}
+
Cette méthode permet de créer un nouvel objet BigUint64Array à partir d'un nombre d'arguments variables. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype BigUint64Array

+ +

Tous les objets BigUint64Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
BigUint64Array.prototype.constructor
+
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur BigUint64Array.
+
{{jsxref("TypedArray.prototype.buffer", "BigUint64Array.prototype.buffer")}} {{readonlyInline}}
+
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet BigUint64Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "BigUint64Array.prototype.byteLength")}} {{readonlyInline}}
+
Cette propriété renvoie la longueur, exprimée en octets, de l'objet BigUint64Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "BigUint64Array.prototype.byteOffset")}} {{readonlyInline}}
+
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "BigUint64Array.prototype.length")}} {{readonlyInline}}
+
Cette propriété renvoie le nombre d'éléments contenus dans le tableau BigUint64Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "BigUint64Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "BigUint64Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "BigUint64Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "BigUint64Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "BigUint64Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "BigUint64Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "BigUint64Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "BigUint64Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "BigUint64Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "BigUint64Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "BigUint64Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "BigUint64Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "BigUint64Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "BigUint64Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.reduce", "BigUint64Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "BigUint64Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "BigUint64Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "BigUint64Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "BigUint64Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "BigUint64Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "BigUint64Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "BigUint64Array.prototype.subarray()")}}
+
Renvoie un nouvel objet BigUint64Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "BigUint64Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "BigUint64Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "BigUint64Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "BigUint64Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet BigUint64Array :

+ +
// Construction à partir d'une longueur
+var bigInt64 = new BigUint64Array(2);
+bigInt64[0] = 42n;
+console.log(bigInt64[0]); // 42n
+console.log(bigInt64.length); // 2
+console.log(bigInt64.BYTES_PER_ELEMENT); // 8
+
+// Construction à partir d'un tableau
+var arr = new BigUint64Array([21n,31n]);
+console.log(arr[1]); // 31n
+
+// Construction à partir d'un tableau typé
+var x = new BigUint64Array([21n, 31n]);
+var y = new BigUint64Array(x);
+console.log(y[0]); // 21n
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new BigUint64Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1n, 2n, 3n]; }();
+var BigInt64 = new BigUint64Array(iterable);
+// BigUint64Array[1n, 2n, 3n]
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour BigIntProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/boolean/index.html b/files/fr/web/javascript/reference/global_objects/boolean/index.html deleted file mode 100644 index abfa0c874d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/boolean/index.html +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: Boolean -slug: Web/JavaScript/Reference/Global_Objects/Boolean -tags: - - Boolean - - Constructeur - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Boolean -original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean ---- -
{{JSRef}}
- -

L'objet Boolean est un objet permettant de représenter une valeur booléenne.

- -

Syntaxe

- -
new Boolean([valeur])
- -

Paramètres

- -
-
valeur{{optional_inline}}
-
Paramètre optionnel, la valeur initiale de l'objet Boolean.
-
- -

Description

- -

La valeur passée en premier paramètre est, si nécessaire, convertie en valeur booléenne. Si la valeur est omise ou est 0, -0, {{jsxref("null")}}, false, {{jsxref("NaN")}}, {{jsxref("undefined")}} ou une chaine de caractères vide (""), l'objet a un valeur initiale à false (faux). Si l'objet DOM {{domxref("document.all")}} est passé en argument, la valeur initiale sera également false. Toutes les autres valeurs, y compris n'importe quel objet, un tableau vide ([]), ou une chaine de caractères "false", créént un objet avec une valeur initiale à true (vrai).

- -

Ne pas confondre les valeurs primitives booléennes true et false avec les valeurs true et false d'un objet Booléen.

- -

Tout objet dont la valeur n'est ni  undefined ni null, incluant un objet Booléen dont la valeur est fausse, évalue à true lorsqu'il est à une instruction conditionnelle. Par exemple, la condition (voir {{jsxref("Instructions/if...else", "if")}}), dans le code suivant, est validée si l'expression est évaluée à true :

- -
var x = new Boolean("false");
-if (x) {
-  // . . . le code est exécuté
-}
-
-var y = new Boolean(false);
-if (y) {
-  // ce code est également exécuté
-}
-
- -

Ce comportement ne s'applique pas aux valeurs primitives booléennes. Par exemple, la condition, dans le code suivant, est évaluée à false :

- -
var x = false;
-if (x) {
-  // . . . le code n'est pas exécuté
-}
-
- -

Ne pas utiliser un objet Boolean pour convertir une valeur non-booléenne en une valeur booléenne. Utilisez plutot une fonction booléenne pour effectuer cette tâche :

- -
var x = Boolean(expression);     // conseillé
-var y = new Boolean(expression); // à ne pas utiliser
-
- -

Si vous spécifiez un objet quelconque, incluant un objet booléen qui a une valeur fausse, le nouvel objet Boolean a une valeur vraie.

- -
var myFalse = new Boolean(false);   // valeur initiale à false
-var g = Boolean(myFalse);       // valeur initiale à true
-var myString = new String("Hello"); // un object String
-var s = Boolean(myString);      // valeur initiale à true
-
- -

Ne pas utiliser un objet Booléen à la place d'une valeur primitive booléenne.

- -
-

Note : Lorsque la propriété historique, non-standard, document.all est utilisée comme argument, le constructeur Boolean renvoie un objet booléen faux. Cette propriété étant non-standard, son utilisation est déconseillée.

-
- -

Propriétés

- -
-
Boolean.length
-
Renvoie 1. Le nombre d'arguments pris en charge par le constructeur.
-
{{jsxref("Boolean.prototype")}}
-
Représente le prototype du constructeur Boolean.
-
- -

Méthodes

- -

L'objet global Boolean ne contient pas ses propres méthodes, cependant, il hérite de certaines méthodes à travers la chaine de prototypes.

- -

Instances de Boolean

- -

Toutes les Boolean héritent de {{jsxref("Boolean.prototype")}}. Comme avec tous les constructeurs, l'objet prototype dicte les propriétés et les méthodes héritées par les instances.

- -

Propriétés

- -

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Boolean/prototype','Propri.C3.A9t.C3.A9s')}}

- -

Méthodes

- -

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Boolean/prototype','M.C3.A9thodes')}}

- -

Exemples

- -

Création d'objets Boolean avec une valeur initiale à faux

- -
var bNoParam = new Boolean();
-var bZero = new Boolean(0);
-var bNull = new Boolean(null);
-var bEmptyString = new Boolean("");
-var bfalse = new Boolean(false);
-
- -

Création d'objets Boolean avec une valeur initiale à vrai

- -
var btrue = new Boolean(true);
-var btrueString = new Boolean("true");
-var bfalseString = new Boolean("false");
-var bArrayProto = new Boolean([]);
-var bObjProto = new Boolean({});
-var bSuLin = new Boolean("Su Lin");
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.6', 'Boolean')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-boolean-objects', 'Boolean')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-boolean-objects', 'Boolean')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/boolean/index.md b/files/fr/web/javascript/reference/global_objects/boolean/index.md new file mode 100644 index 0000000000..abfa0c874d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/boolean/index.md @@ -0,0 +1,163 @@ +--- +title: Boolean +slug: Web/JavaScript/Reference/Global_Objects/Boolean +tags: + - Boolean + - Constructeur + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean +original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean +--- +
{{JSRef}}
+ +

L'objet Boolean est un objet permettant de représenter une valeur booléenne.

+ +

Syntaxe

+ +
new Boolean([valeur])
+ +

Paramètres

+ +
+
valeur{{optional_inline}}
+
Paramètre optionnel, la valeur initiale de l'objet Boolean.
+
+ +

Description

+ +

La valeur passée en premier paramètre est, si nécessaire, convertie en valeur booléenne. Si la valeur est omise ou est 0, -0, {{jsxref("null")}}, false, {{jsxref("NaN")}}, {{jsxref("undefined")}} ou une chaine de caractères vide (""), l'objet a un valeur initiale à false (faux). Si l'objet DOM {{domxref("document.all")}} est passé en argument, la valeur initiale sera également false. Toutes les autres valeurs, y compris n'importe quel objet, un tableau vide ([]), ou une chaine de caractères "false", créént un objet avec une valeur initiale à true (vrai).

+ +

Ne pas confondre les valeurs primitives booléennes true et false avec les valeurs true et false d'un objet Booléen.

+ +

Tout objet dont la valeur n'est ni  undefined ni null, incluant un objet Booléen dont la valeur est fausse, évalue à true lorsqu'il est à une instruction conditionnelle. Par exemple, la condition (voir {{jsxref("Instructions/if...else", "if")}}), dans le code suivant, est validée si l'expression est évaluée à true :

+ +
var x = new Boolean("false");
+if (x) {
+  // . . . le code est exécuté
+}
+
+var y = new Boolean(false);
+if (y) {
+  // ce code est également exécuté
+}
+
+ +

Ce comportement ne s'applique pas aux valeurs primitives booléennes. Par exemple, la condition, dans le code suivant, est évaluée à false :

+ +
var x = false;
+if (x) {
+  // . . . le code n'est pas exécuté
+}
+
+ +

Ne pas utiliser un objet Boolean pour convertir une valeur non-booléenne en une valeur booléenne. Utilisez plutot une fonction booléenne pour effectuer cette tâche :

+ +
var x = Boolean(expression);     // conseillé
+var y = new Boolean(expression); // à ne pas utiliser
+
+ +

Si vous spécifiez un objet quelconque, incluant un objet booléen qui a une valeur fausse, le nouvel objet Boolean a une valeur vraie.

+ +
var myFalse = new Boolean(false);   // valeur initiale à false
+var g = Boolean(myFalse);       // valeur initiale à true
+var myString = new String("Hello"); // un object String
+var s = Boolean(myString);      // valeur initiale à true
+
+ +

Ne pas utiliser un objet Booléen à la place d'une valeur primitive booléenne.

+ +
+

Note : Lorsque la propriété historique, non-standard, document.all est utilisée comme argument, le constructeur Boolean renvoie un objet booléen faux. Cette propriété étant non-standard, son utilisation est déconseillée.

+
+ +

Propriétés

+ +
+
Boolean.length
+
Renvoie 1. Le nombre d'arguments pris en charge par le constructeur.
+
{{jsxref("Boolean.prototype")}}
+
Représente le prototype du constructeur Boolean.
+
+ +

Méthodes

+ +

L'objet global Boolean ne contient pas ses propres méthodes, cependant, il hérite de certaines méthodes à travers la chaine de prototypes.

+ +

Instances de Boolean

+ +

Toutes les Boolean héritent de {{jsxref("Boolean.prototype")}}. Comme avec tous les constructeurs, l'objet prototype dicte les propriétés et les méthodes héritées par les instances.

+ +

Propriétés

+ +

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Boolean/prototype','Propri.C3.A9t.C3.A9s')}}

+ +

Méthodes

+ +

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Boolean/prototype','M.C3.A9thodes')}}

+ +

Exemples

+ +

Création d'objets Boolean avec une valeur initiale à faux

+ +
var bNoParam = new Boolean();
+var bZero = new Boolean(0);
+var bNull = new Boolean(null);
+var bEmptyString = new Boolean("");
+var bfalse = new Boolean(false);
+
+ +

Création d'objets Boolean avec une valeur initiale à vrai

+ +
var btrue = new Boolean(true);
+var btrueString = new Boolean("true");
+var bfalseString = new Boolean("false");
+var bArrayProto = new Boolean([]);
+var bObjProto = new Boolean({});
+var bSuLin = new Boolean("Su Lin");
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.6', 'Boolean')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-boolean-objects', 'Boolean')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-boolean-objects', 'Boolean')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/boolean/tosource/index.html b/files/fr/web/javascript/reference/global_objects/boolean/tosource/index.html deleted file mode 100644 index c194c56ae6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/boolean/tosource/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Boolean.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Boolean/toSource -tags: - - Boolean - - JavaScript - - Méthode - - Non-standard - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean/toSource ---- -
{{JSRef}} {{Non-standard_header}}
- -

La méthode toSource() renvoie une chaine de caractères représentant le code source de l'objet.

- -

Syntaxe

- -
booleanObj.toSource()
-Boolean.toSource()
- -

Valeur de retour

- -

Une chaîne de caractères représentant le code source de l'objet.

- -

Description

- -

La méthode toSource renvoie les valeurs suivantes :

- - - -

Cette méthode est généralement utilisée de façon interne par le moteur JavaScript et n'est pas appelée explicitement dans des scripts.

- -

Spécifications

- -

Ne fait partie d'aucun standard. Implémentée avec JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Boolean.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/boolean/tosource/index.md b/files/fr/web/javascript/reference/global_objects/boolean/tosource/index.md new file mode 100644 index 0000000000..c194c56ae6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/boolean/tosource/index.md @@ -0,0 +1,56 @@ +--- +title: Boolean.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Boolean/toSource +tags: + - Boolean + - JavaScript + - Méthode + - Non-standard + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean/toSource +--- +
{{JSRef}} {{Non-standard_header}}
+ +

La méthode toSource() renvoie une chaine de caractères représentant le code source de l'objet.

+ +

Syntaxe

+ +
booleanObj.toSource()
+Boolean.toSource()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant le code source de l'objet.

+ +

Description

+ +

La méthode toSource renvoie les valeurs suivantes :

+ + + +

Cette méthode est généralement utilisée de façon interne par le moteur JavaScript et n'est pas appelée explicitement dans des scripts.

+ +

Spécifications

+ +

Ne fait partie d'aucun standard. Implémentée avec JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Boolean.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/boolean/tostring/index.html b/files/fr/web/javascript/reference/global_objects/boolean/tostring/index.html deleted file mode 100644 index aedf9e0b00..0000000000 --- a/files/fr/web/javascript/reference/global_objects/boolean/tostring/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Boolean.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Boolean/toString -tags: - - Boolean - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaine de caractères correspondant à l'objet Boolean courant.

- -
{{EmbedInteractiveExample("pages/js/boolean-tostring.html")}}
- -

Syntaxe

- -
bool.toString()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente l'objet {{jsxref("Boolean")}}.

- -

Description

- -

L'objet {{jsxref("Boolean")}} surcharge la méthode toString() de l'objet {{jsxref("Object")}} ; il n'hérite pas de la méthode {{jsxref("Object.prototype.toString()")}}. Pour les objets de type Boolean, la méthode toString() renvoie une chaine de caractère representative de l'objet.

- -

La méthode toString() est automatiquement appelée quand le Boolean doit être representé comme une texte ou lorsque qu'il est concaténé avec une chaine de caractères.

- -

Pour les objets de type Boolean , la fonction native toString() renvoie la chaine de caractère "true" ou "false" en fonction de la valeur de l'objet.

- -

Exemples

- -

Utiliser toString()

- -

Dans ce code, flag.toString() renvoie "true" :

- -
var flag = new Boolean(true);
-var maVar = flag.toString();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.6.4.2', 'Boolean.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-boolean.prototype.tostring', 'Boolean.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-boolean.prototype.tostring', 'Boolean.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Boolean.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/boolean/tostring/index.md b/files/fr/web/javascript/reference/global_objects/boolean/tostring/index.md new file mode 100644 index 0000000000..aedf9e0b00 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/boolean/tostring/index.md @@ -0,0 +1,85 @@ +--- +title: Boolean.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Boolean/toString +tags: + - Boolean + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaine de caractères correspondant à l'objet Boolean courant.

+ +
{{EmbedInteractiveExample("pages/js/boolean-tostring.html")}}
+ +

Syntaxe

+ +
bool.toString()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente l'objet {{jsxref("Boolean")}}.

+ +

Description

+ +

L'objet {{jsxref("Boolean")}} surcharge la méthode toString() de l'objet {{jsxref("Object")}} ; il n'hérite pas de la méthode {{jsxref("Object.prototype.toString()")}}. Pour les objets de type Boolean, la méthode toString() renvoie une chaine de caractère representative de l'objet.

+ +

La méthode toString() est automatiquement appelée quand le Boolean doit être representé comme une texte ou lorsque qu'il est concaténé avec une chaine de caractères.

+ +

Pour les objets de type Boolean , la fonction native toString() renvoie la chaine de caractère "true" ou "false" en fonction de la valeur de l'objet.

+ +

Exemples

+ +

Utiliser toString()

+ +

Dans ce code, flag.toString() renvoie "true" :

+ +
var flag = new Boolean(true);
+var maVar = flag.toString();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.6.4.2', 'Boolean.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-boolean.prototype.tostring', 'Boolean.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-boolean.prototype.tostring', 'Boolean.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Boolean.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/boolean/valueof/index.html b/files/fr/web/javascript/reference/global_objects/boolean/valueof/index.html deleted file mode 100644 index 336b15a0ea..0000000000 --- a/files/fr/web/javascript/reference/global_objects/boolean/valueof/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Boolean.prototype.valueOf() -slug: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf -tags: - - Boolean - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean/valueOf ---- -
{{JSRef}}
- -

La méthode valueOf() renvoie la valeur primitive de l'objet {{jsxref("Boolean")}}.

- -
{{EmbedInteractiveExample("pages/js/boolean-valueof.html")}}
- -

Syntaxe

- -
bool.valueOf()
- -

Valeur de retour

- -

La valeur primitive associée à l'objet {{jsxref("Boolean")}}.

- -

Description

- -

La méthode valueOf() de {{jsxref("Boolean")}} renvoie la valeur primitive d'un objet Boolean, ou d'un littéral booléen.

- -

Cette méthode est généralement utilisée de façon interne pas le moteur JavaScript et n'est pas utilisée explicitement dans les scripts.

- -

Exemples

- -

Utiliser valueOf()

- -
var x = new Boolean();
-var maVar = x.valueOf()      // assigne false à maVar
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.6.4.3', 'Boolean.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-boolean.prototype.valueof', 'Boolean.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-boolean.prototype.valueof', 'Boolean.prototype.valueOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Boolean.valueOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/boolean/valueof/index.md b/files/fr/web/javascript/reference/global_objects/boolean/valueof/index.md new file mode 100644 index 0000000000..336b15a0ea --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/boolean/valueof/index.md @@ -0,0 +1,81 @@ +--- +title: Boolean.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf +tags: + - Boolean + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Boolean/valueOf +--- +
{{JSRef}}
+ +

La méthode valueOf() renvoie la valeur primitive de l'objet {{jsxref("Boolean")}}.

+ +
{{EmbedInteractiveExample("pages/js/boolean-valueof.html")}}
+ +

Syntaxe

+ +
bool.valueOf()
+ +

Valeur de retour

+ +

La valeur primitive associée à l'objet {{jsxref("Boolean")}}.

+ +

Description

+ +

La méthode valueOf() de {{jsxref("Boolean")}} renvoie la valeur primitive d'un objet Boolean, ou d'un littéral booléen.

+ +

Cette méthode est généralement utilisée de façon interne pas le moteur JavaScript et n'est pas utilisée explicitement dans les scripts.

+ +

Exemples

+ +

Utiliser valueOf()

+ +
var x = new Boolean();
+var maVar = x.valueOf()      // assigne false à maVar
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.6.4.3', 'Boolean.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-boolean.prototype.valueof', 'Boolean.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-boolean.prototype.valueof', 'Boolean.prototype.valueOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Boolean.valueOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/buffer/index.html b/files/fr/web/javascript/reference/global_objects/dataview/buffer/index.html deleted file mode 100644 index 5e8b762109..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/buffer/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: DataView.prototype.buffer -slug: Web/JavaScript/Reference/Global_Objects/DataView/buffer -tags: - - DataView - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/buffer -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/buffer ---- -
{{JSRef}}
- -

L'accesseur buffer est une propriété représentant l'objet {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}} référencé par la vue DataView lors de sa construction.

- -
{{EmbedInteractiveExample("pages/js/dataview-buffer.html")}}
- -

Syntaxe

- -
dataview.buffer
- -

Description

- -

La propriété buffer est un accesseur/mutateur dont le mutateur correspondant vaut undefined, cela signifie qu'il n'est possible que de lire cette propriété. Sa valeur est établie lors de la construction de l'objet DataView et ne peut pas être modifiée.

- -

Exemples

- -

Utilisation de la propriété buffer

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.buffer; // ArrayBuffer { byteLength: 8 }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-dataview.prototype.buffer', 'DataView.prototype.buffer')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-dataview.prototype.buffer', 'DataView.prototype.buffer')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.buffer")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/buffer/index.md b/files/fr/web/javascript/reference/global_objects/dataview/buffer/index.md new file mode 100644 index 0000000000..5e8b762109 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/buffer/index.md @@ -0,0 +1,68 @@ +--- +title: DataView.prototype.buffer +slug: Web/JavaScript/Reference/Global_Objects/DataView/buffer +tags: + - DataView + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/buffer +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/buffer +--- +
{{JSRef}}
+ +

L'accesseur buffer est une propriété représentant l'objet {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}} référencé par la vue DataView lors de sa construction.

+ +
{{EmbedInteractiveExample("pages/js/dataview-buffer.html")}}
+ +

Syntaxe

+ +
dataview.buffer
+ +

Description

+ +

La propriété buffer est un accesseur/mutateur dont le mutateur correspondant vaut undefined, cela signifie qu'il n'est possible que de lire cette propriété. Sa valeur est établie lors de la construction de l'objet DataView et ne peut pas être modifiée.

+ +

Exemples

+ +

Utilisation de la propriété buffer

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.buffer; // ArrayBuffer { byteLength: 8 }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-dataview.prototype.buffer', 'DataView.prototype.buffer')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-dataview.prototype.buffer', 'DataView.prototype.buffer')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.buffer")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.html b/files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.html deleted file mode 100644 index 0ee441d0f0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: DataView.prototype.byteLength -slug: Web/JavaScript/Reference/Global_Objects/DataView/byteLength -tags: - - DataView - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/byteLength -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/byteLength ---- -
{{JSRef}}
- -

L'accesseur byteLength est une propriété représentant la longueur, exprimée en octets, de cette vue depuis le début de l'objet {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}} correspondant.

- -
{{EmbedInteractiveExample("pages/js/dataview-bytelength.html")}}
- -

Syntaxe

- -
dataview.byteLength
- -

Description

- -

La propriété byteLength est une propriété accesseur/mutateur dont le mutateur vaut  undefined. Cela signifie que cette propriété est en lecture seule. Cette valeur est déterminée lorsque l'objet DataView est construit et ne peut pas être changée. Si DataView ne définit pas de décalage avec byteOffset ou ne spécifie pas byteLength, ce sera la byteLength de l'objet ArrayBuffer ou SharedArrayBuffer référencé qui sera renvoyée.

- -

Exemples

- -

Utilisation de la propriété byteLength

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.byteLength; // 8 (correspond au byteLength du buffer)
-
-var dataview2 = new DataView(buffer, 1, 5);
-dataview2.byteLength; // 5 (correspond à la longueur utilisée pour la définition)
-
-var dataview3 = new DataView(buffer, 2);
-dataview3.byteLength; // 6 (en raison du décalage (offset) pour la construction du DataView)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-dataview.prototype.bytelength', 'DataView.prototype.byteLength')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-dataview.prototype.bytelength', 'DataView.prototype.byteLength')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.byteLength")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.md b/files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.md new file mode 100644 index 0000000000..0ee441d0f0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/bytelength/index.md @@ -0,0 +1,75 @@ +--- +title: DataView.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/DataView/byteLength +tags: + - DataView + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/byteLength +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/byteLength +--- +
{{JSRef}}
+ +

L'accesseur byteLength est une propriété représentant la longueur, exprimée en octets, de cette vue depuis le début de l'objet {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}} correspondant.

+ +
{{EmbedInteractiveExample("pages/js/dataview-bytelength.html")}}
+ +

Syntaxe

+ +
dataview.byteLength
+ +

Description

+ +

La propriété byteLength est une propriété accesseur/mutateur dont le mutateur vaut  undefined. Cela signifie que cette propriété est en lecture seule. Cette valeur est déterminée lorsque l'objet DataView est construit et ne peut pas être changée. Si DataView ne définit pas de décalage avec byteOffset ou ne spécifie pas byteLength, ce sera la byteLength de l'objet ArrayBuffer ou SharedArrayBuffer référencé qui sera renvoyée.

+ +

Exemples

+ +

Utilisation de la propriété byteLength

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.byteLength; // 8 (correspond au byteLength du buffer)
+
+var dataview2 = new DataView(buffer, 1, 5);
+dataview2.byteLength; // 5 (correspond à la longueur utilisée pour la définition)
+
+var dataview3 = new DataView(buffer, 2);
+dataview3.byteLength; // 6 (en raison du décalage (offset) pour la construction du DataView)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-dataview.prototype.bytelength', 'DataView.prototype.byteLength')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-dataview.prototype.bytelength', 'DataView.prototype.byteLength')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.byteLength")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.html b/files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.html deleted file mode 100644 index fe99429718..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: DataView.prototype.byteOffset -slug: Web/JavaScript/Reference/Global_Objects/DataView/byteOffset -tags: - - DataView - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/byteOffset -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/byteOffset ---- -
{{JSRef}}
- -

La propriété byteOffset est un accesseur représentant le décalage, exprimé en octets, entre la vue et le début de l'objet {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}} correspondant.

- -
{{EmbedInteractiveExample("pages/js/dataview-byteoffset.html")}}
- -

Syntaxe

- -
dataview.byteOffset
- -

Description

- -

La propriété byteOffset est un accesseur/mutateur dont la fonction du mutateur vaut  undefined. Cela signifie que la propriété n'est accesssible qu'en lecture seule. La valeur de la propriété est définie lors de la construction de l'objet DataView et ne peut pas être modifiée.

- -

Exemples

- -

Utilisation de la propriété byteOffset

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.byteOffset; // 0 (aucun décalage)
-
-var dataview2 = new DataView(buffer, 3);
-dataview2.byteOffset; // 3 (décalage défini lors de la construction de la vue)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-dataview.prototype.byteoffset', 'DataView.prototype.byteOffset')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-dataview.prototype.byteoffset', 'DataView.prototype.byteOffset')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.byteOffset")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.md b/files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.md new file mode 100644 index 0000000000..fe99429718 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/byteoffset/index.md @@ -0,0 +1,72 @@ +--- +title: DataView.prototype.byteOffset +slug: Web/JavaScript/Reference/Global_Objects/DataView/byteOffset +tags: + - DataView + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/byteOffset +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/byteOffset +--- +
{{JSRef}}
+ +

La propriété byteOffset est un accesseur représentant le décalage, exprimé en octets, entre la vue et le début de l'objet {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}} correspondant.

+ +
{{EmbedInteractiveExample("pages/js/dataview-byteoffset.html")}}
+ +

Syntaxe

+ +
dataview.byteOffset
+ +

Description

+ +

La propriété byteOffset est un accesseur/mutateur dont la fonction du mutateur vaut  undefined. Cela signifie que la propriété n'est accesssible qu'en lecture seule. La valeur de la propriété est définie lors de la construction de l'objet DataView et ne peut pas être modifiée.

+ +

Exemples

+ +

Utilisation de la propriété byteOffset

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.byteOffset; // 0 (aucun décalage)
+
+var dataview2 = new DataView(buffer, 3);
+dataview2.byteOffset; // 3 (décalage défini lors de la construction de la vue)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-dataview.prototype.byteoffset', 'DataView.prototype.byteOffset')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-dataview.prototype.byteoffset', 'DataView.prototype.byteOffset')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.byteOffset")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.html deleted file mode 100644 index db4490ac0d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: DataView.prototype.getBigInt64() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getBigInt64 -tags: - - BigInt - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getBigInt64 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getBigInt64 ---- -
{{JSRef}}
- -

La méthode getBigInt64() permet de lire un entier signé sur 64 bits (type long long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getbigint64.html")}}
- -

Syntaxe

- -
dataview.getBigInt64(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 64 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Une valeur {{jsxref("BigInt")}}

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getBigInt64()

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getBigInt64(0); // 0n
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour DataView.prototype.getBigInt64()
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getBigInt64")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.md new file mode 100644 index 0000000000..db4490ac0d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getbigint64/index.md @@ -0,0 +1,85 @@ +--- +title: DataView.prototype.getBigInt64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getBigInt64 +tags: + - BigInt + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getBigInt64 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getBigInt64 +--- +
{{JSRef}}
+ +

La méthode getBigInt64() permet de lire un entier signé sur 64 bits (type long long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getbigint64.html")}}
+ +

Syntaxe

+ +
dataview.getBigInt64(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 64 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Une valeur {{jsxref("BigInt")}}

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getBigInt64()

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getBigInt64(0); // 0n
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour DataView.prototype.getBigInt64()
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getBigInt64")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.html deleted file mode 100644 index b6fcc2c2ab..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: DataView.prototype.getBigUint64() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getBigUint64 -tags: - - BigInt - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getBigUint64 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getBigUint64 ---- -
{{JSRef}}
- -

La méthode getBigUint64() permet de lire un entier non signé sur 64 bits (type unsigned long long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getbiguint64.html")}}
- -

Syntaxe

- -
dataview.getBigUint64(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 64 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Une valeur {{jsxref("BigInt")}}

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getBigUint64()

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getBigUint64(0); // 0n
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour DataView.prototype.getBigUint64()
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getBigUint64")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.md new file mode 100644 index 0000000000..b6fcc2c2ab --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getbiguint64/index.md @@ -0,0 +1,85 @@ +--- +title: DataView.prototype.getBigUint64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getBigUint64 +tags: + - BigInt + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getBigUint64 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getBigUint64 +--- +
{{JSRef}}
+ +

La méthode getBigUint64() permet de lire un entier non signé sur 64 bits (type unsigned long long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getbiguint64.html")}}
+ +

Syntaxe

+ +
dataview.getBigUint64(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 64 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Une valeur {{jsxref("BigInt")}}

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getBigUint64()

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getBigUint64(0); // 0n
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour DataView.prototype.getBigUint64()
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getBigUint64")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.html deleted file mode 100644 index 20fb09388e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DataView.prototype.getFloat32() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getFloat32 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getFloat32 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getFloat32 ---- -
{{JSRef}}
- -

La méthode getFloat32() permet de lire un nombre flottant signé sur 32 bits à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getfloat32.html")}}
- -

Syntaxe

- -
dataview.getFloat32(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 32 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Un nombre flottant signé, sur 32 bits.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getFloat32

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getFloat32(1); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getfloat32', 'DataView.prototype.getFloat32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getfloat32', 'DataView.prototype.getFloat32')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getFloat32")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.md new file mode 100644 index 0000000000..20fb09388e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getfloat32/index.md @@ -0,0 +1,93 @@ +--- +title: DataView.prototype.getFloat32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getFloat32 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getFloat32 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getFloat32 +--- +
{{JSRef}}
+ +

La méthode getFloat32() permet de lire un nombre flottant signé sur 32 bits à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getfloat32.html")}}
+ +

Syntaxe

+ +
dataview.getFloat32(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 32 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Un nombre flottant signé, sur 32 bits.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getFloat32

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getFloat32(1); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getfloat32', 'DataView.prototype.getFloat32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getfloat32', 'DataView.prototype.getFloat32')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getFloat32")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.html deleted file mode 100644 index ba67808c2d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DataView.prototype.getFloat64() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getFloat64 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getFloat64 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getFloat64 ---- -
{{JSRef}}
- -

La méthode getFloat64() permet de lire un entier signé sur 64 bits (type double par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getfloat64.html")}}
- -

Syntaxe

- -
dataview.getFloat64(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 64 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Un nombre flottant signé sur 64 bits.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getFloat64

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getFloat64(0); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getfloat64', 'DataView.prototype.getFloat64')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getfloat64', 'DataView.prototype.getFloat64')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getFloat64")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.md new file mode 100644 index 0000000000..ba67808c2d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getfloat64/index.md @@ -0,0 +1,93 @@ +--- +title: DataView.prototype.getFloat64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getFloat64 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getFloat64 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getFloat64 +--- +
{{JSRef}}
+ +

La méthode getFloat64() permet de lire un entier signé sur 64 bits (type double par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getfloat64.html")}}
+ +

Syntaxe

+ +
dataview.getFloat64(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 64 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Un nombre flottant signé sur 64 bits.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getFloat64

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getFloat64(0); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getfloat64', 'DataView.prototype.getFloat64')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getfloat64', 'DataView.prototype.getFloat64')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getFloat64")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getint16/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getint16/index.html deleted file mode 100644 index 07973e9fa7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getint16/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DataView.prototype.getInt16() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt16 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt16 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getInt16 ---- -
{{JSRef}}
- -

La méthode getInt16() permet de lire un entier signé sur 16 bits (type short par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getint16.html")}}
- -

Syntaxe

- -
dataview.getInt16(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 16 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Un entier signé sur 16 bits.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getInt16

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getInt16(1); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getint16', 'DataView.prototype.getInt16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getint16', 'DataView.prototype.getInt16')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getInt16")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getint16/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getint16/index.md new file mode 100644 index 0000000000..07973e9fa7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getint16/index.md @@ -0,0 +1,93 @@ +--- +title: DataView.prototype.getInt16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt16 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt16 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getInt16 +--- +
{{JSRef}}
+ +

La méthode getInt16() permet de lire un entier signé sur 16 bits (type short par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getint16.html")}}
+ +

Syntaxe

+ +
dataview.getInt16(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 16 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Un entier signé sur 16 bits.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getInt16

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getInt16(1); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getint16', 'DataView.prototype.getInt16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getint16', 'DataView.prototype.getInt16')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getInt16")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getint32/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getint32/index.html deleted file mode 100644 index 024dea3e3e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getint32/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DataView.prototype.getInt32() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt32 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt32 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getInt32 ---- -
{{JSRef}}
- -

La méthode getInt32() permet de lire un entier signé sur 32 bits (type long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getint32.html")}}
- -

Syntaxe

- -
dataview.getInt32(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 32 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Un entier signé sur 32 bits.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getInt32

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getInt32(1); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getint32', 'DataView.prototype.getInt32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getint32', 'DataView.prototype.getInt32')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getInt32")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getint32/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getint32/index.md new file mode 100644 index 0000000000..024dea3e3e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getint32/index.md @@ -0,0 +1,93 @@ +--- +title: DataView.prototype.getInt32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt32 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt32 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getInt32 +--- +
{{JSRef}}
+ +

La méthode getInt32() permet de lire un entier signé sur 32 bits (type long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getint32.html")}}
+ +

Syntaxe

+ +
dataview.getInt32(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 32 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Un entier signé sur 32 bits.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getInt32

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getInt32(1); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getint32', 'DataView.prototype.getInt32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getint32', 'DataView.prototype.getInt32')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getInt32")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getint8/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getint8/index.html deleted file mode 100644 index 7404ee6626..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getint8/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: DataView.prototype.getInt8() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt8 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt8 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getInt8 ---- -
{{JSRef}}
- -

La méthode getInt8() permet de lire un entier signé sur 8 bits à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getint8.html")}}
- -

Syntaxe

- -
dataview.getInt8(positionOctet)
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
- -

Valeur de retour

- -

Un entier signé sur 8 bits.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getInt8

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getInt8(1); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getint8', 'DataView.prototype.getInt8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getint8', 'DataView.prototype.getInt8')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getInt8")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getint8/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getint8/index.md new file mode 100644 index 0000000000..7404ee6626 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getint8/index.md @@ -0,0 +1,91 @@ +--- +title: DataView.prototype.getInt8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getInt8 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getInt8 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getInt8 +--- +
{{JSRef}}
+ +

La méthode getInt8() permet de lire un entier signé sur 8 bits à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getint8.html")}}
+ +

Syntaxe

+ +
dataview.getInt8(positionOctet)
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
+ +

Valeur de retour

+ +

Un entier signé sur 8 bits.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getInt8

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getInt8(1); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getint8', 'DataView.prototype.getInt8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getint8', 'DataView.prototype.getInt8')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getInt8")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.html deleted file mode 100644 index 7f2a5c307a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DataView.prototype.getUint16() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint16 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint16 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getUint16 ---- -
{{JSRef}}
- -

La méthode getUint16() permet de lire un entier non-signé sur 16 bits (type unsigned short par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getuint16.html")}}
- -

Syntaxe

- -
dataview.getUint16(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 16 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Un entier sur 16 bits non signé.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getUint16

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getUint16(1); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getuint16', 'DataView.prototype.getUint16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint16', 'DataView.prototype.getUint16')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getUint16")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.md new file mode 100644 index 0000000000..7f2a5c307a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getuint16/index.md @@ -0,0 +1,93 @@ +--- +title: DataView.prototype.getUint16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint16 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint16 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getUint16 +--- +
{{JSRef}}
+ +

La méthode getUint16() permet de lire un entier non-signé sur 16 bits (type unsigned short par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getuint16.html")}}
+ +

Syntaxe

+ +
dataview.getUint16(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 16 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Un entier sur 16 bits non signé.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getUint16

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getUint16(1); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getuint16', 'DataView.prototype.getUint16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint16', 'DataView.prototype.getUint16')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getUint16")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.html deleted file mode 100644 index d01a4a0f87..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: DataView.prototype.getUint32() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint32 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint32 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getUint32 ---- -
{{JSRef}}
- -

La méthode getUint32() permet de lire un entier non-signé sur 32 bits (type unsigned long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getuint32.html")}}
- -

Syntaxe

- -
dataview.getUint32(positionOctet [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
littleEndian
-
{{optional_inline}} indique si la valeur sur 32 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
-
- -

Valeur de retour

- -

Un entier sur 32 bits, non-signé.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getUint32()

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getUint32(1); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getuint32', 'DataView.prototype.getUint32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint32', 'DataView.prototype.getUint32')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getUint32")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.md new file mode 100644 index 0000000000..d01a4a0f87 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getuint32/index.md @@ -0,0 +1,93 @@ +--- +title: DataView.prototype.getUint32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint32 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint32 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getUint32 +--- +
{{JSRef}}
+ +

La méthode getUint32() permet de lire un entier non-signé sur 32 bits (type unsigned long par analogie avec C) à l'octet donné par rapport au début de {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getuint32.html")}}
+ +

Syntaxe

+ +
dataview.getUint32(positionOctet [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
littleEndian
+
{{optional_inline}} indique si la valeur sur 32 bits est enregistrée dans l'ordre des octets {{Glossary("Endianness", "de poids faible")}}. Si le paramètre vaut false ou undefined, la valeur sera lue dans l'ordre des octets de poids forts.
+
+ +

Valeur de retour

+ +

Un entier sur 32 bits, non-signé.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getUint32()

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getUint32(1); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getuint32', 'DataView.prototype.getUint32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint32', 'DataView.prototype.getUint32')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getUint32")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.html b/files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.html deleted file mode 100644 index a8c94778c7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: DataView.prototype.getUint8() -slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint8 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint8 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getUint8 ---- -
{{JSRef}}
- -

La méthode getUint8() permet de lire un entier non-signé sur 8 bits à l'octet donné par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-getuint8.html")}}
- -

Syntaxe

- -
dataview.getUint8(positionOctet)
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
-
- -

Valeur de retour

- -

Un entier sur 8 bits, non-signé.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
-
- -

Description

- -

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

- -

Exemples

- -

Utilisation de la méthode getUint8

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.getUint8(1); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getuint8', 'DataView.prototype.getUint8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint8', 'DataView.prototype.getUint8')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.getUint8")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.md b/files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.md new file mode 100644 index 0000000000..a8c94778c7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/getuint8/index.md @@ -0,0 +1,91 @@ +--- +title: DataView.prototype.getUint8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/getUint8 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/getUint8 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/getUint8 +--- +
{{JSRef}}
+ +

La méthode getUint8() permet de lire un entier non-signé sur 8 bits à l'octet donné par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-getuint8.html")}}
+ +

Syntaxe

+ +
dataview.getUint8(positionOctet)
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets depuis le début de la vue, à laquelle lire les données.
+
+ +

Valeur de retour

+ +

Un entier sur 8 bits, non-signé.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel qu'il est en dehors de la vue.
+
+ +

Description

+ +

Il n'y a pas de contrainte d'alignement, les valeurs codées sur plusieurs octets peuvent être obtenues depuis n'importe quelle position.

+ +

Exemples

+ +

Utilisation de la méthode getUint8

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.getUint8(1); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.getuint8', 'DataView.prototype.getUint8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.getuint8', 'DataView.prototype.getUint8')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.getUint8")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/index.html b/files/fr/web/javascript/reference/global_objects/dataview/index.html deleted file mode 100644 index 41edfcb904..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/index.html +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: DataView -slug: Web/JavaScript/Reference/Global_Objects/DataView -tags: - - Constructor - - DataView - - JavaScript - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/DataView -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView ---- -
{{JSRef}}
- -

La vue DataView fournit une interface de bas niveau pour lire et écrire des données de différents types numériques dans un {{jsxref("ArrayBuffer")}}, quel que soit le « boutisme » de la plate-forme.

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

Syntaxe

- -
new DataView(buffer [, décalageOctets [, longueurOctets]])
- -

Paramètres

- -
-
buffer
-
Un {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}}{{experimental_inline}} existant à utiliser pour la mise en mémoire du nouvel objet DataView.
-
décalageOctets {{optional_inline}}
-
Le décalage, exprimé en octets, pour trouver le premier octet significatif du buffer à représenter dans la vue. Si ce paramètre n'est pas fourni, la vue commencera au premier octet du buffer.
-
longueurOctets {{optional_inline}}
-
Le nombre d'éléments dans le tableau d'octets. Si ce paramètre n'est pas fourni, la longueur de la vue correspondra à celle du buffer.
-
- -

Valeur de retour

- -

Un nouvel objet DataView représentant le tampon mémoire (buffer) fourni.

- -

L'objet ainsi renvoyé peut être vu comme un interpréteur du tampon mémoire. Cet objet sait comment convertir des nombres afin de lire ou d'écrire des valeurs dans le tampon. C'est la vue qui s'occupe de la gestion des entiers, de la conversion des flottants, du boutisme utilisé et des autres détails de représentation binaire.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si les paramètres décalageOctets et longueurOctets dépassent la fin du buffer fourni.
-
- -

Ainsi, si la taille du tampon mémoire est de 16 octets, que décalageOctetsvaut 8 et que longueurOctets vaut 10, cette exception est levée car la vue résultante dépassera de deux octets la longueur totale du tampon mémoire.

- -

Description

- -

Le boutisme (endianness)

- -

En utilisant cet objet, vous pouvez détecter le type d'architecture qui exécute votre script, ce qui peut être utile dans certains cas. Voici un fragment de code pour permettre cette détection. Voir {{Glossary("Endianness")}} pour plus d'informations.

- -
var littleEndian = (function() {
-  var buffer = new ArrayBuffer(2);
-  new DataView(buffer).setInt16(0, 256, true /*littleEndian donc */);
-  // Int16Array utilise le boutisme de la plate-forme
-  return new Int16Array(buffer)[0] === 256;
-})();
-console.log(littleEndian); // true ou false
-
- -

Gestion des valeurs entières sur 64 bits

- -

JavaScript manipule les nombres comme des valeurs sur 32 bits. Aussi, le moteur ne prend pas en charge la gestion des entiers sur 64 bits et on ne peut donc pas manipuler de telles valeurs avec DataView. Afin de contourner ce problème, on peut implémenter une méthode getUint64() afin d'otbenir une valeur avec une précision allant jusqu'à {{jsxref("Number.MAX_SAFE_INTEGER")}}, ce qui peut être suffisant dans certains cas.

- -
function getUint64(dataview, byteOffset, littleEndian) {
-  // on décompose la valeur 64 sur bits en deux nombres 32 bits
-  const gauche = dataview.getUint32(byteOffset, littleEndian);
-  const droite = dataview.getUint32(byteOffset + 4, littleEndian);
-
-  // on combine les deux valeurs 32 bits
-  const combinaison = littleEndian ? gauche + 2**32*droite : 2**32*gauche + droite;
-  if(!Number.isSafeInteger(combinaison)){
-    console.warn(combinaison, " dépasse MAX_SAFE_INTEGER : perte de précision !");
-  }
-  return combinaison;
-}
- -

On peut également créer un objet {{jsxref("BigInt")}} si on veut avoir accès à 64 bits :

- -
function getUin64BigInt(dataview, byteOffset, littleEndian) {
-  const left = dataview.getUint32(byteOffset, littleEndian);
-  const right = dataview.getUint32(byteOffset, littleEndian);
-
-  const combined = littleEndian ?
-    right.toString(16) + left.toString(16).padStart(8, '0') :
-    left.toString(16) + right.toString(16).padStart(8, '0');
-
-  return BigInt(`0x${combined}`);
-}
- -
-

Note : Sur le plan des performances, les grands entiers ({{jsxref("BigInt")}} ont une taille variable, aussi leur manipulation sera nécessairement plus lente que celle des nombres stockés sur 32 bits. Ceci étant écrit, les valeurs natives {{jsxref("BigInt")}} seront plus performantes que les implémentations tierces (bibliothèques, etc.).

-
- -

Propriétés

- -

Toutes les instances de DataView héritent de {{jsxref("DataView.prototype")}} qui permet d'ajouter des propriétés à l'ensemble des objets DataView.

- -

{{page("fr/Web/JavaScript/Reference/Objets_globaux/DataView/prototype","Propriétés")}}

- -

Méthodes

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/DataView/prototype','Méthodes')}}

- -

Exemples

- -
var buffer = new ArrayBuffer(16);
-var dv = new DataView(buffer, 0);
-
-dv.setInt16(1, 42);
-dv.getInt16(1); //42
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 6
{{SpecName('ES6', '#sec-dataview-constructor', 'DataView')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview-constructor', 'DataView')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

A partir de Firefox 40 {{geckoRelease(40)}}, DataView doit êre construit avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Si on invoque DataView() sans utiliser new, cela lèvera une exception {{jsxref("TypeError")}}.

- -
var dv = DataView(buffer, 0);
-// TypeError: calling a builtin DataView constructor without new is forbidden
- -
var dv = new DataView(buffer, 0);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/index.md b/files/fr/web/javascript/reference/global_objects/dataview/index.md new file mode 100644 index 0000000000..41edfcb904 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/index.md @@ -0,0 +1,163 @@ +--- +title: DataView +slug: Web/JavaScript/Reference/Global_Objects/DataView +tags: + - Constructor + - DataView + - JavaScript + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/DataView +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView +--- +
{{JSRef}}
+ +

La vue DataView fournit une interface de bas niveau pour lire et écrire des données de différents types numériques dans un {{jsxref("ArrayBuffer")}}, quel que soit le « boutisme » de la plate-forme.

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

Syntaxe

+ +
new DataView(buffer [, décalageOctets [, longueurOctets]])
+ +

Paramètres

+ +
+
buffer
+
Un {{jsxref("ArrayBuffer")}} ou {{jsxref("SharedArrayBuffer")}}{{experimental_inline}} existant à utiliser pour la mise en mémoire du nouvel objet DataView.
+
décalageOctets {{optional_inline}}
+
Le décalage, exprimé en octets, pour trouver le premier octet significatif du buffer à représenter dans la vue. Si ce paramètre n'est pas fourni, la vue commencera au premier octet du buffer.
+
longueurOctets {{optional_inline}}
+
Le nombre d'éléments dans le tableau d'octets. Si ce paramètre n'est pas fourni, la longueur de la vue correspondra à celle du buffer.
+
+ +

Valeur de retour

+ +

Un nouvel objet DataView représentant le tampon mémoire (buffer) fourni.

+ +

L'objet ainsi renvoyé peut être vu comme un interpréteur du tampon mémoire. Cet objet sait comment convertir des nombres afin de lire ou d'écrire des valeurs dans le tampon. C'est la vue qui s'occupe de la gestion des entiers, de la conversion des flottants, du boutisme utilisé et des autres détails de représentation binaire.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si les paramètres décalageOctets et longueurOctets dépassent la fin du buffer fourni.
+
+ +

Ainsi, si la taille du tampon mémoire est de 16 octets, que décalageOctetsvaut 8 et que longueurOctets vaut 10, cette exception est levée car la vue résultante dépassera de deux octets la longueur totale du tampon mémoire.

+ +

Description

+ +

Le boutisme (endianness)

+ +

En utilisant cet objet, vous pouvez détecter le type d'architecture qui exécute votre script, ce qui peut être utile dans certains cas. Voici un fragment de code pour permettre cette détection. Voir {{Glossary("Endianness")}} pour plus d'informations.

+ +
var littleEndian = (function() {
+  var buffer = new ArrayBuffer(2);
+  new DataView(buffer).setInt16(0, 256, true /*littleEndian donc */);
+  // Int16Array utilise le boutisme de la plate-forme
+  return new Int16Array(buffer)[0] === 256;
+})();
+console.log(littleEndian); // true ou false
+
+ +

Gestion des valeurs entières sur 64 bits

+ +

JavaScript manipule les nombres comme des valeurs sur 32 bits. Aussi, le moteur ne prend pas en charge la gestion des entiers sur 64 bits et on ne peut donc pas manipuler de telles valeurs avec DataView. Afin de contourner ce problème, on peut implémenter une méthode getUint64() afin d'otbenir une valeur avec une précision allant jusqu'à {{jsxref("Number.MAX_SAFE_INTEGER")}}, ce qui peut être suffisant dans certains cas.

+ +
function getUint64(dataview, byteOffset, littleEndian) {
+  // on décompose la valeur 64 sur bits en deux nombres 32 bits
+  const gauche = dataview.getUint32(byteOffset, littleEndian);
+  const droite = dataview.getUint32(byteOffset + 4, littleEndian);
+
+  // on combine les deux valeurs 32 bits
+  const combinaison = littleEndian ? gauche + 2**32*droite : 2**32*gauche + droite;
+  if(!Number.isSafeInteger(combinaison)){
+    console.warn(combinaison, " dépasse MAX_SAFE_INTEGER : perte de précision !");
+  }
+  return combinaison;
+}
+ +

On peut également créer un objet {{jsxref("BigInt")}} si on veut avoir accès à 64 bits :

+ +
function getUin64BigInt(dataview, byteOffset, littleEndian) {
+  const left = dataview.getUint32(byteOffset, littleEndian);
+  const right = dataview.getUint32(byteOffset, littleEndian);
+
+  const combined = littleEndian ?
+    right.toString(16) + left.toString(16).padStart(8, '0') :
+    left.toString(16) + right.toString(16).padStart(8, '0');
+
+  return BigInt(`0x${combined}`);
+}
+ +
+

Note : Sur le plan des performances, les grands entiers ({{jsxref("BigInt")}} ont une taille variable, aussi leur manipulation sera nécessairement plus lente que celle des nombres stockés sur 32 bits. Ceci étant écrit, les valeurs natives {{jsxref("BigInt")}} seront plus performantes que les implémentations tierces (bibliothèques, etc.).

+
+ +

Propriétés

+ +

Toutes les instances de DataView héritent de {{jsxref("DataView.prototype")}} qui permet d'ajouter des propriétés à l'ensemble des objets DataView.

+ +

{{page("fr/Web/JavaScript/Reference/Objets_globaux/DataView/prototype","Propriétés")}}

+ +

Méthodes

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/DataView/prototype','Méthodes')}}

+ +

Exemples

+ +
var buffer = new ArrayBuffer(16);
+var dv = new DataView(buffer, 0);
+
+dv.setInt16(1, 42);
+dv.getInt16(1); //42
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 6
{{SpecName('ES6', '#sec-dataview-constructor', 'DataView')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview-constructor', 'DataView')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

A partir de Firefox 40 {{geckoRelease(40)}}, DataView doit êre construit avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Si on invoque DataView() sans utiliser new, cela lèvera une exception {{jsxref("TypeError")}}.

+ +
var dv = DataView(buffer, 0);
+// TypeError: calling a builtin DataView constructor without new is forbidden
+ +
var dv = new DataView(buffer, 0);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.html deleted file mode 100644 index 5db0110c35..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: DataView.prototype.setBigInt64() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setBigInt64 -tags: - - BigInt - - DataView - - JavaScript - - Méthode - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setBigInt64 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setBigInt64 ---- -
{{JSRef}}
- -

La méthode setBigInt64() permet d'enregister un entier signé sur 64 bits (type long long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setbigint64.html")}}
- -

Syntaxe

- -
dataview.setBigInt64(positionOctet, value [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 64 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setBigInt64()

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setBigInt64(0, 3n);
-dataview.getInt32(0); // 3n
-
- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
Proposition pour DataView.prototype.setBigInt64()
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setBigInt64")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.md new file mode 100644 index 0000000000..5db0110c35 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setbigint64/index.md @@ -0,0 +1,81 @@ +--- +title: DataView.prototype.setBigInt64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setBigInt64 +tags: + - BigInt + - DataView + - JavaScript + - Méthode + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setBigInt64 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setBigInt64 +--- +
{{JSRef}}
+ +

La méthode setBigInt64() permet d'enregister un entier signé sur 64 bits (type long long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setbigint64.html")}}
+ +

Syntaxe

+ +
dataview.setBigInt64(positionOctet, value [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 64 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setBigInt64()

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setBigInt64(0, 3n);
+dataview.getInt32(0); // 3n
+
+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
Proposition pour DataView.prototype.setBigInt64()
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setBigInt64")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.html deleted file mode 100644 index b13aaff413..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: DataView.prototype.setBigUint64() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setBigUint64 -tags: - - BigInt - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setBigUint64 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setBigUint64 ---- -
{{JSRef}}
- -

La méthode setBigUint64() permet d'enregister un entier non-signé sur 64 bits (type unsigned long long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setbiguint64.html")}}
- -

Syntaxe

- -
dataview.setBigUint64(positionOctet, value [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en nombre d'octets, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 64 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setBigUint64()

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setBigUint64(0, 3n);
-dataview.getInt32(0); // 3n
-
- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
Proposition pour DataView.prototype.setBigUint64()
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setBigUint64")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.md new file mode 100644 index 0000000000..b13aaff413 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setbiguint64/index.md @@ -0,0 +1,82 @@ +--- +title: DataView.prototype.setBigUint64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setBigUint64 +tags: + - BigInt + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setBigUint64 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setBigUint64 +--- +
{{JSRef}}
+ +

La méthode setBigUint64() permet d'enregister un entier non-signé sur 64 bits (type unsigned long long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setbiguint64.html")}}
+ +

Syntaxe

+ +
dataview.setBigUint64(positionOctet, value [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en nombre d'octets, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 64 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setBigUint64()

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setBigUint64(0, 3n);
+dataview.getInt32(0); // 3n
+
+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
Proposition pour DataView.prototype.setBigUint64()
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setBigUint64")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.html deleted file mode 100644 index a3862d3e4d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: DataView.prototype.setFloat32() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setFloat32 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setFloat32 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setFloat32 ---- -
{{JSRef}}
- -

La méthode setFloat32() permet d'enregistrer un nombre flottant signé sur 32 bits (type float par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setfloat32.html")}}
- -

Syntaxe

- -
dataview.setFloat32(positionOctet, valeur [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setFloat32

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setFloat32(1, 3);
-dataview.getFloat32(1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setfloat32', 'DataView.prototype.setFloat32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setfloat32', 'DataView.prototype.setFloat32')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setFloat32")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.md new file mode 100644 index 0000000000..a3862d3e4d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setfloat32/index.md @@ -0,0 +1,92 @@ +--- +title: DataView.prototype.setFloat32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setFloat32 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setFloat32 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setFloat32 +--- +
{{JSRef}}
+ +

La méthode setFloat32() permet d'enregistrer un nombre flottant signé sur 32 bits (type float par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setfloat32.html")}}
+ +

Syntaxe

+ +
dataview.setFloat32(positionOctet, valeur [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setFloat32

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setFloat32(1, 3);
+dataview.getFloat32(1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setfloat32', 'DataView.prototype.setFloat32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setfloat32', 'DataView.prototype.setFloat32')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setFloat32")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.html deleted file mode 100644 index 0b1d62773b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: DataView.prototype.setFloat64() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setFloat64 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setFloat64 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setFloat64 ---- -
{{JSRef}}
- -

La méthode setFloat64() permet d'enregistrer un nombre flottant signé sur 64 bits (type double par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setfloat64.html")}}
- -

Syntaxe

- -
dataview.setFloat64(positionOctet, value [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 64 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setFloat64

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setFloat64(0, 3);
-dataview.getFloat64(0); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setfloat64', 'DataView.prototype.setFloat64')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setfloat64', 'DataView.prototype.setFloat64')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setFloat64")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.md new file mode 100644 index 0000000000..0b1d62773b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setfloat64/index.md @@ -0,0 +1,92 @@ +--- +title: DataView.prototype.setFloat64() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setFloat64 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setFloat64 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setFloat64 +--- +
{{JSRef}}
+ +

La méthode setFloat64() permet d'enregistrer un nombre flottant signé sur 64 bits (type double par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setfloat64.html")}}
+ +

Syntaxe

+ +
dataview.setFloat64(positionOctet, value [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 64 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setFloat64

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setFloat64(0, 3);
+dataview.getFloat64(0); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setfloat64', 'DataView.prototype.setFloat64')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setfloat64', 'DataView.prototype.setFloat64')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setFloat64")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setint16/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setint16/index.html deleted file mode 100644 index b275f78339..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setint16/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: DataView.prototype.setInt16() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt16 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt16 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setInt16 ---- -
{{JSRef}}
- -

La méthode setInt16() permet d'enregister un entier signé sur 16 bits (type short par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setint16.html")}}
- -

Syntaxe

- -
dataview.setInt16(positionOctet, value [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 16 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setInt16

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setInt16(1, 3);
-dataview.getInt16(1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015 (ES6).
{{SpecName('ES2015', '#sec-dataview.prototype.setint16', 'DataView.prototype.setInt16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setint16', 'DataView.prototype.setInt16')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setInt16")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setint16/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setint16/index.md new file mode 100644 index 0000000000..b275f78339 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setint16/index.md @@ -0,0 +1,92 @@ +--- +title: DataView.prototype.setInt16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt16 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt16 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setInt16 +--- +
{{JSRef}}
+ +

La méthode setInt16() permet d'enregister un entier signé sur 16 bits (type short par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setint16.html")}}
+ +

Syntaxe

+ +
dataview.setInt16(positionOctet, value [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 16 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setInt16

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setInt16(1, 3);
+dataview.getInt16(1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015 (ES6).
{{SpecName('ES2015', '#sec-dataview.prototype.setint16', 'DataView.prototype.setInt16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setint16', 'DataView.prototype.setInt16')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setInt16")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setint32/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setint32/index.html deleted file mode 100644 index 21e51b28dd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setint32/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: DataView.prototype.setInt32() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt32 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt32 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setInt32 ---- -
{{JSRef}}
- -

La méthode setInt32() permet d'enregister un entier signé sur 32 bits (type long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setint32.html")}}
- -

Syntaxe

- -
dataview.setInt32(positionOctet, value [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setInt32

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setInt32(1, 3);
-dataview.getInt32(1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setint32', 'DataView.prototype.setInt32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setint32', 'DataView.prototype.setInt32')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setInt32")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setint32/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setint32/index.md new file mode 100644 index 0000000000..21e51b28dd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setint32/index.md @@ -0,0 +1,92 @@ +--- +title: DataView.prototype.setInt32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt32 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt32 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setInt32 +--- +
{{JSRef}}
+ +

La méthode setInt32() permet d'enregister un entier signé sur 32 bits (type long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setint32.html")}}
+ +

Syntaxe

+ +
dataview.setInt32(positionOctet, value [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setInt32

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setInt32(1, 3);
+dataview.getInt32(1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setint32', 'DataView.prototype.setInt32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setint32', 'DataView.prototype.setInt32')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setInt32")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setint8/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setint8/index.html deleted file mode 100644 index f088ea3247..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setint8/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: DataView.prototype.setInt8() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt8 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt8 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setInt8 ---- -
{{JSRef}}
- -

La méthode setInt8() permet d'enregister un entier signé sur 8 bits à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setint8.html")}}
- -

Syntaxe

- -
dataview.setInt8(positionOctet, valeur)
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setInt8

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setInt8(1, 3);
-dataview.getInt8(1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setint8', 'DataView.prototype.setInt8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setint8', 'DataView.prototype.setInt8')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.DataView.setInt8")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setint8/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setint8/index.md new file mode 100644 index 0000000000..f088ea3247 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setint8/index.md @@ -0,0 +1,92 @@ +--- +title: DataView.prototype.setInt8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt8 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt8 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setInt8 +--- +
{{JSRef}}
+ +

La méthode setInt8() permet d'enregister un entier signé sur 8 bits à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setint8.html")}}
+ +

Syntaxe

+ +
dataview.setInt8(positionOctet, valeur)
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setInt8

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setInt8(1, 3);
+dataview.getInt8(1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setint8', 'DataView.prototype.setInt8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setint8', 'DataView.prototype.setInt8')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("javascript.builtins.DataView.setInt8")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.html deleted file mode 100644 index 45ce24f36d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: DataView.prototype.setUint16() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint16 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint16 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setUint16 ---- -
{{JSRef}}
- -

La méthode setUint16() permet d'enregister un entier non-signé sur 16 bits (type unsigned short par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setuint16.html")}}
- -

Syntaxe

- -
dataview.setUint16(positionOctet, valeur [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setUint1

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setUint16(1, 3);
-dataview.getUint16(1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setuint16', 'DataView.prototype.setUint16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint16', 'DataView.prototype.setUint16')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setUint16")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.md new file mode 100644 index 0000000000..45ce24f36d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setuint16/index.md @@ -0,0 +1,92 @@ +--- +title: DataView.prototype.setUint16() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint16 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint16 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setUint16 +--- +
{{JSRef}}
+ +

La méthode setUint16() permet d'enregister un entier non-signé sur 16 bits (type unsigned short par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setuint16.html")}}
+ +

Syntaxe

+ +
dataview.setUint16(positionOctet, valeur [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setUint1

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setUint16(1, 3);
+dataview.getUint16(1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setuint16', 'DataView.prototype.setUint16')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint16', 'DataView.prototype.setUint16')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setUint16")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.html deleted file mode 100644 index 7c0dc85072..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: DataView.prototype.setUint32() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint32 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint32 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setUint32 ---- -
{{JSRef}}
- -

La méthode setUint32() permet d'enregister un entier non-signé sur 32 bits (type unsigned long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setuint32.html")}}
- -

Syntaxe

- -
dataview.setUint32(positionOctet, valeur [, littleEndian])
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer
-
littleEndian
-
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setUint32

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setUint32(1, 3);
-dataview.getUint32(1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015 (ES6).
{{SpecName('ES2015', '#sec-dataview.prototype.setuint32', 'DataView.prototype.setUint32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint32', 'DataView.prototype.setUint32')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setUint32")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.md new file mode 100644 index 0000000000..7c0dc85072 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setuint32/index.md @@ -0,0 +1,92 @@ +--- +title: DataView.prototype.setUint32() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint32 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint32 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setUint32 +--- +
{{JSRef}}
+ +

La méthode setUint32() permet d'enregister un entier non-signé sur 32 bits (type unsigned long par analogie avec C) à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setuint32.html")}}
+ +

Syntaxe

+ +
dataview.setUint32(positionOctet, valeur [, littleEndian])
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer
+
littleEndian
+
{{optional_inline}} Indique si la donnée sur 32 bits est enregistrée {{Glossary("Endianness", "dans l'ordre des octets de poids faibles")}}. Si ce paramètre vaut false ou undefined, l'ordre sera celui des octets de poids forts.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setUint32

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setUint32(1, 3);
+dataview.getUint32(1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015 (ES6).
{{SpecName('ES2015', '#sec-dataview.prototype.setuint32', 'DataView.prototype.setUint32')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint32', 'DataView.prototype.setUint32')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setUint32")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.html b/files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.html deleted file mode 100644 index f53c1a78ce..0000000000 --- a/files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: DataView.prototype.setUint8() -slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint8 -tags: - - DataView - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint8 -original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setUint8 ---- -
{{JSRef}}
- -

La méthode setUint8() permet d'enregister un entier non-signé sur 8 bits à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

- -
{{EmbedInteractiveExample("pages/js/dataview-setuint8.html")}}
- -

Syntaxe

- -
dataview.setUint8(positionOctet, valeur)
- -

Paramètres

- -
-
positionOctet
-
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
-
valeur
-
La valeur à enregistrer.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Erreurs renvoyées

- -
-
{{jsxref("RangeError")}}
-
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
-
- -

Exemples

- -

Utilisation de la méthode setUint8

- -
var buffer = new ArrayBuffer(8);
-var dataview = new DataView(buffer);
-dataview.setUint8(1, 3);
-dataview.getUint8(1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setuint8', 'DataView.prototype.setUint8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint8', 'DataView.prototype.setUint8')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.DataView.setUint8")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.md b/files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.md new file mode 100644 index 0000000000..f53c1a78ce --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/dataview/setuint8/index.md @@ -0,0 +1,90 @@ +--- +title: DataView.prototype.setUint8() +slug: Web/JavaScript/Reference/Global_Objects/DataView/setUint8 +tags: + - DataView + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setUint8 +original_slug: Web/JavaScript/Reference/Objets_globaux/DataView/setUint8 +--- +
{{JSRef}}
+ +

La méthode setUint8() permet d'enregister un entier non-signé sur 8 bits à l'octet indiqué par rapport au début de la {{jsxref("DataView")}}.

+ +
{{EmbedInteractiveExample("pages/js/dataview-setuint8.html")}}
+ +

Syntaxe

+ +
dataview.setUint8(positionOctet, valeur)
+ +

Paramètres

+ +
+
positionOctet
+
La position, exprimée en numéro d'octet, à partir du début de la vue à laquelle enregistrer la donnée.
+
valeur
+
La valeur à enregistrer.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Erreurs renvoyées

+ +
+
{{jsxref("RangeError")}}
+
Renvoyée si positionOctet est tel que l'enregistrement sera fait en dehors de la vue.
+
+ +

Exemples

+ +

Utilisation de la méthode setUint8

+ +
var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setUint8(1, 3);
+dataview.getUint8(1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#sec-dataview.prototype.setuint8', 'DataView.prototype.setUint8')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-dataview.prototype.setuint8', 'DataView.prototype.setUint8')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.DataView.setUint8")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.html b/files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.html deleted file mode 100644 index ee85093529..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Date.prototype[@@toPrimitive] -slug: Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/@@toPrimitive ---- -
{{JSRef}}
- -

La méthode [@@toPrimitive]() permet de convertir un objet Date en une valeur primitive.

- -

Syntaxe

- -
Date()[Symbol.toPrimitive](hint);
-
- -

Valeur de retour

- -

La valeur primitive de l'objet {{jsxref("Date")}}. Selon la valeur de l'argument, la méthode peut renvoyer une chaîne de caractères ou un nombre.

- -

Description

- -

La méthode [@@toPrimitive]() de {{jsxref("Date")}} renvoie une valeur primitive qui est un nombre ou une chaîne de caractère.

- -

Si le paramètre hint vaut "string" ou "default", [@@toPrimitive]() tentera d'appeler la méthode {{jsxref("Object.prototype.toString()", "toString")}}, si la propriété toString() n'existe pas, elle tentera alors d'appeler la méthode {{jsxref("Object.prototype.valueOf()", "valueOf")}}, si cette dernière n'existe pas non plus, [@@toPrimitive]() lèvera une exception {{jsxref("TypeError")}}.

- -

Si le paramètre hint vaut "number", [@@toPrimitive]() tentera d'abord un appel à valueOf() puis ensuite un appel à toString().

- -

Le moteur JavaScript appelle la méthode [@@toPrimitive]() afin de convertir un objet en une valeur primitive. Il est rarement nécessaire d'appeler [@@toPrimitive]() explicitement dans son propre code, le moteur JavaScript l'utilisera automatiquement lorsqu'il détectera un objet là où une valeur primitive est attendue.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-date.prototype-@@toprimitive', 'Date.prototype.@@toPrimitive')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-date.prototype-@@toprimitive', 'Date.prototype.@@toPrimitive')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.md b/files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.md new file mode 100644 index 0000000000..ee85093529 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/@@toprimitive/index.md @@ -0,0 +1,66 @@ +--- +title: Date.prototype[@@toPrimitive] +slug: Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/@@toPrimitive +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/@@toPrimitive +--- +
{{JSRef}}
+ +

La méthode [@@toPrimitive]() permet de convertir un objet Date en une valeur primitive.

+ +

Syntaxe

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

Valeur de retour

+ +

La valeur primitive de l'objet {{jsxref("Date")}}. Selon la valeur de l'argument, la méthode peut renvoyer une chaîne de caractères ou un nombre.

+ +

Description

+ +

La méthode [@@toPrimitive]() de {{jsxref("Date")}} renvoie une valeur primitive qui est un nombre ou une chaîne de caractère.

+ +

Si le paramètre hint vaut "string" ou "default", [@@toPrimitive]() tentera d'appeler la méthode {{jsxref("Object.prototype.toString()", "toString")}}, si la propriété toString() n'existe pas, elle tentera alors d'appeler la méthode {{jsxref("Object.prototype.valueOf()", "valueOf")}}, si cette dernière n'existe pas non plus, [@@toPrimitive]() lèvera une exception {{jsxref("TypeError")}}.

+ +

Si le paramètre hint vaut "number", [@@toPrimitive]() tentera d'abord un appel à valueOf() puis ensuite un appel à toString().

+ +

Le moteur JavaScript appelle la méthode [@@toPrimitive]() afin de convertir un objet en une valeur primitive. Il est rarement nécessaire d'appeler [@@toPrimitive]() explicitement dans son propre code, le moteur JavaScript l'utilisera automatiquement lorsqu'il détectera un objet là où une valeur primitive est attendue.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-date.prototype-@@toprimitive', 'Date.prototype.@@toPrimitive')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-date.prototype-@@toprimitive', 'Date.prototype.@@toPrimitive')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getdate/index.html b/files/fr/web/javascript/reference/global_objects/date/getdate/index.html deleted file mode 100644 index 7c87be827c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getdate/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Date.prototype.getDate() -slug: Web/JavaScript/Reference/Global_Objects/Date/getDate -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDate -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getDate ---- -
{{JSRef}}
- -

La méthode getDate() retourne le jour du mois pour la date spécifiée d'après l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-getdate.html")}}
- -

Syntaxe

- -
dateObj.getDate()
- -

Paramètres

- -

Aucun.

- -

Valeur de retour

- -

Un entier entre 1 et 31 correspondant au jour du mois de la date indiquée selon l'heure locale.

- -

Exemples

- -

Utiliser getDate()

- -

La seconde instruction ci-dessous affecte la valeur 25 à la variable jour, d'après la valeur de l'objet {{jsxref("Date")}} Noel95.

- -
var Noel95 = new Date("December 25, 1995 23:15:00");
-var jour = Noel95.getDate();
-
-console.log(jour); // 25
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-15.9.5.14', 'Date.prototype.getDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getDate")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getdate/index.md b/files/fr/web/javascript/reference/global_objects/date/getdate/index.md new file mode 100644 index 0000000000..7c87be827c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getdate/index.md @@ -0,0 +1,85 @@ +--- +title: Date.prototype.getDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/getDate +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDate +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getDate +--- +
{{JSRef}}
+ +

La méthode getDate() retourne le jour du mois pour la date spécifiée d'après l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-getdate.html")}}
+ +

Syntaxe

+ +
dateObj.getDate()
+ +

Paramètres

+ +

Aucun.

+ +

Valeur de retour

+ +

Un entier entre 1 et 31 correspondant au jour du mois de la date indiquée selon l'heure locale.

+ +

Exemples

+ +

Utiliser getDate()

+ +

La seconde instruction ci-dessous affecte la valeur 25 à la variable jour, d'après la valeur de l'objet {{jsxref("Date")}} Noel95.

+ +
var Noel95 = new Date("December 25, 1995 23:15:00");
+var jour = Noel95.getDate();
+
+console.log(jour); // 25
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-15.9.5.14', 'Date.prototype.getDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getDate")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getday/index.html b/files/fr/web/javascript/reference/global_objects/date/getday/index.html deleted file mode 100644 index 0c4c3d23be..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getday/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Date.prototype.getDay() -slug: Web/JavaScript/Reference/Global_Objects/Date/getDay -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDay -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getDay ---- -
{{JSRef}}
- -

La méthode getDay() renvoie le jour de la semaine pour la date spécifiée selon l'heure locale (0 correspondant à dimanche). Pour obtenir le jour du mois, on utilisera {{jsxref("Date.prototype.getDate()")}}.

- -
{{EmbedInteractiveExample("pages/js/date-getday.html")}}
- -

Syntaxe

- -
dateObj.getDay()
- -

Valeur de retour

- -

Un entier correspondant au jour de la semaine (0 correspondant à dimanche, 1 à lundi, 2 à mardi et ainsi de suite) de la date indiquée selon l'heure locale.

- -

Exemples

- -

Utiliser getDay()

- -

La seconde instruction ci-dessous assigne la valeur 1 à jourSemaine, selon la valeur de l'objet Date noel95. Le 25 décembre 1995 est un lundi.

- -
var noel95 = new Date("December 25, 1995 23:15:00");
-var jourSemaine = noel95.getDay();
-
-console.log(jourSemaine); //1
-
- -
-

Note : Si besoin, on pourra obtenir le nom complet du jour ("lundi" par exemple) en utilisant la méthode {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} avec un paramètre options. Ce faisant, il est plus simple d'internationaliser un site ou une application :

- -
var options = { weekday: 'long'};
-console.log(new Intl.DateTimeFormat('en-US', options).format(Xmas95));
-// Monday
-console.log(new Intl.DateTimeFormat('de-DE', options).format(Xmas95));
-// Montag
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-date.prototype.getday', 'Date.prototype.getDay')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-date.prototype.getday', 'Date.prototype.getDay')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-15.9.5.16', 'Date.prototype.getDay')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getDay")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getday/index.md b/files/fr/web/javascript/reference/global_objects/date/getday/index.md new file mode 100644 index 0000000000..0c4c3d23be --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getday/index.md @@ -0,0 +1,92 @@ +--- +title: Date.prototype.getDay() +slug: Web/JavaScript/Reference/Global_Objects/Date/getDay +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDay +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getDay +--- +
{{JSRef}}
+ +

La méthode getDay() renvoie le jour de la semaine pour la date spécifiée selon l'heure locale (0 correspondant à dimanche). Pour obtenir le jour du mois, on utilisera {{jsxref("Date.prototype.getDate()")}}.

+ +
{{EmbedInteractiveExample("pages/js/date-getday.html")}}
+ +

Syntaxe

+ +
dateObj.getDay()
+ +

Valeur de retour

+ +

Un entier correspondant au jour de la semaine (0 correspondant à dimanche, 1 à lundi, 2 à mardi et ainsi de suite) de la date indiquée selon l'heure locale.

+ +

Exemples

+ +

Utiliser getDay()

+ +

La seconde instruction ci-dessous assigne la valeur 1 à jourSemaine, selon la valeur de l'objet Date noel95. Le 25 décembre 1995 est un lundi.

+ +
var noel95 = new Date("December 25, 1995 23:15:00");
+var jourSemaine = noel95.getDay();
+
+console.log(jourSemaine); //1
+
+ +
+

Note : Si besoin, on pourra obtenir le nom complet du jour ("lundi" par exemple) en utilisant la méthode {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} avec un paramètre options. Ce faisant, il est plus simple d'internationaliser un site ou une application :

+ +
var options = { weekday: 'long'};
+console.log(new Intl.DateTimeFormat('en-US', options).format(Xmas95));
+// Monday
+console.log(new Intl.DateTimeFormat('de-DE', options).format(Xmas95));
+// Montag
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-date.prototype.getday', 'Date.prototype.getDay')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-date.prototype.getday', 'Date.prototype.getDay')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-15.9.5.16', 'Date.prototype.getDay')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getDay")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getfullyear/index.html b/files/fr/web/javascript/reference/global_objects/date/getfullyear/index.html deleted file mode 100644 index 16d862b7e3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getfullyear/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Date.prototype.getFullYear() -slug: Web/JavaScript/Reference/Global_Objects/Date/getFullYear -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getFullYear -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getFullYear ---- -
{{JSRef}}
- -

La méthode getFullYear() renvoie l'année de la date renseignée d'après l'heure locale.

- -

Cette méthode doit être utilisée à la place de {{jsxref("Date.prototype.getYear()", "getYear()")}}.

- -
{{EmbedInteractiveExample("pages/js/date-getfullyear.html")}}
- -

Syntaxe

- -
dateObj.getFullYear()
- -

Valeur de retour

- -

Un entier correspondant à l'année de la date selon l'heure locale.

- -

Exemples

- -

Utiliser getFullYear()

- -

L'exemple qui suit assigne la valeur à quatre chiffres de l'année courante à la variable année.

- -
var aujd = new Date();
-var année = aujd.getFullYear();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.10', 'Date.prototype.getFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getfullyear', 'Date.prototype.getFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getfullyear', 'Date.prototype.getFullYear')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getFullYear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getfullyear/index.md b/files/fr/web/javascript/reference/global_objects/date/getfullyear/index.md new file mode 100644 index 0000000000..16d862b7e3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getfullyear/index.md @@ -0,0 +1,81 @@ +--- +title: Date.prototype.getFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/getFullYear +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getFullYear +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getFullYear +--- +
{{JSRef}}
+ +

La méthode getFullYear() renvoie l'année de la date renseignée d'après l'heure locale.

+ +

Cette méthode doit être utilisée à la place de {{jsxref("Date.prototype.getYear()", "getYear()")}}.

+ +
{{EmbedInteractiveExample("pages/js/date-getfullyear.html")}}
+ +

Syntaxe

+ +
dateObj.getFullYear()
+ +

Valeur de retour

+ +

Un entier correspondant à l'année de la date selon l'heure locale.

+ +

Exemples

+ +

Utiliser getFullYear()

+ +

L'exemple qui suit assigne la valeur à quatre chiffres de l'année courante à la variable année.

+ +
var aujd = new Date();
+var année = aujd.getFullYear();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.10', 'Date.prototype.getFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getfullyear', 'Date.prototype.getFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getfullyear', 'Date.prototype.getFullYear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getFullYear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/gethours/index.html b/files/fr/web/javascript/reference/global_objects/date/gethours/index.html deleted file mode 100644 index b0a5765a38..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/gethours/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Date.prototype.getHours() -slug: Web/JavaScript/Reference/Global_Objects/Date/getHours -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getHours -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getHours ---- -
{{JSRef}}
- -

La méthode getHours() renvoie l'heure pour la date renseignée, d'après l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-gethours.html")}}
- -

Syntaxe

- -
dateObj.getHours()
- -

Valeur de retour

- -

Un entier, compris entre 0 et 23 qui indique l'heure de la date indiquée selon l'heure locale.

- -

Exemples

- -

Utiliser getHours()

- -

La seconde instruction ci-dessous assigne la valeur 23 à la variable heure, selon la valeur de l'objet {{jsxref("Date")}} noel95.

- -
var noel95 = new Date("December 25, 1995 23:15:00");
-var heure = noel95.getHours();
-
-console.log(heure); //23
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.18', 'Date.prototype.getHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getHours")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/gethours/index.md b/files/fr/web/javascript/reference/global_objects/date/gethours/index.md new file mode 100644 index 0000000000..b0a5765a38 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/gethours/index.md @@ -0,0 +1,80 @@ +--- +title: Date.prototype.getHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/getHours +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getHours +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getHours +--- +
{{JSRef}}
+ +

La méthode getHours() renvoie l'heure pour la date renseignée, d'après l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-gethours.html")}}
+ +

Syntaxe

+ +
dateObj.getHours()
+ +

Valeur de retour

+ +

Un entier, compris entre 0 et 23 qui indique l'heure de la date indiquée selon l'heure locale.

+ +

Exemples

+ +

Utiliser getHours()

+ +

La seconde instruction ci-dessous assigne la valeur 23 à la variable heure, selon la valeur de l'objet {{jsxref("Date")}} noel95.

+ +
var noel95 = new Date("December 25, 1995 23:15:00");
+var heure = noel95.getHours();
+
+console.log(heure); //23
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.18', 'Date.prototype.getHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getHours")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.html deleted file mode 100644 index d2befc401d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Date.prototype.getMilliseconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getMilliseconds ---- -
{{JSRef}}
- -

La méthode getMilliseconds() renvoie les millièmes de secondes de la date renseignée d'après l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-getmilliseconds.html")}}
- -

Syntaxe

- -
dateObj.getMilliseconds()
- -

Valeur de retour

- -

Un nombre entre 0 et 999 indiquant le nombre de millisecondes pour la date indiquée, selon l'heure locale.

- -

Exemples

- -

Utiliser getMilliseconds()

- -

L'exemple suivant assigne la partie des millièmes de secondes de l'heure courante à la variable ms.

- -
var aujd = new Date();
-var ms = aujd.getMilliseconds();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.24', 'Date.prototype.getMilliseconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getMilliseconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.md new file mode 100644 index 0000000000..d2befc401d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getmilliseconds/index.md @@ -0,0 +1,78 @@ +--- +title: Date.prototype.getMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getMilliseconds +--- +
{{JSRef}}
+ +

La méthode getMilliseconds() renvoie les millièmes de secondes de la date renseignée d'après l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-getmilliseconds.html")}}
+ +

Syntaxe

+ +
dateObj.getMilliseconds()
+ +

Valeur de retour

+ +

Un nombre entre 0 et 999 indiquant le nombre de millisecondes pour la date indiquée, selon l'heure locale.

+ +

Exemples

+ +

Utiliser getMilliseconds()

+ +

L'exemple suivant assigne la partie des millièmes de secondes de l'heure courante à la variable ms.

+ +
var aujd = new Date();
+var ms = aujd.getMilliseconds();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.24', 'Date.prototype.getMilliseconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getMilliseconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getminutes/index.html b/files/fr/web/javascript/reference/global_objects/date/getminutes/index.html deleted file mode 100644 index 5a866eef11..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getminutes/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Date.prototype.getMinutes() -slug: Web/JavaScript/Reference/Global_Objects/Date/getMinutes -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMinutes -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getMinutes ---- -
{{JSRef}}
- -

La méthode getMinutes() renvoie les minutes pour la date renseignée d'après l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-getminutes.html")}}
- -

Syntaxe

- -
dateObj.getMinutes()
- -

Valeur de retour

- -

La valeur renvoyée par getMinutes est un entier entre 0 et 59 représentant le nombre de minutes pour la date indiquée, selon l'heure locale.

- -

Exemples

- -

Utiliser getMinutes()

- -

La seconde instruction ci-dessous assigne la valeur 15 à la variable minutes, selon la valeur de l'objet {{jsxref("Date")}} noel95.

- -
var noel95 = new Date("December 25, 1995 23:15:00");
-var minutes = noel95.getMinutes();
-
-console.log(minutes); //15
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.20', 'Date.prototype.getMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getminutes', 'Date.prototype.getMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getminutes', 'Date.prototype.getMinutes')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getMinutes")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getminutes/index.md b/files/fr/web/javascript/reference/global_objects/date/getminutes/index.md new file mode 100644 index 0000000000..5a866eef11 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getminutes/index.md @@ -0,0 +1,80 @@ +--- +title: Date.prototype.getMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/getMinutes +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMinutes +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getMinutes +--- +
{{JSRef}}
+ +

La méthode getMinutes() renvoie les minutes pour la date renseignée d'après l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-getminutes.html")}}
+ +

Syntaxe

+ +
dateObj.getMinutes()
+ +

Valeur de retour

+ +

La valeur renvoyée par getMinutes est un entier entre 0 et 59 représentant le nombre de minutes pour la date indiquée, selon l'heure locale.

+ +

Exemples

+ +

Utiliser getMinutes()

+ +

La seconde instruction ci-dessous assigne la valeur 15 à la variable minutes, selon la valeur de l'objet {{jsxref("Date")}} noel95.

+ +
var noel95 = new Date("December 25, 1995 23:15:00");
+var minutes = noel95.getMinutes();
+
+console.log(minutes); //15
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.20', 'Date.prototype.getMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getminutes', 'Date.prototype.getMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getminutes', 'Date.prototype.getMinutes')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getMinutes")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getmonth/index.html b/files/fr/web/javascript/reference/global_objects/date/getmonth/index.html deleted file mode 100644 index e51d1ccb64..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getmonth/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Date.prototype.getMonth() -slug: Web/JavaScript/Reference/Global_Objects/Date/getMonth -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMonth -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getMonth ---- -
{{JSRef}}
- -

La méthode getMonth() retourne le mois de la date renseignée d'après l'heure locale. La numérotation démarre à 0 (c'est-à-dire que 0 correspond au premier mois de l'année).

- -
{{EmbedInteractiveExample("pages/js/date-getmonth.html")}}
- -

Syntaxe

- -
dateObj.getMonth()
- -

Valeur de retour

- -

Un entier entre 0 et 11 selon le mois de la date indiquée et d'après l'heure locale (0 correspond à janvier, 1 à février, et ainsi de suite).

- -

Exemples

- -

Utiliser getMonth()

- -

La seconde instruction ci-dessous assigne la valeur 11 à la variable mois, d'après la valeur de l'objet {{jsxref("Date")}} noel95.

- -
var noel95 = new Date("December 25, 1995 23:15:00");
-var mois = noel95.getMonth();
-
-console.log(mois); //11
-
- -
-

Note : Si besoin, on pourra récupérer le nom complet du mois ("Janvier" par exemple) en utilisant Intl.DateTimeFormat() avec un paramètre options. En utilisant cette méthode, il est plus simple d'internationaliser le site ou l'application :

- -
var options = { month: 'long'};
-console.log(new Intl.DateTimeFormat('en-US', options).format(noel95));
-// December
-console.log(new Intl.DateTimeFormat('de-DE', options).format(noel95));
-// Dezember
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.12', 'Date.prototype.getMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getmonth', 'Date.prototype.getMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getmonth', 'Date.prototype.getMonth')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getMonth")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getmonth/index.md b/files/fr/web/javascript/reference/global_objects/date/getmonth/index.md new file mode 100644 index 0000000000..e51d1ccb64 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getmonth/index.md @@ -0,0 +1,91 @@ +--- +title: Date.prototype.getMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/getMonth +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMonth +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getMonth +--- +
{{JSRef}}
+ +

La méthode getMonth() retourne le mois de la date renseignée d'après l'heure locale. La numérotation démarre à 0 (c'est-à-dire que 0 correspond au premier mois de l'année).

+ +
{{EmbedInteractiveExample("pages/js/date-getmonth.html")}}
+ +

Syntaxe

+ +
dateObj.getMonth()
+ +

Valeur de retour

+ +

Un entier entre 0 et 11 selon le mois de la date indiquée et d'après l'heure locale (0 correspond à janvier, 1 à février, et ainsi de suite).

+ +

Exemples

+ +

Utiliser getMonth()

+ +

La seconde instruction ci-dessous assigne la valeur 11 à la variable mois, d'après la valeur de l'objet {{jsxref("Date")}} noel95.

+ +
var noel95 = new Date("December 25, 1995 23:15:00");
+var mois = noel95.getMonth();
+
+console.log(mois); //11
+
+ +
+

Note : Si besoin, on pourra récupérer le nom complet du mois ("Janvier" par exemple) en utilisant Intl.DateTimeFormat() avec un paramètre options. En utilisant cette méthode, il est plus simple d'internationaliser le site ou l'application :

+ +
var options = { month: 'long'};
+console.log(new Intl.DateTimeFormat('en-US', options).format(noel95));
+// December
+console.log(new Intl.DateTimeFormat('de-DE', options).format(noel95));
+// Dezember
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.12', 'Date.prototype.getMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getmonth', 'Date.prototype.getMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getmonth', 'Date.prototype.getMonth')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getMonth")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/getseconds/index.html deleted file mode 100644 index 32c91e493c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getseconds/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Date.prototype.getSeconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/getSeconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getSeconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getSeconds ---- -
{{JSRef}}
- -

La méthode getSeconds() renvoie les secondes pour la date renseignée d'après l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-getseconds.html")}}
- -

Syntaxe

- -
dateObj.getSeconds()
- -

Valeur de retour

- -

La valeur renvoyée par getSeconds() est un entier entre 0 et 59 correspondant au nombre de secondes pour la date donnée selon l'heure locale.

- -

Exemples

- -

Utiliser getSeconds()

- -

La seconde instruction ci-dessous assigne la valeur 30 à la variable secondes, selon la valeur de l'objet {{jsxref("Date")}} noel95.

- -
var noel95 = new Date("December 25, 1995 23:15:30");
-var secondes = noel95.getSeconds();
-
-console.log(secondes); //30
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.22', 'Date.prototype.getSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getSeconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/getseconds/index.md new file mode 100644 index 0000000000..32c91e493c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getseconds/index.md @@ -0,0 +1,80 @@ +--- +title: Date.prototype.getSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getSeconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getSeconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getSeconds +--- +
{{JSRef}}
+ +

La méthode getSeconds() renvoie les secondes pour la date renseignée d'après l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-getseconds.html")}}
+ +

Syntaxe

+ +
dateObj.getSeconds()
+ +

Valeur de retour

+ +

La valeur renvoyée par getSeconds() est un entier entre 0 et 59 correspondant au nombre de secondes pour la date donnée selon l'heure locale.

+ +

Exemples

+ +

Utiliser getSeconds()

+ +

La seconde instruction ci-dessous assigne la valeur 30 à la variable secondes, selon la valeur de l'objet {{jsxref("Date")}} noel95.

+ +
var noel95 = new Date("December 25, 1995 23:15:30");
+var secondes = noel95.getSeconds();
+
+console.log(secondes); //30
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.22', 'Date.prototype.getSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getSeconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/gettime/index.html b/files/fr/web/javascript/reference/global_objects/date/gettime/index.html deleted file mode 100644 index 86ceaedccd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/gettime/index.html +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Date.prototype.getTime() -slug: Web/JavaScript/Reference/Global_Objects/Date/getTime -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTime -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getTime ---- -
{{JSRef}}
- -

La méthode getTime() renvoie la valeur numérique correspondant au temps pour la date renseignée, d'après le temps universel (c'est-à-dire relative à UTC, une mesure donnée par getTime() sera indépendante du fuseau horaire sur lequel on se trouve). Cette valeur numérique est le nombre de millisecondes écoulées depuis le premier janvier 1970 à minuit UTC.

- -

Vous pouvez utiliser cette méthode pour vous affecter une date et un temps à une autre instance de Date. Cette méthode est fonctionnellement équivalente à la méthode {{jsxref("Date.valueof", "valueOf()")}}.

- -
{{EmbedInteractiveExample("pages/js/date-gettime.html")}}
- -

Syntaxe

- -
dateObj.getTime()
- -

Valeur de retour

- -

La valeur renvoyée par la méthode getTime() est le nombre de millièmes de secondes entre le 1 janvier 1970 à 00:00:00 UTC et la date indiquée.

- -

Exemples

- -

Utiliser getTime()

- -

L'exemple qui suit assigne la valeur de anniversaire à copie :

- -
var anniversaire = new Date(1994 , 11, 10); // 10 décembre 1994
-var copie = new Date();
-copie.setTime(anniversaire.getTime());
-
- -

Mesurer un temps d'exécution

- -

Effectuer une soustration entre deux appels à getTime() donne la durée écoulée entre ces appels. On peut donc utiliser cette méthode afin de connaître la durée d'exécution de certaines opérations (voir également la méthode {{jsxref("Date.now()")}} qui peut permettre d'éviter d'instancier des objets intermédiaires).

- -
var fin, début;
-
-début = new Date();
-for (var i = 0; i < 1000; i++) {
-  Math.sqrt(i);
-}
-fin = new Date();
-
-console.log('Durée de cette opération : ' + (fin.getTime() - début.getTime()) + ' msec');
-
- -

Précision temporelle réduite

- -

Afin de protéger contre les attaques de minutage et d'identification, la précision de new Date().getTime() peut être arrondie en fonction des paramètres du navigateur. Pour Firefox, la préférence privacy.reduceTimerPrecision est activée par défaut et vaut, par défaut 20µs pour Firefox 59 et 2ms pour Firefox 60.

- -
// Précision temporelle réduite (2ms) pour Firefox 60
-new Date().getTime();
-// 1519211809934
-// 1519211810362
-// 1519211811670
-// ...
-
-
-// précision temporelle avec `privacy.resistFingerprinting` activé
-new Date().getTime();
-// 1519129853500
-// 1519129858900
-// 1519129864400
-// ...
-
- -

Pour Firefox, il est également possible d'activer privacy.resistFingerprinting auquel cas la précision sera 100ms ou la valeur de privacy.resistFingerprinting.reduceTimerPrecision.microseconds selon laquelle est plus grande.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.9', 'Date.prototype.getTime')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.gettime', 'Date.prototype.getTime')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.gettime', 'Date.prototype.getTime')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getTime")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/gettime/index.md b/files/fr/web/javascript/reference/global_objects/date/gettime/index.md new file mode 100644 index 0000000000..86ceaedccd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/gettime/index.md @@ -0,0 +1,119 @@ +--- +title: Date.prototype.getTime() +slug: Web/JavaScript/Reference/Global_Objects/Date/getTime +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTime +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getTime +--- +
{{JSRef}}
+ +

La méthode getTime() renvoie la valeur numérique correspondant au temps pour la date renseignée, d'après le temps universel (c'est-à-dire relative à UTC, une mesure donnée par getTime() sera indépendante du fuseau horaire sur lequel on se trouve). Cette valeur numérique est le nombre de millisecondes écoulées depuis le premier janvier 1970 à minuit UTC.

+ +

Vous pouvez utiliser cette méthode pour vous affecter une date et un temps à une autre instance de Date. Cette méthode est fonctionnellement équivalente à la méthode {{jsxref("Date.valueof", "valueOf()")}}.

+ +
{{EmbedInteractiveExample("pages/js/date-gettime.html")}}
+ +

Syntaxe

+ +
dateObj.getTime()
+ +

Valeur de retour

+ +

La valeur renvoyée par la méthode getTime() est le nombre de millièmes de secondes entre le 1 janvier 1970 à 00:00:00 UTC et la date indiquée.

+ +

Exemples

+ +

Utiliser getTime()

+ +

L'exemple qui suit assigne la valeur de anniversaire à copie :

+ +
var anniversaire = new Date(1994 , 11, 10); // 10 décembre 1994
+var copie = new Date();
+copie.setTime(anniversaire.getTime());
+
+ +

Mesurer un temps d'exécution

+ +

Effectuer une soustration entre deux appels à getTime() donne la durée écoulée entre ces appels. On peut donc utiliser cette méthode afin de connaître la durée d'exécution de certaines opérations (voir également la méthode {{jsxref("Date.now()")}} qui peut permettre d'éviter d'instancier des objets intermédiaires).

+ +
var fin, début;
+
+début = new Date();
+for (var i = 0; i < 1000; i++) {
+  Math.sqrt(i);
+}
+fin = new Date();
+
+console.log('Durée de cette opération : ' + (fin.getTime() - début.getTime()) + ' msec');
+
+ +

Précision temporelle réduite

+ +

Afin de protéger contre les attaques de minutage et d'identification, la précision de new Date().getTime() peut être arrondie en fonction des paramètres du navigateur. Pour Firefox, la préférence privacy.reduceTimerPrecision est activée par défaut et vaut, par défaut 20µs pour Firefox 59 et 2ms pour Firefox 60.

+ +
// Précision temporelle réduite (2ms) pour Firefox 60
+new Date().getTime();
+// 1519211809934
+// 1519211810362
+// 1519211811670
+// ...
+
+
+// précision temporelle avec `privacy.resistFingerprinting` activé
+new Date().getTime();
+// 1519129853500
+// 1519129858900
+// 1519129864400
+// ...
+
+ +

Pour Firefox, il est également possible d'activer privacy.resistFingerprinting auquel cas la précision sera 100ms ou la valeur de privacy.resistFingerprinting.reduceTimerPrecision.microseconds selon laquelle est plus grande.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.9', 'Date.prototype.getTime')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.gettime', 'Date.prototype.getTime')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.gettime', 'Date.prototype.getTime')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getTime")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html b/files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html deleted file mode 100644 index a4a46512c1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Date.prototype.getTimezoneOffset() -slug: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getTimezoneOffset ---- -
{{JSRef}}
- -

La méthode getTimezoneOffset() retourne la différence en minutes entre le fuseau horaire UTC, et celui de l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-gettimezoneoffset.html")}}
- -

Syntaxe

- -
dateObj.getTimezoneOffset()
- -

Valeur de retour

- -

La valeur retournée est la différence, exprimée en minutes, entre les fuseaux horaires UTC et celui de l'heure locale. Cette différence est positive si le fuseau horaire local est en retard par rapport à UTC, et négative s'il est en avance.

- -

Par exemple, si votre fuseau horaire est UTC+10 (Australian Eastern Standard Time, Vladivostok, Chamorro), la valeur retournée sera -600. L'heure d'été (DST pour daylight saving time en anglais) empêche cette valeur d'être une constante.

- -

Exemples

- -

Utiliser getTimezoneOffset()

- -
var x = new Date();
-var differenceFuseauxEnHeures = x.getTimezoneOffset() / 60;
-// -2
-
-// Décalage temporel local pour le premier mai
-// Attention, Date() utilise les mois numérotés
-// à partir de zéro et mai est donc représenté
-// avec 4 (et pas 5)
-var travail = new Date(2017, 4, 1);
-var decalage = travail.getTimezoneOffset() / 60;
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.26', 'Date.prototype.getTimezoneOffset')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.gettimezoneoffset', 'Date.prototype.getTimezoneOffset')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.gettimezoneoffset', 'Date.prototype.getTimezoneOffset')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getTimezoneOffset")}}

diff --git a/files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.md b/files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.md new file mode 100644 index 0000000000..a4a46512c1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/gettimezoneoffset/index.md @@ -0,0 +1,79 @@ +--- +title: Date.prototype.getTimezoneOffset() +slug: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getTimezoneOffset +--- +
{{JSRef}}
+ +

La méthode getTimezoneOffset() retourne la différence en minutes entre le fuseau horaire UTC, et celui de l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-gettimezoneoffset.html")}}
+ +

Syntaxe

+ +
dateObj.getTimezoneOffset()
+ +

Valeur de retour

+ +

La valeur retournée est la différence, exprimée en minutes, entre les fuseaux horaires UTC et celui de l'heure locale. Cette différence est positive si le fuseau horaire local est en retard par rapport à UTC, et négative s'il est en avance.

+ +

Par exemple, si votre fuseau horaire est UTC+10 (Australian Eastern Standard Time, Vladivostok, Chamorro), la valeur retournée sera -600. L'heure d'été (DST pour daylight saving time en anglais) empêche cette valeur d'être une constante.

+ +

Exemples

+ +

Utiliser getTimezoneOffset()

+ +
var x = new Date();
+var differenceFuseauxEnHeures = x.getTimezoneOffset() / 60;
+// -2
+
+// Décalage temporel local pour le premier mai
+// Attention, Date() utilise les mois numérotés
+// à partir de zéro et mai est donc représenté
+// avec 4 (et pas 5)
+var travail = new Date(2017, 4, 1);
+var decalage = travail.getTimezoneOffset() / 60;
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.26', 'Date.prototype.getTimezoneOffset')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.gettimezoneoffset', 'Date.prototype.getTimezoneOffset')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.gettimezoneoffset', 'Date.prototype.getTimezoneOffset')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getTimezoneOffset")}}

diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcdate/index.html b/files/fr/web/javascript/reference/global_objects/date/getutcdate/index.html deleted file mode 100644 index 0d4fa90f29..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutcdate/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Date.prototype.getUTCDate() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCDate ---- -
{{JSRef}}
- -

La méthode getUTCDate() renvoie le jour du mois pour la date renseignée d'après UTC.

- -
{{EmbedInteractiveExample("pages/js/date-getutcdate.html")}}
- -

Syntaxe

- -
dateObj.getUTCDate()
- -

Valeur de retour

- -

La valeur renseignée par getUTCDate() est un entier entre 1 et 31 pour le jour du mois de la date indiquée selon le temps universel.

- -

Exemples

- -

Utiliser getUTCDate()

- -

L'exemple suivant assigne le jour du mois pour la date actuelle, à la variable jour.

- -
var aujourdhui = new Date();
-var jour = aujourdhui.getUTCDate();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.15', 'Date.prototype.getUTCDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcdate', 'Date.prototype.getUTCDate')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcdate', 'Date.prototype.getUTCDate')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCDate")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcdate/index.md b/files/fr/web/javascript/reference/global_objects/date/getutcdate/index.md new file mode 100644 index 0000000000..0d4fa90f29 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutcdate/index.md @@ -0,0 +1,79 @@ +--- +title: Date.prototype.getUTCDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCDate +--- +
{{JSRef}}
+ +

La méthode getUTCDate() renvoie le jour du mois pour la date renseignée d'après UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-getutcdate.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCDate()
+ +

Valeur de retour

+ +

La valeur renseignée par getUTCDate() est un entier entre 1 et 31 pour le jour du mois de la date indiquée selon le temps universel.

+ +

Exemples

+ +

Utiliser getUTCDate()

+ +

L'exemple suivant assigne le jour du mois pour la date actuelle, à la variable jour.

+ +
var aujourdhui = new Date();
+var jour = aujourdhui.getUTCDate();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.15', 'Date.prototype.getUTCDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcdate', 'Date.prototype.getUTCDate')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcdate', 'Date.prototype.getUTCDate')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCDate")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcday/index.html b/files/fr/web/javascript/reference/global_objects/date/getutcday/index.html deleted file mode 100644 index db8134b5ce..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutcday/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Date.prototype.getUTCDay() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCDay ---- -
{{JSRef}}
- -

La méthode getUTCDay() renvoie le jour de la semaine pour la date renseignée d'après UTC. La numérotation commence à 0, et dimanche est considéré comme le premier jour de la semaine.

- -
{{EmbedInteractiveExample("pages/js/date-getutcday.html")}}
- -

Syntaxe

- -
dateObj.getUTCDay()
- -

Valeur de retour

- -

La valeur renvoyée par getUTCDay() est un entier correspondant au jour de la semaine de la date indiquée selon le temps universel (0 pour dimanche, 1 pour lundi, 2 pour mardi, et ainsi de suite).

- -

Exemples

- -

Utiliser getUTCDay()

- -

L'exemple suivant assigne le jour de la semaine de la date actuelle à la variable jourSemaine.

- -
var aujourdhui = new Date()
-var jourSemaine = aujourdhui.getUTCDay()
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.17', 'Date.prototype.getUTCDay')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcday', 'Date.prototype.getUTCDay')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcday', 'Date.prototype.getUTCDay')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCDay")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcday/index.md b/files/fr/web/javascript/reference/global_objects/date/getutcday/index.md new file mode 100644 index 0000000000..db8134b5ce --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutcday/index.md @@ -0,0 +1,79 @@ +--- +title: Date.prototype.getUTCDay() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCDay +--- +
{{JSRef}}
+ +

La méthode getUTCDay() renvoie le jour de la semaine pour la date renseignée d'après UTC. La numérotation commence à 0, et dimanche est considéré comme le premier jour de la semaine.

+ +
{{EmbedInteractiveExample("pages/js/date-getutcday.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCDay()
+ +

Valeur de retour

+ +

La valeur renvoyée par getUTCDay() est un entier correspondant au jour de la semaine de la date indiquée selon le temps universel (0 pour dimanche, 1 pour lundi, 2 pour mardi, et ainsi de suite).

+ +

Exemples

+ +

Utiliser getUTCDay()

+ +

L'exemple suivant assigne le jour de la semaine de la date actuelle à la variable jourSemaine.

+ +
var aujourdhui = new Date()
+var jourSemaine = aujourdhui.getUTCDay()
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.17', 'Date.prototype.getUTCDay')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcday', 'Date.prototype.getUTCDay')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcday', 'Date.prototype.getUTCDay')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCDay")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.html b/files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.html deleted file mode 100644 index c2c81cc8ab..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Date.prototype.getUTCFullYear() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCFullYear ---- -
{{JSRef}}
- -

La méthode getUTCFullYear() renvoie l'année de la date renseignée, d'après UTC.

- -
{{EmbedInteractiveExample("pages/js/date-getutcfullyear.html")}}
- -

Syntaxe

- -
dateObj.getUTCFullYear()
- -

Valeur de retour

- -

La valeur renvoyée par getUTCFullYear() est un nombre correspondant à l'année de la date indiquée selon le temps universel. Pour les dates entre les années 1000 et 9999, getUTCFullYear() renvoie un nombre à quatre chiffres, par exemple 1995.

- -

Exemples

- -

Utiliser getUTCFullYear()

- -

L'exemple suivant assigne une valeur à 4 chiffres, l'année courante, à la variable annee.

- -
var aujourdhui = new Date();
-var annee = aujourdhui.getUTCFullYear();
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.11', 'Date.prototype.getUTCFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCFullYear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.md b/files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.md new file mode 100644 index 0000000000..c2c81cc8ab --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutcfullyear/index.md @@ -0,0 +1,77 @@ +--- +title: Date.prototype.getUTCFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCFullYear +--- +
{{JSRef}}
+ +

La méthode getUTCFullYear() renvoie l'année de la date renseignée, d'après UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-getutcfullyear.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCFullYear()
+ +

Valeur de retour

+ +

La valeur renvoyée par getUTCFullYear() est un nombre correspondant à l'année de la date indiquée selon le temps universel. Pour les dates entre les années 1000 et 9999, getUTCFullYear() renvoie un nombre à quatre chiffres, par exemple 1995.

+ +

Exemples

+ +

Utiliser getUTCFullYear()

+ +

L'exemple suivant assigne une valeur à 4 chiffres, l'année courante, à la variable annee.

+ +
var aujourdhui = new Date();
+var annee = aujourdhui.getUTCFullYear();
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.11', 'Date.prototype.getUTCFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCFullYear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getutchours/index.html b/files/fr/web/javascript/reference/global_objects/date/getutchours/index.html deleted file mode 100644 index 225b1d3721..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutchours/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Date.prototype.getUTCHours() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCHours ---- -
{{JSRef}}
- -

La méthode getUTCHours() renvoie les heures de la date renseignée, d'après UTC.

- -
{{EmbedInteractiveExample("pages/js/date-getutchours.html")}}
- -

Syntaxe

- -
dateObj.getUTCHours()
- -

Valeur de retour

- -

Un entier entre 0 et 23 correspondant à l'heure de la date indiquée selon le temps universel.

- -

Exemples

- -

Utiliser getUTCHours()

- -

L'exemple suivant assigne les heures de la date actuelle à la variable heures.

- -
var aujourdhui = new Date();
-var heures = aujourdhui.getUTCHours();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.19', 'Date.prototype.getUTCHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCHours")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutchours/index.md b/files/fr/web/javascript/reference/global_objects/date/getutchours/index.md new file mode 100644 index 0000000000..225b1d3721 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutchours/index.md @@ -0,0 +1,78 @@ +--- +title: Date.prototype.getUTCHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCHours +--- +
{{JSRef}}
+ +

La méthode getUTCHours() renvoie les heures de la date renseignée, d'après UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-getutchours.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCHours()
+ +

Valeur de retour

+ +

Un entier entre 0 et 23 correspondant à l'heure de la date indiquée selon le temps universel.

+ +

Exemples

+ +

Utiliser getUTCHours()

+ +

L'exemple suivant assigne les heures de la date actuelle à la variable heures.

+ +
var aujourdhui = new Date();
+var heures = aujourdhui.getUTCHours();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.19', 'Date.prototype.getUTCHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCHours")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html deleted file mode 100644 index 898edb560b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Date.prototype.getUTCMilliseconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCMilliseconds ---- -
{{JSRef}}
- -

La méthode getUTCMilliseconds() renvoie les millièmes de secondes pour la date renseignée selon UTC.

- -
{{EmbedInteractiveExample("pages/js/date-getutcmilliseconds.html")}}
- -

Syntaxe

- -
dateObj.getUTCMilliseconds()
- -

Valeur de retour

- -

Un entier entre 0 et 999 correspondant au nombre de millisecondes pour la date indiquée, selon le temps universel.

- -
-

Note : Le résultat de cette méthode n'est pas le temps "Epoch". Si on veut obtenir le nombre de millisecondes depuis le premier janvier 1970, on utilisera la méthode {{jsxref("Date.prototype.getTime()")}}.

-
- -

Exemples

- -

Utiliser getUTCMilliseconds()

- -

L'exemple suivant assigne les millièmes de secondes pour la date actuelle à la variable ms.

- -
var aujourdhui = new Date();
-var ms = aujourdhui.getUTCMilliseconds();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.25', 'Date.prototype.getUTCMilliseconds')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-date.prototype.getutcmilliseconds', 'Date.prototype.getUTCMilliseconds')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.prototype.getutcmilliseconds', 'Date.prototype.getUTCMilliseconds')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCMilliseconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.md new file mode 100644 index 0000000000..898edb560b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutcmilliseconds/index.md @@ -0,0 +1,82 @@ +--- +title: Date.prototype.getUTCMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCMilliseconds +--- +
{{JSRef}}
+ +

La méthode getUTCMilliseconds() renvoie les millièmes de secondes pour la date renseignée selon UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-getutcmilliseconds.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCMilliseconds()
+ +

Valeur de retour

+ +

Un entier entre 0 et 999 correspondant au nombre de millisecondes pour la date indiquée, selon le temps universel.

+ +
+

Note : Le résultat de cette méthode n'est pas le temps "Epoch". Si on veut obtenir le nombre de millisecondes depuis le premier janvier 1970, on utilisera la méthode {{jsxref("Date.prototype.getTime()")}}.

+
+ +

Exemples

+ +

Utiliser getUTCMilliseconds()

+ +

L'exemple suivant assigne les millièmes de secondes pour la date actuelle à la variable ms.

+ +
var aujourdhui = new Date();
+var ms = aujourdhui.getUTCMilliseconds();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.25', 'Date.prototype.getUTCMilliseconds')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-date.prototype.getutcmilliseconds', 'Date.prototype.getUTCMilliseconds')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.prototype.getutcmilliseconds', 'Date.prototype.getUTCMilliseconds')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCMilliseconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.html b/files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.html deleted file mode 100644 index 53b7aec489..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Date.prototype.getUTCMinutes() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCMinutes ---- -
{{JSRef}}
- -

La méthode getUTCMinutes() renvoie les minutes de la date renseignée, d'après UTC.

- -
{{EmbedInteractiveExample("pages/js/date-getutcminutes.html")}}
- -

Syntaxe

- -
dateObj.getUTCMinutes()
- -

Valeur de retour

- -

Un entier entre 0 et 59 correspondant au nombre de minutes pour la date indiquée selon le temps universel.

- -

Exemples

- -

Utiliser getUTCMinutes

- -

L'exemple suivant assigne les minutes de la date actuelle à la variable minutes.

- -
var aujourdhui = new Date();
-var minutes = aujourdhui.getUTCMinutes();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.21', 'Date.prototype.getUTCMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcminutes', 'Date.prototype.getUTCMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcminutes', 'Date.prototype.getUTCMinutes')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCMinutes")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.md b/files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.md new file mode 100644 index 0000000000..53b7aec489 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutcminutes/index.md @@ -0,0 +1,78 @@ +--- +title: Date.prototype.getUTCMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCMinutes +--- +
{{JSRef}}
+ +

La méthode getUTCMinutes() renvoie les minutes de la date renseignée, d'après UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-getutcminutes.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCMinutes()
+ +

Valeur de retour

+ +

Un entier entre 0 et 59 correspondant au nombre de minutes pour la date indiquée selon le temps universel.

+ +

Exemples

+ +

Utiliser getUTCMinutes

+ +

L'exemple suivant assigne les minutes de la date actuelle à la variable minutes.

+ +
var aujourdhui = new Date();
+var minutes = aujourdhui.getUTCMinutes();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.21', 'Date.prototype.getUTCMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcminutes', 'Date.prototype.getUTCMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcminutes', 'Date.prototype.getUTCMinutes')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCMinutes")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.html b/files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.html deleted file mode 100644 index 5f8ce36dca..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Date.prototype.getUTCMonth() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCMonth ---- -
{{JSRef}}
- -

La méthode getUTCMonth() renvoie le mois de la date renseignée, d'après UTC. La numérotation des mois commence à 0 pour le premier mois de l'année.

- -
{{EmbedInteractiveExample("pages/js/date-getutcmonth.html")}}
- -

Syntaxe

- -
dateObj.getUTCMonth()
- -

Valeur de retour

- -

Un entier entre 0 et 11 correspondant au mois dans l'année de la date indiquée selon le temps universel (0 pour janvier, 1 pour février, 2 pour mars, et ainsi de suite…).

- -

Exemples

- -

Utiliser getUTCMonth()

- -

L'exemple suivant assigne le mois de la date actuelle à la variable mois.

- -
var aujourdhui = new Date();
-var mois = aujourdhui.getUTCMonth();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.13', 'Date.prototype.getUTCMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcmonth', 'Date.prototype.getUTCMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcmonth', 'Date.prototype.getUTCMonth')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCMonth")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.md b/files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.md new file mode 100644 index 0000000000..5f8ce36dca --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutcmonth/index.md @@ -0,0 +1,78 @@ +--- +title: Date.prototype.getUTCMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCMonth +--- +
{{JSRef}}
+ +

La méthode getUTCMonth() renvoie le mois de la date renseignée, d'après UTC. La numérotation des mois commence à 0 pour le premier mois de l'année.

+ +
{{EmbedInteractiveExample("pages/js/date-getutcmonth.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCMonth()
+ +

Valeur de retour

+ +

Un entier entre 0 et 11 correspondant au mois dans l'année de la date indiquée selon le temps universel (0 pour janvier, 1 pour février, 2 pour mars, et ainsi de suite…).

+ +

Exemples

+ +

Utiliser getUTCMonth()

+ +

L'exemple suivant assigne le mois de la date actuelle à la variable mois.

+ +
var aujourdhui = new Date();
+var mois = aujourdhui.getUTCMonth();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.13', 'Date.prototype.getUTCMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcmonth', 'Date.prototype.getUTCMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcmonth', 'Date.prototype.getUTCMonth')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCMonth")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.html deleted file mode 100644 index 8f65ada277..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Date.prototype.getUTCSeconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCSeconds ---- -
{{JSRef}}
- -

La méthode getUTCSeconds() renvoie les secondes de la date renseignée, d'après UTC.

- -
{{EmbedInteractiveExample("pages/js/date-getutcseconds.html")}}
- -

Syntaxe

- -
dateObj.getUTCSeconds()
- -

Valeur de retour

- -

Un entier entre 0 et 59 correspondant au nombre de secondes écoulées pour la date indiquée selon le temps universel.

- -

Exemples

- -

Utiliser getUTCSeconds()

- -

L'exemple suivant assigne les secondes de la date actuelle à la variable secondes.

- -
var aujourdhui = new Date();
-var secondes = aujourdhui.getUTCSeconds();
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.23', 'Date.prototype.getUTCSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcseconds', 'Date.prototype.getUTCSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcseconds', 'Date.prototype.getUTCSeconds')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getUTCSeconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.md new file mode 100644 index 0000000000..8f65ada277 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getutcseconds/index.md @@ -0,0 +1,78 @@ +--- +title: Date.prototype.getUTCSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getUTCSeconds +--- +
{{JSRef}}
+ +

La méthode getUTCSeconds() renvoie les secondes de la date renseignée, d'après UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-getutcseconds.html")}}
+ +

Syntaxe

+ +
dateObj.getUTCSeconds()
+ +

Valeur de retour

+ +

Un entier entre 0 et 59 correspondant au nombre de secondes écoulées pour la date indiquée selon le temps universel.

+ +

Exemples

+ +

Utiliser getUTCSeconds()

+ +

L'exemple suivant assigne les secondes de la date actuelle à la variable secondes.

+ +
var aujourdhui = new Date();
+var secondes = aujourdhui.getUTCSeconds();
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.23', 'Date.prototype.getUTCSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.getutcseconds', 'Date.prototype.getUTCSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.getutcseconds', 'Date.prototype.getUTCSeconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getUTCSeconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/getyear/index.html b/files/fr/web/javascript/reference/global_objects/date/getyear/index.html deleted file mode 100644 index 438c7107cd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/getyear/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Date.prototype.getYear() -slug: Web/JavaScript/Reference/Global_Objects/Date/getYear -tags: - - Date - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/getYear -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getYear ---- -
{{JSRef}} {{Deprecated_header}}
- -

La méthode getYear() renvoie l'année de la date renseignée, d'après l'heure locale. Parce que getYear() ne renvoie pas l'année complète (« bug de l'an 2000 »), cette méthode n'est plus utilisée et doit être remplacée par {{jsxref("Date.getFullYear", "getFullYear")}}.

- -

Syntaxe

- -
dateObj.getYear()
- -

Valeur de retour

- -

Un nombre représentant l'année de la date indiquée, selon l'heure locale, auquel on a soustrait 1900.

- -

Description

- -

La méthode getYear() renvoie l'année moins 1900 ; par conséquent :

- - - -

Pour prendre en compte les années avant et après 2000, il vaut mieux utiliser {{jsxref("Date.getFullYear", "getFullYear()")}} au lieu de getYear afin que l'année soit spécifiée en entier.

- -

Rétrocompatibilité

- -

Comportement dans JavaScript 1.2 et versions antérieures

- -

La méthode getYear() renvoyait soit une année en deux chiffres, soit une année en quatre chiffres :

- - - -

Exemples

- -

Années entre 1900 et 1999

- -

La seconde instruction assigne la valeur 95 à la variable annee.

- -
var noel = new Date("December 25, 1995 23:15:00");
-var annee = noel.getYear(); // renvoie 95
-
- -

Années après 1999

- -

La seconde instruction assigne la valeur 100 à la variable annee.

- -
var noel = new Date("December 25, 2000 23:15:00");
-var annee = noel.getYear(); // renvoie 100
-
- -

Années avant 1900

- -

La seconde instruction assigne la valeur -100 à la variable annee.

- -
var noel = new Date("December 25, 1800 23:15:00");
-var annee = noel.getYear(); // renvoie -100
-
- -

Définition et lecture d'une année entre 1900 et 1999

- -

La troisième instruction assigne la valeur 95 à la variable annee, représentant l'année 1995.

- -
var noel = new Date("December 25, 1800 23:15:00");
-var noel.setYear(95);
-var annee = noel.getYear(); // renvoie 95
-
- -

Specifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-B.2.4', 'Date.prototype.getYear')}}{{Spec2('ES5.1')}}Défini dans l'annexe informative sur la compatibilité.
{{SpecName('ES6', '#sec-date.prototype.getyear', 'Date.prototype.getYear')}}{{Spec2('ES6')}}Défini dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-date.prototype.getyear', 'Date.prototype.getYear')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.getYear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/getyear/index.md b/files/fr/web/javascript/reference/global_objects/date/getyear/index.md new file mode 100644 index 0000000000..438c7107cd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/getyear/index.md @@ -0,0 +1,126 @@ +--- +title: Date.prototype.getYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/getYear +tags: + - Date + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/getYear +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/getYear +--- +
{{JSRef}} {{Deprecated_header}}
+ +

La méthode getYear() renvoie l'année de la date renseignée, d'après l'heure locale. Parce que getYear() ne renvoie pas l'année complète (« bug de l'an 2000 »), cette méthode n'est plus utilisée et doit être remplacée par {{jsxref("Date.getFullYear", "getFullYear")}}.

+ +

Syntaxe

+ +
dateObj.getYear()
+ +

Valeur de retour

+ +

Un nombre représentant l'année de la date indiquée, selon l'heure locale, auquel on a soustrait 1900.

+ +

Description

+ +

La méthode getYear() renvoie l'année moins 1900 ; par conséquent :

+ + + +

Pour prendre en compte les années avant et après 2000, il vaut mieux utiliser {{jsxref("Date.getFullYear", "getFullYear()")}} au lieu de getYear afin que l'année soit spécifiée en entier.

+ +

Rétrocompatibilité

+ +

Comportement dans JavaScript 1.2 et versions antérieures

+ +

La méthode getYear() renvoyait soit une année en deux chiffres, soit une année en quatre chiffres :

+ + + +

Exemples

+ +

Années entre 1900 et 1999

+ +

La seconde instruction assigne la valeur 95 à la variable annee.

+ +
var noel = new Date("December 25, 1995 23:15:00");
+var annee = noel.getYear(); // renvoie 95
+
+ +

Années après 1999

+ +

La seconde instruction assigne la valeur 100 à la variable annee.

+ +
var noel = new Date("December 25, 2000 23:15:00");
+var annee = noel.getYear(); // renvoie 100
+
+ +

Années avant 1900

+ +

La seconde instruction assigne la valeur -100 à la variable annee.

+ +
var noel = new Date("December 25, 1800 23:15:00");
+var annee = noel.getYear(); // renvoie -100
+
+ +

Définition et lecture d'une année entre 1900 et 1999

+ +

La troisième instruction assigne la valeur 95 à la variable annee, représentant l'année 1995.

+ +
var noel = new Date("December 25, 1800 23:15:00");
+var noel.setYear(95);
+var annee = noel.getYear(); // renvoie 95
+
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-B.2.4', 'Date.prototype.getYear')}}{{Spec2('ES5.1')}}Défini dans l'annexe informative sur la compatibilité.
{{SpecName('ES6', '#sec-date.prototype.getyear', 'Date.prototype.getYear')}}{{Spec2('ES6')}}Défini dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-date.prototype.getyear', 'Date.prototype.getYear')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.getYear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/index.html b/files/fr/web/javascript/reference/global_objects/date/index.html deleted file mode 100644 index d2ea76a64e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/index.html +++ /dev/null @@ -1,256 +0,0 @@ ---- -title: Date -slug: Web/JavaScript/Reference/Global_Objects/Date -tags: - - Date - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date -original_slug: Web/JavaScript/Reference/Objets_globaux/Date ---- -
{{JSRef}}
- -

Les objets JavaScript Date représentent un instant donné sur l'axe du temps dans un format indépendant de la plateforme utilisée. Les objets Date contiennent un nombre (Number) qui représente le nombre de millisecondes écoulées depuis le premier janvier 1970 sur l'échelle UTC.

- -

Note : TC39 travaille actuellement sur Temporal, une nouvelle API pour la gestion des dates, heures et données temporelles.
- Pour en savoir plus, consultez le blog d'Igalia et n'hésitez pas à répondre au sondage. Les retours concrets de développeurs web sont importants pour affiner cette API. Attention, elle n'est pas encore prête à être utilisée en production !

-
- -

Description

- -

L'epoch ECMAScript

- -

D'un point de vue technique, une date JavaScript correspond au nombre de millisecondes écoulées depuis le premier janvier 1970, minuit UTC. Cette date et cette heure sont les mêmes que l'epoch UNIX, qui est l'instant de référence principalement utilisé pour manipuler les dates/heures dans les systèmes informatiques.

- -

Note : Bien que les valeurs temporelles des objets dates soient relatives à UTC, certaines des méthodes simples pour obtenir les composantes d'une date/heure fonctionnent relativement au fuseau horaire du système.

- -

On notera également que la représentation maximale d'un objet Date n'est pas la même que le plus grand entier représentable en JavaScript (Number.MAX_SAFE_INTEGER vaut 9,007,199,254,740,991). En effet, ECMA-262 définit un maximum de ±100 000 000 (cent millions) jours relatifs au premier janvier 1970 UTC (ce qui correspond au 20 avril 271 821 avant notre ètre d'une part et au 13 septembre 275 760 de notre ère) pouvant être représentés par un objet Date standard (soit un intervalle de ±8 640 000 000 000 000 millisecondes).

- -

Les formats de date et les conversions entre les fuseaux horaires

- -

Il existe différentes méthodes pour obtenir une date sous différents formats ou effectuer une conversion entre différents fuseaux. On distingue notamment les fonctions qui manipulent les dates relativement au temps universal coordonné (UTC). Le temps local est celui utilisé par l'appareil de l'utilisateur.

- -

Ainsi, on dispose de méthodes permettant d'obtenir ou de définir les différentes composantes d'une date selon le temps local (ex. {{jsxref("Date.getDay", "getDay()")}}, {{jsxref("Date.setHours", "setHours()")}}) et de méthodes équivalentes pour la manipulation en UTC (ex. {{jsxref("Date.getUTCDay()", "getUTCDay()")}} et {{jsxref("Date.setUTCHours", "setUTCHours()")}} respectivement).

- -

Constructeur

- -
-
{{jsxref("Date/Date", "Date()")}}
-
Cette fonction permet de créer un nouvel objet Date.
-
- -

Méthodes statiques

- -
-
{{jsxref("Date.now()")}}
-
Renvoie la valeur numérique correspondant au moment présent sous la forme du nombre de millisecondes écoulées depuis le premier janvier 1970 00:00:00 UTC (les secondes intercalaires (leap seconds) sont ignorées).
-
{{jsxref("Date.parse()")}}
-
Analyse la représentation textuelle d'une date et renvoie le nombre de millisecondes écoulées entre cette date et le premier janvier 1970, 00:00:00 UTC (les secondes intercalaires (leap seconds) sont ignorées). -
-

Note : L'analyse de chaînes de caractères à l'aide de Date.parse est fortement déconseillée en raison des incohérences qui existent entre les navigateurs.

-
-
-
{{jsxref("Date.UTC()")}}
-
Accepte les mêmes paramètres que la forme longue du constructeur (c'est-à-dire entre 2 et 7) et renvoie le nombre de millisecondes entre cette date et le premier janvier 1970, 00:00:00 UTC (les secondes intercalaires (leap seconds) sont ignorées).
-
- -

Méthodes des instances

- -
-
{{jsxref("Date.prototype.getDate()")}}
-
Renvoie le jour du mois (entre 1 et 31) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getDay()")}}
-
Renvoie le jour de la semaine (entre 0 et 6) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getFullYear()")}}
-
Renvoie l'année (sans chiffre implicite, 1999 sera renvoyé et pas 99 par exemple) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getHours()")}}
-
Renvoie l'heure (entre 0 et 23) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getMilliseconds()")}}
-
Renvoie les millisecondes (entre 0 et 999) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getMinutes()")}}
-
Renvoie les minutes (entre 0 et 59) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getMonth()")}}
-
Renvoie le mois (entre 0 et 11) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getSeconds()")}}
-
Renvoie les secondes (entre 0 et 59) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.getTime()")}}
-
Renvoie la valeur numérique de la date donnée, exprimée en nombre de millisecondes écoulées depuis le premier janvier 1970, 00:00:00 UTC (pour les temps antérieurs, ce sont des valeurs négatives qui seront renvoyées).
-
{{jsxref("Date.prototype.getTimezoneOffset()")}}
-
Renvoie le décalage horaire, exprimé en minutes, pour la locale courante.
-
{{jsxref("Date.prototype.getUTCDate()")}}
-
Renvoie le jour du mois (entre 1 et 31) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getUTCDay()")}}
-
Renvoie le jour de la semaine (entre 0 et 6) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getUTCFullYear()")}}
-
Renvoie l'année (sans chiffre implicite, 1999 sera renvoyé plutôt que 99) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getUTCHours()")}}
-
Renvoie l'heure (entre 0 et 23) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getUTCMilliseconds()")}}
-
Renvoie les millisecondes (entre 0 et 999) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getUTCMinutes()")}}
-
Renvoie les minutes (entre 0 et 59) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getUTCMonth()")}}
-
Renvoie le mois (entre 0 et 11) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getUTCSeconds()")}}
-
Renvoie les secondes (entre 0 et 59) pour la date donnée, selon le temps universel.
-
{{jsxref("Date.prototype.getYear()")}}
-
Renvoie l'année (généralement exprimée sur 2 ou 3 chiffres) pour la date donnée selon le temps local. On utilisera plutôt {{jsxref("Date.prototype.getFullYear()", "getFullYear()")}}.
-
{{jsxref("Date.prototype.setDate()")}}
-
Définit le jour du mois pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.setFullYear()")}}
-
Définit l'année (sans chiffre implicite, on utilisera 1999 et pas 99) pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.setHours()")}}
-
Définit les heures pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.setMilliseconds()")}}
-
Définit les millisecondes pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.setMinutes()")}}
-
Définit les minutes pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.setMonth()")}}
-
Définit le mois pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.setSeconds()")}}
-
Définit les secondes pour la date donnée, selon le temps local.
-
{{jsxref("Date.prototype.setTime()")}}
-
Définit le nombre de millisecondes écoulées depuis le premier janvier 1970, 00:00:00 UTC et la date donnée. On utilisera des nombres négatifs pour les moments antérieurs à cette date.
-
{{jsxref("Date.prototype.setUTCDate()")}}
-
Définit le jour du mois pour la date donnée selon le temps universel.
-
{{jsxref("Date.prototype.setUTCFullYear()")}}
-
Définit l'année (exprimée sans chiffres implicites, ex. 1999 et pas 99) pour la date donnée selon le temps universel.
-
{{jsxref("Date.prototype.setUTCHours()")}}
-
Définit l'heure pour la date donnée selon le temps universel.
-
{{jsxref("Date.prototype.setUTCMilliseconds()")}}
-
Définit les millisecondes pour la date donnée selon le temps universel.
-
{{jsxref("Date.prototype.setUTCMinutes()")}}
-
Définit les minutes pour la date donnée selon le temps universel.
-
{{jsxref("Date.prototype.setUTCMonth()")}}
-
Définit le mois pour la date donnée selon le temps universel.
-
{{jsxref("Date.prototype.setUTCSeconds()")}}
-
Définit les secondes pour la date donnée selon le temps universel.
-
{{jsxref("Date.prototype.setYear()")}}
-
Définit l'année (avec 2 à 3 chiffres) pour la date courante selon le temps local. On privilégiera la méthode {{jsxref("Date.prototype.setFullYear()", "setFullYear()")}} à la place.
-
{{jsxref("Date.prototype.toDateString()")}}
-
Renvoie la partie "date" (jour, mois, année) de l'objet {{jsxref("Date")}} en une chaîne de caractères compréhensible par un humain (anglophone) (ex. 'Thu Apr 12 2018').
-
{{jsxref("Date.prototype.toISOString()")}}
-
Convertit une date en une chaîne de caractères selon le format ISO 8601 Étendu.
-
{{jsxref("Date.prototype.toJSON()")}}
-
Renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}} avec {{jsxref("Date.prototype.toISOString()", "toISOString()")}}. Cette méthode est utilisée par {{jsxref("JSON.stringify()")}}.
-
{{jsxref("Date.prototype.toGMTString()")}}
-
Renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}} d'après le fuseau GMT (UTC). On utilisera plutôt {{jsxref("Date.prototype.toUTCString()", "toUTCString()")}}.
-
{{jsxref("Date.prototype.toLocaleDateString()")}}
-
Renvoie une chaîne de caractères représentant les jours / mois / années de la date courante avec une représentation propre à la locale courante (déduite des paramètres systèmes utilisés).
-
{{jsxref("Date.prototype.toLocaleFormat()")}}
-
Convertit la date courante en une chaîne de caractères avec un format décrit en paramètre via une chaîne de caractères.
-
{{jsxref("Date.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères représentant la date sous le forme de la locale courante. Cette méthode surcharge la méthode {{jsxref("Object.prototype.toLocaleString()")}}.
-
{{jsxref("Date.prototype.toLocaleTimeString()")}}
-
Renvoie une chaîne de caractères représentant les heures / minutes / secondes de la date courante avec une représentation propre à la locale courante (déduite des paramètres systèmes utilisés).
-
{{jsxref("Date.prototype.toString()")}}
-
Renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}} courant. Cette méthode surcharge la méthode {{jsxref("Object.prototype.toString()")}}.
-
{{jsxref("Date.prototype.toTimeString()")}}
-
Renvoie l'heure (avec les minutes et les secondes) d'une date sous la forme d'une chaîne de caractères compréhensible par un humain.
-
{{jsxref("Date.prototype.toUTCString()")}}
-
Convertit une date en chaîne de caractère en utilisant le temps universel comme référentiel.
-
{{jsxref("Date.prototype.valueOf()")}}
-
Renvoie la valeur primitive d'un objet {{jsxref("Date")}}. Cette méthode surcharge la méthode {{jsxref("Object.prototype.valueOf()")}}.
-
- -

Exemples

- -

Différentes façons de créer un objet Date

- -

Les exemples qui suivent illustrent différentes méthodes permettant de créer des dates JavaScript :

- -
-

Note : L'analyse de chaîne de caractères représentant des dates avec le constructeur Date  (ou Date.parse qui est équivalent) est fortement déconseillée en raison des différences de comportement existant entre les navigateurs.

-
- -
let aujourdhui = new Date()
-let anniversaire = new Date('September 22, 2018 15:00:00')
-let anniversaire = new Date('2018-09-22T15:00:00')
-let anniversaire = new Date(2018, 8, 22)            // the month is 0-indexed
-let anniversaire = new Date(2018, 8, 22, 15, 0, 0)
-
- -

Les années sur deux chiffres correspondent à la période 1900 – 1999

- -

Afin de créer et de manipuler des dates sur les années 0 à 99 de notre ère, on doit utiliser les méthodes {{jsxref("Date.prototype.setFullYear()")}} and {{jsxref("Date.prototype.getFullYear()")}}.

- -
let date = new Date(98, 1)  // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
-
-// Méthode dépréciée, 98 correspond également ici à 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)
-
- -

Calculer le temps écoulé

- -

Dans les exemples suivants, on illustre comment calculer le temps écoulé entre deux dates JavaScript en millisecondes.

- -

En raison de durées différentes pour les jours (heure d'été / heure d'hiver), les mois et les années, il faudra faire attention et étudier le sujet avant d'exprimer des durées en unités supérieures à des heures / minutes / secondes.

- -
// Utiliser des objets Date
-let debut = Date.now()
-
-// Ici, l'évènement dont on veut mesurer la durée :
-faireQuelqueChosePendantLongtemps()
-let fin = Date.now()
-let duree = fin - debut // La durée écoulée, en millisecondes
-
- -
// En utilisant les méthodes natives
-let debut = new Date()
-
-// Ici, l'évènement dont on veut mesurer la durée :
-faireQuelqueChosePendantLongtemps()
-let fin = new Date()
-let duree = fin.getTime() - debut.getTime() // La durée écoulée, en millisecondes
-
- -
// Pour tester le temps d'exécution d'une fonction
-function afficheDureeEcoulee(fTest) {
-  let debut = Date.now(),
-      valRetour = fTest(),
-      fin = Date.now()
-
-  console.log(`Durée écoulée : ${ String(fin - debut) } millisecondes`)
-  return valRetour
-}
-
-let valeurDeRetour = afficheDureeEcoulee(maFonctionATester)
-
- -
-

Note : Pour les navigateurs qui prennent en charge l'{{domxref("Window.performance", "API Web Performance", "", 1)}}, la méthode {{domxref("Performance.now()")}} peut fournir un outil de mesure des durées écoulées plus fiable et précis que {{jsxref("Date.now()")}}.

-
- -

Obtenir le nombre de secondes écoulées depuis l'epoch ECMAScript

- -
let secondes = Math.floor(Date.now() / 1000)
-
- -

Dans ce cas, on renvoie un entier et c'est pour ça qu'on utilise {{jsxref("Math.floor()")}}. Par ailleurs, on n'utilise pas {{jsxref("Math.round()")}} afin d'avoir le nombre de secondes effectivement écoulées.

- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date", 3)}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/index.md b/files/fr/web/javascript/reference/global_objects/date/index.md new file mode 100644 index 0000000000..d2ea76a64e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/index.md @@ -0,0 +1,256 @@ +--- +title: Date +slug: Web/JavaScript/Reference/Global_Objects/Date +tags: + - Date + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date +original_slug: Web/JavaScript/Reference/Objets_globaux/Date +--- +
{{JSRef}}
+ +

Les objets JavaScript Date représentent un instant donné sur l'axe du temps dans un format indépendant de la plateforme utilisée. Les objets Date contiennent un nombre (Number) qui représente le nombre de millisecondes écoulées depuis le premier janvier 1970 sur l'échelle UTC.

+ +

Note : TC39 travaille actuellement sur Temporal, une nouvelle API pour la gestion des dates, heures et données temporelles.
+ Pour en savoir plus, consultez le blog d'Igalia et n'hésitez pas à répondre au sondage. Les retours concrets de développeurs web sont importants pour affiner cette API. Attention, elle n'est pas encore prête à être utilisée en production !

+
+ +

Description

+ +

L'epoch ECMAScript

+ +

D'un point de vue technique, une date JavaScript correspond au nombre de millisecondes écoulées depuis le premier janvier 1970, minuit UTC. Cette date et cette heure sont les mêmes que l'epoch UNIX, qui est l'instant de référence principalement utilisé pour manipuler les dates/heures dans les systèmes informatiques.

+ +

Note : Bien que les valeurs temporelles des objets dates soient relatives à UTC, certaines des méthodes simples pour obtenir les composantes d'une date/heure fonctionnent relativement au fuseau horaire du système.

+ +

On notera également que la représentation maximale d'un objet Date n'est pas la même que le plus grand entier représentable en JavaScript (Number.MAX_SAFE_INTEGER vaut 9,007,199,254,740,991). En effet, ECMA-262 définit un maximum de ±100 000 000 (cent millions) jours relatifs au premier janvier 1970 UTC (ce qui correspond au 20 avril 271 821 avant notre ètre d'une part et au 13 septembre 275 760 de notre ère) pouvant être représentés par un objet Date standard (soit un intervalle de ±8 640 000 000 000 000 millisecondes).

+ +

Les formats de date et les conversions entre les fuseaux horaires

+ +

Il existe différentes méthodes pour obtenir une date sous différents formats ou effectuer une conversion entre différents fuseaux. On distingue notamment les fonctions qui manipulent les dates relativement au temps universal coordonné (UTC). Le temps local est celui utilisé par l'appareil de l'utilisateur.

+ +

Ainsi, on dispose de méthodes permettant d'obtenir ou de définir les différentes composantes d'une date selon le temps local (ex. {{jsxref("Date.getDay", "getDay()")}}, {{jsxref("Date.setHours", "setHours()")}}) et de méthodes équivalentes pour la manipulation en UTC (ex. {{jsxref("Date.getUTCDay()", "getUTCDay()")}} et {{jsxref("Date.setUTCHours", "setUTCHours()")}} respectivement).

+ +

Constructeur

+ +
+
{{jsxref("Date/Date", "Date()")}}
+
Cette fonction permet de créer un nouvel objet Date.
+
+ +

Méthodes statiques

+ +
+
{{jsxref("Date.now()")}}
+
Renvoie la valeur numérique correspondant au moment présent sous la forme du nombre de millisecondes écoulées depuis le premier janvier 1970 00:00:00 UTC (les secondes intercalaires (leap seconds) sont ignorées).
+
{{jsxref("Date.parse()")}}
+
Analyse la représentation textuelle d'une date et renvoie le nombre de millisecondes écoulées entre cette date et le premier janvier 1970, 00:00:00 UTC (les secondes intercalaires (leap seconds) sont ignorées). +
+

Note : L'analyse de chaînes de caractères à l'aide de Date.parse est fortement déconseillée en raison des incohérences qui existent entre les navigateurs.

+
+
+
{{jsxref("Date.UTC()")}}
+
Accepte les mêmes paramètres que la forme longue du constructeur (c'est-à-dire entre 2 et 7) et renvoie le nombre de millisecondes entre cette date et le premier janvier 1970, 00:00:00 UTC (les secondes intercalaires (leap seconds) sont ignorées).
+
+ +

Méthodes des instances

+ +
+
{{jsxref("Date.prototype.getDate()")}}
+
Renvoie le jour du mois (entre 1 et 31) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getDay()")}}
+
Renvoie le jour de la semaine (entre 0 et 6) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getFullYear()")}}
+
Renvoie l'année (sans chiffre implicite, 1999 sera renvoyé et pas 99 par exemple) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getHours()")}}
+
Renvoie l'heure (entre 0 et 23) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getMilliseconds()")}}
+
Renvoie les millisecondes (entre 0 et 999) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getMinutes()")}}
+
Renvoie les minutes (entre 0 et 59) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getMonth()")}}
+
Renvoie le mois (entre 0 et 11) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getSeconds()")}}
+
Renvoie les secondes (entre 0 et 59) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.getTime()")}}
+
Renvoie la valeur numérique de la date donnée, exprimée en nombre de millisecondes écoulées depuis le premier janvier 1970, 00:00:00 UTC (pour les temps antérieurs, ce sont des valeurs négatives qui seront renvoyées).
+
{{jsxref("Date.prototype.getTimezoneOffset()")}}
+
Renvoie le décalage horaire, exprimé en minutes, pour la locale courante.
+
{{jsxref("Date.prototype.getUTCDate()")}}
+
Renvoie le jour du mois (entre 1 et 31) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getUTCDay()")}}
+
Renvoie le jour de la semaine (entre 0 et 6) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getUTCFullYear()")}}
+
Renvoie l'année (sans chiffre implicite, 1999 sera renvoyé plutôt que 99) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getUTCHours()")}}
+
Renvoie l'heure (entre 0 et 23) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getUTCMilliseconds()")}}
+
Renvoie les millisecondes (entre 0 et 999) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getUTCMinutes()")}}
+
Renvoie les minutes (entre 0 et 59) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getUTCMonth()")}}
+
Renvoie le mois (entre 0 et 11) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getUTCSeconds()")}}
+
Renvoie les secondes (entre 0 et 59) pour la date donnée, selon le temps universel.
+
{{jsxref("Date.prototype.getYear()")}}
+
Renvoie l'année (généralement exprimée sur 2 ou 3 chiffres) pour la date donnée selon le temps local. On utilisera plutôt {{jsxref("Date.prototype.getFullYear()", "getFullYear()")}}.
+
{{jsxref("Date.prototype.setDate()")}}
+
Définit le jour du mois pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.setFullYear()")}}
+
Définit l'année (sans chiffre implicite, on utilisera 1999 et pas 99) pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.setHours()")}}
+
Définit les heures pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.setMilliseconds()")}}
+
Définit les millisecondes pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.setMinutes()")}}
+
Définit les minutes pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.setMonth()")}}
+
Définit le mois pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.setSeconds()")}}
+
Définit les secondes pour la date donnée, selon le temps local.
+
{{jsxref("Date.prototype.setTime()")}}
+
Définit le nombre de millisecondes écoulées depuis le premier janvier 1970, 00:00:00 UTC et la date donnée. On utilisera des nombres négatifs pour les moments antérieurs à cette date.
+
{{jsxref("Date.prototype.setUTCDate()")}}
+
Définit le jour du mois pour la date donnée selon le temps universel.
+
{{jsxref("Date.prototype.setUTCFullYear()")}}
+
Définit l'année (exprimée sans chiffres implicites, ex. 1999 et pas 99) pour la date donnée selon le temps universel.
+
{{jsxref("Date.prototype.setUTCHours()")}}
+
Définit l'heure pour la date donnée selon le temps universel.
+
{{jsxref("Date.prototype.setUTCMilliseconds()")}}
+
Définit les millisecondes pour la date donnée selon le temps universel.
+
{{jsxref("Date.prototype.setUTCMinutes()")}}
+
Définit les minutes pour la date donnée selon le temps universel.
+
{{jsxref("Date.prototype.setUTCMonth()")}}
+
Définit le mois pour la date donnée selon le temps universel.
+
{{jsxref("Date.prototype.setUTCSeconds()")}}
+
Définit les secondes pour la date donnée selon le temps universel.
+
{{jsxref("Date.prototype.setYear()")}}
+
Définit l'année (avec 2 à 3 chiffres) pour la date courante selon le temps local. On privilégiera la méthode {{jsxref("Date.prototype.setFullYear()", "setFullYear()")}} à la place.
+
{{jsxref("Date.prototype.toDateString()")}}
+
Renvoie la partie "date" (jour, mois, année) de l'objet {{jsxref("Date")}} en une chaîne de caractères compréhensible par un humain (anglophone) (ex. 'Thu Apr 12 2018').
+
{{jsxref("Date.prototype.toISOString()")}}
+
Convertit une date en une chaîne de caractères selon le format ISO 8601 Étendu.
+
{{jsxref("Date.prototype.toJSON()")}}
+
Renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}} avec {{jsxref("Date.prototype.toISOString()", "toISOString()")}}. Cette méthode est utilisée par {{jsxref("JSON.stringify()")}}.
+
{{jsxref("Date.prototype.toGMTString()")}}
+
Renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}} d'après le fuseau GMT (UTC). On utilisera plutôt {{jsxref("Date.prototype.toUTCString()", "toUTCString()")}}.
+
{{jsxref("Date.prototype.toLocaleDateString()")}}
+
Renvoie une chaîne de caractères représentant les jours / mois / années de la date courante avec une représentation propre à la locale courante (déduite des paramètres systèmes utilisés).
+
{{jsxref("Date.prototype.toLocaleFormat()")}}
+
Convertit la date courante en une chaîne de caractères avec un format décrit en paramètre via une chaîne de caractères.
+
{{jsxref("Date.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères représentant la date sous le forme de la locale courante. Cette méthode surcharge la méthode {{jsxref("Object.prototype.toLocaleString()")}}.
+
{{jsxref("Date.prototype.toLocaleTimeString()")}}
+
Renvoie une chaîne de caractères représentant les heures / minutes / secondes de la date courante avec une représentation propre à la locale courante (déduite des paramètres systèmes utilisés).
+
{{jsxref("Date.prototype.toString()")}}
+
Renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}} courant. Cette méthode surcharge la méthode {{jsxref("Object.prototype.toString()")}}.
+
{{jsxref("Date.prototype.toTimeString()")}}
+
Renvoie l'heure (avec les minutes et les secondes) d'une date sous la forme d'une chaîne de caractères compréhensible par un humain.
+
{{jsxref("Date.prototype.toUTCString()")}}
+
Convertit une date en chaîne de caractère en utilisant le temps universel comme référentiel.
+
{{jsxref("Date.prototype.valueOf()")}}
+
Renvoie la valeur primitive d'un objet {{jsxref("Date")}}. Cette méthode surcharge la méthode {{jsxref("Object.prototype.valueOf()")}}.
+
+ +

Exemples

+ +

Différentes façons de créer un objet Date

+ +

Les exemples qui suivent illustrent différentes méthodes permettant de créer des dates JavaScript :

+ +
+

Note : L'analyse de chaîne de caractères représentant des dates avec le constructeur Date  (ou Date.parse qui est équivalent) est fortement déconseillée en raison des différences de comportement existant entre les navigateurs.

+
+ +
let aujourdhui = new Date()
+let anniversaire = new Date('September 22, 2018 15:00:00')
+let anniversaire = new Date('2018-09-22T15:00:00')
+let anniversaire = new Date(2018, 8, 22)            // the month is 0-indexed
+let anniversaire = new Date(2018, 8, 22, 15, 0, 0)
+
+ +

Les années sur deux chiffres correspondent à la période 1900 – 1999

+ +

Afin de créer et de manipuler des dates sur les années 0 à 99 de notre ère, on doit utiliser les méthodes {{jsxref("Date.prototype.setFullYear()")}} and {{jsxref("Date.prototype.getFullYear()")}}.

+ +
let date = new Date(98, 1)  // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
+
+// Méthode dépréciée, 98 correspond également ici à 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)
+
+ +

Calculer le temps écoulé

+ +

Dans les exemples suivants, on illustre comment calculer le temps écoulé entre deux dates JavaScript en millisecondes.

+ +

En raison de durées différentes pour les jours (heure d'été / heure d'hiver), les mois et les années, il faudra faire attention et étudier le sujet avant d'exprimer des durées en unités supérieures à des heures / minutes / secondes.

+ +
// Utiliser des objets Date
+let debut = Date.now()
+
+// Ici, l'évènement dont on veut mesurer la durée :
+faireQuelqueChosePendantLongtemps()
+let fin = Date.now()
+let duree = fin - debut // La durée écoulée, en millisecondes
+
+ +
// En utilisant les méthodes natives
+let debut = new Date()
+
+// Ici, l'évènement dont on veut mesurer la durée :
+faireQuelqueChosePendantLongtemps()
+let fin = new Date()
+let duree = fin.getTime() - debut.getTime() // La durée écoulée, en millisecondes
+
+ +
// Pour tester le temps d'exécution d'une fonction
+function afficheDureeEcoulee(fTest) {
+  let debut = Date.now(),
+      valRetour = fTest(),
+      fin = Date.now()
+
+  console.log(`Durée écoulée : ${ String(fin - debut) } millisecondes`)
+  return valRetour
+}
+
+let valeurDeRetour = afficheDureeEcoulee(maFonctionATester)
+
+ +
+

Note : Pour les navigateurs qui prennent en charge l'{{domxref("Window.performance", "API Web Performance", "", 1)}}, la méthode {{domxref("Performance.now()")}} peut fournir un outil de mesure des durées écoulées plus fiable et précis que {{jsxref("Date.now()")}}.

+
+ +

Obtenir le nombre de secondes écoulées depuis l'epoch ECMAScript

+ +
let secondes = Math.floor(Date.now() / 1000)
+
+ +

Dans ce cas, on renvoie un entier et c'est pour ça qu'on utilise {{jsxref("Math.floor()")}}. Par ailleurs, on n'utilise pas {{jsxref("Math.round()")}} afin d'avoir le nombre de secondes effectivement écoulées.

+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date", 3)}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/now/index.html b/files/fr/web/javascript/reference/global_objects/date/now/index.html deleted file mode 100644 index 271fbf39bb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/now/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Date.now() -slug: Web/JavaScript/Reference/Global_Objects/Date/now -tags: - - Date - - JavaScript - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Date/now -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/now ---- -
{{JSRef}}
- -

La méthode Date.now() renvoie le nombre de millisecondes écoulées depuis le 1er Janvier 1970 00:00:00 UTC.

- -
{{EmbedInteractiveExample("pages/js/date-now.html")}}
- -

Syntaxe

- -
var tempsEnMs = Date.now();
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées depuis le premier janvier 1970 à minuit UTC.

- -

Description

- -

La méthode now() renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970 00:00:00 UTC sous forme d'un {{jsxref("Number")}} (nombre).

- -

now() étant une méthode statique de {{jsxref("Date")}}, on utilisera toujours la forme Date.now().

- -

Prothèse d'émulation (polyfill)

- -

Cette méthode a été standardisée dans la 5e édition d'ECMA-262. Les moteurs JavaScript ne la supportant pas peuvent l'émuler de la façon suivante :

- -
if (!Date.now) {
-  Date.now = function now() {
-    return new Date().getTime();
-  };
-}
-
- -

Précision temporelle réduite

- -

Afin de protéger contre les attaques de minutage et d'identification, la précision de new Date.now() peut être arrondie en fonction des paramètres du navigateur. Pour Firefox, la préférence privacy.reduceTimerPrecision est activée par défaut et vaut, par défaut 20ms pour Firefox 59 et 2ms pour Firefox 60.

- -
// Précision temporelle réduite (2ms) pour Firefox 60
-new Date().getTime();
-// 1519211809934
-// 1519211810362
-// 1519211811670
-// ...
-
-
-// précision temporelle avec `privacy.resistFingerprinting` activé
-new Date().getTime();
-// 1519129853500
-// 1519129858900
-// 1519129864400
-// ...
-
- -

Pour Firefox, il est également possible d'activer privacy.resistFingerprinting auquel cas la précision sera 100ms ou la valeur de privacy.resistFingerprinting.reduceTimerPrecision.microseconds selon laquelle est plus grande.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.9.4.4', 'Date.now')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES6', '#sec-date.now', 'Date.now')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.now', 'Date.now')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.now")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/now/index.md b/files/fr/web/javascript/reference/global_objects/date/now/index.md new file mode 100644 index 0000000000..271fbf39bb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/now/index.md @@ -0,0 +1,103 @@ +--- +title: Date.now() +slug: Web/JavaScript/Reference/Global_Objects/Date/now +tags: + - Date + - JavaScript + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Date/now +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/now +--- +
{{JSRef}}
+ +

La méthode Date.now() renvoie le nombre de millisecondes écoulées depuis le 1er Janvier 1970 00:00:00 UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-now.html")}}
+ +

Syntaxe

+ +
var tempsEnMs = Date.now();
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées depuis le premier janvier 1970 à minuit UTC.

+ +

Description

+ +

La méthode now() renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970 00:00:00 UTC sous forme d'un {{jsxref("Number")}} (nombre).

+ +

now() étant une méthode statique de {{jsxref("Date")}}, on utilisera toujours la forme Date.now().

+ +

Prothèse d'émulation (polyfill)

+ +

Cette méthode a été standardisée dans la 5e édition d'ECMA-262. Les moteurs JavaScript ne la supportant pas peuvent l'émuler de la façon suivante :

+ +
if (!Date.now) {
+  Date.now = function now() {
+    return new Date().getTime();
+  };
+}
+
+ +

Précision temporelle réduite

+ +

Afin de protéger contre les attaques de minutage et d'identification, la précision de new Date.now() peut être arrondie en fonction des paramètres du navigateur. Pour Firefox, la préférence privacy.reduceTimerPrecision est activée par défaut et vaut, par défaut 20ms pour Firefox 59 et 2ms pour Firefox 60.

+ +
// Précision temporelle réduite (2ms) pour Firefox 60
+new Date().getTime();
+// 1519211809934
+// 1519211810362
+// 1519211811670
+// ...
+
+
+// précision temporelle avec `privacy.resistFingerprinting` activé
+new Date().getTime();
+// 1519129853500
+// 1519129858900
+// 1519129864400
+// ...
+
+ +

Pour Firefox, il est également possible d'activer privacy.resistFingerprinting auquel cas la précision sera 100ms ou la valeur de privacy.resistFingerprinting.reduceTimerPrecision.microseconds selon laquelle est plus grande.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.9.4.4', 'Date.now')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES6', '#sec-date.now', 'Date.now')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.now', 'Date.now')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.now")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/parse/index.html b/files/fr/web/javascript/reference/global_objects/date/parse/index.html deleted file mode 100644 index 86226b698a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/parse/index.html +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: Date.parse() -slug: Web/JavaScript/Reference/Global_Objects/Date/parse -tags: - - Date - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/parse ---- -
{{JSRef}}
- -

La méthode Date.parse() analyse la représentation textuelle d'une date, et renvoie le nombre de millisecondes depuis le 1er janvier 1970, 00:00:00 UTC jusqu'à cette date ou NaN si la chaîne n'est pas reconnue ou décrit une date invalide (par exemple 2015-02-31).

- -
-

Note : Pour les anciennes implémentations (avant ES5), le résultat de Date.parse variait d'une implémentation à l'autre. Attention donc à la compatibilité avec ces anciennes versions.

-
- -
{{EmbedInteractiveExample("pages/js/date-parse.html")}}
- -

Syntaxe

- -

Appel direct :

- -
Date.parse(dateString)
- -

Appel implicite :

- -
new Date(dateString)
- -

Paramètres

- -
-
dateString
-
Une chaine de caractères représentant une date dans une version simplifiéee d'ISO 8601 (d'autres formats peuvent être utilisés mais les résultats ne sont pas garantis).
-
- -

Valeur de retour

- -

Un nombre correspondant au nombre de millisecondes écoulées entre le premier janvier 1970 à minuit UTC et la date indiquée en argument sous la forme d'une chaîne de caractères. Si l'argument ne permet pas de décrire une date valide, c'est {{jsxref("NaN")}} qui sera renvoyé.

- -

Description

- -

La méthode parse prend en argument une chaine de caractères contenant une date en paramètre (comme "Dec 25, 1995") et renvoie le nombre de millièmes de secondes depuis le 1er janvier 1970, 00:00:00 UTC. Cette fonction est utile pour définir des valeurs de dates à partir de représentations textuelles, par exemple en conjonction avec la méthode {{jsxref("Objets_globaux/Date/setTime", "setTime()")}} et l'objet {{jsxref("Objets_globaux/Date", "Date")}}.

- -

Format de la chaîne de caractères

- -

À partir d'une chaine de caractères représentant une date, parse renvoie une valeur de temps. La syntaxe acceptée est un format simplifié de la norme ISO 8601. On pourra par exemple utiliser "2011-10-10" (date uniquement), "2011-10-10T14:48:00" (date et heure) ou "2011-10-10T14:48:00.000+09:00" (date, heure, millisecondes et fuseau horaire).

- -

Si aucun fuseau horaire n'est spécifié, les chaînes représentant uniquement des dates seront considérées comme UTC et les dates / heures seront considérées comme locales.

- -

Lorsque des indicateurs de fuseau horaire sont utilisés, la valeur renvoyée correspondra toujours au nombre de millisecondes écoulées entre l'argument et le premier janvier 1970 à minuit UTC.

- -

parse() est une méthode statique de {{jsxref("Date")}} et on invoquera ainsi Date.parse() plutôt que parse() sur une instance d'un objet Date.

- -

Différences entre les fuseaux horaires supposés

- -

Avec une chaîne comme "March 7, 2014", parse() supposera un fuseau horaire local, avec une chaîne au format ISO comme "2014-03-07", la méthode supposera un fuseau horaire UTC en ES5 et un fuseau horaire local pour ECMAScript 2015. Ainsi les objets {{jsxref("Date")}} construits avec ces chaînes représenteront des instants différents, sauf si le fuseau horaire local du système utilisé correspond à UTC. Cela signifie que deux dates représentées de façon textuelles semblables peuvent donner des dates différentes (ce comportement doit être corrigé avec ECMAScript 6 afin que les deux dates soient traitées de façon locale).

- -

Traitement laissé libre à l'implémentation

- -

Le standard ECMAScript dicte que si la chaîne utilisée n'est pas conforme au format standard, alors la fonction peut utiliser une heuristique et/ou un algorithme d'analyse de texte propre à l'implémentation. Les chaînes impossibles à décoder et/ou qui contiennent des éléments non-conformes aux formats ISO doivent renvoyer {{jsxref("NaN")}} lors de l'appel à Date.parse().

- -

Cependant, les valeurs invalides qui ne sont pas reconnues dans un format ISO pris en charge par ECMA-262 peuvent ou non engendrer la valeur {{jsxref("NaN")}} selon le navigateur et les valeurs utilisées. Par exemple :

- -
// Chaîne non ISO avec des valeurs invalides
-new Date('23/25/2014');
- -

sera traitée comme la date locale du 25 novembre 2015 avec Firefox 30 et comme invalide avec Safari 7. Cependant, si la chaîne est reconnue dans un format ISO mais contient des valeurs invalides, la méthode renverra {{jsxref("NaN")}} pour tous les navigateurs conformes à ES5 (ou aux versions ultérieures) :

- -
// Chaîne ISO avec des valeurs invalides new
-Date('2014-25-23').toISOString();
-// renvoie "RangeError: invalid date" pour les navigateurs ES5
- -

L'implémentation spécifique de SpiderMonkey peut être trouvée dans le fichier jsdate.cpp. La chaîne "10 06 2014" est un exemple de chaîne non ISO, utiliser parse() sur cette chaîne entraînera le moteur JavaScript à utiliser son implémentation de recours. Voir ce bug pour une explication rapide de la façon dont est faite l'analyse de la chaîne.

- -
new Date('10 06 2014');
- -

sera traitée comme la date locale du 6 octobre 2014 et non comme le 10 juin 2014. D'autres exemples :

- -
new Date('toto-truc 2014').toString();
-// renvoie : "Invalid Date"
-Date.parse('toto-truc 2014');
-// renvoie : NaN
- -

Exemples

- -

Utiliser Date.parse()

- -

Les appels suivants renvoient tous 1546300800000. Dans le premier appel, on indique uniquement la date (et donc le fuseau UTC implicite). Les chaînes qui suivent utilisent une indication de fuseau horaire selon la norme ISO (Z et +00:00)

- -
Date.parse("2019-01-01")
-Date.parse("2019-01-01T00:00:00.000Z")
-Date.parse("2019-01-01T00:00:00.000+00:00")
-
- -

L'appel suivant, qui ne précise pas le fuseau horaire, fournira le nombre de millisecondes écoulées entre le premier janvier 1970 minuit UTC et le premier janvier 2019 à minuit selon l'heure locale du système utilisé.

- -
Date.parse("2019-01-01T00:00:00")
-
- -

Chaînes de caractères non-standard

- -
-

Note : Cette section contient des exemples qui reposent sur des comportements spécifiques aux implémentations et on peut donc avoir des incohérences entre les moteurs utilisés.

-
- -

Si IPOdate est un objet {{jsxref("Date")}}, on peut définir sa valeur au 9 août 1995 (heure locale), de la façon suivante :

- -
IPOdate.setTime(Date.parse('Aug 9, 1995'));
-
- -

Voici un autre exemple avec une chaîne qui ne suit pas le format standard.

- -
Date.parse('Aug 9, 1995');
-
- -

Cette méthode renverra 807937200000 pour le fuseau horaire GMT-0300 et d'autres valeurs pour d'autres fuseaux car la chaîne n'indique pas le fuseau horaire et ne respecte pas le format ISO (le fuseau considéré par défaut est donc le fuseau local).

- -
Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');
-
- -

Renvoie 807926400000 quel que soit le fuseau local car on indique GMT.

- -
Date.parse('Wed, 09 Aug 1995 00:00:00');
-
- -

Renvoie 807937200000 dans le fuseau GMT-0300 et d'autres valeurs pour d'autres fuseaux car aucune indication de fuseau n'est fournie et que la chaîne n'est pas au format ISO, elle est donc traitée comme un temps local.

- -
Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');
-
- -

Renvoie 0 quel que soit le fuseau local car l'indicateur GMT est fourni.

- -
Date.parse('Thu, 01 Jan 1970 00:00:00');
-
- -

Renvoie 14400000 pour le fuseau GMT-0400 et d'autres valeurs dans d'autres fuseaux car aucune indication de fuseau n'est fournie et la chaîne n'est pas au format ISO, elle est donc traitée comme un temps local.

- -
Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');
-
- -

Renvoie 14400000 quel que soit le fuseau car l'indicateur GMT est fourni.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.4.2', 'Date.parse')}}{{Spec2('ES5.1')}}Ajout du format ISO 8601 simplifié.
{{SpecName('ES6', '#sec-date.parse', 'Date.parse')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.parse', 'Date.parse')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.parse")}}

- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/parse/index.md b/files/fr/web/javascript/reference/global_objects/date/parse/index.md new file mode 100644 index 0000000000..86226b698a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/parse/index.md @@ -0,0 +1,195 @@ +--- +title: Date.parse() +slug: Web/JavaScript/Reference/Global_Objects/Date/parse +tags: + - Date + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/parse +--- +
{{JSRef}}
+ +

La méthode Date.parse() analyse la représentation textuelle d'une date, et renvoie le nombre de millisecondes depuis le 1er janvier 1970, 00:00:00 UTC jusqu'à cette date ou NaN si la chaîne n'est pas reconnue ou décrit une date invalide (par exemple 2015-02-31).

+ +
+

Note : Pour les anciennes implémentations (avant ES5), le résultat de Date.parse variait d'une implémentation à l'autre. Attention donc à la compatibilité avec ces anciennes versions.

+
+ +
{{EmbedInteractiveExample("pages/js/date-parse.html")}}
+ +

Syntaxe

+ +

Appel direct :

+ +
Date.parse(dateString)
+ +

Appel implicite :

+ +
new Date(dateString)
+ +

Paramètres

+ +
+
dateString
+
Une chaine de caractères représentant une date dans une version simplifiéee d'ISO 8601 (d'autres formats peuvent être utilisés mais les résultats ne sont pas garantis).
+
+ +

Valeur de retour

+ +

Un nombre correspondant au nombre de millisecondes écoulées entre le premier janvier 1970 à minuit UTC et la date indiquée en argument sous la forme d'une chaîne de caractères. Si l'argument ne permet pas de décrire une date valide, c'est {{jsxref("NaN")}} qui sera renvoyé.

+ +

Description

+ +

La méthode parse prend en argument une chaine de caractères contenant une date en paramètre (comme "Dec 25, 1995") et renvoie le nombre de millièmes de secondes depuis le 1er janvier 1970, 00:00:00 UTC. Cette fonction est utile pour définir des valeurs de dates à partir de représentations textuelles, par exemple en conjonction avec la méthode {{jsxref("Objets_globaux/Date/setTime", "setTime()")}} et l'objet {{jsxref("Objets_globaux/Date", "Date")}}.

+ +

Format de la chaîne de caractères

+ +

À partir d'une chaine de caractères représentant une date, parse renvoie une valeur de temps. La syntaxe acceptée est un format simplifié de la norme ISO 8601. On pourra par exemple utiliser "2011-10-10" (date uniquement), "2011-10-10T14:48:00" (date et heure) ou "2011-10-10T14:48:00.000+09:00" (date, heure, millisecondes et fuseau horaire).

+ +

Si aucun fuseau horaire n'est spécifié, les chaînes représentant uniquement des dates seront considérées comme UTC et les dates / heures seront considérées comme locales.

+ +

Lorsque des indicateurs de fuseau horaire sont utilisés, la valeur renvoyée correspondra toujours au nombre de millisecondes écoulées entre l'argument et le premier janvier 1970 à minuit UTC.

+ +

parse() est une méthode statique de {{jsxref("Date")}} et on invoquera ainsi Date.parse() plutôt que parse() sur une instance d'un objet Date.

+ +

Différences entre les fuseaux horaires supposés

+ +

Avec une chaîne comme "March 7, 2014", parse() supposera un fuseau horaire local, avec une chaîne au format ISO comme "2014-03-07", la méthode supposera un fuseau horaire UTC en ES5 et un fuseau horaire local pour ECMAScript 2015. Ainsi les objets {{jsxref("Date")}} construits avec ces chaînes représenteront des instants différents, sauf si le fuseau horaire local du système utilisé correspond à UTC. Cela signifie que deux dates représentées de façon textuelles semblables peuvent donner des dates différentes (ce comportement doit être corrigé avec ECMAScript 6 afin que les deux dates soient traitées de façon locale).

+ +

Traitement laissé libre à l'implémentation

+ +

Le standard ECMAScript dicte que si la chaîne utilisée n'est pas conforme au format standard, alors la fonction peut utiliser une heuristique et/ou un algorithme d'analyse de texte propre à l'implémentation. Les chaînes impossibles à décoder et/ou qui contiennent des éléments non-conformes aux formats ISO doivent renvoyer {{jsxref("NaN")}} lors de l'appel à Date.parse().

+ +

Cependant, les valeurs invalides qui ne sont pas reconnues dans un format ISO pris en charge par ECMA-262 peuvent ou non engendrer la valeur {{jsxref("NaN")}} selon le navigateur et les valeurs utilisées. Par exemple :

+ +
// Chaîne non ISO avec des valeurs invalides
+new Date('23/25/2014');
+ +

sera traitée comme la date locale du 25 novembre 2015 avec Firefox 30 et comme invalide avec Safari 7. Cependant, si la chaîne est reconnue dans un format ISO mais contient des valeurs invalides, la méthode renverra {{jsxref("NaN")}} pour tous les navigateurs conformes à ES5 (ou aux versions ultérieures) :

+ +
// Chaîne ISO avec des valeurs invalides new
+Date('2014-25-23').toISOString();
+// renvoie "RangeError: invalid date" pour les navigateurs ES5
+ +

L'implémentation spécifique de SpiderMonkey peut être trouvée dans le fichier jsdate.cpp. La chaîne "10 06 2014" est un exemple de chaîne non ISO, utiliser parse() sur cette chaîne entraînera le moteur JavaScript à utiliser son implémentation de recours. Voir ce bug pour une explication rapide de la façon dont est faite l'analyse de la chaîne.

+ +
new Date('10 06 2014');
+ +

sera traitée comme la date locale du 6 octobre 2014 et non comme le 10 juin 2014. D'autres exemples :

+ +
new Date('toto-truc 2014').toString();
+// renvoie : "Invalid Date"
+Date.parse('toto-truc 2014');
+// renvoie : NaN
+ +

Exemples

+ +

Utiliser Date.parse()

+ +

Les appels suivants renvoient tous 1546300800000. Dans le premier appel, on indique uniquement la date (et donc le fuseau UTC implicite). Les chaînes qui suivent utilisent une indication de fuseau horaire selon la norme ISO (Z et +00:00)

+ +
Date.parse("2019-01-01")
+Date.parse("2019-01-01T00:00:00.000Z")
+Date.parse("2019-01-01T00:00:00.000+00:00")
+
+ +

L'appel suivant, qui ne précise pas le fuseau horaire, fournira le nombre de millisecondes écoulées entre le premier janvier 1970 minuit UTC et le premier janvier 2019 à minuit selon l'heure locale du système utilisé.

+ +
Date.parse("2019-01-01T00:00:00")
+
+ +

Chaînes de caractères non-standard

+ +
+

Note : Cette section contient des exemples qui reposent sur des comportements spécifiques aux implémentations et on peut donc avoir des incohérences entre les moteurs utilisés.

+
+ +

Si IPOdate est un objet {{jsxref("Date")}}, on peut définir sa valeur au 9 août 1995 (heure locale), de la façon suivante :

+ +
IPOdate.setTime(Date.parse('Aug 9, 1995'));
+
+ +

Voici un autre exemple avec une chaîne qui ne suit pas le format standard.

+ +
Date.parse('Aug 9, 1995');
+
+ +

Cette méthode renverra 807937200000 pour le fuseau horaire GMT-0300 et d'autres valeurs pour d'autres fuseaux car la chaîne n'indique pas le fuseau horaire et ne respecte pas le format ISO (le fuseau considéré par défaut est donc le fuseau local).

+ +
Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');
+
+ +

Renvoie 807926400000 quel que soit le fuseau local car on indique GMT.

+ +
Date.parse('Wed, 09 Aug 1995 00:00:00');
+
+ +

Renvoie 807937200000 dans le fuseau GMT-0300 et d'autres valeurs pour d'autres fuseaux car aucune indication de fuseau n'est fournie et que la chaîne n'est pas au format ISO, elle est donc traitée comme un temps local.

+ +
Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');
+
+ +

Renvoie 0 quel que soit le fuseau local car l'indicateur GMT est fourni.

+ +
Date.parse('Thu, 01 Jan 1970 00:00:00');
+
+ +

Renvoie 14400000 pour le fuseau GMT-0400 et d'autres valeurs dans d'autres fuseaux car aucune indication de fuseau n'est fournie et la chaîne n'est pas au format ISO, elle est donc traitée comme un temps local.

+ +
Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');
+
+ +

Renvoie 14400000 quel que soit le fuseau car l'indicateur GMT est fourni.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.4.2', 'Date.parse')}}{{Spec2('ES5.1')}}Ajout du format ISO 8601 simplifié.
{{SpecName('ES6', '#sec-date.parse', 'Date.parse')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.parse', 'Date.parse')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.parse")}}

+ +

Notes de compatibilité

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setdate/index.html b/files/fr/web/javascript/reference/global_objects/date/setdate/index.html deleted file mode 100644 index 7091ece853..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setdate/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Date.prototype.setDate() -slug: Web/JavaScript/Reference/Global_Objects/Date/setDate -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setDate -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setDate ---- -
{{JSRef}}
- -

La méthode setDate() définit le jour du mois (relatif au début du mois courant) pour une date donnée.

- -
{{EmbedInteractiveExample("pages/js/date-setdate.html")}}
- -

Syntaxe

- -
dateObj.setDate(valeurJour)
- -

Paramètres

- -
-
valeurJour
-
Un entier représentant le jour du mois.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 00:00:00 UTC et la date résultante (l'objet {{jsxref("Date")}} est également modifié).

- -

Description

- -

Si la valeurJour est en dehors des limites du mois courant, setDate() mettra à jour l'objet {{jsxref("Date")}} en conséquence.

- -

Par exemple, si 0 est fourni pour valeurJour, la date sera défini sur le dernier jour du mois précédent.

- -

Si on fournit un nombre négatif, la date sera déterminée à rebours à partir du dernier jour du mois précédent. Ainsi, avec -1, on obtiendrait la veille du dernier jour du mois précédent.

- -

Exemples

- -

Utiliser setDate()

- -
var theBigDay = new Date(1962, 6, 7); // 1962-07-06T23:00:00.000Z
-theBigDay.setDate(24);   // 1962-07-23T23:00:00.000Z
-theBigDay.setDate(32);   // 1962-07-31T23:00:00.000Z
-theBigDay.setDate(22);   // 1962-08-21T23:00:00.000Z
-theBigDay.setDate(0);    // 1962-07-30T23:00:00.000Z
-theBigDay.setDate(98);   // 1962-10-05T23:00:00.000Z
-theBigDay.setDate(-50);  // 1962-08-10T23:00:00.000Z
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.36', 'Date.prototype.setDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setDate")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setdate/index.md b/files/fr/web/javascript/reference/global_objects/date/setdate/index.md new file mode 100644 index 0000000000..7091ece853 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setdate/index.md @@ -0,0 +1,95 @@ +--- +title: Date.prototype.setDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/setDate +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setDate +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setDate +--- +
{{JSRef}}
+ +

La méthode setDate() définit le jour du mois (relatif au début du mois courant) pour une date donnée.

+ +
{{EmbedInteractiveExample("pages/js/date-setdate.html")}}
+ +

Syntaxe

+ +
dateObj.setDate(valeurJour)
+ +

Paramètres

+ +
+
valeurJour
+
Un entier représentant le jour du mois.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 00:00:00 UTC et la date résultante (l'objet {{jsxref("Date")}} est également modifié).

+ +

Description

+ +

Si la valeurJour est en dehors des limites du mois courant, setDate() mettra à jour l'objet {{jsxref("Date")}} en conséquence.

+ +

Par exemple, si 0 est fourni pour valeurJour, la date sera défini sur le dernier jour du mois précédent.

+ +

Si on fournit un nombre négatif, la date sera déterminée à rebours à partir du dernier jour du mois précédent. Ainsi, avec -1, on obtiendrait la veille du dernier jour du mois précédent.

+ +

Exemples

+ +

Utiliser setDate()

+ +
var theBigDay = new Date(1962, 6, 7); // 1962-07-06T23:00:00.000Z
+theBigDay.setDate(24);   // 1962-07-23T23:00:00.000Z
+theBigDay.setDate(32);   // 1962-07-31T23:00:00.000Z
+theBigDay.setDate(22);   // 1962-08-21T23:00:00.000Z
+theBigDay.setDate(0);    // 1962-07-30T23:00:00.000Z
+theBigDay.setDate(98);   // 1962-10-05T23:00:00.000Z
+theBigDay.setDate(-50);  // 1962-08-10T23:00:00.000Z
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.36', 'Date.prototype.setDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setDate")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setfullyear/index.html b/files/fr/web/javascript/reference/global_objects/date/setfullyear/index.html deleted file mode 100644 index 5c08f44347..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setfullyear/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Date.prototype.setFullYear() -slug: Web/JavaScript/Reference/Global_Objects/Date/setFullYear -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setFullYear -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setFullYear ---- -
{{JSRef}}
- -

La méthode setFullYear() définit l'année complête pour une date, d'après l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-setfullyear.html")}}
- -

Syntaxe

- -
dateObj.setFullYear(valeurAnnée[, valeurMois[, valeurJour]])
- -

Paramètres

- -
-
valeurAnnée
-
Un entier indiquant la valeur numérique de l'année, par exemple, 1995.
-
valeurMois
-
Paramètre optionnel qui représente un entier entre 0 et 11, représentant les mois de janvier à décembre.
-
valeurJour
-
Paramètre optionnel qui représente un entier entre 1 et 31 représentant le jour du mois. Si vous indiquez une valeurJour, vous devez aussi indiquer valeurMois.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 à minuit UTC et la date mise à jour.

- -

Description

- -

Si vous n'indiquez pas les paramètres valeurMois et valeurJour. Les valeurs renvoyées par les méthodes {{jsxref("Date.prototype.getMonth()", "getMonth()")}} et {{jsxref("Date.prototype.getDate()", "getDate()")}} seront utilisées.

- -

Si un des paramètres que vous indiquez est en dehors des limites attendues, setFullYear() tentera de mettre à jour la date en conséquence. Pa exemple, si vous indiquez 15 pour valeurMois, l'année sera incrémenté de 1 (année + 1), et 3 sera utilisé pour le mois.

- -

Exemples

- -

Utiliser setFullYear()

- -
var leGrandJour = new Date();
-leGrandJour.setFullYear(1997);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.40', 'Date.prototype.setFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setFullYear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setfullyear/index.md b/files/fr/web/javascript/reference/global_objects/date/setfullyear/index.md new file mode 100644 index 0000000000..5c08f44347 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setfullyear/index.md @@ -0,0 +1,94 @@ +--- +title: Date.prototype.setFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/setFullYear +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setFullYear +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setFullYear +--- +
{{JSRef}}
+ +

La méthode setFullYear() définit l'année complête pour une date, d'après l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-setfullyear.html")}}
+ +

Syntaxe

+ +
dateObj.setFullYear(valeurAnnée[, valeurMois[, valeurJour]])
+ +

Paramètres

+ +
+
valeurAnnée
+
Un entier indiquant la valeur numérique de l'année, par exemple, 1995.
+
valeurMois
+
Paramètre optionnel qui représente un entier entre 0 et 11, représentant les mois de janvier à décembre.
+
valeurJour
+
Paramètre optionnel qui représente un entier entre 1 et 31 représentant le jour du mois. Si vous indiquez une valeurJour, vous devez aussi indiquer valeurMois.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 à minuit UTC et la date mise à jour.

+ +

Description

+ +

Si vous n'indiquez pas les paramètres valeurMois et valeurJour. Les valeurs renvoyées par les méthodes {{jsxref("Date.prototype.getMonth()", "getMonth()")}} et {{jsxref("Date.prototype.getDate()", "getDate()")}} seront utilisées.

+ +

Si un des paramètres que vous indiquez est en dehors des limites attendues, setFullYear() tentera de mettre à jour la date en conséquence. Pa exemple, si vous indiquez 15 pour valeurMois, l'année sera incrémenté de 1 (année + 1), et 3 sera utilisé pour le mois.

+ +

Exemples

+ +

Utiliser setFullYear()

+ +
var leGrandJour = new Date();
+leGrandJour.setFullYear(1997);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.40', 'Date.prototype.setFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setFullYear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/sethours/index.html b/files/fr/web/javascript/reference/global_objects/date/sethours/index.html deleted file mode 100644 index a2823e19d0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/sethours/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Date.prototype.setHours() -slug: Web/JavaScript/Reference/Global_Objects/Date/setHours -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setHours -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setHours ---- -
{{JSRef}}
- -

La méthode setHours() définit les heures pour une date donnée, selon l'heure locale, et renvoie le nombre de millièmes de secondes écoulées entre le 1er janvier 1970 00:00:00 UTC et la nouvelle date mise à jour.

- -
{{EmbedInteractiveExample("pages/js/date-sethours.html")}}
- -

Syntaxe

- -
dateObj.setHours(valeurHeures[, valeurMinutes[, valeurSecondes[, valeurMs]]])
-
- -

Versions antérieures à JavaScript 1.3

- -
dateObj.setHours(valeurHeures)
- -

Paramètres

- -
-
valeurHeures
-
Un entier normalement compris entre 0 et 23, représentant l'heure. Si la valeur est supérieure à 23, la valeur de l'heure sera incrémentée d'autant d'heures supplémentaires.
-
valeurMinutes
-
Paramètre optionnel, un entier normalement compris entre 0 et 59, représentant les minutes. Si la valeur est supérieure à 59, la valeur de l'heure sera incrémentée d'autant de minutes supplémentaires.
-
valeurSecondes
-
Paramètre optionnel, un entier normalement compris entre 0 et 59, représentant les secondes. Si vous indiquez le paramètre valeurSecondes, vous devez aussi renseigner valeurMinutes. Si la valeur est supérieure à 59, l'heure sera incrémentée d'autant de secondes supplémentaires.
-
valeurMs
-
Paramètre optionnel, un entier normalement compris entre 0 et 999, représentant les millièmes de secondes. Si vous indiquez valeurMs, vous devez aussi renseigner valeurMinutes et valeurSecondes. Si la valeur fournie est supérieure à 999, l'heure sera incrémentée d'autant de millisecondes supplémentaires.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 à minuit, UTC et la date mise à jour.

- -

Description

- -

Si vous ne renseignez pas valeurMinutes, valeurSecondes et valeurMs, les valeurs renvoyées par les méthodes {{jsxref("Date.getMinutes", "getMinutes()")}}, {{jsxref("Date.getSeconds", "getSeconds()")}}, et {{jsxref("Date.getMilliseconds", "getMilliseconds()")}} seront utilisées.

- -

Si un des paramètres que vous renseignez est en dehors des limites attendues, setHours() tentera de mettre à jour la date en conséquence. Par exemple, si vous utilisez 100 pour valeurSecondes, les minutes seront incrémentées de 1 (min + 1), et 40 sera utilisé pour les secondes.

- -

Exemples

- -

Utiliser setHours()

- -
var leGrandJour = new Date();
-leGrandJour.setHours(7);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0
{{SpecName('ES5.1', '#sec-15.9.5.34', 'Date.prototype.setHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.sethours', 'Date.prototype.setHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.sethours', 'Date.prototype.setHours')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setHours")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/sethours/index.md b/files/fr/web/javascript/reference/global_objects/date/sethours/index.md new file mode 100644 index 0000000000..a2823e19d0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/sethours/index.md @@ -0,0 +1,100 @@ +--- +title: Date.prototype.setHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/setHours +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setHours +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setHours +--- +
{{JSRef}}
+ +

La méthode setHours() définit les heures pour une date donnée, selon l'heure locale, et renvoie le nombre de millièmes de secondes écoulées entre le 1er janvier 1970 00:00:00 UTC et la nouvelle date mise à jour.

+ +
{{EmbedInteractiveExample("pages/js/date-sethours.html")}}
+ +

Syntaxe

+ +
dateObj.setHours(valeurHeures[, valeurMinutes[, valeurSecondes[, valeurMs]]])
+
+ +

Versions antérieures à JavaScript 1.3

+ +
dateObj.setHours(valeurHeures)
+ +

Paramètres

+ +
+
valeurHeures
+
Un entier normalement compris entre 0 et 23, représentant l'heure. Si la valeur est supérieure à 23, la valeur de l'heure sera incrémentée d'autant d'heures supplémentaires.
+
valeurMinutes
+
Paramètre optionnel, un entier normalement compris entre 0 et 59, représentant les minutes. Si la valeur est supérieure à 59, la valeur de l'heure sera incrémentée d'autant de minutes supplémentaires.
+
valeurSecondes
+
Paramètre optionnel, un entier normalement compris entre 0 et 59, représentant les secondes. Si vous indiquez le paramètre valeurSecondes, vous devez aussi renseigner valeurMinutes. Si la valeur est supérieure à 59, l'heure sera incrémentée d'autant de secondes supplémentaires.
+
valeurMs
+
Paramètre optionnel, un entier normalement compris entre 0 et 999, représentant les millièmes de secondes. Si vous indiquez valeurMs, vous devez aussi renseigner valeurMinutes et valeurSecondes. Si la valeur fournie est supérieure à 999, l'heure sera incrémentée d'autant de millisecondes supplémentaires.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 à minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si vous ne renseignez pas valeurMinutes, valeurSecondes et valeurMs, les valeurs renvoyées par les méthodes {{jsxref("Date.getMinutes", "getMinutes()")}}, {{jsxref("Date.getSeconds", "getSeconds()")}}, et {{jsxref("Date.getMilliseconds", "getMilliseconds()")}} seront utilisées.

+ +

Si un des paramètres que vous renseignez est en dehors des limites attendues, setHours() tentera de mettre à jour la date en conséquence. Par exemple, si vous utilisez 100 pour valeurSecondes, les minutes seront incrémentées de 1 (min + 1), et 40 sera utilisé pour les secondes.

+ +

Exemples

+ +

Utiliser setHours()

+ +
var leGrandJour = new Date();
+leGrandJour.setHours(7);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0
{{SpecName('ES5.1', '#sec-15.9.5.34', 'Date.prototype.setHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.sethours', 'Date.prototype.setHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.sethours', 'Date.prototype.setHours')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setHours")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.html deleted file mode 100644 index 472eb7e43e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Date.prototype.setMilliseconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setMilliseconds ---- -
{{JSRef}}
- -

La méthode setMilliseconds() définit les millièmes de secondes pour la date, selon l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-setmilliseconds.html")}}
- -

Syntaxe

- -
dateObj.setMilliseconds(valeurMs)
- -

Paramètres

- -
-
valeurMs
-
Un entier entre 0 et 999, représentant les millièmes de secondes.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si vous indiquez un nombre en dehors des limites attendues, la date sera mise à jour en conséquence. Par exemple, si vous indiquez 1005, le nombre des secondes sera incrémenté de 1, et 5 sera utilisé pour les millièmes de secondes.

- -

Exemples

- -

Utiliser setMilliseconds()

- -
var leGrandJour = new Date();
-leGrandJour.setMilliseconds(100);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.28', 'Date.prototype.setMilliseconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setmilliseconds', 'Date.prototype.setMilliseconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setmilliseconds', 'Date.prototype.setMilliseconds')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setMilliseconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.md new file mode 100644 index 0000000000..472eb7e43e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setmilliseconds/index.md @@ -0,0 +1,87 @@ +--- +title: Date.prototype.setMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setMilliseconds +--- +
{{JSRef}}
+ +

La méthode setMilliseconds() définit les millièmes de secondes pour la date, selon l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-setmilliseconds.html")}}
+ +

Syntaxe

+ +
dateObj.setMilliseconds(valeurMs)
+ +

Paramètres

+ +
+
valeurMs
+
Un entier entre 0 et 999, représentant les millièmes de secondes.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si vous indiquez un nombre en dehors des limites attendues, la date sera mise à jour en conséquence. Par exemple, si vous indiquez 1005, le nombre des secondes sera incrémenté de 1, et 5 sera utilisé pour les millièmes de secondes.

+ +

Exemples

+ +

Utiliser setMilliseconds()

+ +
var leGrandJour = new Date();
+leGrandJour.setMilliseconds(100);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.28', 'Date.prototype.setMilliseconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setmilliseconds', 'Date.prototype.setMilliseconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setmilliseconds', 'Date.prototype.setMilliseconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setMilliseconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setminutes/index.html b/files/fr/web/javascript/reference/global_objects/date/setminutes/index.html deleted file mode 100644 index dfed490684..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setminutes/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Date.prototype.setMinutes() -slug: Web/JavaScript/Reference/Global_Objects/Date/setMinutes -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMinutes -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setMinutes ---- -
{{JSRef}}
- -

La méthode setMinutes() définit les minutes pour la date donnée, selon l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-setminutes.html")}}
- -

Syntaxe

- -
dateObj.setMinutes(valeurMinutes[, valeurSecondes[, valeurMs]])
- -

Versions antérieures à JavaScript 1.3

- -
dateObj.setMinutes(valeurMinutes)
- -

Paramètres

- -
-
valeurMinutes
-
Un entier entre 0 et 59, représentant les minutes.
-
valeurSecondes
-
Paramètre optionnel, un entier entre 0 et 59, représentant les secondes. Si valeurSecondes est utilisé, il faut également utiliser valeurMinutes.
-
valeurMs
-
Paramètre optionel, un nombre entre 0 et 999, représentant les millièmes de secondes. Si valeurMs est utilisé, il faut également utiliser valeurMinutes et valeurSecondes.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si valeurSecondes et valeurMs ne sont pas indiquées, les valeurs renvoyées par les méthodes {{jsxref("Date.getSeconds", "getSeconds()")}} et {{jsxref("Date.getMilliseconds", "getMilliseconds()")}} seront utilisées.

- -

Si un paramètre est en dehors des limites attendues, setMinutes() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 100 pour valeurSecondes, les minutes (valeurMinutes) seront incrémentées de 1 (valeurMinutes + 1), et 40 sera utilisé pour les secondes.

- -

Exemples

- -

Utiliser setMinutes()

- -
var leGrandJour = new Date();
-leGrandJour.setMinutes(45);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.32', 'Date.prototype.setMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setminutes', 'Date.prototype.setMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setminutes', 'Date.prototype.setMinutes')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setMinutes")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setminutes/index.md b/files/fr/web/javascript/reference/global_objects/date/setminutes/index.md new file mode 100644 index 0000000000..dfed490684 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setminutes/index.md @@ -0,0 +1,97 @@ +--- +title: Date.prototype.setMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/setMinutes +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMinutes +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setMinutes +--- +
{{JSRef}}
+ +

La méthode setMinutes() définit les minutes pour la date donnée, selon l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-setminutes.html")}}
+ +

Syntaxe

+ +
dateObj.setMinutes(valeurMinutes[, valeurSecondes[, valeurMs]])
+ +

Versions antérieures à JavaScript 1.3

+ +
dateObj.setMinutes(valeurMinutes)
+ +

Paramètres

+ +
+
valeurMinutes
+
Un entier entre 0 et 59, représentant les minutes.
+
valeurSecondes
+
Paramètre optionnel, un entier entre 0 et 59, représentant les secondes. Si valeurSecondes est utilisé, il faut également utiliser valeurMinutes.
+
valeurMs
+
Paramètre optionel, un nombre entre 0 et 999, représentant les millièmes de secondes. Si valeurMs est utilisé, il faut également utiliser valeurMinutes et valeurSecondes.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si valeurSecondes et valeurMs ne sont pas indiquées, les valeurs renvoyées par les méthodes {{jsxref("Date.getSeconds", "getSeconds()")}} et {{jsxref("Date.getMilliseconds", "getMilliseconds()")}} seront utilisées.

+ +

Si un paramètre est en dehors des limites attendues, setMinutes() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 100 pour valeurSecondes, les minutes (valeurMinutes) seront incrémentées de 1 (valeurMinutes + 1), et 40 sera utilisé pour les secondes.

+ +

Exemples

+ +

Utiliser setMinutes()

+ +
var leGrandJour = new Date();
+leGrandJour.setMinutes(45);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.32', 'Date.prototype.setMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setminutes', 'Date.prototype.setMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setminutes', 'Date.prototype.setMinutes')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setMinutes")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setmonth/index.html b/files/fr/web/javascript/reference/global_objects/date/setmonth/index.html deleted file mode 100644 index 08e81440aa..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setmonth/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Date.prototype.setMonth() -slug: Web/JavaScript/Reference/Global_Objects/Date/setMonth -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMonth -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setMonth ---- -
{{JSRef}}
- -

La méthode setMonth() définit le mois de la date, selon l'heure locale et l'année courante de l'objet {{jsxref("Date")}}

- -
{{EmbedInteractiveExample("pages/js/date-setmonth.html")}}
- -

Syntaxe

- -
dateObj.setMonth(valeurMois[, valeurJour])
- -

Versions antérieures à JavaScript 1.3

- -
dateObj.setMonth(valeurMois)
- -

Paramètres

- -
-
valeurMois
-
Un entier entre 0 et 11 (représentant les mois de janvier à décembre).
-
valeurJour
-
Paramètre optionnel, un entier entre 1 et 31, représentant le jour du mois.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si le paramètre valeurJour n'est pas utilisé, la valeur renvoyée par la méthode {{jsxref("Date.getDate", "getDate()")}} sera utilisée.

- -

Si un paramètre que vous renseignez n'est pas dans les limites attendues, setMonth() tentera de mettre à jour la date en conséquence. Par exemple, si la valeur 15 est utilisée pour valeurMois, l'année sera incrémenté de 1 (année + 1), et 3 sera utilisé pour le mois.

- -
-

Note : Attention aux jours du mois lorsqu'on utilise setMonth(). En effet, setMonth() cherchera à aboutir à une date correcte et on peut avoir des surprises pour les transitions entre les mois. Ainsi, en 2016 (où février a eu 29 jours), on aura le cas suivant :

- -
var finDuMois = new Date(2016, 7, 31); // le 31 août 2016
-finDuMois.setMonth(1);
-
-console.log(finDuMois.toLocaleString()); // 02/03/2016 à 00:00:00
-
- -

Exemples

- -

Utiliser setMonth()

- -
var leGrandJour = new Date();
-leGrandJour.setMonth(6);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.38', 'Date.prototype.setMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setmonth', 'Date.prototype.setMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setmonth', 'Date.prototype.setMonth')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setMonth")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setmonth/index.md b/files/fr/web/javascript/reference/global_objects/date/setmonth/index.md new file mode 100644 index 0000000000..08e81440aa --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setmonth/index.md @@ -0,0 +1,104 @@ +--- +title: Date.prototype.setMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/setMonth +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMonth +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setMonth +--- +
{{JSRef}}
+ +

La méthode setMonth() définit le mois de la date, selon l'heure locale et l'année courante de l'objet {{jsxref("Date")}}

+ +
{{EmbedInteractiveExample("pages/js/date-setmonth.html")}}
+ +

Syntaxe

+ +
dateObj.setMonth(valeurMois[, valeurJour])
+ +

Versions antérieures à JavaScript 1.3

+ +
dateObj.setMonth(valeurMois)
+ +

Paramètres

+ +
+
valeurMois
+
Un entier entre 0 et 11 (représentant les mois de janvier à décembre).
+
valeurJour
+
Paramètre optionnel, un entier entre 1 et 31, représentant le jour du mois.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si le paramètre valeurJour n'est pas utilisé, la valeur renvoyée par la méthode {{jsxref("Date.getDate", "getDate()")}} sera utilisée.

+ +

Si un paramètre que vous renseignez n'est pas dans les limites attendues, setMonth() tentera de mettre à jour la date en conséquence. Par exemple, si la valeur 15 est utilisée pour valeurMois, l'année sera incrémenté de 1 (année + 1), et 3 sera utilisé pour le mois.

+ +
+

Note : Attention aux jours du mois lorsqu'on utilise setMonth(). En effet, setMonth() cherchera à aboutir à une date correcte et on peut avoir des surprises pour les transitions entre les mois. Ainsi, en 2016 (où février a eu 29 jours), on aura le cas suivant :

+ +
var finDuMois = new Date(2016, 7, 31); // le 31 août 2016
+finDuMois.setMonth(1);
+
+console.log(finDuMois.toLocaleString()); // 02/03/2016 à 00:00:00
+
+ +

Exemples

+ +

Utiliser setMonth()

+ +
var leGrandJour = new Date();
+leGrandJour.setMonth(6);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.38', 'Date.prototype.setMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setmonth', 'Date.prototype.setMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setmonth', 'Date.prototype.setMonth')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setMonth")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/setseconds/index.html deleted file mode 100644 index b979885ed8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setseconds/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Date.prototype.setSeconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/setSeconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setSeconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setSeconds ---- -
{{JSRef}}
- -

La méthode setSeconds() définit les secondes pour la date, selon l'heure locale.

- -
{{EmbedInteractiveExample("pages/js/date-setseconds.html")}}
- -

Syntaxe

- -
dateObj.setSeconds(valeurSecondes[, valeurMs])
- -

Versions antérieures à JavaScript 1.3

- -
dateObj.setSeconds(valeurSecondes)
- -

Paramètres

- -
-
valeurSecondes
-
Un entier entre 0 et 59.
-
valeurMs
-
Paramètre optionnel, un nombre entre 0 et 999, représentant les millièmes de secondes.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si le paramètre valeurMs n'est pas utilisé, la valeur renvoyée par la méthode {{jsxref("Date.getMilliseconds", "getMilliseconds()")}} sera utilisée.

- -

Si un paramètre utilisé est en dehors des limites attendues, setSeconds() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 100 pour valeurSecondes, les minutes de la date seront incrémentées de 1, et 40 sera utilisé pour les secondes.

- -

Exemples

- -

Utiliser setSeconds()

- -
var leGrandJour = new Date();
-leGrandJour.setSeconds(30)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.30', 'Date.prototype.setSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setseconds', 'Date.prototype.setSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setseconds', 'Date.prototype.setSeconds')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setSeconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/setseconds/index.md new file mode 100644 index 0000000000..b979885ed8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setseconds/index.md @@ -0,0 +1,95 @@ +--- +title: Date.prototype.setSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setSeconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setSeconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setSeconds +--- +
{{JSRef}}
+ +

La méthode setSeconds() définit les secondes pour la date, selon l'heure locale.

+ +
{{EmbedInteractiveExample("pages/js/date-setseconds.html")}}
+ +

Syntaxe

+ +
dateObj.setSeconds(valeurSecondes[, valeurMs])
+ +

Versions antérieures à JavaScript 1.3

+ +
dateObj.setSeconds(valeurSecondes)
+ +

Paramètres

+ +
+
valeurSecondes
+
Un entier entre 0 et 59.
+
valeurMs
+
Paramètre optionnel, un nombre entre 0 et 999, représentant les millièmes de secondes.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si le paramètre valeurMs n'est pas utilisé, la valeur renvoyée par la méthode {{jsxref("Date.getMilliseconds", "getMilliseconds()")}} sera utilisée.

+ +

Si un paramètre utilisé est en dehors des limites attendues, setSeconds() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 100 pour valeurSecondes, les minutes de la date seront incrémentées de 1, et 40 sera utilisé pour les secondes.

+ +

Exemples

+ +

Utiliser setSeconds()

+ +
var leGrandJour = new Date();
+leGrandJour.setSeconds(30)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.30', 'Date.prototype.setSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setseconds', 'Date.prototype.setSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setseconds', 'Date.prototype.setSeconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setSeconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/settime/index.html b/files/fr/web/javascript/reference/global_objects/date/settime/index.html deleted file mode 100644 index 4318c595b4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/settime/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Date.prototype.setTime() -slug: Web/JavaScript/Reference/Global_Objects/Date/setTime -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setTime -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setTime ---- -
{{JSRef}}
- -

La méthode setTime() met l'objet {{jsxref("Date")}} à jour par rapport au nombre de millisecondes depuis le 1 janvier 1970, 00:00:00 UTC.

- -
{{EmbedInteractiveExample("pages/js/date-settime.html")}}
- -

Syntaxe

- -
dateObj.setTime(valeurTemps)
- -

Paramètres

- -
-
valeurTemps
-
Un entier représentant le nombre de millisecondes depuis le 1 janvier 1970, 00:00:00 UTC.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 à minuit, UTC et la date mise à jour (ce qui correspond à la valeur de l'argument).

- -

Description

- -

La méthode setTime() est utilisée afin d'assigner une date à un autre objet {{jsxref("Date")}}.

- -

Exemples

- -

Utiliser setTime()

- -
var leGrandJour = new Date("July 1, 1999");
-var pareilQueGrandJour = new Date();
-pareilQueGrandJour.setTime(leGrandJour.getTime());
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.27', 'Date.prototype.setTime')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.settime', 'Date.prototype.setTime')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.settime', 'Date.prototype.setTime')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setTime")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/settime/index.md b/files/fr/web/javascript/reference/global_objects/date/settime/index.md new file mode 100644 index 0000000000..4318c595b4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/settime/index.md @@ -0,0 +1,88 @@ +--- +title: Date.prototype.setTime() +slug: Web/JavaScript/Reference/Global_Objects/Date/setTime +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setTime +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setTime +--- +
{{JSRef}}
+ +

La méthode setTime() met l'objet {{jsxref("Date")}} à jour par rapport au nombre de millisecondes depuis le 1 janvier 1970, 00:00:00 UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-settime.html")}}
+ +

Syntaxe

+ +
dateObj.setTime(valeurTemps)
+ +

Paramètres

+ +
+
valeurTemps
+
Un entier représentant le nombre de millisecondes depuis le 1 janvier 1970, 00:00:00 UTC.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 à minuit, UTC et la date mise à jour (ce qui correspond à la valeur de l'argument).

+ +

Description

+ +

La méthode setTime() est utilisée afin d'assigner une date à un autre objet {{jsxref("Date")}}.

+ +

Exemples

+ +

Utiliser setTime()

+ +
var leGrandJour = new Date("July 1, 1999");
+var pareilQueGrandJour = new Date();
+pareilQueGrandJour.setTime(leGrandJour.getTime());
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.27', 'Date.prototype.setTime')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.settime', 'Date.prototype.setTime')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.settime', 'Date.prototype.setTime')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setTime")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcdate/index.html b/files/fr/web/javascript/reference/global_objects/date/setutcdate/index.html deleted file mode 100644 index 98de0005b5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setutcdate/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Date.prototype.setUTCDate() -slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCDate ---- -
{{JSRef}}
- -

La méthode setUTCDate() définit le jour du mois pour la date, selon UTC.

- -
{{EmbedInteractiveExample("pages/js/date-setutcdate.html")}}
- -

Syntaxe

- -
dateObj.setUTCDate(valeurJour)
- -

Paramètres

- -
-
valeurJour
-
Un entier de 1 à 31, représentant un jour dans le mois.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si le paramètre renseigné est en dehors des limites attendues, setUTCDate() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 40 pour valeurJour, et que le mois de la date est juin, le jour sera changé en 10 et le mois passera à juillet.

- -

Exemples

- -

Utiliser setUTCDate()

- -
var leGrandJour = new Date();
-leGrandJour.setUTCDate(20);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.37', 'Date.prototype.setUTCDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcdate', 'Date.prototype.setUTCDate')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcdate', 'Date.prototype.setUTCDate')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setUTCDate")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcdate/index.md b/files/fr/web/javascript/reference/global_objects/date/setutcdate/index.md new file mode 100644 index 0000000000..98de0005b5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setutcdate/index.md @@ -0,0 +1,87 @@ +--- +title: Date.prototype.setUTCDate() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCDate +--- +
{{JSRef}}
+ +

La méthode setUTCDate() définit le jour du mois pour la date, selon UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-setutcdate.html")}}
+ +

Syntaxe

+ +
dateObj.setUTCDate(valeurJour)
+ +

Paramètres

+ +
+
valeurJour
+
Un entier de 1 à 31, représentant un jour dans le mois.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si le paramètre renseigné est en dehors des limites attendues, setUTCDate() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 40 pour valeurJour, et que le mois de la date est juin, le jour sera changé en 10 et le mois passera à juillet.

+ +

Exemples

+ +

Utiliser setUTCDate()

+ +
var leGrandJour = new Date();
+leGrandJour.setUTCDate(20);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.37', 'Date.prototype.setUTCDate')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcdate', 'Date.prototype.setUTCDate')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcdate', 'Date.prototype.setUTCDate')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setUTCDate")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.html b/files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.html deleted file mode 100644 index beeedfb099..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Date.prototype.setUTCFullYear() -slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCFullYear ---- -
{{JSRef}}
- -

La méthode setUTCFullYear() définit l'année complête pour la date, selon UTC.

- -
{{EmbedInteractiveExample("pages/js/date-setutcfullyear.html")}}
- -

Syntaxe

- -
dateObj.setUTCFullYear(valeurAnnée[, valeurMois[, valeurJour]])
- -

Paramètres

- -
-
valeurAnnée
-
Un entier indiquant la valeur numérique d'une année, par exemple, 1995.
-
valeurMois
-
Paramètre optionnel, un entier entre 0 et 11 représentant les mois de janvier à décembre.
-
valeurJour
-
Paramètre optionnel, un entier entre 1 et 31 représentant le jour du mois. Si le paramètre valeurJour est utilisé, il est également nécessaire d'indiquer valeurMois.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si les paramètres valeurMois et valeurJour ne sont pas utilisés, les valeurs renvoyées par les méthodes {{jsxref("Objets_globaux/Date/getUTCMonth", "getUTCMonth()")}} et {{jsxref("Objets_globaux/Date/getUTCDate", "getUTCDate()")}} seront utilisées.

- -

Si un des paramètres indiqué est en dehors des limites attendues, setUTCFullYear() tentera de mettre à jour la date en conséquence. Ainsi si on utilise la valeur 15 pour valeurMois, l'année sera incrémentée de 1 (année + 1), et 3 sera utilisé pour le mois.

- -

Exemples

- -

Utiliser setUTCFullYear()

- -
var leGrandJour = new Date();
-leGrandJour.setUTCFullYear(1997);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.41', 'Date.prototype.setUTCFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcfullyear', 'Date.prototype.setUTCFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcfullyear', 'Date.prototype.setUTCFullYear')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setUTCFullYear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.md b/files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.md new file mode 100644 index 0000000000..beeedfb099 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setutcfullyear/index.md @@ -0,0 +1,93 @@ +--- +title: Date.prototype.setUTCFullYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCFullYear +--- +
{{JSRef}}
+ +

La méthode setUTCFullYear() définit l'année complête pour la date, selon UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-setutcfullyear.html")}}
+ +

Syntaxe

+ +
dateObj.setUTCFullYear(valeurAnnée[, valeurMois[, valeurJour]])
+ +

Paramètres

+ +
+
valeurAnnée
+
Un entier indiquant la valeur numérique d'une année, par exemple, 1995.
+
valeurMois
+
Paramètre optionnel, un entier entre 0 et 11 représentant les mois de janvier à décembre.
+
valeurJour
+
Paramètre optionnel, un entier entre 1 et 31 représentant le jour du mois. Si le paramètre valeurJour est utilisé, il est également nécessaire d'indiquer valeurMois.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si les paramètres valeurMois et valeurJour ne sont pas utilisés, les valeurs renvoyées par les méthodes {{jsxref("Objets_globaux/Date/getUTCMonth", "getUTCMonth()")}} et {{jsxref("Objets_globaux/Date/getUTCDate", "getUTCDate()")}} seront utilisées.

+ +

Si un des paramètres indiqué est en dehors des limites attendues, setUTCFullYear() tentera de mettre à jour la date en conséquence. Ainsi si on utilise la valeur 15 pour valeurMois, l'année sera incrémentée de 1 (année + 1), et 3 sera utilisé pour le mois.

+ +

Exemples

+ +

Utiliser setUTCFullYear()

+ +
var leGrandJour = new Date();
+leGrandJour.setUTCFullYear(1997);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.41', 'Date.prototype.setUTCFullYear')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcfullyear', 'Date.prototype.setUTCFullYear')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcfullyear', 'Date.prototype.setUTCFullYear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setUTCFullYear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setutchours/index.html b/files/fr/web/javascript/reference/global_objects/date/setutchours/index.html deleted file mode 100644 index 038f330691..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setutchours/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Date.prototype.setUTCHours() -slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCHours ---- -
{{JSRef}}
- -

La méthode setUTCHours() définit les heures pour la date, selon UTC, et renvoie le nombre de millièmes de secondes écoulées entre le 1er janvier 1970 00:00:00 UTC et cette nouvelle date.

- -
{{EmbedInteractiveExample("pages/js/date-setutchours.html")}}
- -

Syntaxe

- -
dateObj.setUTCHours(valeurHeures[, valeurMinutes[, valeurSecondes[, valeurMs]]])
- -

Paramètres

- -
-
valeurHeures
-
Un entier entre 0 et 23, représentant l'heure.
-
valeurMinutes
-
Paramètre optionnel, un entier entre 0 et 59, représentant les minutes.
-
valeurSecondes
-
Paramètre optionnel, un entier entre 0 et 59, représentant les secondes. Si le paramètre valeurSecondes est utilisé, le paramètre valeurMinutes devra également être renseigné.
-
valeurMs
-
Paramètre optionnel, un entier entre 0 et 999, représentant les millièmes de secondes. Si le paramètre valeurMs est utilisé, les paramètres valeurMinutes et valeurSecondes devront également être renseignés.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si les paramètres valeurMinutes, valeurSecondes et valeurMs ne sont pas renseignés, les valeurs renvoyées par les méthodes {{jsxref("Date.prototype.getUTCMinutes", "getUTCMinutes()")}}, {{jsxref("Date.prototype.getUTCSeconds", "getUTCSeconds()")}}, et {{jsxref("Date.prototype.getUTCMilliseconds", "getUTCMilliseconds()")}} seront utilisées.

- -

Si un des paramètres renseignés est en dehors des limites attendues, setUTCHours() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 100 pour valeurSecondes, les minutes seront incrémentées de 1 (min + 1), et 40 sera utilisé pour les secondes.

- -

Exemples

- -

Utiliser setUTCHours()

- -
var leGrandJour = new Date();
-leGrandJour.setUTCHours(8);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.35', 'Date.prototype.setUTCHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutchours', 'Date.prototype.setUTCHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutchours', 'Date.prototype.setUTCHours')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setUTCHours")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setutchours/index.md b/files/fr/web/javascript/reference/global_objects/date/setutchours/index.md new file mode 100644 index 0000000000..038f330691 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setutchours/index.md @@ -0,0 +1,95 @@ +--- +title: Date.prototype.setUTCHours() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCHours +--- +
{{JSRef}}
+ +

La méthode setUTCHours() définit les heures pour la date, selon UTC, et renvoie le nombre de millièmes de secondes écoulées entre le 1er janvier 1970 00:00:00 UTC et cette nouvelle date.

+ +
{{EmbedInteractiveExample("pages/js/date-setutchours.html")}}
+ +

Syntaxe

+ +
dateObj.setUTCHours(valeurHeures[, valeurMinutes[, valeurSecondes[, valeurMs]]])
+ +

Paramètres

+ +
+
valeurHeures
+
Un entier entre 0 et 23, représentant l'heure.
+
valeurMinutes
+
Paramètre optionnel, un entier entre 0 et 59, représentant les minutes.
+
valeurSecondes
+
Paramètre optionnel, un entier entre 0 et 59, représentant les secondes. Si le paramètre valeurSecondes est utilisé, le paramètre valeurMinutes devra également être renseigné.
+
valeurMs
+
Paramètre optionnel, un entier entre 0 et 999, représentant les millièmes de secondes. Si le paramètre valeurMs est utilisé, les paramètres valeurMinutes et valeurSecondes devront également être renseignés.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si les paramètres valeurMinutes, valeurSecondes et valeurMs ne sont pas renseignés, les valeurs renvoyées par les méthodes {{jsxref("Date.prototype.getUTCMinutes", "getUTCMinutes()")}}, {{jsxref("Date.prototype.getUTCSeconds", "getUTCSeconds()")}}, et {{jsxref("Date.prototype.getUTCMilliseconds", "getUTCMilliseconds()")}} seront utilisées.

+ +

Si un des paramètres renseignés est en dehors des limites attendues, setUTCHours() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise la valeur 100 pour valeurSecondes, les minutes seront incrémentées de 1 (min + 1), et 40 sera utilisé pour les secondes.

+ +

Exemples

+ +

Utiliser setUTCHours()

+ +
var leGrandJour = new Date();
+leGrandJour.setUTCHours(8);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.35', 'Date.prototype.setUTCHours')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutchours', 'Date.prototype.setUTCHours')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutchours', 'Date.prototype.setUTCHours')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setUTCHours")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html deleted file mode 100644 index 4e6b3e26f1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Date.prototype.setUTCMilliseconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCMilliseconds ---- -
{{JSRef}}
- -

La méthode setUTCMilliseconds() définit les millièmes de secondes pour la date, selon UTC.

- -
{{EmbedInteractiveExample("pages/js/date-setutcmilliseconds.html")}}
- -

Syntaxe

- -
dateObj.setUTCMilliseconds(valeurMs) 
- -

Paramètres

- -
-
valeurMs
-
Un entier entre 0 et 999, représentant les millièmes de secondes.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si le paramètre indiqué est en dehors des limites attendues, la date sera mise à jour en conséquence. Par exemple, si on utilise la valeur 1005, le nombre des secondes sera incrémenté de 1, et 5 sera utilisé pour les millièmes de secondes.

- -

Exemples

- -

Utiliser setUTCMilliseconds()

- -
var leGrandJour = new Date();
-leGrandJour.setUTCMilliseconds(500);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.29', 'Date.prototype.setUTCMilliseconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcmilliseconds', 'Date.prototype.setUTCMilliseconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcmilliseconds', 'Date.prototype.setUTCMilliseconds')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setUTCMilliseconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.md new file mode 100644 index 0000000000..4e6b3e26f1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setutcmilliseconds/index.md @@ -0,0 +1,87 @@ +--- +title: Date.prototype.setUTCMilliseconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCMilliseconds +--- +
{{JSRef}}
+ +

La méthode setUTCMilliseconds() définit les millièmes de secondes pour la date, selon UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-setutcmilliseconds.html")}}
+ +

Syntaxe

+ +
dateObj.setUTCMilliseconds(valeurMs) 
+ +

Paramètres

+ +
+
valeurMs
+
Un entier entre 0 et 999, représentant les millièmes de secondes.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si le paramètre indiqué est en dehors des limites attendues, la date sera mise à jour en conséquence. Par exemple, si on utilise la valeur 1005, le nombre des secondes sera incrémenté de 1, et 5 sera utilisé pour les millièmes de secondes.

+ +

Exemples

+ +

Utiliser setUTCMilliseconds()

+ +
var leGrandJour = new Date();
+leGrandJour.setUTCMilliseconds(500);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.29', 'Date.prototype.setUTCMilliseconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcmilliseconds', 'Date.prototype.setUTCMilliseconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcmilliseconds', 'Date.prototype.setUTCMilliseconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setUTCMilliseconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.html b/files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.html deleted file mode 100644 index 5e57b4e761..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Date.prototype.setUTCMinutes() -slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCMinutes ---- -
{{JSRef}}
- -

La méthode setUTCMinutes() définit les minutes pour la date, selon UTC.

- -
{{EmbedInteractiveExample("pages/js/date-setutcminutes.html")}}
- -

Syntaxe

- -
dateObj.setUTCMinutes(valeurMinutes[, valeurSecondes[, valeurMs]]) 
- -

Paramètres

- -
-
valeurMinutes
-
Un entier entre 0 et 59, représentant les minutes.
-
valeurSecondes
-
Paramètre optionnel, un entier entre 0 et 59, représentant les secondes. Si ce paramètre est utilisé, il faut également utiliser valeurMinutes.
-
valeurMs
-
Paramètre optionnel, un nombre entre 0 et 999, représentant les millièmes de secondes. Si ce paramètre est utilisé, il faut aussi indiquer valeurMinutes et valeurSecondes.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si les paramètres valeurSecondes et valeurMs ne sont pas utilisés, les valeurs renvoyées par les méthodes {{jsxref("Date.prototype.getUTCSeconds", "getUTCSeconds()")}} et {{jsxref("Date.prototype.getUTCMilliseconds", "getUTCMilliseconds()")}} seront utilisées.

- -

Si un paramètre est en dehors des limites attendues, setUTCMinutes() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise 100 pour valeurSecondes, les minutes (valeurMinutes) seront incrémentées de 1 (valeurMinutes + 1), et 40 sera utilisé pour les secondes.

- -

Exemples

- -

Utiliser setUTCMinutes()

- -
var leGrandJour = new Date();
-leGrandJour.setUTCMinutes(43);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.33', 'Date.prototype.setUTCMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcminutes', 'Date.prototype.setUTCMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcminutes', 'Date.prototype.setUTCMinutes')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setUTCMinutes")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.md b/files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.md new file mode 100644 index 0000000000..5e57b4e761 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setutcminutes/index.md @@ -0,0 +1,93 @@ +--- +title: Date.prototype.setUTCMinutes() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCMinutes +--- +
{{JSRef}}
+ +

La méthode setUTCMinutes() définit les minutes pour la date, selon UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-setutcminutes.html")}}
+ +

Syntaxe

+ +
dateObj.setUTCMinutes(valeurMinutes[, valeurSecondes[, valeurMs]]) 
+ +

Paramètres

+ +
+
valeurMinutes
+
Un entier entre 0 et 59, représentant les minutes.
+
valeurSecondes
+
Paramètre optionnel, un entier entre 0 et 59, représentant les secondes. Si ce paramètre est utilisé, il faut également utiliser valeurMinutes.
+
valeurMs
+
Paramètre optionnel, un nombre entre 0 et 999, représentant les millièmes de secondes. Si ce paramètre est utilisé, il faut aussi indiquer valeurMinutes et valeurSecondes.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si les paramètres valeurSecondes et valeurMs ne sont pas utilisés, les valeurs renvoyées par les méthodes {{jsxref("Date.prototype.getUTCSeconds", "getUTCSeconds()")}} et {{jsxref("Date.prototype.getUTCMilliseconds", "getUTCMilliseconds()")}} seront utilisées.

+ +

Si un paramètre est en dehors des limites attendues, setUTCMinutes() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise 100 pour valeurSecondes, les minutes (valeurMinutes) seront incrémentées de 1 (valeurMinutes + 1), et 40 sera utilisé pour les secondes.

+ +

Exemples

+ +

Utiliser setUTCMinutes()

+ +
var leGrandJour = new Date();
+leGrandJour.setUTCMinutes(43);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.33', 'Date.prototype.setUTCMinutes')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcminutes', 'Date.prototype.setUTCMinutes')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcminutes', 'Date.prototype.setUTCMinutes')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setUTCMinutes")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.html b/files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.html deleted file mode 100644 index 7fff322429..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Date.prototype.setUTCMonth() -slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCMonth ---- -
{{JSRef}}
- -

La méthode setUTCMonth() définit le mois de la date, selon UTC.

- -
{{EmbedInteractiveExample("pages/js/date-setutcmonth.html")}}
- -

Syntaxe

- -
dateObj.setUTCMonth(valeurMois[, valeurJour]) 
- -

Paramètres

- -
-
valeurMois
-
Un entier entre 0 et 11, représentant les mois de Janvier à Décembre.
-
valeurJour
-
Paramètre optionnel, un entier entre 1 et 31, représentant le jour du mois.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si le paramètre valeurJour n'est pas utilisé, la valeur renvoyée par la méthode {{jsxref("Date.prototype.getUTCDate", "getUTCDate()")}} sera utilisée.

- -

Si un paramètre renseigné n'est pas dans l'intervalle attendues, setUTCMonth() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise 15 pour valeurMois, l'année sera incrémentée de 1 (année + 1), et 3 sera utilisé pour le mois.

- -

Exemples

- -

Utiliser setUTCMonth()

- -
var leGrandJour = new Date();
-leGrandJour.setUTCMonth(11);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.39', 'Date.prototype.setUTCMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcmonth', 'Date.prototype.setUTCMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcmonth', 'Date.prototype.setUTCMonth')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setUTCMonth")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.md b/files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.md new file mode 100644 index 0000000000..7fff322429 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setutcmonth/index.md @@ -0,0 +1,91 @@ +--- +title: Date.prototype.setUTCMonth() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCMonth +--- +
{{JSRef}}
+ +

La méthode setUTCMonth() définit le mois de la date, selon UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-setutcmonth.html")}}
+ +

Syntaxe

+ +
dateObj.setUTCMonth(valeurMois[, valeurJour]) 
+ +

Paramètres

+ +
+
valeurMois
+
Un entier entre 0 et 11, représentant les mois de Janvier à Décembre.
+
valeurJour
+
Paramètre optionnel, un entier entre 1 et 31, représentant le jour du mois.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si le paramètre valeurJour n'est pas utilisé, la valeur renvoyée par la méthode {{jsxref("Date.prototype.getUTCDate", "getUTCDate()")}} sera utilisée.

+ +

Si un paramètre renseigné n'est pas dans l'intervalle attendues, setUTCMonth() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise 15 pour valeurMois, l'année sera incrémentée de 1 (année + 1), et 3 sera utilisé pour le mois.

+ +

Exemples

+ +

Utiliser setUTCMonth()

+ +
var leGrandJour = new Date();
+leGrandJour.setUTCMonth(11);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.39', 'Date.prototype.setUTCMonth')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcmonth', 'Date.prototype.setUTCMonth')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcmonth', 'Date.prototype.setUTCMonth')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setUTCMonth")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.html b/files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.html deleted file mode 100644 index 38bbc89cad..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Date.prototype.setUTCSeconds() -slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCSeconds ---- -
{{JSRef}}
- -

La méthode setUTCSeconds() définit les secondes pour la date, selon UTC.

- -
{{EmbedInteractiveExample("pages/js/date-setutcseconds.html")}}
- -

Syntaxe

- -
dateObj.setUTCSeconds(valeurSecondes[, valeurMs]) 
- -

Paramètres

- -
-
valeurSecondes
-
Un entier entre 0 et 59.
-
valeurMs
-
Paramètre optionnel, un nombre entre 0 et 999, représentant les millièmes de secondes.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si le paramètre valeurMs n'est pas utilisée, la valeur renvoyée par la méthode {{jsxref("Date.prototype.getUTCMilliseconds", "getUTCMilliseconds()")}} sera utilisée.

- -

Si un paramètre renseigné est en dehors de l'intervalle attendu, setUTCSeconds() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise 100 pour valeurSecondes, les minutes de la date seront incrémentées de 1, et 40 sera utilisé pour les secondes.

- -

Exemples

- -

Utiliser setUTCSeconds()

- -
var leGrandJour = new Date();
-leGrandJour.setUTCSeconds(20);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.31', 'Date.prototype.setUTCSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcseconds', 'Date.prototype.setUTCSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcseconds', 'Date.prototype.setUTCSeconds')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setUTCSeconds")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.md b/files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.md new file mode 100644 index 0000000000..38bbc89cad --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setutcseconds/index.md @@ -0,0 +1,91 @@ +--- +title: Date.prototype.setUTCSeconds() +slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setUTCSeconds +--- +
{{JSRef}}
+ +

La méthode setUTCSeconds() définit les secondes pour la date, selon UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-setutcseconds.html")}}
+ +

Syntaxe

+ +
dateObj.setUTCSeconds(valeurSecondes[, valeurMs]) 
+ +

Paramètres

+ +
+
valeurSecondes
+
Un entier entre 0 et 59.
+
valeurMs
+
Paramètre optionnel, un nombre entre 0 et 999, représentant les millièmes de secondes.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si le paramètre valeurMs n'est pas utilisée, la valeur renvoyée par la méthode {{jsxref("Date.prototype.getUTCMilliseconds", "getUTCMilliseconds()")}} sera utilisée.

+ +

Si un paramètre renseigné est en dehors de l'intervalle attendu, setUTCSeconds() tentera de mettre à jour la date en conséquence. Par exemple, si on utilise 100 pour valeurSecondes, les minutes de la date seront incrémentées de 1, et 40 sera utilisé pour les secondes.

+ +

Exemples

+ +

Utiliser setUTCSeconds()

+ +
var leGrandJour = new Date();
+leGrandJour.setUTCSeconds(20);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.9.5.31', 'Date.prototype.setUTCSeconds')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.setutcseconds', 'Date.prototype.setUTCSeconds')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.setutcseconds', 'Date.prototype.setUTCSeconds')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setUTCSeconds")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/setyear/index.html b/files/fr/web/javascript/reference/global_objects/date/setyear/index.html deleted file mode 100644 index 05e61e6700..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/setyear/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Date.prototype.setYear() -slug: Web/JavaScript/Reference/Global_Objects/Date/setYear -tags: - - Date - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/setYear -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setYear ---- -
{{JSRef}} {{deprecated_header}}
- -

La méthode setYear() définit l'année pour pour la date, selon l'heure locale. setYear() ne définissant pas des années complêtes ( « bug de l'an 2000 » ), elle n'est plus utilisée et a été remplacée par la méthode {{jsxref("Date.prototype.setFullYear", "setFullYear")}}.

- -

Syntaxe

- -
dateObj.setYear(valeurAnnée)
- -

Paramètres

- -
-
valeurAnnée
-
Un entier.
-
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

- -

Description

- -

Si valeurAnnée est un nombre entre 0 et 99 (inclus), alors l'année de dateObj sera définie à 1900 + valeurAnnée. Sinon, l'année de dateObj sera définie à valeurAnnée.

- -

Exemples

- -

Utiliser setYear()

- -

Les deux premières instructions définissent l'année 1996. La troisième définit l'année 2000.

- -
var leGrandJour = new Date();
-
-leGrandJour.setYear(96);
-leGrandJour.setYear(1996);
-leGrandJour.setYear(2000);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-B.2.5', 'Date.prototype.setYear')}}{{Spec2('ES5.1')}}Définie dans l'annexe informative sur la compatibilité.
{{SpecName('ES6', '#sec-date.prototype.setyear', 'Date.prototype.setYear')}}{{Spec2('ES6')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-date.prototype.setyear', 'Date.prototype.setYear')}}{{Spec2('ESDraft')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.setYear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/setyear/index.md b/files/fr/web/javascript/reference/global_objects/date/setyear/index.md new file mode 100644 index 0000000000..05e61e6700 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/setyear/index.md @@ -0,0 +1,93 @@ +--- +title: Date.prototype.setYear() +slug: Web/JavaScript/Reference/Global_Objects/Date/setYear +tags: + - Date + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/setYear +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/setYear +--- +
{{JSRef}} {{deprecated_header}}
+ +

La méthode setYear() définit l'année pour pour la date, selon l'heure locale. setYear() ne définissant pas des années complêtes ( « bug de l'an 2000 » ), elle n'est plus utilisée et a été remplacée par la méthode {{jsxref("Date.prototype.setFullYear", "setFullYear")}}.

+ +

Syntaxe

+ +
dateObj.setYear(valeurAnnée)
+ +

Paramètres

+ +
+
valeurAnnée
+
Un entier.
+
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970 minuit, UTC et la date mise à jour.

+ +

Description

+ +

Si valeurAnnée est un nombre entre 0 et 99 (inclus), alors l'année de dateObj sera définie à 1900 + valeurAnnée. Sinon, l'année de dateObj sera définie à valeurAnnée.

+ +

Exemples

+ +

Utiliser setYear()

+ +

Les deux premières instructions définissent l'année 1996. La troisième définit l'année 2000.

+ +
var leGrandJour = new Date();
+
+leGrandJour.setYear(96);
+leGrandJour.setYear(1996);
+leGrandJour.setYear(2000);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-B.2.5', 'Date.prototype.setYear')}}{{Spec2('ES5.1')}}Définie dans l'annexe informative sur la compatibilité.
{{SpecName('ES6', '#sec-date.prototype.setyear', 'Date.prototype.setYear')}}{{Spec2('ES6')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-date.prototype.setyear', 'Date.prototype.setYear')}}{{Spec2('ESDraft')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.setYear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/todatestring/index.html b/files/fr/web/javascript/reference/global_objects/date/todatestring/index.html deleted file mode 100644 index 0fa5df67f0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/todatestring/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Date.prototype.toDateString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toDateString -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toDateString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toDateString ---- -
{{JSRef}}
- -

La méthode toDateString() renvoie la date contenue dans un objet {{jsxref("Date")}} sous la forme d'une chaîne de caractères lisible par un humain, en anglais américain et au format suivant :

- -
    -
  1. Les trois premières lettre indiquent le jour
  2. -
  3. Les trois lettres suivantes indiquent le mois
  4. -
  5. Les deux chiffres suivants indiquent le jour du mois (et sont complétés avec un 0 devant si besoin)
  6. -
  7. Les quatre chiffres restants indiquent l'année (si besoin complétées avec des 0 comme préfixe)
  8. -
- -
{{EmbedInteractiveExample("pages/js/date-todatestring.html")}}
- -

Syntaxe

- -
dateObj.toDateString()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente la date indiquée, dans un format anglais américain.

- -

Description

- -

Les instances de {{jsxref("Date")}} représentent un point précis dans le temps. Appeler {{jsxref("Date.prototype.toString", "toString")}} retournera la date formatée sous une forme lisible par un humain, en anglais américain. Pour le moteur JavaScript SpiderMonkey, ceci consiste en : la partie « date » (jour, mois et année) suivie de la partie « heure » (heures, minutes, secondes et fuseau horaire). Il est parfois préférable d'obtenir uniquement la partie « date » ; ceci est possible grâce à la méthode toDateString().

- -

La méthode toDateString() est particulièrement utile car, pour les moteurs implémentant fidèlement ECMA-262, il peut y avoir certaines différences dans la chaîne de caractères produite par toString() sur les objets Date. Le format dépend de l'implémentation et les techniques simples de découpage de texte peuvent ne pas produire un résultat cohérent à travers les différents moteurs.

- -

Exemples

- -

Utiliser simplement toDateString()

- -
var d = new Date(1993, 6, 28, 14, 39, 7);
-
-console.log(d.toString());     // écrit Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)
-console.log(d.toDateString()); // écrit Wed Jul 28 1993
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.9.5.3', 'Date.prototype.toDateString')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toDateString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/todatestring/index.md b/files/fr/web/javascript/reference/global_objects/date/todatestring/index.md new file mode 100644 index 0000000000..0fa5df67f0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/todatestring/index.md @@ -0,0 +1,91 @@ +--- +title: Date.prototype.toDateString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toDateString +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toDateString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toDateString +--- +
{{JSRef}}
+ +

La méthode toDateString() renvoie la date contenue dans un objet {{jsxref("Date")}} sous la forme d'une chaîne de caractères lisible par un humain, en anglais américain et au format suivant :

+ +
    +
  1. Les trois premières lettre indiquent le jour
  2. +
  3. Les trois lettres suivantes indiquent le mois
  4. +
  5. Les deux chiffres suivants indiquent le jour du mois (et sont complétés avec un 0 devant si besoin)
  6. +
  7. Les quatre chiffres restants indiquent l'année (si besoin complétées avec des 0 comme préfixe)
  8. +
+ +
{{EmbedInteractiveExample("pages/js/date-todatestring.html")}}
+ +

Syntaxe

+ +
dateObj.toDateString()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente la date indiquée, dans un format anglais américain.

+ +

Description

+ +

Les instances de {{jsxref("Date")}} représentent un point précis dans le temps. Appeler {{jsxref("Date.prototype.toString", "toString")}} retournera la date formatée sous une forme lisible par un humain, en anglais américain. Pour le moteur JavaScript SpiderMonkey, ceci consiste en : la partie « date » (jour, mois et année) suivie de la partie « heure » (heures, minutes, secondes et fuseau horaire). Il est parfois préférable d'obtenir uniquement la partie « date » ; ceci est possible grâce à la méthode toDateString().

+ +

La méthode toDateString() est particulièrement utile car, pour les moteurs implémentant fidèlement ECMA-262, il peut y avoir certaines différences dans la chaîne de caractères produite par toString() sur les objets Date. Le format dépend de l'implémentation et les techniques simples de découpage de texte peuvent ne pas produire un résultat cohérent à travers les différents moteurs.

+ +

Exemples

+ +

Utiliser simplement toDateString()

+ +
var d = new Date(1993, 6, 28, 14, 39, 7);
+
+console.log(d.toString());     // écrit Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)
+console.log(d.toDateString()); // écrit Wed Jul 28 1993
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.9.5.3', 'Date.prototype.toDateString')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toDateString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/togmtstring/index.html b/files/fr/web/javascript/reference/global_objects/date/togmtstring/index.html deleted file mode 100644 index 701cc5c49a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/togmtstring/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Date.prototype.toGMTString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toGMTString -tags: - - Date - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toGMTString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toGMTString ---- -
{{JSRef}} {{deprecated_header}}
- -

La méthode toGMTString() convertit une date en une chaîne de caractères, en utilisant les conventions Internet pour GMT. Le format exact de la valeur renvoyée par toGMTString() varie en fonction de la plateforme et du navigateur web. En général, le texte produit est formaté pour être lisible par un humain.

- -
-

Note : toGMTString() est obsolète et ne doit plus être utilisé. Il existe encore uniquementpour des questions de compatibilité. La méthode {{jsxref("Date.prototype.toUTCString", "toUTCString()")}} doit être utilisée à la place.

-
- -

Syntaxe

- -
dateObj.toGMTString()
- -

Valeur de retour

- -

Une chaîne de caractères représentant la date indiquée selon la convention internet pour GMT (Greenwich Mean Time).

- -

Exemples

- -

Utiliser toGMTString()

- -

Dans cet exemple, la méthode toGMTString() convertit la date vers GMT (UTC) en utilisant la différence avec le fuseau horaire du système d'exploitation. Elle renvoie une chaîne de caractères similaire à celle de l'exemple. La forme exacte de cette chaîne de caractères dépend de la plateforme.

- -
var aujourdhui = new Date();
-var str = aujourdhui.toGMTString();  // Obsolète ! Utilisez toUTCString()
-
-console.log(str);               // Mon, 18 Dec 1995 17:28:35 GMT
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale et déjà déclarée comme dépréciée. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-B.2.6', 'Date.prototype.toGMTString')}}{{Spec2('ES5.1')}}Définie dans l'annexe informative sur la compatibilité.
{{SpecName('ES6', '#sec-date.prototype.togmtstring', 'Date.prototype.toGMTString')}}{{Spec2('ES6')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-date.prototype.togmtstring', 'Date.prototype.toGMTString')}}{{Spec2('ESDraft')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toGMTString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/togmtstring/index.md b/files/fr/web/javascript/reference/global_objects/date/togmtstring/index.md new file mode 100644 index 0000000000..701cc5c49a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/togmtstring/index.md @@ -0,0 +1,84 @@ +--- +title: Date.prototype.toGMTString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toGMTString +tags: + - Date + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toGMTString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toGMTString +--- +
{{JSRef}} {{deprecated_header}}
+ +

La méthode toGMTString() convertit une date en une chaîne de caractères, en utilisant les conventions Internet pour GMT. Le format exact de la valeur renvoyée par toGMTString() varie en fonction de la plateforme et du navigateur web. En général, le texte produit est formaté pour être lisible par un humain.

+ +
+

Note : toGMTString() est obsolète et ne doit plus être utilisé. Il existe encore uniquementpour des questions de compatibilité. La méthode {{jsxref("Date.prototype.toUTCString", "toUTCString()")}} doit être utilisée à la place.

+
+ +

Syntaxe

+ +
dateObj.toGMTString()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant la date indiquée selon la convention internet pour GMT (Greenwich Mean Time).

+ +

Exemples

+ +

Utiliser toGMTString()

+ +

Dans cet exemple, la méthode toGMTString() convertit la date vers GMT (UTC) en utilisant la différence avec le fuseau horaire du système d'exploitation. Elle renvoie une chaîne de caractères similaire à celle de l'exemple. La forme exacte de cette chaîne de caractères dépend de la plateforme.

+ +
var aujourdhui = new Date();
+var str = aujourdhui.toGMTString();  // Obsolète ! Utilisez toUTCString()
+
+console.log(str);               // Mon, 18 Dec 1995 17:28:35 GMT
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale et déjà déclarée comme dépréciée. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-B.2.6', 'Date.prototype.toGMTString')}}{{Spec2('ES5.1')}}Définie dans l'annexe informative sur la compatibilité.
{{SpecName('ES6', '#sec-date.prototype.togmtstring', 'Date.prototype.toGMTString')}}{{Spec2('ES6')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-date.prototype.togmtstring', 'Date.prototype.toGMTString')}}{{Spec2('ESDraft')}}Définie dans l'annexe normative sur les fonctionnalités additionnelles des navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toGMTString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/toisostring/index.html b/files/fr/web/javascript/reference/global_objects/date/toisostring/index.html deleted file mode 100644 index 102c8dfb19..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/toisostring/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Date.prototype.toISOString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toISOString -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toISOString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toISOString ---- -
{{JSRef}}
- -

La méthode toISOString() renvoie une chaîne de caractères au format ISO (ISO 8601 Extended Format), qui peut être décrite de cette façon : YYYY-MM-DDTHH:mm:ss.sssZ (toujours longue de 24 caractères) ou de cette façon ±YYYYYY-MM-DDTHH:mm:ss.sssZ (27 caractères). Le fuseau horaire est toujours UTC, comme l'indique le suffixe « Z » (pour zéro décalage avec UTC).

- -
{{EmbedInteractiveExample("pages/js/date-toisostring.html")}}
- -

Syntaxe

- -
dateObj.toISOString()
- -

Valeur de retour

- -

Une chaîne de caractères représentant la date indiquée au format ISO 8601 selon le temps universel.

- -

Exemples

- -

Utiliser toISOString()

- -
var aujourdhui = new Date("05 October 2011 14:48 UTC");
-
-console.log(aujourdhui.toISOString()); // Renvoie "2011-10-05T14:48:00.000Z"
-
- -

L'exemple ci-dessus analyse une chaîne de caractères non-standard, qui peut donc être incorrectement intérprété par des navigateurs n'utilisant pas Gecko.

- -

Prothèse d'émulation (polyfill)

- -

Cette méthode fut standardisée avec la cinquième édition d'ECMAScript. Afin d'utiliser cette méthode avec les moteurs qui n'en disposent pas nativement, on pourra utiliser ce fragment de code :

- -
if ( !Date.prototype.toISOString ) {
-  ( function() {
-
-    function pad(number) {
-      if ( number < 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';
-    };
-
-  }() );
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.9.5.43', 'Date.prototype.toISOString')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.
{{SpecName('ES6', '#sec-date.prototype.toisostring', 'Date.prototype.toISOString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.toisostring', 'Date.prototype.toISOString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toISOString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/toisostring/index.md b/files/fr/web/javascript/reference/global_objects/date/toisostring/index.md new file mode 100644 index 0000000000..102c8dfb19 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/toisostring/index.md @@ -0,0 +1,104 @@ +--- +title: Date.prototype.toISOString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toISOString +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toISOString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toISOString +--- +
{{JSRef}}
+ +

La méthode toISOString() renvoie une chaîne de caractères au format ISO (ISO 8601 Extended Format), qui peut être décrite de cette façon : YYYY-MM-DDTHH:mm:ss.sssZ (toujours longue de 24 caractères) ou de cette façon ±YYYYYY-MM-DDTHH:mm:ss.sssZ (27 caractères). Le fuseau horaire est toujours UTC, comme l'indique le suffixe « Z » (pour zéro décalage avec UTC).

+ +
{{EmbedInteractiveExample("pages/js/date-toisostring.html")}}
+ +

Syntaxe

+ +
dateObj.toISOString()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant la date indiquée au format ISO 8601 selon le temps universel.

+ +

Exemples

+ +

Utiliser toISOString()

+ +
var aujourdhui = new Date("05 October 2011 14:48 UTC");
+
+console.log(aujourdhui.toISOString()); // Renvoie "2011-10-05T14:48:00.000Z"
+
+ +

L'exemple ci-dessus analyse une chaîne de caractères non-standard, qui peut donc être incorrectement intérprété par des navigateurs n'utilisant pas Gecko.

+ +

Prothèse d'émulation (polyfill)

+ +

Cette méthode fut standardisée avec la cinquième édition d'ECMAScript. Afin d'utiliser cette méthode avec les moteurs qui n'en disposent pas nativement, on pourra utiliser ce fragment de code :

+ +
if ( !Date.prototype.toISOString ) {
+  ( function() {
+
+    function pad(number) {
+      if ( number < 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';
+    };
+
+  }() );
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.9.5.43', 'Date.prototype.toISOString')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.
{{SpecName('ES6', '#sec-date.prototype.toisostring', 'Date.prototype.toISOString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.toisostring', 'Date.prototype.toISOString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toISOString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/tojson/index.html b/files/fr/web/javascript/reference/global_objects/date/tojson/index.html deleted file mode 100644 index c05c5d8d13..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/tojson/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Date.prototype.toJSON() -slug: Web/JavaScript/Reference/Global_Objects/Date/toJSON -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toJSON -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toJSON ---- -
{{JSRef}}
- -

La méthode toJSON() renvoie une chaîne représentant l'objet {{jsxref("Date")}} sous forme {{Glossary("JSON")}}

- -
{{EmbedInteractiveExample("pages/js/date-tojson.html")}}
- -

Syntaxe

- -
dateObj.toJSON()
- -

Valeur de retour

- -

Une chaîne de caractères représentant la date indiquée.

- -

Description

- -

Les instances de {{jsxref("Date")}} identifient un instant précis dans le temps. Appeler toJSON() renvoie une chaîne de caractères formatée en JSON (en utilisant {{jsxref("Date.prototype.toISOString", "toISOString()")}}), représentant la valeur de l'objet Date. Cette méthode est généralement utilisée, par défaut, pour sérialiser les objets Date lors d'une sérialisation au format JSON.

- -

Exemple

- -

Utiliser toJSON()

- -
var jsonDate = (new Date()).toJSON();
-var retourVersDate = new Date(jsonDate);
-
-console.log(jsonDate); //2015-10-26T07:46:36.611Z
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.9.5.44', 'Date.prototype.toJSON')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-date.prototype.tojson', 'Date.prototype.toJSON')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.tojson', 'Date.prototype.toJSON')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toJSON")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/tojson/index.md b/files/fr/web/javascript/reference/global_objects/date/tojson/index.md new file mode 100644 index 0000000000..c05c5d8d13 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/tojson/index.md @@ -0,0 +1,78 @@ +--- +title: Date.prototype.toJSON() +slug: Web/JavaScript/Reference/Global_Objects/Date/toJSON +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toJSON +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toJSON +--- +
{{JSRef}}
+ +

La méthode toJSON() renvoie une chaîne représentant l'objet {{jsxref("Date")}} sous forme {{Glossary("JSON")}}

+ +
{{EmbedInteractiveExample("pages/js/date-tojson.html")}}
+ +

Syntaxe

+ +
dateObj.toJSON()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant la date indiquée.

+ +

Description

+ +

Les instances de {{jsxref("Date")}} identifient un instant précis dans le temps. Appeler toJSON() renvoie une chaîne de caractères formatée en JSON (en utilisant {{jsxref("Date.prototype.toISOString", "toISOString()")}}), représentant la valeur de l'objet Date. Cette méthode est généralement utilisée, par défaut, pour sérialiser les objets Date lors d'une sérialisation au format JSON.

+ +

Exemple

+ +

Utiliser toJSON()

+ +
var jsonDate = (new Date()).toJSON();
+var retourVersDate = new Date(jsonDate);
+
+console.log(jsonDate); //2015-10-26T07:46:36.611Z
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.9.5.44', 'Date.prototype.toJSON')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-date.prototype.tojson', 'Date.prototype.toJSON')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.tojson', 'Date.prototype.toJSON')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toJSON")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.html b/files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.html deleted file mode 100644 index e773e49be3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.html +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: Date.prototype.toLocaleDateString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString -tags: - - Date - - Internationalisation - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toLocaleDateString ---- -
{{JSRef}}
- -

La méthode toLocaleDateString() renvoie une chaine de caractères correspondant à la date (le fragment de l'objet qui correspond à la date : jour, mois, année) exprimée selon une locale. Les arguments locales et options permettent aux applications de définir le langage utilisé pour les conventions de format et permettent de personnaliser le comportement de la fonction. Les anciennes implémentations ignorent ces arguments, la locale utilisée et le format de la chaine dépendent uniquement de l'implémentation.

- -
{{EmbedInteractiveExample("pages/js/date-tolocaledatestring.html")}}
- -

Syntaxe

- -
dateObj.toLocaleDateString([locales [, options]])
- -

Paramètres

- -

Voir le tableau de compatibilité des navigateurs afin de déterminer quels navigateurs respectent les arguments locales et options ainsi que l'exemple Vérifier le support des arguments locales et options qui permet de détecter cette fonctionnalité.

- -

{{page('fr/docs/JavaScript/Reference/Objets_globaux/DateTimeFormat','Paramètres')}}

- -

La valeur par défaut de chacun des composants de la date vaut {{jsxref("undefined")}}, si les propriétés weekday, year, month, day sont toutes undefined, on suppose alors que year, month, et day sont « numériques ».

- -

Valeur de retour

- -

Une chaîne de caractères qui représente le jour de la date indiquée selon des options de locales.

- -

Exemples

- -

Utiliser toLocaleDateString()

- -

Voici un usage simple qui ne définit pas de locale : une chaine de caractères dans une locale et avec des options par défaut est renvoyée.

- -
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
-
-// toLocaleDateString() sans argument, on utilise donc
-// les valeurs par défaut (de l'implémentation)
-// pour la locale, et le fuseau horaire
-date.toLocaleDateString();
-// → "12/12/2012" si exécuté dans une locale fr et le fuseau horaire CEST
- -

Vérifier le support des arguments locales et options

- -

Les arguments locales et options ne sont pas encore supportés par tous les navigateurs. Afin de vérifier si l'implementation utilisée les supporte, vous pouvez utiliser le pré-requis suivant : les locales incorrectes sont rejetées avec une exception RangeError :

- -
function toLocaleDateStringSupportsLocales() {
-    try {
-        new Date().toLocaleDateString("i");
-    } catch (e) {
-        return e​.name === "RangeError";
-    }
-    return false;
-}
-
- -

Utiliser l'argument locales

- -

Cet exemple montre quelques variations dues aux formats de dates localisés. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// les formats qui suivent se basent sur le
-// fuseau horaire CEST
-
-// l'anglais américain utilise l'ordre mois-jour-année
-alert(date.toLocaleDateString("en-US"));
-// → "12/20/2012"
-
-// l'anglais britannique utilise l'ordre jour-mois-année
-alert(date.toLocaleDateString("en-GB"));
-// → "20/12/2012"
-
-// le coréen utilise l'ordre année-mois-jour
-alert(date.toLocaleDateString("ko-KR"));
-// → "2012. 12. 20."
-
-// l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
-alert(date.toLocaleDateString("ar-EG"));
-// → "٢٠‏/١٢‏/٢٠١٢"
-
-// en ce qui concerne le japonais, les applications peuvent
-// souhaiter utiliser le calendrier japonais
-// pour lequel 2012 était l'année 24 de l'ère Heisei
-alert(date.toLocaleDateString("ja-JP-u-ca-japanese"));
-// → "24/12/20"
-
-// quand un langage non support est demandé (ex : le balinais)
-// il est possible de fournir un langage de recours (ici l'indonésien)
-alert(date.toLocaleDateString(["ban", "id"]));
-// → "20/12/2012"
-
- -

Utiliser l'argument options

- -

Les résultats fournis par toLocaleDateString() peuvent être personnalisés grâce à l'argument options :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// fournir le jour de la semaine avec une date longe
-var options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
-alert(date.toLocaleDateString("de-DE", options));
-// → "Donnerstag, 20. Dezember 2012"
-
-// une application peut vouloir utiliser
-// UTC et l'afficher
-options.timeZone = "UTC";
-options.timeZoneName = "short";
-alert(date.toLocaleDateString("en-US", options));
-// → "Thursday, December 20, 2012, GMT"
-
- -

Performance

- -

Lorsque des grands nombres ou de grandes dates sont formatés, il est préférable de créer un objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} et d'utiliser la fonction fournie par sa propriété {{jsxref("DateTimeFormat.prototype.format", "format")}}.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', 'sec-15.9.5.6', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.tolocaledatestring', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.tolocaledatestring', 'Date.prototype.toLocaleDateString')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.3.2', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES Int 1.0')}}Définition des arguments locales et options.
{{SpecName('ES Int 2.0', '#sec-13.3.2', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Date.prototype.toLocaleDateString', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toLocaleDateString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.md b/files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.md new file mode 100644 index 0000000000..e773e49be3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/tolocaledatestring/index.md @@ -0,0 +1,183 @@ +--- +title: Date.prototype.toLocaleDateString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString +tags: + - Date + - Internationalisation + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toLocaleDateString +--- +
{{JSRef}}
+ +

La méthode toLocaleDateString() renvoie une chaine de caractères correspondant à la date (le fragment de l'objet qui correspond à la date : jour, mois, année) exprimée selon une locale. Les arguments locales et options permettent aux applications de définir le langage utilisé pour les conventions de format et permettent de personnaliser le comportement de la fonction. Les anciennes implémentations ignorent ces arguments, la locale utilisée et le format de la chaine dépendent uniquement de l'implémentation.

+ +
{{EmbedInteractiveExample("pages/js/date-tolocaledatestring.html")}}
+ +

Syntaxe

+ +
dateObj.toLocaleDateString([locales [, options]])
+ +

Paramètres

+ +

Voir le tableau de compatibilité des navigateurs afin de déterminer quels navigateurs respectent les arguments locales et options ainsi que l'exemple Vérifier le support des arguments locales et options qui permet de détecter cette fonctionnalité.

+ +

{{page('fr/docs/JavaScript/Reference/Objets_globaux/DateTimeFormat','Paramètres')}}

+ +

La valeur par défaut de chacun des composants de la date vaut {{jsxref("undefined")}}, si les propriétés weekday, year, month, day sont toutes undefined, on suppose alors que year, month, et day sont « numériques ».

+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le jour de la date indiquée selon des options de locales.

+ +

Exemples

+ +

Utiliser toLocaleDateString()

+ +

Voici un usage simple qui ne définit pas de locale : une chaine de caractères dans une locale et avec des options par défaut est renvoyée.

+ +
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleDateString() sans argument, on utilise donc
+// les valeurs par défaut (de l'implémentation)
+// pour la locale, et le fuseau horaire
+date.toLocaleDateString();
+// → "12/12/2012" si exécuté dans une locale fr et le fuseau horaire CEST
+ +

Vérifier le support des arguments locales et options

+ +

Les arguments locales et options ne sont pas encore supportés par tous les navigateurs. Afin de vérifier si l'implementation utilisée les supporte, vous pouvez utiliser le pré-requis suivant : les locales incorrectes sont rejetées avec une exception RangeError :

+ +
function toLocaleDateStringSupportsLocales() {
+    try {
+        new Date().toLocaleDateString("i");
+    } catch (e) {
+        return e​.name === "RangeError";
+    }
+    return false;
+}
+
+ +

Utiliser l'argument locales

+ +

Cet exemple montre quelques variations dues aux formats de dates localisés. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// les formats qui suivent se basent sur le
+// fuseau horaire CEST
+
+// l'anglais américain utilise l'ordre mois-jour-année
+alert(date.toLocaleDateString("en-US"));
+// → "12/20/2012"
+
+// l'anglais britannique utilise l'ordre jour-mois-année
+alert(date.toLocaleDateString("en-GB"));
+// → "20/12/2012"
+
+// le coréen utilise l'ordre année-mois-jour
+alert(date.toLocaleDateString("ko-KR"));
+// → "2012. 12. 20."
+
+// l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
+alert(date.toLocaleDateString("ar-EG"));
+// → "٢٠‏/١٢‏/٢٠١٢"
+
+// en ce qui concerne le japonais, les applications peuvent
+// souhaiter utiliser le calendrier japonais
+// pour lequel 2012 était l'année 24 de l'ère Heisei
+alert(date.toLocaleDateString("ja-JP-u-ca-japanese"));
+// → "24/12/20"
+
+// quand un langage non support est demandé (ex : le balinais)
+// il est possible de fournir un langage de recours (ici l'indonésien)
+alert(date.toLocaleDateString(["ban", "id"]));
+// → "20/12/2012"
+
+ +

Utiliser l'argument options

+ +

Les résultats fournis par toLocaleDateString() peuvent être personnalisés grâce à l'argument options :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// fournir le jour de la semaine avec une date longe
+var options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
+alert(date.toLocaleDateString("de-DE", options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// une application peut vouloir utiliser
+// UTC et l'afficher
+options.timeZone = "UTC";
+options.timeZoneName = "short";
+alert(date.toLocaleDateString("en-US", options));
+// → "Thursday, December 20, 2012, GMT"
+
+ +

Performance

+ +

Lorsque des grands nombres ou de grandes dates sont formatés, il est préférable de créer un objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} et d'utiliser la fonction fournie par sa propriété {{jsxref("DateTimeFormat.prototype.format", "format")}}.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', 'sec-15.9.5.6', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.tolocaledatestring', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.tolocaledatestring', 'Date.prototype.toLocaleDateString')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.3.2', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES Int 1.0')}}Définition des arguments locales et options.
{{SpecName('ES Int 2.0', '#sec-13.3.2', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Date.prototype.toLocaleDateString', 'Date.prototype.toLocaleDateString')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toLocaleDateString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.html b/files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.html deleted file mode 100644 index 8eebb47913..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.html +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: Date.prototype.toLocaleString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString -tags: - - Date - - Internationalisation - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toLocaleString ---- -
{{JSRef}}
- -

La méthode toLocaleString() renvoie une chaine de caractères représentant la date selon une locale. Les arguments locales et options permettent aux applications de définir le langage à utiliser pour les conventions de format et permettent de personnaliser le comportement de la fonction. Les anciennes implémentations ignorent ces arguments, la locale utilisée et le format de la chaine dépendent uniquement de l'implémentation.

- -
{{EmbedInteractiveExample("pages/js/date-tolocalestring.html")}}
- -

Syntaxe

- -
dateObj.toLocaleString([locales [, options]])
- -

Paramètres

- -

Voir le tableau de compatibilité des navigateurs afin de déterminer quels navigateurs respectent les arguments locales et options ainsi que l'exemple Vérifier le support des arguments locales et options qui permet de détecter cette fonctionnalité.

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat','Paramètres')}}

- -

La valeur par défaut de chacun des composants de la date-heure vaut {{jsxref("undefined")}}, mais si les propriétés weekday, year, month, day, hour, minute, second sont toutes {{jsxref("undefined")}},  alors  weekday, year, month, day, hour, minute et second sont supposés être "numeric".

- -

Valeur de retour

- -

Une chaîne de caractères représentant la date indiquée selon des conventions de locales spécifiques.

- -

Exemples

- -

Utiliser toLocaleString()

- -

Voici un usage simple qui ne définit pas de locale : une chaine de caractères dans une locale et avec des options par défaut est renvoyée.

- -
var date = new Date(Date.UTC(2014, 11, 21, 3, 0, 0));
-
-// toLocaleString() sans argument, on utilise donc
-// les valeurs par défaut (de l'implémentation)
-// pour la locale, et le fuseau horaire
-date.toLocaleString();
-// → "21/12/2014 04:00:00" si exécuté dans une locale fr et le fuseau horaire CEST
- -

Vérifier le support des arguments locales et options

- -

Les arguments locales et options ne sont pas encore supportés par tous les navigateurs. Afin de vérifier si l'implementation utilisée les supporte, vous pouvez utiliser le pré-requis suivant : les locales incorrectes sont rejetées avec une exception {{jsxref("RangeError")}} :

- -
function toLocaleStringSupportsLocales() {
-    try {
-        new Date().toLocaleString("i");
-    } catch (e) {
-        return e​ instanceof RangeError;
-    }
-    return false;
-}
-
- -

Utiliser locales

- -

Cet exemple montre quelques variations dues aux formats de dates localisés. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// les formats qui suivent se basent sur le
-// fuseau horaire CEST
-
-l'anglais américain utilise l'ordre mois-jour-année
-console.log(date.toLocaleString("en-US"));
-// → "12/20/2012, 4:00:00 AM"
-
-// l'anglais britannique utilise l'ordre jour-mois-année
-console.log(date.toLocaleString("en-GB"));
-// → "20/12/2012 04:00:00"
-
-// le coréen utilise l'ordre année-mois-jour
-console.log(date.toLocaleString("ko-KR"));
-// → "2012. 12. 20. 오전 4:00:00"
-
-// l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
-console.log(date.toLocaleString("ar-EG"));
-// → "٢٠‏/١٢‏/٢٠١٢ ٤:٠٠:٠٠ ص"
-
-// en ce qui concerne le japonais, les applications peuvent
-// souhaiter utiliser le calendrier japonais
-// pour lequel 2012 était l'année 24 de l'ère Heisei
-console.log(date.toLocaleString("ja-JP-u-ca-japanese"));
-// → "24/12/20 4:00:00"
-
-// quand un langage non support est demandé (ex : le balinais)
-// il est possible de fournir un langage de recours (ici l'indonésien)
-console.log(date.toLocaleString(["ban", "id"]));
-// → "20/12/2012 04.00.00"
-
- -

Utiliser options

- -

Les résultats fournis par toLocaleString() peuvent être personnalisés grâce à l'argument options :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// obtenir le jour de la semaine avec une date longue
-var options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
-console.log(date.toLocaleString("de-DE", options));
-// → "Donnerstag, 20. Dezember 2012"
-
-// une application peut vouloir utiliser UTC et le rendre visible
-options.timeZone = "UTC";
-options.timeZoneName = "short";
-console.log(date.toLocaleString("en-US", options));
-// → "Thursday, December 20, 2012, GMT"
-
-// parfois, même les USA ont besoin d'avoir une heure sur 24h
-console.log(date.toLocaleString("en-US", {hour12: false}));
-// → "12/19/2012, 19:00:00"
-
- -

Comparaison des dates formatées et des valeurs statiques

- -

La plupart du temps, le format renvoyé par toLocaleString() est cohérent. Toutefois, cela peut évoluer à l'avenir et n'est pas garanti pour l'ensemble des langues (de telles variations sont souhaitables et permises par la spécification). Ainsi, IE et Edge ajoutent des caractères de contrôle bidirectionnels autour des dates afin que le texte produit ait une directionalité cohérente avec le texte avec lequel elles seront concaténées.

- -

Aussi, mieux vaut ne pas comparer un résultat fourni par format() avec une valeur statique :

- -
"1.1.2019, 01:00:00" === new Date("2019-01-01T00:00:00.000000Z").toLocaleString();
-// true pour Firefox et les autres
-// false pour IE et Edge
-
- -
-

Note : Voir aussi ce fil StackOverflow pour plus de détails et d'exemples.

-
- -

Performance

- -

Quand vous formatez d'importants volumes de dates, il est préférable de créer un objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} et d'utiliser la fonction fournie via la propriété {{jsxref("DateTimeFormat.prototype.format", "format")}}.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.5', 'Date.prototype.toLocaleString')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}{{Spec2('ESDraft')}}
{{SpecName('ES Int 1.0', '#sec-13.3.1', 'Date.prototype.toLocaleString')}}{{Spec2('ES Int 1.0')}}Définition des arguments locales et options.
{{SpecName('ES Int 2.0', '#sec-13.3.1', 'Date.prototype.toLocaleString')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#sec-Date.prototype.toLocaleString', 'Date.prototype.toLocaleString')}}{{Spec2('ES Int Draft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toLocaleString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.md b/files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.md new file mode 100644 index 0000000000..8eebb47913 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/tolocalestring/index.md @@ -0,0 +1,201 @@ +--- +title: Date.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString +tags: + - Date + - Internationalisation + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toLocaleString +--- +
{{JSRef}}
+ +

La méthode toLocaleString() renvoie une chaine de caractères représentant la date selon une locale. Les arguments locales et options permettent aux applications de définir le langage à utiliser pour les conventions de format et permettent de personnaliser le comportement de la fonction. Les anciennes implémentations ignorent ces arguments, la locale utilisée et le format de la chaine dépendent uniquement de l'implémentation.

+ +
{{EmbedInteractiveExample("pages/js/date-tolocalestring.html")}}
+ +

Syntaxe

+ +
dateObj.toLocaleString([locales [, options]])
+ +

Paramètres

+ +

Voir le tableau de compatibilité des navigateurs afin de déterminer quels navigateurs respectent les arguments locales et options ainsi que l'exemple Vérifier le support des arguments locales et options qui permet de détecter cette fonctionnalité.

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat','Paramètres')}}

+ +

La valeur par défaut de chacun des composants de la date-heure vaut {{jsxref("undefined")}}, mais si les propriétés weekday, year, month, day, hour, minute, second sont toutes {{jsxref("undefined")}},  alors  weekday, year, month, day, hour, minute et second sont supposés être "numeric".

+ +

Valeur de retour

+ +

Une chaîne de caractères représentant la date indiquée selon des conventions de locales spécifiques.

+ +

Exemples

+ +

Utiliser toLocaleString()

+ +

Voici un usage simple qui ne définit pas de locale : une chaine de caractères dans une locale et avec des options par défaut est renvoyée.

+ +
var date = new Date(Date.UTC(2014, 11, 21, 3, 0, 0));
+
+// toLocaleString() sans argument, on utilise donc
+// les valeurs par défaut (de l'implémentation)
+// pour la locale, et le fuseau horaire
+date.toLocaleString();
+// → "21/12/2014 04:00:00" si exécuté dans une locale fr et le fuseau horaire CEST
+ +

Vérifier le support des arguments locales et options

+ +

Les arguments locales et options ne sont pas encore supportés par tous les navigateurs. Afin de vérifier si l'implementation utilisée les supporte, vous pouvez utiliser le pré-requis suivant : les locales incorrectes sont rejetées avec une exception {{jsxref("RangeError")}} :

+ +
function toLocaleStringSupportsLocales() {
+    try {
+        new Date().toLocaleString("i");
+    } catch (e) {
+        return e​ instanceof RangeError;
+    }
+    return false;
+}
+
+ +

Utiliser locales

+ +

Cet exemple montre quelques variations dues aux formats de dates localisés. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// les formats qui suivent se basent sur le
+// fuseau horaire CEST
+
+l'anglais américain utilise l'ordre mois-jour-année
+console.log(date.toLocaleString("en-US"));
+// → "12/20/2012, 4:00:00 AM"
+
+// l'anglais britannique utilise l'ordre jour-mois-année
+console.log(date.toLocaleString("en-GB"));
+// → "20/12/2012 04:00:00"
+
+// le coréen utilise l'ordre année-mois-jour
+console.log(date.toLocaleString("ko-KR"));
+// → "2012. 12. 20. 오전 4:00:00"
+
+// l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
+console.log(date.toLocaleString("ar-EG"));
+// → "٢٠‏/١٢‏/٢٠١٢ ٤:٠٠:٠٠ ص"
+
+// en ce qui concerne le japonais, les applications peuvent
+// souhaiter utiliser le calendrier japonais
+// pour lequel 2012 était l'année 24 de l'ère Heisei
+console.log(date.toLocaleString("ja-JP-u-ca-japanese"));
+// → "24/12/20 4:00:00"
+
+// quand un langage non support est demandé (ex : le balinais)
+// il est possible de fournir un langage de recours (ici l'indonésien)
+console.log(date.toLocaleString(["ban", "id"]));
+// → "20/12/2012 04.00.00"
+
+ +

Utiliser options

+ +

Les résultats fournis par toLocaleString() peuvent être personnalisés grâce à l'argument options :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// obtenir le jour de la semaine avec une date longue
+var options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
+console.log(date.toLocaleString("de-DE", options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// une application peut vouloir utiliser UTC et le rendre visible
+options.timeZone = "UTC";
+options.timeZoneName = "short";
+console.log(date.toLocaleString("en-US", options));
+// → "Thursday, December 20, 2012, GMT"
+
+// parfois, même les USA ont besoin d'avoir une heure sur 24h
+console.log(date.toLocaleString("en-US", {hour12: false}));
+// → "12/19/2012, 19:00:00"
+
+ +

Comparaison des dates formatées et des valeurs statiques

+ +

La plupart du temps, le format renvoyé par toLocaleString() est cohérent. Toutefois, cela peut évoluer à l'avenir et n'est pas garanti pour l'ensemble des langues (de telles variations sont souhaitables et permises par la spécification). Ainsi, IE et Edge ajoutent des caractères de contrôle bidirectionnels autour des dates afin que le texte produit ait une directionalité cohérente avec le texte avec lequel elles seront concaténées.

+ +

Aussi, mieux vaut ne pas comparer un résultat fourni par format() avec une valeur statique :

+ +
"1.1.2019, 01:00:00" === new Date("2019-01-01T00:00:00.000000Z").toLocaleString();
+// true pour Firefox et les autres
+// false pour IE et Edge
+
+ +
+

Note : Voir aussi ce fil StackOverflow pour plus de détails et d'exemples.

+
+ +

Performance

+ +

Quand vous formatez d'importants volumes de dates, il est préférable de créer un objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} et d'utiliser la fonction fournie via la propriété {{jsxref("DateTimeFormat.prototype.format", "format")}}.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.5', 'Date.prototype.toLocaleString')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}{{Spec2('ESDraft')}}
{{SpecName('ES Int 1.0', '#sec-13.3.1', 'Date.prototype.toLocaleString')}}{{Spec2('ES Int 1.0')}}Définition des arguments locales et options.
{{SpecName('ES Int 2.0', '#sec-13.3.1', 'Date.prototype.toLocaleString')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#sec-Date.prototype.toLocaleString', 'Date.prototype.toLocaleString')}}{{Spec2('ES Int Draft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toLocaleString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.html b/files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.html deleted file mode 100644 index 28764c098c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.html +++ /dev/null @@ -1,175 +0,0 @@ ---- -title: Date.prototype.toLocaleTimeString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString -tags: - - Date - - Internationalisation - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toLocaleTimeString ---- -
{{JSRef}}
- -

La méthode toLocaleTimeString() renvoie une chaine de caractères correspondant à l'heure dans la date, exprimée selon une locale. Les arguments locales et options permettent aux applications de définir le langage utilisé pour les conventions de format et permettent de personnaliser le comportement de la fonction. Les anciennes implémentations ignorent ces arguments, la locale utilisée et le format de la chaine dépendent uniquement de l'implémentation.

- -
{{EmbedInteractiveExample("pages/js/date-tolocaletimestring.html")}}
- -

Syntaxe

- -
dateObj.toLocaleTimeString([locales [, options]])
- -

Paramètres

- -

Voir le tableau de compatibilité des navigateurs afin de déterminer quels navigateurs respectent les arguments locales et options ainsi que l'exemple Vérifier le support des arguments locales et options qui permet de détecter cette fonctionnalité.

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat','Param.C3.A8tres')}}

- -

La valeur par défaut de chacun des composants de la date vaut {{jsxref("undefined")}}, si les propriétés hour, minute, second sont toutes undefined, on suppose alors que hour, minute, et second sont "numeric".

- -

Valeur de retour

- -

Une chaîne de caractères qui représente l'heure de la date indiquée selon des conventions de locales spécifiques.

- -

Exemples

- -

Utiliser toLocaleTimeString()

- -

Voici un usage simple qui ne définit pas de locale : une chaine de caractères dans une locale et avec des options par défaut est renvoyée.

- -
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
-
-// toLocaleTimeString() sans argument, on utilise donc
-// les valeurs par défaut (de l'implémentation)
-// pour la locale, et le fuseau horaire
-console.log(date.toLocaleTimeString());
-// → "04:00:00" si exécuté dans une locale fr et le fuseau horaire CEST
- -

Vérifier le support des arguments locales et options

- -

Les arguments locales et options ne sont pas encore supportés par tous les navigateurs. Afin de vérifier si l'implementation utilisée les supporte, vous pouvez utiliser le pré-requis suivant : les locales incorrectes sont rejetées avec une exception RangeError :

- -
function toLocaleTimeStringSupportsLocales() {
-    try {
-        new Date().toLocaleTimeString("i");
-    } catch (e) {
-        return e​.name === "RangeError";
-    }
-    return false;
-}
-
- -

Utiliser locales

- -

Cet exemple montre quelques variations dues aux formats de dates localisés. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// les formats qui suivent se basent sur le
-// fuseau horaire CEST
-
-// l'anglais américain utilise une heure sur 12h avec AM/PM
-console.log(date.toLocaleTimeString("en-US"));
-// → "4:00:00 AM"
-
-// l'anglais britanique utilise une heure sur 24h
-console.log(date.toLocaleTimeString("en-GB"));
-// → "04:00:00"
-
-// le coréen  utilise une heure sur 12h avec AM/PM
-console.log(date.toLocaleTimeString("ko-KR"));
-// → "오전 4:00:00"
-
-/ l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
-console.log(date.toLocaleTimeString("ar-EG"));
-// → "٤:٠٠:٠٠ ص"
-
-// quand un langage non support est demandé (ex : le balinais)
-// il est possible de fournir un langage de recours (ici l'indonésien)
-console.log(date.toLocaleTimeString(["ban", "id"]));
-// → "4.00.00"
-
- -

Utiliser options

- -

Les résultats fournis par toLocaleTimeString() peuvent être personnalisés grâce à l'argument options :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// une application peut vouloir utiliser UTC et le montrer
-var options = {timeZone: "UTC", timeZoneName: "short"};
-console.log(date.toLocaleTimeString("en-US", options));
-// → "3:00:00 AM GMT"
-
-// parfois, même les USA ont besoin du format sur 24h
-console.log(date.toLocaleTimeString("en-US", {hour12: false}));
-// → "19:00:00"
-
- -

Performance

- -

Pour formater de nombreuses dates, il est préférable de créer un objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} et d'utiliser la fonction fournie par sa propriété {{jsxref("DateTimeFormat.prototype.format", "format")}}.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.7', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.3.3', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES Int 1.0')}}Définition des arguments locales et options.
{{SpecName('ES Int 2.0', '#sec-13.3.3', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Date.prototype.toLocaleTimeString', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toLocaleTimeString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.md b/files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.md new file mode 100644 index 0000000000..28764c098c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/tolocaletimestring/index.md @@ -0,0 +1,175 @@ +--- +title: Date.prototype.toLocaleTimeString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString +tags: + - Date + - Internationalisation + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toLocaleTimeString +--- +
{{JSRef}}
+ +

La méthode toLocaleTimeString() renvoie une chaine de caractères correspondant à l'heure dans la date, exprimée selon une locale. Les arguments locales et options permettent aux applications de définir le langage utilisé pour les conventions de format et permettent de personnaliser le comportement de la fonction. Les anciennes implémentations ignorent ces arguments, la locale utilisée et le format de la chaine dépendent uniquement de l'implémentation.

+ +
{{EmbedInteractiveExample("pages/js/date-tolocaletimestring.html")}}
+ +

Syntaxe

+ +
dateObj.toLocaleTimeString([locales [, options]])
+ +

Paramètres

+ +

Voir le tableau de compatibilité des navigateurs afin de déterminer quels navigateurs respectent les arguments locales et options ainsi que l'exemple Vérifier le support des arguments locales et options qui permet de détecter cette fonctionnalité.

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat','Param.C3.A8tres')}}

+ +

La valeur par défaut de chacun des composants de la date vaut {{jsxref("undefined")}}, si les propriétés hour, minute, second sont toutes undefined, on suppose alors que hour, minute, et second sont "numeric".

+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente l'heure de la date indiquée selon des conventions de locales spécifiques.

+ +

Exemples

+ +

Utiliser toLocaleTimeString()

+ +

Voici un usage simple qui ne définit pas de locale : une chaine de caractères dans une locale et avec des options par défaut est renvoyée.

+ +
var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// toLocaleTimeString() sans argument, on utilise donc
+// les valeurs par défaut (de l'implémentation)
+// pour la locale, et le fuseau horaire
+console.log(date.toLocaleTimeString());
+// → "04:00:00" si exécuté dans une locale fr et le fuseau horaire CEST
+ +

Vérifier le support des arguments locales et options

+ +

Les arguments locales et options ne sont pas encore supportés par tous les navigateurs. Afin de vérifier si l'implementation utilisée les supporte, vous pouvez utiliser le pré-requis suivant : les locales incorrectes sont rejetées avec une exception RangeError :

+ +
function toLocaleTimeStringSupportsLocales() {
+    try {
+        new Date().toLocaleTimeString("i");
+    } catch (e) {
+        return e​.name === "RangeError";
+    }
+    return false;
+}
+
+ +

Utiliser locales

+ +

Cet exemple montre quelques variations dues aux formats de dates localisés. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// les formats qui suivent se basent sur le
+// fuseau horaire CEST
+
+// l'anglais américain utilise une heure sur 12h avec AM/PM
+console.log(date.toLocaleTimeString("en-US"));
+// → "4:00:00 AM"
+
+// l'anglais britanique utilise une heure sur 24h
+console.log(date.toLocaleTimeString("en-GB"));
+// → "04:00:00"
+
+// le coréen  utilise une heure sur 12h avec AM/PM
+console.log(date.toLocaleTimeString("ko-KR"));
+// → "오전 4:00:00"
+
+/ l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
+console.log(date.toLocaleTimeString("ar-EG"));
+// → "٤:٠٠:٠٠ ص"
+
+// quand un langage non support est demandé (ex : le balinais)
+// il est possible de fournir un langage de recours (ici l'indonésien)
+console.log(date.toLocaleTimeString(["ban", "id"]));
+// → "4.00.00"
+
+ +

Utiliser options

+ +

Les résultats fournis par toLocaleTimeString() peuvent être personnalisés grâce à l'argument options :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// une application peut vouloir utiliser UTC et le montrer
+var options = {timeZone: "UTC", timeZoneName: "short"};
+console.log(date.toLocaleTimeString("en-US", options));
+// → "3:00:00 AM GMT"
+
+// parfois, même les USA ont besoin du format sur 24h
+console.log(date.toLocaleTimeString("en-US", {hour12: false}));
+// → "19:00:00"
+
+ +

Performance

+ +

Pour formater de nombreuses dates, il est préférable de créer un objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} et d'utiliser la fonction fournie par sa propriété {{jsxref("DateTimeFormat.prototype.format", "format")}}.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.7', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.3.3', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES Int 1.0')}}Définition des arguments locales et options.
{{SpecName('ES Int 2.0', '#sec-13.3.3', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Date.prototype.toLocaleTimeString', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toLocaleTimeString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/tosource/index.html b/files/fr/web/javascript/reference/global_objects/date/tosource/index.html deleted file mode 100644 index 93d004781e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/tosource/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Date.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Date/toSource -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toSource ---- -
{{JSRef}} {{Non-standard_header}}
- -

La méthode toSource() renvoie une chaîne de caractères représentant le code source de l'objet.

- -

Syntaxe

- -
dateObj.toSource()
-Date.toSource()
- -

Valeur de retour

- -

Une chaîne de caractères représentant le code source de l'objet date indiqué.

- -

Description

- -

La méthode toSource() renvoie les valeur suivantes :

- - - -
function Date() {
-    [native code]
-}
- - - -

Cette méthode est habituellement appelée en interne par le moteur JavaScript et non explicitement dans le code d'un script.

- -

Spécifications

- -

Ne fait partie d'aucune spécification. Implémentée dans JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/tosource/index.md b/files/fr/web/javascript/reference/global_objects/date/tosource/index.md new file mode 100644 index 0000000000..93d004781e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/tosource/index.md @@ -0,0 +1,56 @@ +--- +title: Date.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Date/toSource +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toSource +--- +
{{JSRef}} {{Non-standard_header}}
+ +

La méthode toSource() renvoie une chaîne de caractères représentant le code source de l'objet.

+ +

Syntaxe

+ +
dateObj.toSource()
+Date.toSource()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant le code source de l'objet date indiqué.

+ +

Description

+ +

La méthode toSource() renvoie les valeur suivantes :

+ + + +
function Date() {
+    [native code]
+}
+ + + +

Cette méthode est habituellement appelée en interne par le moteur JavaScript et non explicitement dans le code d'un script.

+ +

Spécifications

+ +

Ne fait partie d'aucune spécification. Implémentée dans JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/tostring/index.html b/files/fr/web/javascript/reference/global_objects/date/tostring/index.html deleted file mode 100644 index b548fb5d0c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/tostring/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Date.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toString -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}}.

- -
{{EmbedInteractiveExample("pages/js/date-tostring.html")}}
- -

Syntaxe

- -
dateObj.toString()
- -

Valeur de retour

- -

Une chaîne de caractères représentant la date indiquée.

- -

Description

- -

L'objet {{jsxref("Date")}} remplace la méthode toString() de l'objet {{jsxref("Object")}} ; il n'hérite pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets {{jsxref("Date")}}, la méthode toString() renvoie une représentation textuelle de l'objet.

- -

La méthode toString() renvoie toujours une chaîne de caractères représentant une date en anglais américain. Ce format a été standardisé avec ES2018 et peut être décrit de la façon suivante :

- - - -

Avant ES2018, le format de la chaîne de caractères renvoyé pouvait varier selon l'implémentation.

- -

JavaScript appelle la méthode toString() automatiquement quand une date doit être representée sous forme d'un texte ou quand une date est référencée lors d'une concatenation de chaînes de caractères.

- -

toString() est une méthode générique. Si this n'est pas une instance de {{jsxref("Date")}}, elle renverra "Invalid Date".

- -

Exemples

- -

Utiliser toString()

- -

L'exemple suivant assigne la valeur de toString() de l'objet Date à maVar :

- -
var x = new Date();
-var maVar = x.toString(); // assigne une valeur à maVar similaire à :
-// Mon Sep 28 1998 14:36:22 GMT-0700 (PDT)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.2', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ES2018', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}{{Spec2('ES2018')}}Standardisation du format produit par Date.prototype.toString()
{{SpecName('ESDraft', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/tostring/index.md b/files/fr/web/javascript/reference/global_objects/date/tostring/index.md new file mode 100644 index 0000000000..b548fb5d0c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/tostring/index.md @@ -0,0 +1,132 @@ +--- +title: Date.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toString +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaîne de caractères représentant l'objet {{jsxref("Date")}}.

+ +
{{EmbedInteractiveExample("pages/js/date-tostring.html")}}
+ +

Syntaxe

+ +
dateObj.toString()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant la date indiquée.

+ +

Description

+ +

L'objet {{jsxref("Date")}} remplace la méthode toString() de l'objet {{jsxref("Object")}} ; il n'hérite pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets {{jsxref("Date")}}, la méthode toString() renvoie une représentation textuelle de l'objet.

+ +

La méthode toString() renvoie toujours une chaîne de caractères représentant une date en anglais américain. Ce format a été standardisé avec ES2018 et peut être décrit de la façon suivante :

+ + + +

Avant ES2018, le format de la chaîne de caractères renvoyé pouvait varier selon l'implémentation.

+ +

JavaScript appelle la méthode toString() automatiquement quand une date doit être representée sous forme d'un texte ou quand une date est référencée lors d'une concatenation de chaînes de caractères.

+ +

toString() est une méthode générique. Si this n'est pas une instance de {{jsxref("Date")}}, elle renverra "Invalid Date".

+ +

Exemples

+ +

Utiliser toString()

+ +

L'exemple suivant assigne la valeur de toString() de l'objet Date à maVar :

+ +
var x = new Date();
+var maVar = x.toString(); // assigne une valeur à maVar similaire à :
+// Mon Sep 28 1998 14:36:22 GMT-0700 (PDT)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.9.5.2', 'Date.prototype.toLocaleTimeString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ES2018', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}{{Spec2('ES2018')}}Standardisation du format produit par Date.prototype.toString()
{{SpecName('ESDraft', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/totimestring/index.html b/files/fr/web/javascript/reference/global_objects/date/totimestring/index.html deleted file mode 100644 index 8931f46e60..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/totimestring/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Date.prototype.toTimeString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toTimeString -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toTimeString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toTimeString ---- -
{{JSRef}}
- -

La méthode toTimeString()renvoie la partie « heure » de l'objet Date dans un format lisible par un humain, en anglais américain.

- -
{{EmbedInteractiveExample("pages/js/date-totimestring.html")}}
- -

Syntaxe

- -
dateObj.toTimeString()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente l'heure de la date indiquée dans un format anglais américain.

- -

Description

- -

Une instance de {{jsxref("Date")}} représente un instant précis dans le temps. Appeler {{jsxref("Date.toString", "toString()")}} renverra la date formatée de façon à être lisible par un humain, en anglais américain. Pour le moteur JavaScript SpiderMonkey, ceci consiste en la partie « date » (jour, mois, année) suivie de la partie « heure » (heures, minutes, secondes, et fuseau horaire). Parfois, il est préférable d'obtenir seulement la partie « heure » ; c'est ce que renvoie la méthode toTimeString().

- -

La méthode toTimeString() est particulièrement utile parce que les moteurs implémentant ECMA-262 peuvent obtenir des résultats différents avec la méthode {{jsxref("Date.prototype.toString()", "toString()")}} (en effet, le format dépend de l'implémentation). Ceci peut empêcher les manipulations de textes simples d'avoir des résultats cohérents au sein des différents moteurs/navigateurs.

- -

Exemple

- -

Utiliser toTimeString()

- -
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)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.9.5.4', 'Date.prototype.toTimeString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.totimestring', 'Date.prototype.toTimeString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.totimestring', 'Date.prototype.toTimeString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toTimeString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/totimestring/index.md b/files/fr/web/javascript/reference/global_objects/date/totimestring/index.md new file mode 100644 index 0000000000..8931f46e60 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/totimestring/index.md @@ -0,0 +1,85 @@ +--- +title: Date.prototype.toTimeString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toTimeString +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toTimeString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toTimeString +--- +
{{JSRef}}
+ +

La méthode toTimeString()renvoie la partie « heure » de l'objet Date dans un format lisible par un humain, en anglais américain.

+ +
{{EmbedInteractiveExample("pages/js/date-totimestring.html")}}
+ +

Syntaxe

+ +
dateObj.toTimeString()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente l'heure de la date indiquée dans un format anglais américain.

+ +

Description

+ +

Une instance de {{jsxref("Date")}} représente un instant précis dans le temps. Appeler {{jsxref("Date.toString", "toString()")}} renverra la date formatée de façon à être lisible par un humain, en anglais américain. Pour le moteur JavaScript SpiderMonkey, ceci consiste en la partie « date » (jour, mois, année) suivie de la partie « heure » (heures, minutes, secondes, et fuseau horaire). Parfois, il est préférable d'obtenir seulement la partie « heure » ; c'est ce que renvoie la méthode toTimeString().

+ +

La méthode toTimeString() est particulièrement utile parce que les moteurs implémentant ECMA-262 peuvent obtenir des résultats différents avec la méthode {{jsxref("Date.prototype.toString()", "toString()")}} (en effet, le format dépend de l'implémentation). Ceci peut empêcher les manipulations de textes simples d'avoir des résultats cohérents au sein des différents moteurs/navigateurs.

+ +

Exemple

+ +

Utiliser toTimeString()

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.9.5.4', 'Date.prototype.toTimeString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.totimestring', 'Date.prototype.toTimeString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.totimestring', 'Date.prototype.toTimeString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toTimeString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/toutcstring/index.html b/files/fr/web/javascript/reference/global_objects/date/toutcstring/index.html deleted file mode 100644 index fb08c111a8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/toutcstring/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Date.prototype.toUTCString() -slug: Web/JavaScript/Reference/Global_Objects/Date/toUTCString -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/toUTCString -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toUTCString ---- -
{{JSRef}}
- -

La méthode toUTCString() convertit une date en une chaîne de caractères, selon le fuseau horaire UTC.

- -
{{EmbedInteractiveExample("pages/js/date-toutcstring.html")}}
- -

Syntaxe

- -
dateObj.toUTCString()
- -

Valeur de retour

- -

Une chaîne de caractères représentant la date indiquée selon le fuseau horaire UTC.

- -

Description

- -

La valeur renvoyée par toUTCString() est un texte au même format que celui renvoyé {{jsxref("Date.prototype.toString()")}} mais sans décalage de fuseau horaire (en UTC).

- -

Avant ECMAScript 2018, le format de la valeur renvoyée pouvait varier selon les plateformes. La valeur la plus couramment renvoyée était une date formatée selon la RFC 1123, qui est une version mise à jour de la RFC 822.

- -

Exemples

- -

Utiliser toUTCString()

- -
var aujourdhui = new Date();
-var UTCstring = aujourdhui.toUTCString();
-// Mon, 03 Jul 2006 21:44:38 GMT
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3. Le format dépend de l'implémentation.
{{SpecName('ES5.1', '#sec-15.9.5.42', 'Date.prototype.toUTCString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}{{Spec2('ES6')}} 
{{SpecName('ES2018', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}{{Spec2('ES2018')}}Première standardisation du format
{{SpecName('ESDraft', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.toUTCString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/toutcstring/index.md b/files/fr/web/javascript/reference/global_objects/date/toutcstring/index.md new file mode 100644 index 0000000000..fb08c111a8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/toutcstring/index.md @@ -0,0 +1,89 @@ +--- +title: Date.prototype.toUTCString() +slug: Web/JavaScript/Reference/Global_Objects/Date/toUTCString +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/toUTCString +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/toUTCString +--- +
{{JSRef}}
+ +

La méthode toUTCString() convertit une date en une chaîne de caractères, selon le fuseau horaire UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-toutcstring.html")}}
+ +

Syntaxe

+ +
dateObj.toUTCString()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant la date indiquée selon le fuseau horaire UTC.

+ +

Description

+ +

La valeur renvoyée par toUTCString() est un texte au même format que celui renvoyé {{jsxref("Date.prototype.toString()")}} mais sans décalage de fuseau horaire (en UTC).

+ +

Avant ECMAScript 2018, le format de la valeur renvoyée pouvait varier selon les plateformes. La valeur la plus couramment renvoyée était une date formatée selon la RFC 1123, qui est une version mise à jour de la RFC 822.

+ +

Exemples

+ +

Utiliser toUTCString()

+ +
var aujourdhui = new Date();
+var UTCstring = aujourdhui.toUTCString();
+// Mon, 03 Jul 2006 21:44:38 GMT
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3. Le format dépend de l'implémentation.
{{SpecName('ES5.1', '#sec-15.9.5.42', 'Date.prototype.toUTCString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}{{Spec2('ES6')}} 
{{SpecName('ES2018', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}{{Spec2('ES2018')}}Première standardisation du format
{{SpecName('ESDraft', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.toUTCString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/utc/index.html b/files/fr/web/javascript/reference/global_objects/date/utc/index.html deleted file mode 100644 index 8caed69035..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/utc/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Date.UTC() -slug: Web/JavaScript/Reference/Global_Objects/Date/UTC -tags: - - Date - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/UTC -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/UTC ---- -
{{JSRef}}
- -

La méthode Date.UTC() accepte des paramètres similaires à ceux du constructeur {{jsxref("Date")}} et renvoie le nombre de millièmes de seconde depuis le 1er janvier 1970, 00:00:00, temps universel. Autrement dit, elle renvoie la date en UTC.

- -
{{EmbedInteractiveExample("pages/js/date-utc.html")}}
- -

Syntaxe

- -
Date.UTC(année[,mois[,jour[,heures[,minutes[,secondes[,ms]]]]]])
- -

Paramètres

- -
-
année
-
Une année sur deux chiffres pour une année après 1900 (ex. 98 pour 1998) ou bien une année sur quatre chiffres (2018).
-
mois{{optional_inline}}
-
-

Un entier entre 0 (janvier) et 11 (décembre) représentant le mois.

- -

Note : Cet argument est optionnel depuis ECMAScript 2017.

-
-
jour{{optional_inline}}
-
Un entier entre 1 et 31 représentant le jour du mois. La valeur par défaut vaut 1.
-
heures{{optional_inline}}
-
Paramètre optionnel, un entier entre 0 et 23 représentant les heures. La valeur par défaut vaut 0.
-
minutes{{optional_inline}}
-
Paramètre optionnel, un entier entre 0 et 59 représentant les minutes. La valeur par défaut vaut 0.
-
secondes{{optional_inline}}
-
Paramètre optionnel, un entier entre 0 et 59 représentant les secondes. La valeur par défaut vaut 0.
-
ms{{optional_inline}}
-
Paramètre optionnel, un entier entre 0 et 999 représentant les millièmes de seconde. La valeur par défaut vaut 0.
-
- -

Valeur de retour

- -

Un nombre représentant le nombre de millisecondes écoulées entre la date indiquée et le premier janvier 1970 à minuit UTC.

- -

Description

- -

La méthode UTC prend des paramètres de date et d'heure séparés par des virgules et renvoie le nombre de millièmes de seconde entre le 1er janvier 1970, 00:00:00, temps universel et la date et l'heure spécifiées.

- -

Il faut spécifier l'année entière pour le premier paramètre ; par exemple 1998. Si l'année spécifiée est entre 0 et 99, la méthode la convertira en une année du XXe siècle (1900 + année) ; par exemple si vous indiquez 95, l'année 1995 sera utilisée.

- -

La méthode UTC diffère du constructeur {{jsxref("Date")}} pour deux raisons :

- - - -

Si un paramètre spécifié est en dehors des limites attendues, la méthode UTC met à jour les autres paramètres pour s'adapter à ce nombre. Par exemple, si vous utilisez 15 pour le mois, l'année sera incrémentée d'une unité (année + 1), et la valeur 3 (avril) sera utilisée pour le mois.

- -

Comme UTC est une méthode statique de Date, on l'utilise toujours sous la forme Date.UTC() plutôt que comme une méthode d'un objet Date que vous auriez créé.

- -

Exemples

- -

Utiliser Date.UTC()

- -

L'instruction qui suit crée un objet Date en utilisant l'heure UTC plutôt que l'heure locale :

- -
var utcDate = new Date(Date.UTC(96, 11, 1, 0, 0, 0));
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-date.utc', 'Date.UTC')}}{{Spec2('ESDraft')}}Le paramètre pour le mois est devenu optionnel avec ES2017.
{{SpecName('ES6', '#sec-date.utc', 'Date.UTC')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-15.9.4.3', 'Date.UTC')}}{{Spec2('ES5.1')}}
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.UTC")}}

- -

Notes de compatibilité

- -

Utiliser Date.UTC avec moins de deux arguments

- -

Lorsqu'on fournit moins de deux arguments à Date.UTC, {{jsxref("NaN")}} sera renvoyé. Ce comportement a été spécifié dans ECMAScript 2017 et les moteurs qui n'obéissaient pas à cette règle on été mis à jour (cf. {{bug(1050755)}}, ecma-262 #642).

- -
Date.UTC();
-Date.UTC(1);
-
-// Safari: NaN
-// Chrome/Opera/V8: NaN
-
-// Firefox <54: non-NaN
-// Firefox 54+: NaN
-
-// IE: non-NaN
-// Edge: NaN
-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/utc/index.md b/files/fr/web/javascript/reference/global_objects/date/utc/index.md new file mode 100644 index 0000000000..8caed69035 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/utc/index.md @@ -0,0 +1,134 @@ +--- +title: Date.UTC() +slug: Web/JavaScript/Reference/Global_Objects/Date/UTC +tags: + - Date + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/UTC +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/UTC +--- +
{{JSRef}}
+ +

La méthode Date.UTC() accepte des paramètres similaires à ceux du constructeur {{jsxref("Date")}} et renvoie le nombre de millièmes de seconde depuis le 1er janvier 1970, 00:00:00, temps universel. Autrement dit, elle renvoie la date en UTC.

+ +
{{EmbedInteractiveExample("pages/js/date-utc.html")}}
+ +

Syntaxe

+ +
Date.UTC(année[,mois[,jour[,heures[,minutes[,secondes[,ms]]]]]])
+ +

Paramètres

+ +
+
année
+
Une année sur deux chiffres pour une année après 1900 (ex. 98 pour 1998) ou bien une année sur quatre chiffres (2018).
+
mois{{optional_inline}}
+
+

Un entier entre 0 (janvier) et 11 (décembre) représentant le mois.

+ +

Note : Cet argument est optionnel depuis ECMAScript 2017.

+
+
jour{{optional_inline}}
+
Un entier entre 1 et 31 représentant le jour du mois. La valeur par défaut vaut 1.
+
heures{{optional_inline}}
+
Paramètre optionnel, un entier entre 0 et 23 représentant les heures. La valeur par défaut vaut 0.
+
minutes{{optional_inline}}
+
Paramètre optionnel, un entier entre 0 et 59 représentant les minutes. La valeur par défaut vaut 0.
+
secondes{{optional_inline}}
+
Paramètre optionnel, un entier entre 0 et 59 représentant les secondes. La valeur par défaut vaut 0.
+
ms{{optional_inline}}
+
Paramètre optionnel, un entier entre 0 et 999 représentant les millièmes de seconde. La valeur par défaut vaut 0.
+
+ +

Valeur de retour

+ +

Un nombre représentant le nombre de millisecondes écoulées entre la date indiquée et le premier janvier 1970 à minuit UTC.

+ +

Description

+ +

La méthode UTC prend des paramètres de date et d'heure séparés par des virgules et renvoie le nombre de millièmes de seconde entre le 1er janvier 1970, 00:00:00, temps universel et la date et l'heure spécifiées.

+ +

Il faut spécifier l'année entière pour le premier paramètre ; par exemple 1998. Si l'année spécifiée est entre 0 et 99, la méthode la convertira en une année du XXe siècle (1900 + année) ; par exemple si vous indiquez 95, l'année 1995 sera utilisée.

+ +

La méthode UTC diffère du constructeur {{jsxref("Date")}} pour deux raisons :

+ + + +

Si un paramètre spécifié est en dehors des limites attendues, la méthode UTC met à jour les autres paramètres pour s'adapter à ce nombre. Par exemple, si vous utilisez 15 pour le mois, l'année sera incrémentée d'une unité (année + 1), et la valeur 3 (avril) sera utilisée pour le mois.

+ +

Comme UTC est une méthode statique de Date, on l'utilise toujours sous la forme Date.UTC() plutôt que comme une méthode d'un objet Date que vous auriez créé.

+ +

Exemples

+ +

Utiliser Date.UTC()

+ +

L'instruction qui suit crée un objet Date en utilisant l'heure UTC plutôt que l'heure locale :

+ +
var utcDate = new Date(Date.UTC(96, 11, 1, 0, 0, 0));
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-date.utc', 'Date.UTC')}}{{Spec2('ESDraft')}}Le paramètre pour le mois est devenu optionnel avec ES2017.
{{SpecName('ES6', '#sec-date.utc', 'Date.UTC')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-15.9.4.3', 'Date.UTC')}}{{Spec2('ES5.1')}}
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.UTC")}}

+ +

Notes de compatibilité

+ +

Utiliser Date.UTC avec moins de deux arguments

+ +

Lorsqu'on fournit moins de deux arguments à Date.UTC, {{jsxref("NaN")}} sera renvoyé. Ce comportement a été spécifié dans ECMAScript 2017 et les moteurs qui n'obéissaient pas à cette règle on été mis à jour (cf. {{bug(1050755)}}, ecma-262 #642).

+ +
Date.UTC();
+Date.UTC(1);
+
+// Safari: NaN
+// Chrome/Opera/V8: NaN
+
+// Firefox <54: non-NaN
+// Firefox 54+: NaN
+
+// IE: non-NaN
+// Edge: NaN
+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/date/valueof/index.html b/files/fr/web/javascript/reference/global_objects/date/valueof/index.html deleted file mode 100644 index fb835f4c3b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/date/valueof/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Date.prototype.valueOf() -slug: Web/JavaScript/Reference/Global_Objects/Date/valueOf -tags: - - Date - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Date/valueOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Date/valueOF ---- -
{{JSRef}}
- -

La méthode valueOf() renvoie la valeur primitive d'un objet {{jsxref("Date")}}.

- -
{{EmbedInteractiveExample("pages/js/date-valueof.html")}}
- -

Syntaxe

- -
date.valueOf()
- -

Valeur de retour

- -

Le nombre de millisecondes écoulées entre le premier janvier 1970, minuit UTC et la date indiquée.

- -

Description

- -

La méthode valueOf() renvoie la valeur primitive d'un objet Date sous forme d'un nombre. Ce nombre correspond au nombre de millisecondes écoulées depuis le 1 janvier 1970 00h00 GMT.

- -

D'un point de vue fonctionnel, cette méthode est équivalente à {{jsxref("Date.prototype.getTime()")}}.

- -

Cette méthode est souvent appelée en interne par le moteur JavaScript et n'est pas utilisée de façon explicite dans des scripts.

- -

Exemples

- -

Utiliser valueOf()

- -
var x = new Date(56, 6, 17);
-var maVar = x.valueOf();      // maVar vaut -424713600000
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.9.5.8', 'Date.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.valueof', 'Date.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.valueof', 'Date.prototype.valueOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Date.valueOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/date/valueof/index.md b/files/fr/web/javascript/reference/global_objects/date/valueof/index.md new file mode 100644 index 0000000000..fb835f4c3b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/date/valueof/index.md @@ -0,0 +1,84 @@ +--- +title: Date.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Date/valueOf +tags: + - Date + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Date/valueOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Date/valueOF +--- +
{{JSRef}}
+ +

La méthode valueOf() renvoie la valeur primitive d'un objet {{jsxref("Date")}}.

+ +
{{EmbedInteractiveExample("pages/js/date-valueof.html")}}
+ +

Syntaxe

+ +
date.valueOf()
+ +

Valeur de retour

+ +

Le nombre de millisecondes écoulées entre le premier janvier 1970, minuit UTC et la date indiquée.

+ +

Description

+ +

La méthode valueOf() renvoie la valeur primitive d'un objet Date sous forme d'un nombre. Ce nombre correspond au nombre de millisecondes écoulées depuis le 1 janvier 1970 00h00 GMT.

+ +

D'un point de vue fonctionnel, cette méthode est équivalente à {{jsxref("Date.prototype.getTime()")}}.

+ +

Cette méthode est souvent appelée en interne par le moteur JavaScript et n'est pas utilisée de façon explicite dans des scripts.

+ +

Exemples

+ +

Utiliser valueOf()

+ +
var x = new Date(56, 6, 17);
+var maVar = x.valueOf();      // maVar vaut -424713600000
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.9.5.8', 'Date.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-date.prototype.valueof', 'Date.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-date.prototype.valueof', 'Date.prototype.valueOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Date.valueOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/decodeuri/index.html b/files/fr/web/javascript/reference/global_objects/decodeuri/index.html deleted file mode 100644 index 07d7dd5a71..0000000000 --- a/files/fr/web/javascript/reference/global_objects/decodeuri/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: decodeURI() -slug: Web/JavaScript/Reference/Global_Objects/decodeURI -tags: - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/decodeURI -original_slug: Web/JavaScript/Reference/Objets_globaux/decodeURI ---- -
{{jsSidebar("Objects")}}
- -

La méthode decodeURI() permet de décoder un Uniform Resource Identifier (URI) créé par la méthode {{jsxref("encodeURI","encodeURI()")}} ou une méthode similaire.

- -
{{EmbedInteractiveExample("pages/js/globalprops-decodeuri.html")}}
- -

Syntaxe

- -
decodeURI(encodedURI)
- -

Paramètres

- -
-
encodedURI
-
Un URI complet, encodé.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères dont certains caractères ont été décodés à partir de l'URI encodée passée en argument.

- -

Exceptions

- -

Cette méthode lève une exception {{jsxref("URIError")}} ("malformed URI sequence") lorsque la chaîne passée en argument contient des séquences de caractères invalides.

- -

Description

- -

Cette méthode remplace chaque séquence d'échappement présente dans l'URI encodée avec le caractère correspondant. Les séquences d'échappement qui n'auraient pas pu être introduites par {{jsxref("encodeURI", "encodeURI()")}} ne seront pas décodées. Le caractère « # » n'est pas décodé au sein des séquences d'échappement.

- -

Exemples

- -

Décoder une URL cyrillique

- -
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_шеллы"
-
- -

Gérer les exceptions

- -
try {
-  var a = decodeURI('%E0%A4%A');
-} catch(e) {
-  console.error(e);
-}
-
-// Cela produira "URIError: malformed URI sequence"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.3.1', 'decodeURI')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-decodeuri-encodeduri', 'decodeURI')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-decodeuri-encodeduri', 'decodeURI')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/decodeuri/index.md b/files/fr/web/javascript/reference/global_objects/decodeuri/index.md new file mode 100644 index 0000000000..07d7dd5a71 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/decodeuri/index.md @@ -0,0 +1,100 @@ +--- +title: decodeURI() +slug: Web/JavaScript/Reference/Global_Objects/decodeURI +tags: + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/decodeURI +original_slug: Web/JavaScript/Reference/Objets_globaux/decodeURI +--- +
{{jsSidebar("Objects")}}
+ +

La méthode decodeURI() permet de décoder un Uniform Resource Identifier (URI) créé par la méthode {{jsxref("encodeURI","encodeURI()")}} ou une méthode similaire.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-decodeuri.html")}}
+ +

Syntaxe

+ +
decodeURI(encodedURI)
+ +

Paramètres

+ +
+
encodedURI
+
Un URI complet, encodé.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères dont certains caractères ont été décodés à partir de l'URI encodée passée en argument.

+ +

Exceptions

+ +

Cette méthode lève une exception {{jsxref("URIError")}} ("malformed URI sequence") lorsque la chaîne passée en argument contient des séquences de caractères invalides.

+ +

Description

+ +

Cette méthode remplace chaque séquence d'échappement présente dans l'URI encodée avec le caractère correspondant. Les séquences d'échappement qui n'auraient pas pu être introduites par {{jsxref("encodeURI", "encodeURI()")}} ne seront pas décodées. Le caractère « # » n'est pas décodé au sein des séquences d'échappement.

+ +

Exemples

+ +

Décoder une URL cyrillique

+ +
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_шеллы"
+
+ +

Gérer les exceptions

+ +
try {
+  var a = decodeURI('%E0%A4%A');
+} catch(e) {
+  console.error(e);
+}
+
+// Cela produira "URIError: malformed URI sequence"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.3.1', 'decodeURI')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-decodeuri-encodeduri', 'decodeURI')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-decodeuri-encodeduri', 'decodeURI')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.html b/files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.html deleted file mode 100644 index af978f1b90..0000000000 --- a/files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: decodeURIComponent() -slug: Web/JavaScript/Reference/Global_Objects/decodeURIComponent -tags: - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/decodeURIComponent -original_slug: Web/JavaScript/Reference/Objets_globaux/decodeURIComponent ---- -
{{jsSidebar("Objects")}}
- -

La fonction decodeURIComponent() permet de décoder un composant d'un Uniform Resource Identifier (URI) précédemment créé par {{jsxref("encodeURIComponent")}} ou par une méthode similaire.

- -
{{EmbedInteractiveExample("pages/js/globalprops-decodeuricomponent.html")}}
- -

Syntaxe

- -
decodeURIComponent(encodedURI)
- -

Paramètres

- -
-
encodedURI
-
Un composant d'URI qui est encodé.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères qui représente la version décodée du composant d'URI encodé passé en argument.

- -

Exceptions levées

- -

Cette méthode lève une exception {{jsxref("URIError")}} ("malformed URI sequence") lorsqu'elle est utilisée de façon incorrecte.

- -

Description

- -

Cette méthode remplace chaque séquence d'échappement du composant d'URI encodé par le caractère que la séquence représente.

- -

Exemples

- -

Décoder un composant d'URL encodé

- -
decodeURIComponent("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
-// "JavaScript_шеллы"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.3.2', 'decodeURIComponent')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-decodeuricomponent-encodeduricomponent', 'decodeURIComponent')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-decodeuricomponent-encodeduricomponent', 'decodeURIComponent')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.md b/files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.md new file mode 100644 index 0000000000..af978f1b90 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/decodeuricomponent/index.md @@ -0,0 +1,89 @@ +--- +title: decodeURIComponent() +slug: Web/JavaScript/Reference/Global_Objects/decodeURIComponent +tags: + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/decodeURIComponent +original_slug: Web/JavaScript/Reference/Objets_globaux/decodeURIComponent +--- +
{{jsSidebar("Objects")}}
+ +

La fonction decodeURIComponent() permet de décoder un composant d'un Uniform Resource Identifier (URI) précédemment créé par {{jsxref("encodeURIComponent")}} ou par une méthode similaire.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-decodeuricomponent.html")}}
+ +

Syntaxe

+ +
decodeURIComponent(encodedURI)
+ +

Paramètres

+ +
+
encodedURI
+
Un composant d'URI qui est encodé.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères qui représente la version décodée du composant d'URI encodé passé en argument.

+ +

Exceptions levées

+ +

Cette méthode lève une exception {{jsxref("URIError")}} ("malformed URI sequence") lorsqu'elle est utilisée de façon incorrecte.

+ +

Description

+ +

Cette méthode remplace chaque séquence d'échappement du composant d'URI encodé par le caractère que la séquence représente.

+ +

Exemples

+ +

Décoder un composant d'URL encodé

+ +
decodeURIComponent("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
+// "JavaScript_шеллы"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.3.2', 'decodeURIComponent')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-decodeuricomponent-encodeduricomponent', 'decodeURIComponent')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-decodeuricomponent-encodeduricomponent', 'decodeURIComponent')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/encodeuri/index.html b/files/fr/web/javascript/reference/global_objects/encodeuri/index.html deleted file mode 100644 index 1020c28623..0000000000 --- a/files/fr/web/javascript/reference/global_objects/encodeuri/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: encodeURI() -slug: Web/JavaScript/Reference/Global_Objects/encodeURI -tags: - - JavaScript - - Reference - - URI -translation_of: Web/JavaScript/Reference/Global_Objects/encodeURI -original_slug: Web/JavaScript/Reference/Objets_globaux/encodeURI ---- -
{{jsSidebar("Objects")}}
- -

La fonction encodeURI() encode un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par une, deux, trois ou quatre séquences d'échappement représentant le caractère encodé en UTF-8 (les quatre séquences d'échappement ne seront utilisées que si le caractère est composé de deux caractères « surrogate »).

- -
{{EmbedInteractiveExample("pages/js/globalprops-encodeuri.html")}}
- -

Syntaxe

- -
encodeURI(URI)
- -

Paramètres

- -
-
URI
-
Un Uniform Resource Identifier complet.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères représentant un URI, encodé, à partir de la chaîne de caractères passée en argument.

- -

Description

- -

encodeURI() échappe tous les caractères sauf ceux-ci :

- -
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
-
- -

encodeURI() est différente de {{jsxref("encodeURIComponent")}}. Par exemple :

- -
var set1 = ";,/?:@&=+$#";  // Caractères réservés
-var set2 = "-_.!~*'()";   // Caractères non-réservés
-var set3 = "ABC abc 123"; // Caractères alphanumériques et espace
-
-console.log(encodeURI(set1)); // ;,/?:@&=+$#
-console.log(encodeURI(set2)); // -_.!~*'()
-console.log(encodeURI(set3)); // ABC%20abc%20123 (l'espace est encodé en %20)
-
-console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24%23
-console.log(encodeURIComponent(set2)); // -_.!~*'()
-console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (l'espace est encodé en %20)
-
-
- -

Une exception {{jsxref("URIError")}} sera levée si on tente d'encoder un caractère surrogate (demi-codet) qui ne fait pas partie d'une paire :

- -
// On a une paire de codets surrogate
-console.log(encodeURI('\uD800\uDFFF'));
-
-// Ici, seul le caractère "haut"
-// ce qui déclenche une "URIError: malformed URI sequence"
-console.log(encodeURI('\uD800'));
-
-// Ici, seul le caractère "bas"
-// ce qui déclenche une "URIError: malformed URI sequence"
-console.log(encodeURI('\uDFFF'));
-
- -

encodeURI() ne permet pas de former des requêtes HTTP GET ou POST (par exemple avec {{domxref("XMLHTTPRequest")}}) car "&", "+" et "=" ne sont pas encodés et sont traités comme des caractères spéciaux (toutefois, la méthode. {{jsxref("encodeURIComponent")}} pourra être utilisée pour encoder ces caractères).

- -

Si on souhaite suivre la RFC3986 qui concerne les URL et qui rend les crochets réservés (pour IPv6) (il ne faut donc plus encoder ces caractères lorsqu'ils font partie d'une URL (notamment pour la partie représentant l'hôte), on pourra utiliser le fragment de code suivant :

- -
function fixedEncodeURI(str) {
-  return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-encodeuri-uri', 'encodeURI')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-encodeuri-uri', 'encodeURI')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-15.1.3.3', 'encodeURI')}}{{Spec2('ES5.1')}}
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/encodeuri/index.md b/files/fr/web/javascript/reference/global_objects/encodeuri/index.md new file mode 100644 index 0000000000..1020c28623 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/encodeuri/index.md @@ -0,0 +1,121 @@ +--- +title: encodeURI() +slug: Web/JavaScript/Reference/Global_Objects/encodeURI +tags: + - JavaScript + - Reference + - URI +translation_of: Web/JavaScript/Reference/Global_Objects/encodeURI +original_slug: Web/JavaScript/Reference/Objets_globaux/encodeURI +--- +
{{jsSidebar("Objects")}}
+ +

La fonction encodeURI() encode un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par une, deux, trois ou quatre séquences d'échappement représentant le caractère encodé en UTF-8 (les quatre séquences d'échappement ne seront utilisées que si le caractère est composé de deux caractères « surrogate »).

+ +
{{EmbedInteractiveExample("pages/js/globalprops-encodeuri.html")}}
+ +

Syntaxe

+ +
encodeURI(URI)
+ +

Paramètres

+ +
+
URI
+
Un Uniform Resource Identifier complet.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères représentant un URI, encodé, à partir de la chaîne de caractères passée en argument.

+ +

Description

+ +

encodeURI() échappe tous les caractères sauf ceux-ci :

+ +
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
+
+ +

encodeURI() est différente de {{jsxref("encodeURIComponent")}}. Par exemple :

+ +
var set1 = ";,/?:@&=+$#";  // Caractères réservés
+var set2 = "-_.!~*'()";   // Caractères non-réservés
+var set3 = "ABC abc 123"; // Caractères alphanumériques et espace
+
+console.log(encodeURI(set1)); // ;,/?:@&=+$#
+console.log(encodeURI(set2)); // -_.!~*'()
+console.log(encodeURI(set3)); // ABC%20abc%20123 (l'espace est encodé en %20)
+
+console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24%23
+console.log(encodeURIComponent(set2)); // -_.!~*'()
+console.log(encodeURIComponent(set3)); // ABC%20abc%20123 (l'espace est encodé en %20)
+
+
+ +

Une exception {{jsxref("URIError")}} sera levée si on tente d'encoder un caractère surrogate (demi-codet) qui ne fait pas partie d'une paire :

+ +
// On a une paire de codets surrogate
+console.log(encodeURI('\uD800\uDFFF'));
+
+// Ici, seul le caractère "haut"
+// ce qui déclenche une "URIError: malformed URI sequence"
+console.log(encodeURI('\uD800'));
+
+// Ici, seul le caractère "bas"
+// ce qui déclenche une "URIError: malformed URI sequence"
+console.log(encodeURI('\uDFFF'));
+
+ +

encodeURI() ne permet pas de former des requêtes HTTP GET ou POST (par exemple avec {{domxref("XMLHTTPRequest")}}) car "&", "+" et "=" ne sont pas encodés et sont traités comme des caractères spéciaux (toutefois, la méthode. {{jsxref("encodeURIComponent")}} pourra être utilisée pour encoder ces caractères).

+ +

Si on souhaite suivre la RFC3986 qui concerne les URL et qui rend les crochets réservés (pour IPv6) (il ne faut donc plus encoder ces caractères lorsqu'ils font partie d'une URL (notamment pour la partie représentant l'hôte), on pourra utiliser le fragment de code suivant :

+ +
function fixedEncodeURI(str) {
+  return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-encodeuri-uri', 'encodeURI')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-encodeuri-uri', 'encodeURI')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-15.1.3.3', 'encodeURI')}}{{Spec2('ES5.1')}}
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.html b/files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.html deleted file mode 100644 index c3deeef114..0000000000 --- a/files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.html +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: encodeURIComponent() -slug: Web/JavaScript/Reference/Global_Objects/encodeURIComponent -tags: - - JavaScript - - Reference - - URI -translation_of: Web/JavaScript/Reference/Global_Objects/encodeURIComponent -original_slug: Web/JavaScript/Reference/Objets_globaux/encodeURIComponent ---- -
{{jsSidebar("Objects")}}
- -

La fonction encodeURIComponent() permet d'encoder un composant d'un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par une, deux, trois ou quatres séquences d'échappement UTF-8 correspondantes (quatre séquences seront utilisées uniquement lorsque les caractères à encoder sont composés de deux caractères « surrogate »).

- -
{{EmbedInteractiveExample("pages/js/globalprops-encodeuricomponent.html")}}
- -

Syntaxe

- -
encodeURIComponent(str);
- -

Paramètres

- -
-
str
-
Une chaîne de caractères qui correspond à un composant d'URI.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères qui représente un composant d'URI obtenu en encodant la chaîne passée en argument.

- -

Description

- -

encodeURIComponent() échappe tous les caractères sauf : les lettres de l'alphabet latin, les chiffres (arabes) et - _ . ! ~ * ' ( )

- -

La méthode encodeURIComponent() diffère de la méthode encodeURI() par rapport aux caractères qui sont encodés :

- -
var set1 = ";,/?:@&=+$";  // Caractères réservés
-var set2 = "-_.!~*'()";   // Caractères non-réservés
-var set3 = "#";           // Croisillon
-var set4 = "ABC abc 123"; // Caractères alphanumériques et espace
-
-console.log(encodeURI(set1)); // ;,/?:@&=+$
-console.log(encodeURI(set2)); // -_.!~*'()
-console.log(encodeURI(set3)); // #
-console.log(encodeURI(set4)); // ABC%20abc%20123 (l'espace est encodé en %20)
-
-console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24
-console.log(encodeURIComponent(set2)); // -_.!~*'()
-console.log(encodeURIComponent(set3)); // #
-console.log(encodeURIComponent(set4)); // ABC%20abc%20123 (l'espace est encodé en %20)
-
-
- -

Une exception {{jsxref("URIError")}} sera levée lorsqu'on utilise cette fonction sur un unique demi-codet qui est censé faire partie d'une paire de demi-codets :

- -
// la paire de demi-codets : OK
-console.log(encodeURIComponent('\uD800\uDFFF'));
-
-// seul le demi-codet supérieur : "URIError: malformed URI sequence"
-console.log(encodeURIComponent('\uD800'));
-
-// seul le demi-codet inférieur : "URIError: malformed URI sequence"
-console.log(encodeURIComponent('\uDFFF'));
-
- -

Afin d'éviter des requêtes inattendues vers le serveur, il est conseillé d'utiliser la fonction encodeURIComponent() pour n'importe quel paramètre qui aurait été saisi par l'utilisateur et qui ferait partie d'un URI. Ainsi, si un utilisateur peut saisir "Thym &access=admin" dans une variable commentaire et qu'on n'utilise pas encodeURIComponent(), on obtiendra la chaîne commentaire=Thym%20&access=admin. On voit ici que l'esperluette (&) et le signe égal forment une nouvelle paire clé/valeur. Au lieu d'avoir une clé POST commentaire égale à "Thym &access=admin", on aura deux clés POST, l'une égale à "Thym " et une seconde (access) égale à admin.

- -

Pour application/x-www-form-urlencoded, les espaces sont remplacés par un '+', aussi, dans ce cas, on pourra ajouter un remplacement supplémentaire après encodeURIComponent() pour remplacer "%20" par "+".

- -

Pour utiliser une fonction qui respecte la RFC 3986, plus stricte (qui réserve les caractères !, ', (, ), et * même si ces caractères n'ont pas d'usage normalisé), on pourra utiliser la fonction suivante :

- -
function fixedEncodeURIComponent (str) {
-  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
-    return '%' + c.charCodeAt(0).toString(16);
-  });
-}
-
- -

Exemples

- -

Dans l'exemple qui suit, on utilise une méthode spéciale pour l'encodage afin d'utiliser les paramètres d'en-tête de réponse Content-Disposition et Link (pour, par exemple, représenter des noms de fichiers en UTF-8) :

- -
var nomFichier = 'mon fichier(2).txt';
-var header = "Content-Disposition: attachment; filename*=UTF-8''"
-             + encodeRFC5987ValueChars(nomFichier);
-
-console.log(header);
-// affiche "Content-Disposition: attachment; filename*=UTF-8''mon%20fichier%282%29.txt"
-
-
-function encodeRFC5987ValueChars (str) {
-    return encodeURIComponent(str).
-        // Bien que la RFC 3986 réserve "!", RFC 5987 ne réserve pas ce caractère,
-        // il n'est donc pas nécessaire l'échapper
-        replace(/['()]/g, escape). // c'est-à-dire %27 %28 %29
-        replace(/\*/g, '%2A').
-            // Selon la RFC 5987 ce qui suit n'est pas nécessairement requis
-            // on peut donc bénéficier d'un peu plus de lisibilité : |`^
-            replace(/%(?:7C|60|5E)/g, unescape);
-}
-
-// Voici une autre version équivalente
-function encodeRFC5987ValueChars2(str) {
-  return encodeURIComponent(str).
-    // Bien que la RFC 3986 réserve "!", RFC 5987 ne réserve pas ce caractère,
-    // il n'est donc pas nécessaire l'échapper
-    replace(/['()*]/g, c => '%' + c.charCodeAt(0).toString(16)). // i.e., %27 %28 %29 %2a
-    // on notera que l'encodage valide pour "*" est %2A et qui faut donc appeler toUpperCase()
-    // pour encoder exactement.
-
-    // Selon la RFC 5987 ce qui suit n'est pas nécessairement requis
-    // on peut donc bénéficier d'un peu plus de lisibilité : |`^
-    replace(/%(7C|60|5E)/g, (str, hex) => String.fromCharCode(parseInt(hex, 16)));
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.3.4', 'encodeURIComponent')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.md b/files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.md new file mode 100644 index 0000000000..c3deeef114 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/encodeuricomponent/index.md @@ -0,0 +1,160 @@ +--- +title: encodeURIComponent() +slug: Web/JavaScript/Reference/Global_Objects/encodeURIComponent +tags: + - JavaScript + - Reference + - URI +translation_of: Web/JavaScript/Reference/Global_Objects/encodeURIComponent +original_slug: Web/JavaScript/Reference/Objets_globaux/encodeURIComponent +--- +
{{jsSidebar("Objects")}}
+ +

La fonction encodeURIComponent() permet d'encoder un composant d'un Uniform Resource Identifier (URI) en remplaçant chaque exemplaire de certains caractères par une, deux, trois ou quatres séquences d'échappement UTF-8 correspondantes (quatre séquences seront utilisées uniquement lorsque les caractères à encoder sont composés de deux caractères « surrogate »).

+ +
{{EmbedInteractiveExample("pages/js/globalprops-encodeuricomponent.html")}}
+ +

Syntaxe

+ +
encodeURIComponent(str);
+ +

Paramètres

+ +
+
str
+
Une chaîne de caractères qui correspond à un composant d'URI.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères qui représente un composant d'URI obtenu en encodant la chaîne passée en argument.

+ +

Description

+ +

encodeURIComponent() échappe tous les caractères sauf : les lettres de l'alphabet latin, les chiffres (arabes) et - _ . ! ~ * ' ( )

+ +

La méthode encodeURIComponent() diffère de la méthode encodeURI() par rapport aux caractères qui sont encodés :

+ +
var set1 = ";,/?:@&=+$";  // Caractères réservés
+var set2 = "-_.!~*'()";   // Caractères non-réservés
+var set3 = "#";           // Croisillon
+var set4 = "ABC abc 123"; // Caractères alphanumériques et espace
+
+console.log(encodeURI(set1)); // ;,/?:@&=+$
+console.log(encodeURI(set2)); // -_.!~*'()
+console.log(encodeURI(set3)); // #
+console.log(encodeURI(set4)); // ABC%20abc%20123 (l'espace est encodé en %20)
+
+console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24
+console.log(encodeURIComponent(set2)); // -_.!~*'()
+console.log(encodeURIComponent(set3)); // #
+console.log(encodeURIComponent(set4)); // ABC%20abc%20123 (l'espace est encodé en %20)
+
+
+ +

Une exception {{jsxref("URIError")}} sera levée lorsqu'on utilise cette fonction sur un unique demi-codet qui est censé faire partie d'une paire de demi-codets :

+ +
// la paire de demi-codets : OK
+console.log(encodeURIComponent('\uD800\uDFFF'));
+
+// seul le demi-codet supérieur : "URIError: malformed URI sequence"
+console.log(encodeURIComponent('\uD800'));
+
+// seul le demi-codet inférieur : "URIError: malformed URI sequence"
+console.log(encodeURIComponent('\uDFFF'));
+
+ +

Afin d'éviter des requêtes inattendues vers le serveur, il est conseillé d'utiliser la fonction encodeURIComponent() pour n'importe quel paramètre qui aurait été saisi par l'utilisateur et qui ferait partie d'un URI. Ainsi, si un utilisateur peut saisir "Thym &access=admin" dans une variable commentaire et qu'on n'utilise pas encodeURIComponent(), on obtiendra la chaîne commentaire=Thym%20&access=admin. On voit ici que l'esperluette (&) et le signe égal forment une nouvelle paire clé/valeur. Au lieu d'avoir une clé POST commentaire égale à "Thym &access=admin", on aura deux clés POST, l'une égale à "Thym " et une seconde (access) égale à admin.

+ +

Pour application/x-www-form-urlencoded, les espaces sont remplacés par un '+', aussi, dans ce cas, on pourra ajouter un remplacement supplémentaire après encodeURIComponent() pour remplacer "%20" par "+".

+ +

Pour utiliser une fonction qui respecte la RFC 3986, plus stricte (qui réserve les caractères !, ', (, ), et * même si ces caractères n'ont pas d'usage normalisé), on pourra utiliser la fonction suivante :

+ +
function fixedEncodeURIComponent (str) {
+  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
+    return '%' + c.charCodeAt(0).toString(16);
+  });
+}
+
+ +

Exemples

+ +

Dans l'exemple qui suit, on utilise une méthode spéciale pour l'encodage afin d'utiliser les paramètres d'en-tête de réponse Content-Disposition et Link (pour, par exemple, représenter des noms de fichiers en UTF-8) :

+ +
var nomFichier = 'mon fichier(2).txt';
+var header = "Content-Disposition: attachment; filename*=UTF-8''"
+             + encodeRFC5987ValueChars(nomFichier);
+
+console.log(header);
+// affiche "Content-Disposition: attachment; filename*=UTF-8''mon%20fichier%282%29.txt"
+
+
+function encodeRFC5987ValueChars (str) {
+    return encodeURIComponent(str).
+        // Bien que la RFC 3986 réserve "!", RFC 5987 ne réserve pas ce caractère,
+        // il n'est donc pas nécessaire l'échapper
+        replace(/['()]/g, escape). // c'est-à-dire %27 %28 %29
+        replace(/\*/g, '%2A').
+            // Selon la RFC 5987 ce qui suit n'est pas nécessairement requis
+            // on peut donc bénéficier d'un peu plus de lisibilité : |`^
+            replace(/%(?:7C|60|5E)/g, unescape);
+}
+
+// Voici une autre version équivalente
+function encodeRFC5987ValueChars2(str) {
+  return encodeURIComponent(str).
+    // Bien que la RFC 3986 réserve "!", RFC 5987 ne réserve pas ce caractère,
+    // il n'est donc pas nécessaire l'échapper
+    replace(/['()*]/g, c => '%' + c.charCodeAt(0).toString(16)). // i.e., %27 %28 %29 %2a
+    // on notera que l'encodage valide pour "*" est %2A et qui faut donc appeler toUpperCase()
+    // pour encoder exactement.
+
+    // Selon la RFC 5987 ce qui suit n'est pas nécessairement requis
+    // on peut donc bénéficier d'un peu plus de lisibilité : |`^
+    replace(/%(7C|60|5E)/g, (str, hex) => String.fromCharCode(parseInt(hex, 16)));
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.3.4', 'encodeURIComponent')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/columnnumber/index.html b/files/fr/web/javascript/reference/global_objects/error/columnnumber/index.html deleted file mode 100644 index b507d0b41f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/columnnumber/index.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Error.prototype.columnNumber -slug: Web/JavaScript/Reference/Global_Objects/Error/columnNumber -tags: - - Error - - JavaScript - - Non-standard - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/columnNumber -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/columnNumber ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété columnNumber contient le numéro de la colonne, dans la ligne du fichier qui a déclenché l'erreur.

- -

Exemples

- -

Utiliser de columnNumber

- -
var e = new Error("Ne peut pas lire la donnée");
-throw e;
-console.log(e.columnNumber) // 0
-
- -

Spécifications

- -

Ne fait partie d'aucune spécification. Non standard.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Error.columnNumber")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/columnnumber/index.md b/files/fr/web/javascript/reference/global_objects/error/columnnumber/index.md new file mode 100644 index 0000000000..b507d0b41f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/columnnumber/index.md @@ -0,0 +1,40 @@ +--- +title: Error.prototype.columnNumber +slug: Web/JavaScript/Reference/Global_Objects/Error/columnNumber +tags: + - Error + - JavaScript + - Non-standard + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/columnNumber +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/columnNumber +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété columnNumber contient le numéro de la colonne, dans la ligne du fichier qui a déclenché l'erreur.

+ +

Exemples

+ +

Utiliser de columnNumber

+ +
var e = new Error("Ne peut pas lire la donnée");
+throw e;
+console.log(e.columnNumber) // 0
+
+ +

Spécifications

+ +

Ne fait partie d'aucune spécification. Non standard.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Error.columnNumber")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/filename/index.html b/files/fr/web/javascript/reference/global_objects/error/filename/index.html deleted file mode 100644 index 2a2cda2422..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/filename/index.html +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Error.prototype.fileName -slug: Web/JavaScript/Reference/Global_Objects/Error/fileName -tags: - - Error - - JavaScript - - Non-standard - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/fileName -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/fileName ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété fileName contient le chemin vers le fichier qui a déclenché l'erreur.

- -

Description

- -

Cette propriété non-standard contient le chemin vers le fichier qui a déclenché cette erreur. Si elle est appelée depuis un débugger (les outils de développement de Firefox par exemple), "debugger eval code" sera renvoyé.

- -

Exemples

- -

Utiliser fileName

- -
var e = new Error("Ne peut pas lire la donnée");
-throw e;
-// e.fileName peut ressembler à "file:///C:/exemple.html"
-
- -

Spécifications

- -

Ne fait partie d'aucune spécification. Non standard.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Error.fileName")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/filename/index.md b/files/fr/web/javascript/reference/global_objects/error/filename/index.md new file mode 100644 index 0000000000..2a2cda2422 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/filename/index.md @@ -0,0 +1,45 @@ +--- +title: Error.prototype.fileName +slug: Web/JavaScript/Reference/Global_Objects/Error/fileName +tags: + - Error + - JavaScript + - Non-standard + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/fileName +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/fileName +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété fileName contient le chemin vers le fichier qui a déclenché l'erreur.

+ +

Description

+ +

Cette propriété non-standard contient le chemin vers le fichier qui a déclenché cette erreur. Si elle est appelée depuis un débugger (les outils de développement de Firefox par exemple), "debugger eval code" sera renvoyé.

+ +

Exemples

+ +

Utiliser fileName

+ +
var e = new Error("Ne peut pas lire la donnée");
+throw e;
+// e.fileName peut ressembler à "file:///C:/exemple.html"
+
+ +

Spécifications

+ +

Ne fait partie d'aucune spécification. Non standard.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Error.fileName")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/index.html b/files/fr/web/javascript/reference/global_objects/error/index.html deleted file mode 100644 index 5675ff256a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/index.html +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: Error -slug: Web/JavaScript/Reference/Global_Objects/Error -tags: - - Error - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error -original_slug: Web/JavaScript/Reference/Objets_globaux/Error ---- -
{{JSRef}}
- -

Le constructeur Error crée un objet d'erreur. Des instances d'objets Error sont déclenchées lorsque des erreurs d'exécution surviennent. L'objet Error peut aussi être utilisé comme objet de base pour des exceptions définies par l'utilisateur. Voir ci-dessous pour les types d'erreur natifs standard.

- -

Syntaxe

- -
new Error([message[, fileName[, lineNumber]]])
- -

Paramètres

- -
-
message {{optional_inline}}
-
Description de l'erreur sous une forme lisible par un humain.
-
fileName {{optional_inline}}{{Non-standard_inline}}
-
Argument qui sera utilisé pour la valeur de la propriété fileName dans l'objet Error créé. Par défaut, ce sera le nom du fichier contenant le code qui a appelé le constructeur Error().
-
lineNumber {{optional_inline}}{{Non-standard_inline}}
-
Argument qui sera utilisé pour la valeur de la propriété lineNumber dans l'objet Error créé. Par défaut, ce sera le numéro de la ligne contenant l'invocation du constructeur Error().
-
- -

Description

- -

Les erreurs d'exécution ont pour résultat la création et le déclenchement d'objets Error.

- -

Cette page documente l'utilisation de l'objet Error lui-même et son utilisation comme fonction constructeur. Pour une liste des propriétés et des méthodes héritées par les instances d'Error,  voir {{jsxref("Error.prototype")}}.

- -

Utilisation de Error comme fonction

- -

Lorsqu'Error est utilisée comme fonction sans utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}, cet appel renverra un objet Error. Aussi, un simple appel à Error produira le même résultat qu'une invocation avec new.

- -
// Cette instruction :
-const x = Error("J'ai été créée sans new");
-
-// Aura le même effet que
-const y = new Error("J'ai été créée avec new");
- -

Types d'erreur

- -

En plus du constructeur Error générique, il existe sept autres constructeurs d'erreur de base en JavaScript. Pour les exceptions côté client, voir Contrôle du flux d'instructions et gestion des erreurs.

- -
-
{{jsxref("EvalError")}}
-
Crée une instance représentant une erreur se produisant en relation avec la fonction globale {{jsxref("eval","eval()")}}.
-
{{jsxref("RangeError")}}
-
Crée une instance représentant une erreur se produisant quand une variable numérique ou un paramètre est en dehors de sa plage de validité.
-
{{jsxref("ReferenceError")}}
-
Crée une instance représentant une erreur se produisant lors du déréférencement d'une référence invalide.
-
{{jsxref("SyntaxError")}}
-
Crée une instance représentant une erreur de syntaxe se produisant lors d'une analyse de code dans {{jsxref("eval", "eval()")}}.
-
{{jsxref("TypeError")}}
-
Crée une instance représentant une erreur se produisant quand une variable ou un paramètre n'est pas d'un type valide.
-
{{jsxref("URIError")}}
-
Crée une instance représentant une erreur se produisant quand des paramètres invalides sont passés à {{jsxref("encodeURI", "encodeURI()")}} ou à {{jsxref("decodeURI", "decodeURI()")}}.
-
{{JSxRef("AggregateError")}}
-
Crée une instance représentant différentes erreurs agrégées en une seule lorsque plusieurs erreurs sont rapportées par une opération, par exemple avec {{JSxRef("Promise.any()")}}.
-
{{jsxref("InternalError")}} {{non-standard_inline}}
-
Crée une instance représentant une erreur se produisant quand une erreur interne dans le moteur JavaScript est déclenchée. Par ex., "too much recursion".
-
- -

Propriétés

- -
-
{{jsxref("Error.prototype")}}
-
Permet l'ajout de propriétés aux instances Error.
-
- -

Méthodes

- -

L'objet global Error ne contient pas de méthodes en propre, toutefois, il hérite de certaines méthodes via la chaine de prototype.

- -

Instances d'Error

- -
{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Description')}}
- -

Propriétés

- -

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Propriétés')}}

- -

Méthodes

- -

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Méthodes')}}

- -

Exemples

- -

Déclenchement d'une erreur générique

- -

Vous créez habituellement un objet Error dans l'intention de le déclencher en utilisant le mot-clé {{jsxref("Instructions/throw", "throw")}}. Vous pouvez gérer l'erreur en utilisant la construction {{jsxref("Instructions/try...catch", "try...catch")}} :

- -
try {
-    throw new Error("Ouups !");
-} catch (e) {
-    console.log(e.name + ": " + e.message);
-}
-
- -

Gestion d'une erreur spécifique

- -

Vous pouvez choisir de ne gérer que des types d'erreur particuliers en testant le type de l'erreur via la propriété {{jsxref("Object.prototype.constructor", "constructor")}} de l'erreur ou, si vous écrivez pour des interpréteurs JavaScript modernes, le mot-clé {{jsxref("Opérateurs/instanceof", "instanceof")}} :

- -
try {
-    machin.truc();
-} catch (e) {
-    if (e instanceof EvalError) {
-        console.log(e.name + ": " + e.message);
-    } else if (e instanceof RangeError) {
-        console.log(e.name + ": " + e.message);
-    }
-    // ... etc
-}
-
- -

Types d'erreur personnalisés

- -

Vous pouvez vouloir définir vos propres types d'erreur dérivants d'Error pour pouvoir écrire throw new MonErreur() et utiliser instanceof MonErreur afin de vérifier le type d'erreur dans le gestionnaire d'exceptions. Cela a pour résultat un code de gestion d'erreur plus propre et plus cohérent. Voir What's a good way to extend Error in JavaScript? sur StackOverflow pour une discussion en profondeur.

- -

Classes d'erreur personnalisées avec ECMAScript 2015 / ES6

- -
-

Attention : Babel, dans les versions antérieures à Babel 7, ainsi que d'autres transpileurs ne géreront pas correctement le code suivant sans configuration supplémentaire. Les versions de Babel antérieures à la version 7 peuvent uniquement gérer les classes d'erreur personnalisées lorsque celles-ci sont créées avec Object.defineProperty().

-
- -
-

Note : Certains navigateurs incluent le constructeur CustomError (Erreur Personnalisée) dans la pile d'appels lors de l'utilisation de classes ES6.

-
- -
class CustomError extends Error {
-  constructor(machin = 'truc', ...params) {
-    // Passer les arguments restants (incluant ceux spécifiques au vendeur) au constructeur parent
-    super(...params);
-
-    // Maintenir dans la pile une trace adéquate de l'endroit où l'erreur a été déclenchée (disponible seulement en V8)
-    if(Error.captureStackTrace) {
-      Error.captureStackTrace(this, CustomError);
-    }
-    this.name = 'CustomError';
-    // Informations de déboguage personnalisées
-    this.machin = machin;
-    this.date = new Date();
-  }
-}
-
-try {
-  throw new CustomError('bidule', 'messageBidule');
-} catch(e){
-  console.log(e.name);    // CustomError
-  console.log(e.machin);  // bidule
-  console.log(e.message); // messageBidule
-  console.log(e.stack);   // stacktrace
-}
- -

Objet d'erreur personnalisé ES5

- -
-

Attention : Tous les navigateurs incluent le constructeur CustomError dans la pile  d'appel lorsqu'une déclaration prototypale est utilisée.

-
- -
function CustomError(machin, message, nomFichier, numeroLigne) {
-  var instance = new Error(message, nomFichier, numeroLigne);
-  instance.name = 'CustomError';
-  instance.machin = machin;
-  Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
-  if(Error.captureStackTrace) {
-    Error.captureStackTrace(instance, CustomError);
-  }
-  return instance;
-}
-
-CustomError.prototype = Object.create(Error.prototype, {
-  constructor: {
-    value: Error,
-    enumerable: false,
-    writable: true,
-    configurable: true
-  }
-});
-
-if (Object.setPrototypeOf){
-  Object.setPrototypeOf(CustomError, Error);
-} else {
-  CustomError.__proto__ = Error;
-}
-
-
-try {
-  throw new CustomError('bidule', 'messageBidule');
-} catch(e){
-  console.log(e.name);       // CustomError
-  console.log(e.toto);       // bidule
-  console.log(e.message);    // messageBidule
-  console.log(e.lineNumber); // 29
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-error-objects', 'Error')}}{{Spec2('ES2015')}}
{{SpecName('ES5.1', '#sec-15.11', 'Error')}}{{Spec2('ES5.1')}}
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/index.md b/files/fr/web/javascript/reference/global_objects/error/index.md new file mode 100644 index 0000000000..5675ff256a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/index.md @@ -0,0 +1,246 @@ +--- +title: Error +slug: Web/JavaScript/Reference/Global_Objects/Error +tags: + - Error + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error +original_slug: Web/JavaScript/Reference/Objets_globaux/Error +--- +
{{JSRef}}
+ +

Le constructeur Error crée un objet d'erreur. Des instances d'objets Error sont déclenchées lorsque des erreurs d'exécution surviennent. L'objet Error peut aussi être utilisé comme objet de base pour des exceptions définies par l'utilisateur. Voir ci-dessous pour les types d'erreur natifs standard.

+ +

Syntaxe

+ +
new Error([message[, fileName[, lineNumber]]])
+ +

Paramètres

+ +
+
message {{optional_inline}}
+
Description de l'erreur sous une forme lisible par un humain.
+
fileName {{optional_inline}}{{Non-standard_inline}}
+
Argument qui sera utilisé pour la valeur de la propriété fileName dans l'objet Error créé. Par défaut, ce sera le nom du fichier contenant le code qui a appelé le constructeur Error().
+
lineNumber {{optional_inline}}{{Non-standard_inline}}
+
Argument qui sera utilisé pour la valeur de la propriété lineNumber dans l'objet Error créé. Par défaut, ce sera le numéro de la ligne contenant l'invocation du constructeur Error().
+
+ +

Description

+ +

Les erreurs d'exécution ont pour résultat la création et le déclenchement d'objets Error.

+ +

Cette page documente l'utilisation de l'objet Error lui-même et son utilisation comme fonction constructeur. Pour une liste des propriétés et des méthodes héritées par les instances d'Error,  voir {{jsxref("Error.prototype")}}.

+ +

Utilisation de Error comme fonction

+ +

Lorsqu'Error est utilisée comme fonction sans utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}, cet appel renverra un objet Error. Aussi, un simple appel à Error produira le même résultat qu'une invocation avec new.

+ +
// Cette instruction :
+const x = Error("J'ai été créée sans new");
+
+// Aura le même effet que
+const y = new Error("J'ai été créée avec new");
+ +

Types d'erreur

+ +

En plus du constructeur Error générique, il existe sept autres constructeurs d'erreur de base en JavaScript. Pour les exceptions côté client, voir Contrôle du flux d'instructions et gestion des erreurs.

+ +
+
{{jsxref("EvalError")}}
+
Crée une instance représentant une erreur se produisant en relation avec la fonction globale {{jsxref("eval","eval()")}}.
+
{{jsxref("RangeError")}}
+
Crée une instance représentant une erreur se produisant quand une variable numérique ou un paramètre est en dehors de sa plage de validité.
+
{{jsxref("ReferenceError")}}
+
Crée une instance représentant une erreur se produisant lors du déréférencement d'une référence invalide.
+
{{jsxref("SyntaxError")}}
+
Crée une instance représentant une erreur de syntaxe se produisant lors d'une analyse de code dans {{jsxref("eval", "eval()")}}.
+
{{jsxref("TypeError")}}
+
Crée une instance représentant une erreur se produisant quand une variable ou un paramètre n'est pas d'un type valide.
+
{{jsxref("URIError")}}
+
Crée une instance représentant une erreur se produisant quand des paramètres invalides sont passés à {{jsxref("encodeURI", "encodeURI()")}} ou à {{jsxref("decodeURI", "decodeURI()")}}.
+
{{JSxRef("AggregateError")}}
+
Crée une instance représentant différentes erreurs agrégées en une seule lorsque plusieurs erreurs sont rapportées par une opération, par exemple avec {{JSxRef("Promise.any()")}}.
+
{{jsxref("InternalError")}} {{non-standard_inline}}
+
Crée une instance représentant une erreur se produisant quand une erreur interne dans le moteur JavaScript est déclenchée. Par ex., "too much recursion".
+
+ +

Propriétés

+ +
+
{{jsxref("Error.prototype")}}
+
Permet l'ajout de propriétés aux instances Error.
+
+ +

Méthodes

+ +

L'objet global Error ne contient pas de méthodes en propre, toutefois, il hérite de certaines méthodes via la chaine de prototype.

+ +

Instances d'Error

+ +
{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Description')}}
+ +

Propriétés

+ +

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Propriétés')}}

+ +

Méthodes

+ +

{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Méthodes')}}

+ +

Exemples

+ +

Déclenchement d'une erreur générique

+ +

Vous créez habituellement un objet Error dans l'intention de le déclencher en utilisant le mot-clé {{jsxref("Instructions/throw", "throw")}}. Vous pouvez gérer l'erreur en utilisant la construction {{jsxref("Instructions/try...catch", "try...catch")}} :

+ +
try {
+    throw new Error("Ouups !");
+} catch (e) {
+    console.log(e.name + ": " + e.message);
+}
+
+ +

Gestion d'une erreur spécifique

+ +

Vous pouvez choisir de ne gérer que des types d'erreur particuliers en testant le type de l'erreur via la propriété {{jsxref("Object.prototype.constructor", "constructor")}} de l'erreur ou, si vous écrivez pour des interpréteurs JavaScript modernes, le mot-clé {{jsxref("Opérateurs/instanceof", "instanceof")}} :

+ +
try {
+    machin.truc();
+} catch (e) {
+    if (e instanceof EvalError) {
+        console.log(e.name + ": " + e.message);
+    } else if (e instanceof RangeError) {
+        console.log(e.name + ": " + e.message);
+    }
+    // ... etc
+}
+
+ +

Types d'erreur personnalisés

+ +

Vous pouvez vouloir définir vos propres types d'erreur dérivants d'Error pour pouvoir écrire throw new MonErreur() et utiliser instanceof MonErreur afin de vérifier le type d'erreur dans le gestionnaire d'exceptions. Cela a pour résultat un code de gestion d'erreur plus propre et plus cohérent. Voir What's a good way to extend Error in JavaScript? sur StackOverflow pour une discussion en profondeur.

+ +

Classes d'erreur personnalisées avec ECMAScript 2015 / ES6

+ +
+

Attention : Babel, dans les versions antérieures à Babel 7, ainsi que d'autres transpileurs ne géreront pas correctement le code suivant sans configuration supplémentaire. Les versions de Babel antérieures à la version 7 peuvent uniquement gérer les classes d'erreur personnalisées lorsque celles-ci sont créées avec Object.defineProperty().

+
+ +
+

Note : Certains navigateurs incluent le constructeur CustomError (Erreur Personnalisée) dans la pile d'appels lors de l'utilisation de classes ES6.

+
+ +
class CustomError extends Error {
+  constructor(machin = 'truc', ...params) {
+    // Passer les arguments restants (incluant ceux spécifiques au vendeur) au constructeur parent
+    super(...params);
+
+    // Maintenir dans la pile une trace adéquate de l'endroit où l'erreur a été déclenchée (disponible seulement en V8)
+    if(Error.captureStackTrace) {
+      Error.captureStackTrace(this, CustomError);
+    }
+    this.name = 'CustomError';
+    // Informations de déboguage personnalisées
+    this.machin = machin;
+    this.date = new Date();
+  }
+}
+
+try {
+  throw new CustomError('bidule', 'messageBidule');
+} catch(e){
+  console.log(e.name);    // CustomError
+  console.log(e.machin);  // bidule
+  console.log(e.message); // messageBidule
+  console.log(e.stack);   // stacktrace
+}
+ +

Objet d'erreur personnalisé ES5

+ +
+

Attention : Tous les navigateurs incluent le constructeur CustomError dans la pile  d'appel lorsqu'une déclaration prototypale est utilisée.

+
+ +
function CustomError(machin, message, nomFichier, numeroLigne) {
+  var instance = new Error(message, nomFichier, numeroLigne);
+  instance.name = 'CustomError';
+  instance.machin = machin;
+  Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
+  if(Error.captureStackTrace) {
+    Error.captureStackTrace(instance, CustomError);
+  }
+  return instance;
+}
+
+CustomError.prototype = Object.create(Error.prototype, {
+  constructor: {
+    value: Error,
+    enumerable: false,
+    writable: true,
+    configurable: true
+  }
+});
+
+if (Object.setPrototypeOf){
+  Object.setPrototypeOf(CustomError, Error);
+} else {
+  CustomError.__proto__ = Error;
+}
+
+
+try {
+  throw new CustomError('bidule', 'messageBidule');
+} catch(e){
+  console.log(e.name);       // CustomError
+  console.log(e.toto);       // bidule
+  console.log(e.message);    // messageBidule
+  console.log(e.lineNumber); // 29
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-error-objects', 'Error')}}{{Spec2('ES2015')}}
{{SpecName('ES5.1', '#sec-15.11', 'Error')}}{{Spec2('ES5.1')}}
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/linenumber/index.html b/files/fr/web/javascript/reference/global_objects/error/linenumber/index.html deleted file mode 100644 index d82a788e79..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/linenumber/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Error.prototype.lineNumber -slug: Web/JavaScript/Reference/Global_Objects/Error/lineNumber -tags: - - Error - - JavaScript - - Non-standard - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/lineNumber -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/lineNumber ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété lineNumber contient le numéro de la ligne qui a déclenché l'erreur dans le fichier.

- -

Exemples

- -

Utiliser lineNumber

- -
var e = new Error("Ne peut pas lire la donnée");
-throw e;
-console.log(e.lineNumber) // 2
- -

Alternative en utilisant l'événement error

- -
window.addEventListener("error", function (e) {
- console.log(e.lineNumber); //5
-});
-var e = new Error('Ne peut pas lire la donnée');
-throw e;
- -

Spécifications

- -

Ne fait partie d'aucune spécification. Non standard.

- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Error.lineNumber")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/linenumber/index.md b/files/fr/web/javascript/reference/global_objects/error/linenumber/index.md new file mode 100644 index 0000000000..d82a788e79 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/linenumber/index.md @@ -0,0 +1,52 @@ +--- +title: Error.prototype.lineNumber +slug: Web/JavaScript/Reference/Global_Objects/Error/lineNumber +tags: + - Error + - JavaScript + - Non-standard + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/lineNumber +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/lineNumber +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété lineNumber contient le numéro de la ligne qui a déclenché l'erreur dans le fichier.

+ +

Exemples

+ +

Utiliser lineNumber

+ +
var e = new Error("Ne peut pas lire la donnée");
+throw e;
+console.log(e.lineNumber) // 2
+ +

Alternative en utilisant l'événement error

+ +
window.addEventListener("error", function (e) {
+ console.log(e.lineNumber); //5
+});
+var e = new Error('Ne peut pas lire la donnée');
+throw e;
+ +

Spécifications

+ +

Ne fait partie d'aucune spécification. Non standard.

+ +

Compatibilité des navigateurs

+ +
+ + +

{{Compat("javascript.builtins.Error.lineNumber")}}

+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/message/index.html b/files/fr/web/javascript/reference/global_objects/error/message/index.html deleted file mode 100644 index 7ea12bb648..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/message/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Error.prototype.message -slug: Web/JavaScript/Reference/Global_Objects/Error/message -tags: - - Error - - JavaScript - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/message -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/message ---- -
{{JSRef}}
- -

La propriété message est une description de l'erreur, écrite pour être lue par un humain.

- -

Description

- -

La propriété contient une brève description de l'erreur si elle est accessible, ou si elle a été définie. SpiderMonkey utilise intensivement la propriété message pour les erreurs d'exécution. La propriété message, combinée à la propriété {{jsxref("Error.name", "name")}}, est utilisée par la méthode {{jsxref("Error.prototype.toString()")}} pour créer une représentation de l'erreur sous la forme d'une chaine de caractères.

- -

Par défaut, la propriété message est une chaine de caractères vide, mais ce comportement peut être remplacé pour une instance, en renseignant un message comme premier argument du constructeur {{jsxref("Error")}}.

- -

Exemples

- -

Déclencher une erreur personnalisée

- -
var e = new Error("Impossible de lire la donnée");
-// e.message est "Impossible de lire la donnée"
-throw e;
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.4.3', 'Error.prototype.message')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-error.prototype.message', 'Error.prototype.message')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-error.prototype.message', 'Error.prototype.message')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Error.message")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/message/index.md b/files/fr/web/javascript/reference/global_objects/error/message/index.md new file mode 100644 index 0000000000..7ea12bb648 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/message/index.md @@ -0,0 +1,73 @@ +--- +title: Error.prototype.message +slug: Web/JavaScript/Reference/Global_Objects/Error/message +tags: + - Error + - JavaScript + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/message +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/message +--- +
{{JSRef}}
+ +

La propriété message est une description de l'erreur, écrite pour être lue par un humain.

+ +

Description

+ +

La propriété contient une brève description de l'erreur si elle est accessible, ou si elle a été définie. SpiderMonkey utilise intensivement la propriété message pour les erreurs d'exécution. La propriété message, combinée à la propriété {{jsxref("Error.name", "name")}}, est utilisée par la méthode {{jsxref("Error.prototype.toString()")}} pour créer une représentation de l'erreur sous la forme d'une chaine de caractères.

+ +

Par défaut, la propriété message est une chaine de caractères vide, mais ce comportement peut être remplacé pour une instance, en renseignant un message comme premier argument du constructeur {{jsxref("Error")}}.

+ +

Exemples

+ +

Déclencher une erreur personnalisée

+ +
var e = new Error("Impossible de lire la donnée");
+// e.message est "Impossible de lire la donnée"
+throw e;
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.4.3', 'Error.prototype.message')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-error.prototype.message', 'Error.prototype.message')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-error.prototype.message', 'Error.prototype.message')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Error.message")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/name/index.html b/files/fr/web/javascript/reference/global_objects/error/name/index.html deleted file mode 100644 index 7463cb7eff..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/name/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Error.prototype.name -slug: Web/JavaScript/Reference/Global_Objects/Error/name -tags: - - Error - - JavaScript - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/name -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/name ---- -
{{JSRef}}
- -

La propriété name est une chaîne de caractères représentant le nom du type d'erreur. La valeur initiale est "Error".

- -

Description

- -

Par défaut, les instances d'{{jsxref("Error")}} reçoivent le nom "Error". La propriété name, associée à la propriété {{jsxref("Error.message", "message")}}, est utilisée par la méthode {{jsxref("Error.prototype.toString()")}} pour créer une représentation de l'erreur sous la forme d'une chaine de caractères.

- -

Exemples

- -

Déclencher une erreur personnalisée

- -
var e = new Error("Donnée malformée"); // e.name est "Error"
-
-e.name = "ParseError";
-throw e;
-// e.toString() renverra "ParseError: Donnée malformée"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.4.2', 'Error.prototype.name')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-error.prototype.name', 'Error.prototype.name')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-error.prototype.name', 'Error.prototype.name')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Error.name")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/name/index.md b/files/fr/web/javascript/reference/global_objects/error/name/index.md new file mode 100644 index 0000000000..7463cb7eff --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/name/index.md @@ -0,0 +1,73 @@ +--- +title: Error.prototype.name +slug: Web/JavaScript/Reference/Global_Objects/Error/name +tags: + - Error + - JavaScript + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/name +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/name +--- +
{{JSRef}}
+ +

La propriété name est une chaîne de caractères représentant le nom du type d'erreur. La valeur initiale est "Error".

+ +

Description

+ +

Par défaut, les instances d'{{jsxref("Error")}} reçoivent le nom "Error". La propriété name, associée à la propriété {{jsxref("Error.message", "message")}}, est utilisée par la méthode {{jsxref("Error.prototype.toString()")}} pour créer une représentation de l'erreur sous la forme d'une chaine de caractères.

+ +

Exemples

+ +

Déclencher une erreur personnalisée

+ +
var e = new Error("Donnée malformée"); // e.name est "Error"
+
+e.name = "ParseError";
+throw e;
+// e.toString() renverra "ParseError: Donnée malformée"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.4.2', 'Error.prototype.name')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-error.prototype.name', 'Error.prototype.name')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-error.prototype.name', 'Error.prototype.name')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Error.name")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/stack/index.html b/files/fr/web/javascript/reference/global_objects/error/stack/index.html deleted file mode 100644 index 133dfa454e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/stack/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Error.prototype.stack -slug: Web/JavaScript/Reference/Global_Objects/Error/Stack -tags: - - Error - - JavaScript - - Non-standard - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/Stack -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/Stack ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété non-standard stack des objets {{jsxref("Error")}} fournit une trace des fonctions qui ont été appelées, dans quel ordre, depuis quelle ligne de quel fichier, et avec quels arguments. La chaine de pile remonte des appels les plus récents jusqu'aux plus anciens, ramenant à l'appel original de la portée globale.

- -

Description

- -

Chaque étape sera séparée par une nouvelle ligne, la première partie de la ligne étant le nom de la fonction (si ce n'est pas un appel depuis la portée globale), suivi du signe arobase (@), de l'emplacement du fichier (sauf quand la fonction est le constructeur d'erreur lorsque l'erreur est déclenchée), de deux-points, et, s'il y a un emplacement de fichier, du numéro de ligne. (Notez que l'objet {{jsxref("Error")}} possède aussi les propriétés fileNamelineNumber et columnNumber pour leur récupération à partir de l'erreur déclenchée (mais seulement l'erreur, et pas sa trace)).

- -

Notez que ceci est le format utilisé par Firefox. Il n'y a aucun formatage standard. Cependant Safari 6+ et Opera 12- utilisent un format très similaire. Les navigateurs utilisant le moteur JavaScript V8 (tel que Chrome, Opera 15+, Navigateur Android) et IE10+, utilisent un format différent (voir la documentation MSDN error.stack).

- -

Valeurs des arguments dans la pile : avant Firefox 14 ({{bug("744842")}}), le nom d'une fonction étaient suivis par les valeurs des arguments converties en une chaine de caractères entre parenthèses, immédiatement avant le signe arobase (@). Tandis qu'un objet (ou un tableau, etc.) apparaissait sous la forme convertie "[object Object]", et en tant que tel, ne pouvait pas être réévalué en les objets réels, les valeurs scalaires pouvaient être récupérées (bien qu'il soit plus facile — c'est toujours possible dans Firefox 14 — d'utiliser arguments.callee.caller.arguments, tout comme le nom de la fonction pouvait être récupéré avec arguments.callee.caller.name). "undefined" est listé comme "(void 0)". Notez que si des arguments chaines de caractères étaient passés avec des valeurs comme "@", "(", ")" (ou si dans les noms de fichier), vous ne pouviez pas vous reposez facilement sur ceux-ci pour découper la ligne en les parties qui la composent. Par conséquent, dans Firefox 14 et ultérieur, ceci est moins un problème.

- -

Les différents navigateurs définissent cette valeur à différents instants. Par exemple, Firefox la définit lors de la création d'un objet {{jsxref("Error")}}, tandis que PhantomJS ne la définit que lors du déclenchement de l'{{jsxref("Error")}}, et la documentation MSDN semble correspondre à l'implémentation PhantomJS.

- -

Exemples

- -

Le code HTML suivant démontre l'utilisation de la propriété stack.

- -
<!DOCTYPE HTML>
-<meta charset="UTF-8">
-<title>Exemple de Trace de Pile</title>
-<body>
-    <script>
-        function trace() {
-            try {
-                throw new Error('monError');
-            }
-            catch(e) {
-                alert(e.stack);
-            }
-        }
-        function b() {
-            trace();
-        }
-        function a() {
-            b(3, 4, "\n\n", undefined, {});
-        }
-        a("premier appel, premierarg");
-    </script>
-
- -

En supposant que ce code a été enregistré comme C:\exemple.html sur un système de fichier Windows, il produira un message d'alerte dans une nouvelle fenêtre avec le texte suivant :

- -

À partir de Firefox 30 et ultérieur, ce message contiendra le numéro de colonne  ({{bug(762556)}}) :

- -
trace@file:///C:/exemple.html:9:17
-b@file:///C:/exemple.html:16:13
-a@file:///C:/exemple.html:19:13
-@file:///C:/exemple.html:21:9
- -

De Firefox 14 à Firefox 29 :

- -
trace@file:///C:/exemple.html:9
-b@file:///C:/exemple.html:16
-a@file:///C:/exemple.html:19
-@file:///C:/exemple.html:21
-
- -

Firefox 13 et antérieur aurait produit à la place le texte suivant :

- -
Error("monError")@:0
-trace()@file:///C:/exemple.html:9
-b(3,4,"\n\n",(void 0),[object Object])@file:///C:/exemple.html:16
-a("premier appel, premierarg")@file:///C:/exemple.html:19
-@file:///C:/exemple.html:21
-
- -

Pile d'un code evalué

- -

À partir de Firefox 30 {{geckoRelease("30")}}, la pile d'erreur du code dans les appels à Function() et eval() produit désormais des piles avec des informations plus détaillées sur les numéros de lignes et de colonnes dans ces appels. Les appels de fonction sont indiqués par "> Function" et les appels d'eval par "> eval". Voir {{bug("332176")}}.

- -
try {
-  new Function('throw new Error()')();
-} catch (e) {
-  console.log(e.stack);
-}
-
-// anonymous@file:///C:/exemple.html line 7 > Function:1:1
-// @file:///C:/exemple.html:7:6
-
-try {
-  eval("eval('ÉCHEC')");
-} catch (x) {
-  console.log(x.stack);
-}
-
-// @file:///C:/exemple.html line 7 > eval line 1 > eval:1:1
-// @file:///C:/exemple.html line 7 > eval:1:1
-// @file:///C:/exemple.html:7:6
- -

Vous pouvez aussi utiliser la directive //# sourceURL pour nommer une source eval. Voir aussi Déboguer des sources évaluées dans les docs Débogueur, ainsi que ce blog post.

- -

Spécifications

- -

Ne fait partie d'aucune spécification. Non-standard.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Error.stack")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/stack/index.md b/files/fr/web/javascript/reference/global_objects/error/stack/index.md new file mode 100644 index 0000000000..133dfa454e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/stack/index.md @@ -0,0 +1,121 @@ +--- +title: Error.prototype.stack +slug: Web/JavaScript/Reference/Global_Objects/Error/Stack +tags: + - Error + - JavaScript + - Non-standard + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/Stack +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/Stack +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété non-standard stack des objets {{jsxref("Error")}} fournit une trace des fonctions qui ont été appelées, dans quel ordre, depuis quelle ligne de quel fichier, et avec quels arguments. La chaine de pile remonte des appels les plus récents jusqu'aux plus anciens, ramenant à l'appel original de la portée globale.

+ +

Description

+ +

Chaque étape sera séparée par une nouvelle ligne, la première partie de la ligne étant le nom de la fonction (si ce n'est pas un appel depuis la portée globale), suivi du signe arobase (@), de l'emplacement du fichier (sauf quand la fonction est le constructeur d'erreur lorsque l'erreur est déclenchée), de deux-points, et, s'il y a un emplacement de fichier, du numéro de ligne. (Notez que l'objet {{jsxref("Error")}} possède aussi les propriétés fileNamelineNumber et columnNumber pour leur récupération à partir de l'erreur déclenchée (mais seulement l'erreur, et pas sa trace)).

+ +

Notez que ceci est le format utilisé par Firefox. Il n'y a aucun formatage standard. Cependant Safari 6+ et Opera 12- utilisent un format très similaire. Les navigateurs utilisant le moteur JavaScript V8 (tel que Chrome, Opera 15+, Navigateur Android) et IE10+, utilisent un format différent (voir la documentation MSDN error.stack).

+ +

Valeurs des arguments dans la pile : avant Firefox 14 ({{bug("744842")}}), le nom d'une fonction étaient suivis par les valeurs des arguments converties en une chaine de caractères entre parenthèses, immédiatement avant le signe arobase (@). Tandis qu'un objet (ou un tableau, etc.) apparaissait sous la forme convertie "[object Object]", et en tant que tel, ne pouvait pas être réévalué en les objets réels, les valeurs scalaires pouvaient être récupérées (bien qu'il soit plus facile — c'est toujours possible dans Firefox 14 — d'utiliser arguments.callee.caller.arguments, tout comme le nom de la fonction pouvait être récupéré avec arguments.callee.caller.name). "undefined" est listé comme "(void 0)". Notez que si des arguments chaines de caractères étaient passés avec des valeurs comme "@", "(", ")" (ou si dans les noms de fichier), vous ne pouviez pas vous reposez facilement sur ceux-ci pour découper la ligne en les parties qui la composent. Par conséquent, dans Firefox 14 et ultérieur, ceci est moins un problème.

+ +

Les différents navigateurs définissent cette valeur à différents instants. Par exemple, Firefox la définit lors de la création d'un objet {{jsxref("Error")}}, tandis que PhantomJS ne la définit que lors du déclenchement de l'{{jsxref("Error")}}, et la documentation MSDN semble correspondre à l'implémentation PhantomJS.

+ +

Exemples

+ +

Le code HTML suivant démontre l'utilisation de la propriété stack.

+ +
<!DOCTYPE HTML>
+<meta charset="UTF-8">
+<title>Exemple de Trace de Pile</title>
+<body>
+    <script>
+        function trace() {
+            try {
+                throw new Error('monError');
+            }
+            catch(e) {
+                alert(e.stack);
+            }
+        }
+        function b() {
+            trace();
+        }
+        function a() {
+            b(3, 4, "\n\n", undefined, {});
+        }
+        a("premier appel, premierarg");
+    </script>
+
+ +

En supposant que ce code a été enregistré comme C:\exemple.html sur un système de fichier Windows, il produira un message d'alerte dans une nouvelle fenêtre avec le texte suivant :

+ +

À partir de Firefox 30 et ultérieur, ce message contiendra le numéro de colonne  ({{bug(762556)}}) :

+ +
trace@file:///C:/exemple.html:9:17
+b@file:///C:/exemple.html:16:13
+a@file:///C:/exemple.html:19:13
+@file:///C:/exemple.html:21:9
+ +

De Firefox 14 à Firefox 29 :

+ +
trace@file:///C:/exemple.html:9
+b@file:///C:/exemple.html:16
+a@file:///C:/exemple.html:19
+@file:///C:/exemple.html:21
+
+ +

Firefox 13 et antérieur aurait produit à la place le texte suivant :

+ +
Error("monError")@:0
+trace()@file:///C:/exemple.html:9
+b(3,4,"\n\n",(void 0),[object Object])@file:///C:/exemple.html:16
+a("premier appel, premierarg")@file:///C:/exemple.html:19
+@file:///C:/exemple.html:21
+
+ +

Pile d'un code evalué

+ +

À partir de Firefox 30 {{geckoRelease("30")}}, la pile d'erreur du code dans les appels à Function() et eval() produit désormais des piles avec des informations plus détaillées sur les numéros de lignes et de colonnes dans ces appels. Les appels de fonction sont indiqués par "> Function" et les appels d'eval par "> eval". Voir {{bug("332176")}}.

+ +
try {
+  new Function('throw new Error()')();
+} catch (e) {
+  console.log(e.stack);
+}
+
+// anonymous@file:///C:/exemple.html line 7 > Function:1:1
+// @file:///C:/exemple.html:7:6
+
+try {
+  eval("eval('ÉCHEC')");
+} catch (x) {
+  console.log(x.stack);
+}
+
+// @file:///C:/exemple.html line 7 > eval line 1 > eval:1:1
+// @file:///C:/exemple.html line 7 > eval:1:1
+// @file:///C:/exemple.html:7:6
+ +

Vous pouvez aussi utiliser la directive //# sourceURL pour nommer une source eval. Voir aussi Déboguer des sources évaluées dans les docs Débogueur, ainsi que ce blog post.

+ +

Spécifications

+ +

Ne fait partie d'aucune spécification. Non-standard.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Error.stack")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/tosource/index.html b/files/fr/web/javascript/reference/global_objects/error/tosource/index.html deleted file mode 100644 index 5c84fe9b75..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/tosource/index.html +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Error.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Error/toSource -tags: - - Error - - JavaScript - - Méthode - - Non-standard - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/toSource ---- -
{{JSRef}} {{non-standard_header}}
- -

La méthode toSource() renvoie le code source qui peut générer la même erreur.

- -

Syntaxe

- -
e.toSource()
- -

Valeur de retour

- -

Une chaîne de caractères qui contient le code source de l'erreur.

- -

Description

- -

Appeler la méthode toSource() d'une instance {{jsxref("Error")}} (Erreurs natives incluses) renverra le code source de l'erreur. Cette chaine de caractères peut être évaluée afin de créer un objet similaire. La chaine de caractères contenant le code source suit la structure du constructeur Error. Par exemple :

- -
(new name(message ,fileName, lineNumber))
- -

où ces attributs correspondent aux propriétés respectives de l'instance Error.

- -

Note : Les propriétés utilisées par la méthode toSource() dans la création de cette chaine de caractères sont mutables et peuvent ne pas refléter correctement la fonction utilisée pour créer une instance d'erreur ou le nom du fichier ou la ligne à laquelle s'est produite l'erreur originale.

- -

Spécifications

- -

Ne fait partie d'aucun standard. Implémentée dans JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Error.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/tosource/index.md b/files/fr/web/javascript/reference/global_objects/error/tosource/index.md new file mode 100644 index 0000000000..5c84fe9b75 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/tosource/index.md @@ -0,0 +1,52 @@ +--- +title: Error.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Error/toSource +tags: + - Error + - JavaScript + - Méthode + - Non-standard + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

La méthode toSource() renvoie le code source qui peut générer la même erreur.

+ +

Syntaxe

+ +
e.toSource()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui contient le code source de l'erreur.

+ +

Description

+ +

Appeler la méthode toSource() d'une instance {{jsxref("Error")}} (Erreurs natives incluses) renverra le code source de l'erreur. Cette chaine de caractères peut être évaluée afin de créer un objet similaire. La chaine de caractères contenant le code source suit la structure du constructeur Error. Par exemple :

+ +
(new name(message ,fileName, lineNumber))
+ +

où ces attributs correspondent aux propriétés respectives de l'instance Error.

+ +

Note : Les propriétés utilisées par la méthode toSource() dans la création de cette chaine de caractères sont mutables et peuvent ne pas refléter correctement la fonction utilisée pour créer une instance d'erreur ou le nom du fichier ou la ligne à laquelle s'est produite l'erreur originale.

+ +

Spécifications

+ +

Ne fait partie d'aucun standard. Implémentée dans JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Error.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/error/tostring/index.html b/files/fr/web/javascript/reference/global_objects/error/tostring/index.html deleted file mode 100644 index cd67175fff..0000000000 --- a/files/fr/web/javascript/reference/global_objects/error/tostring/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Error.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Error/toString -tags: - - Error - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Error/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Error/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une représentation de l'objet {{jsxref("Error")}} sous la forme d'une chaine de caractères.

- -

Syntaxe

- -
e.toString()
- -

Valeur de retour

- -

Une chaîne de caractères représentant l'objet {{jsxref("Error")}}.

- -

Description

- -

L'objet {{jsxref("Error")}} surcharge la méthode {{jsxref("Object.prototype.toString()")}} héritée par tous les objets. Sa sémantique est la suivante (en partant du principe que {{jsxref("Object")}} et {{jsxref("String")}} ont leurs valeurs originales) :

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

Exemples

- -
var e = new Error("Erreur fatale");
-console.log(e.toString()); // "Error: Erreur fatale"
-
-e.name = undefined;
-console.log(e.toString()); // "Error: Erreur fatale"
-
-e.name = "";
-console.log(e.toString()); // "Erreur fatale"
-
-e.message = undefined;
-console.log(e.toString()); // ""
-
-e.name = "salut";
-console.log(e.toString()); // "salut"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.11.4.4', 'Error.prototype.toString')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-error.prototype.tostring', 'Error.prototype.toString')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-error.prototype.tostring', 'Error.prototype.toString')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Error.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/error/tostring/index.md b/files/fr/web/javascript/reference/global_objects/error/tostring/index.md new file mode 100644 index 0000000000..cd67175fff --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/error/tostring/index.md @@ -0,0 +1,109 @@ +--- +title: Error.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Error/toString +tags: + - Error + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Error/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une représentation de l'objet {{jsxref("Error")}} sous la forme d'une chaine de caractères.

+ +

Syntaxe

+ +
e.toString()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant l'objet {{jsxref("Error")}}.

+ +

Description

+ +

L'objet {{jsxref("Error")}} surcharge la méthode {{jsxref("Object.prototype.toString()")}} héritée par tous les objets. Sa sémantique est la suivante (en partant du principe que {{jsxref("Object")}} et {{jsxref("String")}} ont leurs valeurs originales) :

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

Exemples

+ +
var e = new Error("Erreur fatale");
+console.log(e.toString()); // "Error: Erreur fatale"
+
+e.name = undefined;
+console.log(e.toString()); // "Error: Erreur fatale"
+
+e.name = "";
+console.log(e.toString()); // "Erreur fatale"
+
+e.message = undefined;
+console.log(e.toString()); // ""
+
+e.name = "salut";
+console.log(e.toString()); // "salut"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.11.4.4', 'Error.prototype.toString')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-error.prototype.tostring', 'Error.prototype.toString')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-error.prototype.tostring', 'Error.prototype.toString')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Error.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/escape/index.html b/files/fr/web/javascript/reference/global_objects/escape/index.html deleted file mode 100644 index e1b23297b0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/escape/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: escape() -slug: Web/JavaScript/Reference/Global_Objects/escape -tags: - - Deprecated - - JavaScript -translation_of: Web/JavaScript/Reference/Global_Objects/escape -original_slug: Web/JavaScript/Reference/Objets_globaux/escape ---- -
{{jsSidebar("Objects")}}
- -

Attention : Bien que escape(…) ne soit pas strictement obsolète (au sens où elle n'a pas été retirée des standards), elle est définie au sein de l'Annexe B du standard ECMA-262 qui commence par : - -

… L'ensemble des fonctionnalités et comportements définis dans cette annexe possède une ou plusieurs caractéristiques indésirables. En l'absence d'une utilisation historique, ces fonctionnalités seraient retirés de la spécification. …
-… Les développeurs ne devraient pas utiliser ces fonctionnalités et comportements ou présupposer qu'elles existent lors de l'écriture de nouveau code ECMAScript. …

-
- -

La fonction escape() permet de renvoyer une nouvelle chaîne de caractères dont certains caractères ont été remplacés par leur séquence d'échappement hexadécimale. Cette méthode est obsolète et il est donc conseillé d'utiliser {{jsxref("encodeURI")}} ou {{jsxref("encodeURIComponent")}} à la place.

- -
-

Note : Cette fonction pouvait être utilisée pour l'encodage de fragment de requêtes d'URL. Si on souhaite remplacer des caractères par leur séquence d'échappement correcte (avec %20 par exemple), on pourra utiliser decodeURIComponent.

-
- -

Syntaxe

- -
escape(str)
- -

Paramètres

- -
-
str
-
Une chaîne de caractères à encoder.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères dont certains caractères ont été échappés.

- -

Description

- -

La fonction escape est une propriété de l'objet global. Les caractères spéciaux, sauf @*_+-./, seront encodés.

- -

La forme hexadécimale des caractères dont la valeur du codet est inférieure à 0xFF sera représentée sur deux chiffres : %xx. Pour les caractères avec un code supérieur, quatre chiffres seront utilisés avec le format suivant %uxxxx.

- -

Exemples

- -
escape("abc123");     // "abc123"
-escape("äöü");        // "%E4%F6%FC"
-escape("ć");          // "%u0107"
-
-// caractères spéciaux
-escape("@*_+-./");    // "@*_+-./"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-B.2.1', 'escape')}}{{Spec2('ES5.1')}}Définie dans l'annexe B (informative) sur la compatibilité.
{{SpecName('ES6', '#sec-escape-string', 'escape')}}{{Spec2('ES6')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
{{SpecName('ESDraft', '#sec-escape-string', 'escape')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/escape/index.md b/files/fr/web/javascript/reference/global_objects/escape/index.md new file mode 100644 index 0000000000..e1b23297b0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/escape/index.md @@ -0,0 +1,96 @@ +--- +title: escape() +slug: Web/JavaScript/Reference/Global_Objects/escape +tags: + - Deprecated + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/escape +original_slug: Web/JavaScript/Reference/Objets_globaux/escape +--- +
{{jsSidebar("Objects")}}
+ +

Attention : Bien que escape(…) ne soit pas strictement obsolète (au sens où elle n'a pas été retirée des standards), elle est définie au sein de l'Annexe B du standard ECMA-262 qui commence par : + +

… L'ensemble des fonctionnalités et comportements définis dans cette annexe possède une ou plusieurs caractéristiques indésirables. En l'absence d'une utilisation historique, ces fonctionnalités seraient retirés de la spécification. …
+… Les développeurs ne devraient pas utiliser ces fonctionnalités et comportements ou présupposer qu'elles existent lors de l'écriture de nouveau code ECMAScript. …

+
+ +

La fonction escape() permet de renvoyer une nouvelle chaîne de caractères dont certains caractères ont été remplacés par leur séquence d'échappement hexadécimale. Cette méthode est obsolète et il est donc conseillé d'utiliser {{jsxref("encodeURI")}} ou {{jsxref("encodeURIComponent")}} à la place.

+ +
+

Note : Cette fonction pouvait être utilisée pour l'encodage de fragment de requêtes d'URL. Si on souhaite remplacer des caractères par leur séquence d'échappement correcte (avec %20 par exemple), on pourra utiliser decodeURIComponent.

+
+ +

Syntaxe

+ +
escape(str)
+ +

Paramètres

+ +
+
str
+
Une chaîne de caractères à encoder.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères dont certains caractères ont été échappés.

+ +

Description

+ +

La fonction escape est une propriété de l'objet global. Les caractères spéciaux, sauf @*_+-./, seront encodés.

+ +

La forme hexadécimale des caractères dont la valeur du codet est inférieure à 0xFF sera représentée sur deux chiffres : %xx. Pour les caractères avec un code supérieur, quatre chiffres seront utilisés avec le format suivant %uxxxx.

+ +

Exemples

+ +
escape("abc123");     // "abc123"
+escape("äöü");        // "%E4%F6%FC"
+escape("ć");          // "%u0107"
+
+// caractères spéciaux
+escape("@*_+-./");    // "@*_+-./"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-B.2.1', 'escape')}}{{Spec2('ES5.1')}}Définie dans l'annexe B (informative) sur la compatibilité.
{{SpecName('ES6', '#sec-escape-string', 'escape')}}{{Spec2('ES6')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
{{SpecName('ESDraft', '#sec-escape-string', 'escape')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/eval/index.html b/files/fr/web/javascript/reference/global_objects/eval/index.html deleted file mode 100644 index d52bd140e3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/eval/index.html +++ /dev/null @@ -1,278 +0,0 @@ ---- -title: eval() -slug: Web/JavaScript/Reference/Global_Objects/eval -tags: - - Attention - - JavaScript - - Méthode - - Reference - - eval -translation_of: Web/JavaScript/Reference/Global_Objects/eval -original_slug: Web/JavaScript/Reference/Objets_globaux/eval ---- -
{{jsSidebar("Objects")}}
- -

La fonction eval() permet d'évaluer du code JavaScript représenté sous forme d'une chaîne de caractères.

- -
-

Attention : L'exécution de JavaScript à partir d'une chaîne de caractères constitue un risque de sécurité énorme. Il est beaucoup trop facile pour un mauvais acteur d'exécuter du code arbitraire lorsque vous utilisez eval(). Voir la section N'utilisez eval() qu'en dernier recours ! ci-dessous.

-
- -
{{EmbedInteractiveExample("pages/js/globalprops-eval.html")}}
- -

Syntaxe

- -
eval(str)
- -

Paramètres

- -
-
str
-
Une chaîne de caractères qui représente une expression JavaScript ou une instruction ou une suite d'instructions JavaScript. L'expression utilisée peut contenir des variables et des propriétés d'objets existants.
-
- -

Valeur de retour

- -

La valeur de terminaison du code fourni en argument. Si la valeur de terminaison est vide, c'est la valeur {{jsxref("undefined")}} qui est renvoyée.

- -

Description

- -

eval() est une fonction rattachée à l'objet global.

- -

eval() prend en compte un argument qui est une chaîne de caractères. Si cette chaîne représente une expression, eval() évaluera l'expression. Si l'argument utilisé représente une ou plusieurs instructions JavaScript, eval() évaluera les instructions. eval() ne doit pas être utilisé pour évaluer une expression arithmétique. En effet, JavaScript évalue automatiquement les expressions arithmétiques.

- -

Si on construit une expression arithmétique sous la forme d'une chaîne de caractères, on peut utiliser eval() pour évaluer cette expression par la suite. Ainsi, si on a une variable x, on peut préparer une expression à utiliser plus tard en construisant la chaîne "3 * x + 2" par exemple. Au moment où on souhaite procéder à l'évaluation, on appellera eval() avec cette chaîne de caractères.

- -

Si l'argument passé à eval() n'est pas une chaîne de caractères, eval() renverra l'argument inchangé. Dans l'exemple qui suit, on utilise le constructeur String, eval() renvoie donc un objet String au lieu d'évaluer la chaîne de caractères correspondante.

- -
eval(new String("2 + 2")); // renvoie un objet String contenant "2 + 2"
-eval("2 + 2");             // renvoie 4
-
- -

Ce comportement peut être résolu de façon générique en utilisant la méthode toString().

- -
var expression = new String("2 + 2");
-eval(expression.toString());
-
- -

Si la fonction  eval est utilisée de manière indirecte, en l'invoquant par une référence autre que eval, cela fonctionnera avec une portée globale plutôt que locale (d'après ECMASCript 5). Par exemple, les déclarations de fonctions vont créer des fonctions globales et le code en cours d'évaluation n'aura pas accès aux variables locales déclarées avec la même portée que là où la fonction eval est appelée.

- -
function test() {
-  var x = 2, y = 4;
-  console.log(eval("x + y"));  // Appel direct, portée locale, résultat de 6
-  var geval = eval;
-  console.log(geval("x + y")); // Appel indirect, portée globale, lance une exception ReferenceError car `x` n'est pas défini
-  (0, eval)('x + y'); // un autre exemple d'appel indirect.
-}
- -

N'utiliser eval() qu'en dernier recours !

- -

eval() est une fonction dangereuse qui exécute le code passé en argument avec les privilèges de l'environnement appelant. Si eval() est utilisée avec une chaîne construite de façon mal intentionnée, cela pourra entraîner l'exécution d'un code malveillant sur la machine de l'utilisateur avec les permissions données au site ou au module complémentaire. À un niveau encore plus critique, du code tiers pourrait ainsi consulter la portée dans laquelle eval() a été invoquée. Cela peut permettre des attaques qui n'auraient pas été rendues possible en utilisant un objet {{jsxref("Function")}}.

- -

eval() est également plus lente que les méthodes alternatives. En effet, l'évaluation nécessite de faire appel à l'interpréteur JavaScript alors que de nombreuses structures sont optimisées par les moteurs JavaScript modernes.

- -

Dans de nombreux cas, il existe des alternatives plus sûres et plus performantes à eval().

- -

De plus, les moteurs JavaScript modernes convertissent le code JavaScript en code machine. Les notions relatives aux noms des variables sont donc transformées. Utiliser eval() force le navigateur à enregistrer puis à rechercher parmi les noms existants afin de retrouver les variables. Si besoin, on peut utiliser le constructeur Function :

- -

Avec eval() :

- -
function looseJsonParse(obj){
-    return eval("(" + obj + ")");
-}
-console.log(looseJsonParse(
-   "{a:(4-1), b:function(){}, c:new Date()}"
-))
-
- -

Avec Function :

- -
function looseJsonParse(obj){
-    return Function('"use strict";return (' + obj + ')')();
-}
-console.log(looseJsonParse(
-   "{a:(4-1), b:function(){}, c:new Date()}"
-))
-
- -

Dans le premier cas, l'évaluation de c: new Date() sera beaucoup plus lente car Date peut faire référence à une variable déclarée avant. Dans le second cas, la fonction est évaluée dans la portée globale et le moteur peut donc utiliser {{jsxref("Date")}} directement.

- -

Autrement dit, dans le premier cas, on aurait pu avoir un code comme :

- -
function Date(n){
-    return ["Monday","Tuesday","Wednesday","Thursaday","Friday","Saturday","Sunday"][n%7 || 0];
-}
-function looseJsonParse(obj){
-    return eval("(" + obj + ")");
-}
-console.log(looseJsonParse(
-   "{a:(4-1), b:function(){}, c:new Date()}"
-))
-
- -

Auquel cas, le navigateur doit effectuer une recherche coûteuse afin de vérifier s'il y a des variables locales Date.

- -

Pour obtenir un résultat identique, on peut tout à fait se passer d'eval() :

- -
function Date(n){
-    return ["Monday","Tuesday","Wednesday","Thursaday","Friday","Saturday","Sunday"][n%7 || 0];
-}
-function runCodeWithDateFunction(obj){
-    return Function('"use strict";return (' + obj + ')')()(
-        Date
-    );
-}
-console.log(runCodeWithDateFunction(
-   "function(Date){ return Date(5) }"
-))
-
- -

1. Le code passé à runCodeWithDateFunction peut être minifié.

- -

2. Le surcoût lié à un appel de fonction est léger

- -

3. Function() permet d'utiliser  "use strict"; (qui peut également aider à améliorer les performances).

- -

Enfin, pour la plupart des cas, on doit pouvoir éviter de passer par

- -

eval() ou Function() !

- -

Accéder aux propriétés d'un objet

- -

eval() ne doit pas être utilisée pour convertir des noms de propriétés en propriétés. Par exemple, lorsqu'on ne sait pas quelle propriété va être consultée avant l'exécution, on pourrait utiliser :

- -
var obj = { a: 20, b: 30 };
-var nomPropriété = getNomProp();  //une méthode qui renvoie "a" ou "b"
-
-eval( "var résultat = obj." + nomPropriété );
-
- -

Cependant, eval() n'est pas du tout nécessaire. Il est beaucoup plus simple, plus sécurisé, plus rapide, d'utiliser les accesseurs de propriétés :

- -
var obj = { a: 20, b: 30 };
-var nomPropriété = getNomProp();  // une méthode qui renvoie  "a" or "b"
-var résultat = obj[nomPropriété]; //  obj[ "a" ] correspond à obj.a
-
- -

Utiliser des fonctions au lieu de morceaux de code

- -

Les fonctions JavaScript sont des citoyens de premier rang du langage, cela signifie que les fonctions peuvent être passées comme arguments aux autres API, qu'elles peuvent être stockées dans des variables, dans des propriétés d'objets, etc. De nombreuses API pour le DOM fonctionnent en prenant en argument des fonctions :

- -
// au lieu de setTimeout(" ... ", 1000) on utilisera :
-setTimeout(function() { ... }, 1000);
-
-// au lieu de elt.setAttribute("onclick", "...") on utilisera :
-elt.addEventListener("click", function() { ... } , false); 
- -

Les fermetures (closures) sont utiles lorsqu'on souhaite obtenir des fonctions paramétrées sans avoir à concaténer des chaînes de caractères.

- -

Convertir des chaînes JSON en objets JavaScript (parsing)

- -

Si la chaîne utilisée avec eval() contient des données (par exemple, un tableau : "[1, 2, 3]") et non du code, il est conseillé d'utiliser du {{Glossary("JSON")}}, qui permet de représenter un sous-ensemble des données représentables en JavaScript.

- -

On notera que la syntaxe JSON est limitée relativement à la syntaxe JavaScript. De nombreux littéraux JavaScript ne pourront être parsés en JSON (par exemple, les virgules à la fin des instructions ne seront pas autorisées et les noms de propriétés devront être compris entre simples quotes). Il est souvent préférable d'utiliser un outil de sérialisation JSON pour que les chaînes générées puissent être analysée en JSON.

- -

Transmettre des données et non du code

- -

Si on a par exemple une extension conçue pour parcourir le code d'une page web, on pourra transmettre des données XPath au lieu d'un code JavaScript.

- -

Exécuter du code avec des privilèges restreints

- -

S'il faut nécessairement exécuter du code, il faut le faire avec des privilèges restreints. Cela s'applique généralement aux modules complémentaires ou aux applications XUL. Pour cela, on pourra utiliser Components.utils.evalInSandbox.

- -

Exemples

- -

Utiliser eval()

- -

Dans le code suivant, les deux instructions passées à eval() sous la forme d'une chaîne renvoient 42. La première évaluation porte sur la chaîne "x + y + 1" ; la seconde évaluation porte sur la chaîne de caractères "42".

- -
var x = 2;
-var y = 39;
-var z = "42";
-eval("x + y + 1"); // renvoie 42
-eval(z);           // renvoie 42
-
- -

Utiliser eval() pour une chaîne d'instructions

- -

Dans l'exemple qui suit, eval() est utilisée pour évaluer la chaîne de caractères str. Cette chaîne contient plusieurs instructions JavaScript qui affichent un message dans la console et qui affectent la valeur 42 à la variable z si x vaut cinq et 0 sinon. Lorsque la seconde instruction est exécutée, eval() entraînera l'exécution des instructions, les instructions seront évaluées et la valeur de z sera donc renvoyée.

- -
var x = 5;
-var str = "if (x == 5) {console.log('z vaut 42'); z = 42;} else z = 0; ";
-console.log("z vaut "+eval(str));
-
- -

Le résultat d'eval() est celui de la dernière expression

- -

eval() renvoie la valeur de la dernière expression évaluée :

- -
var str = "if ( a ) { 1+1; } else { 1+2; }";
-var a = true;
-var b = eval(str);  // renvoie 2
-
-console.log("b vaut : " + b);
-
-a = false;
-b = eval(str);      // renvoie 3
-
-console.log("b vaut : " + b);
- -

eval() et les fonctions

- -

Pour qu'une fonction soit restituée lors de l'évaluation, il est nécessaire d'encadrer l'expression contenue dans la chaîne de caractères avec des parenthèses :

- -
var fctStr1 = "function a() {}"
-var fctStr2 = "(function a() {})"
-var fct1 = eval(fctStr1)  // renvoie undefined
-var fct2 = eval(fctStr2)  // renvoie une function
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.1', 'eval')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-eval-x', 'eval')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-eval-x', 'eval')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Notes spécifiques à Firefox

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/eval/index.md b/files/fr/web/javascript/reference/global_objects/eval/index.md new file mode 100644 index 0000000000..d52bd140e3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/eval/index.md @@ -0,0 +1,278 @@ +--- +title: eval() +slug: Web/JavaScript/Reference/Global_Objects/eval +tags: + - Attention + - JavaScript + - Méthode + - Reference + - eval +translation_of: Web/JavaScript/Reference/Global_Objects/eval +original_slug: Web/JavaScript/Reference/Objets_globaux/eval +--- +
{{jsSidebar("Objects")}}
+ +

La fonction eval() permet d'évaluer du code JavaScript représenté sous forme d'une chaîne de caractères.

+ +
+

Attention : L'exécution de JavaScript à partir d'une chaîne de caractères constitue un risque de sécurité énorme. Il est beaucoup trop facile pour un mauvais acteur d'exécuter du code arbitraire lorsque vous utilisez eval(). Voir la section N'utilisez eval() qu'en dernier recours ! ci-dessous.

+
+ +
{{EmbedInteractiveExample("pages/js/globalprops-eval.html")}}
+ +

Syntaxe

+ +
eval(str)
+ +

Paramètres

+ +
+
str
+
Une chaîne de caractères qui représente une expression JavaScript ou une instruction ou une suite d'instructions JavaScript. L'expression utilisée peut contenir des variables et des propriétés d'objets existants.
+
+ +

Valeur de retour

+ +

La valeur de terminaison du code fourni en argument. Si la valeur de terminaison est vide, c'est la valeur {{jsxref("undefined")}} qui est renvoyée.

+ +

Description

+ +

eval() est une fonction rattachée à l'objet global.

+ +

eval() prend en compte un argument qui est une chaîne de caractères. Si cette chaîne représente une expression, eval() évaluera l'expression. Si l'argument utilisé représente une ou plusieurs instructions JavaScript, eval() évaluera les instructions. eval() ne doit pas être utilisé pour évaluer une expression arithmétique. En effet, JavaScript évalue automatiquement les expressions arithmétiques.

+ +

Si on construit une expression arithmétique sous la forme d'une chaîne de caractères, on peut utiliser eval() pour évaluer cette expression par la suite. Ainsi, si on a une variable x, on peut préparer une expression à utiliser plus tard en construisant la chaîne "3 * x + 2" par exemple. Au moment où on souhaite procéder à l'évaluation, on appellera eval() avec cette chaîne de caractères.

+ +

Si l'argument passé à eval() n'est pas une chaîne de caractères, eval() renverra l'argument inchangé. Dans l'exemple qui suit, on utilise le constructeur String, eval() renvoie donc un objet String au lieu d'évaluer la chaîne de caractères correspondante.

+ +
eval(new String("2 + 2")); // renvoie un objet String contenant "2 + 2"
+eval("2 + 2");             // renvoie 4
+
+ +

Ce comportement peut être résolu de façon générique en utilisant la méthode toString().

+ +
var expression = new String("2 + 2");
+eval(expression.toString());
+
+ +

Si la fonction  eval est utilisée de manière indirecte, en l'invoquant par une référence autre que eval, cela fonctionnera avec une portée globale plutôt que locale (d'après ECMASCript 5). Par exemple, les déclarations de fonctions vont créer des fonctions globales et le code en cours d'évaluation n'aura pas accès aux variables locales déclarées avec la même portée que là où la fonction eval est appelée.

+ +
function test() {
+  var x = 2, y = 4;
+  console.log(eval("x + y"));  // Appel direct, portée locale, résultat de 6
+  var geval = eval;
+  console.log(geval("x + y")); // Appel indirect, portée globale, lance une exception ReferenceError car `x` n'est pas défini
+  (0, eval)('x + y'); // un autre exemple d'appel indirect.
+}
+ +

N'utiliser eval() qu'en dernier recours !

+ +

eval() est une fonction dangereuse qui exécute le code passé en argument avec les privilèges de l'environnement appelant. Si eval() est utilisée avec une chaîne construite de façon mal intentionnée, cela pourra entraîner l'exécution d'un code malveillant sur la machine de l'utilisateur avec les permissions données au site ou au module complémentaire. À un niveau encore plus critique, du code tiers pourrait ainsi consulter la portée dans laquelle eval() a été invoquée. Cela peut permettre des attaques qui n'auraient pas été rendues possible en utilisant un objet {{jsxref("Function")}}.

+ +

eval() est également plus lente que les méthodes alternatives. En effet, l'évaluation nécessite de faire appel à l'interpréteur JavaScript alors que de nombreuses structures sont optimisées par les moteurs JavaScript modernes.

+ +

Dans de nombreux cas, il existe des alternatives plus sûres et plus performantes à eval().

+ +

De plus, les moteurs JavaScript modernes convertissent le code JavaScript en code machine. Les notions relatives aux noms des variables sont donc transformées. Utiliser eval() force le navigateur à enregistrer puis à rechercher parmi les noms existants afin de retrouver les variables. Si besoin, on peut utiliser le constructeur Function :

+ +

Avec eval() :

+ +
function looseJsonParse(obj){
+    return eval("(" + obj + ")");
+}
+console.log(looseJsonParse(
+   "{a:(4-1), b:function(){}, c:new Date()}"
+))
+
+ +

Avec Function :

+ +
function looseJsonParse(obj){
+    return Function('"use strict";return (' + obj + ')')();
+}
+console.log(looseJsonParse(
+   "{a:(4-1), b:function(){}, c:new Date()}"
+))
+
+ +

Dans le premier cas, l'évaluation de c: new Date() sera beaucoup plus lente car Date peut faire référence à une variable déclarée avant. Dans le second cas, la fonction est évaluée dans la portée globale et le moteur peut donc utiliser {{jsxref("Date")}} directement.

+ +

Autrement dit, dans le premier cas, on aurait pu avoir un code comme :

+ +
function Date(n){
+    return ["Monday","Tuesday","Wednesday","Thursaday","Friday","Saturday","Sunday"][n%7 || 0];
+}
+function looseJsonParse(obj){
+    return eval("(" + obj + ")");
+}
+console.log(looseJsonParse(
+   "{a:(4-1), b:function(){}, c:new Date()}"
+))
+
+ +

Auquel cas, le navigateur doit effectuer une recherche coûteuse afin de vérifier s'il y a des variables locales Date.

+ +

Pour obtenir un résultat identique, on peut tout à fait se passer d'eval() :

+ +
function Date(n){
+    return ["Monday","Tuesday","Wednesday","Thursaday","Friday","Saturday","Sunday"][n%7 || 0];
+}
+function runCodeWithDateFunction(obj){
+    return Function('"use strict";return (' + obj + ')')()(
+        Date
+    );
+}
+console.log(runCodeWithDateFunction(
+   "function(Date){ return Date(5) }"
+))
+
+ +

1. Le code passé à runCodeWithDateFunction peut être minifié.

+ +

2. Le surcoût lié à un appel de fonction est léger

+ +

3. Function() permet d'utiliser  "use strict"; (qui peut également aider à améliorer les performances).

+ +

Enfin, pour la plupart des cas, on doit pouvoir éviter de passer par

+ +

eval() ou Function() !

+ +

Accéder aux propriétés d'un objet

+ +

eval() ne doit pas être utilisée pour convertir des noms de propriétés en propriétés. Par exemple, lorsqu'on ne sait pas quelle propriété va être consultée avant l'exécution, on pourrait utiliser :

+ +
var obj = { a: 20, b: 30 };
+var nomPropriété = getNomProp();  //une méthode qui renvoie "a" ou "b"
+
+eval( "var résultat = obj." + nomPropriété );
+
+ +

Cependant, eval() n'est pas du tout nécessaire. Il est beaucoup plus simple, plus sécurisé, plus rapide, d'utiliser les accesseurs de propriétés :

+ +
var obj = { a: 20, b: 30 };
+var nomPropriété = getNomProp();  // une méthode qui renvoie  "a" or "b"
+var résultat = obj[nomPropriété]; //  obj[ "a" ] correspond à obj.a
+
+ +

Utiliser des fonctions au lieu de morceaux de code

+ +

Les fonctions JavaScript sont des citoyens de premier rang du langage, cela signifie que les fonctions peuvent être passées comme arguments aux autres API, qu'elles peuvent être stockées dans des variables, dans des propriétés d'objets, etc. De nombreuses API pour le DOM fonctionnent en prenant en argument des fonctions :

+ +
// au lieu de setTimeout(" ... ", 1000) on utilisera :
+setTimeout(function() { ... }, 1000);
+
+// au lieu de elt.setAttribute("onclick", "...") on utilisera :
+elt.addEventListener("click", function() { ... } , false); 
+ +

Les fermetures (closures) sont utiles lorsqu'on souhaite obtenir des fonctions paramétrées sans avoir à concaténer des chaînes de caractères.

+ +

Convertir des chaînes JSON en objets JavaScript (parsing)

+ +

Si la chaîne utilisée avec eval() contient des données (par exemple, un tableau : "[1, 2, 3]") et non du code, il est conseillé d'utiliser du {{Glossary("JSON")}}, qui permet de représenter un sous-ensemble des données représentables en JavaScript.

+ +

On notera que la syntaxe JSON est limitée relativement à la syntaxe JavaScript. De nombreux littéraux JavaScript ne pourront être parsés en JSON (par exemple, les virgules à la fin des instructions ne seront pas autorisées et les noms de propriétés devront être compris entre simples quotes). Il est souvent préférable d'utiliser un outil de sérialisation JSON pour que les chaînes générées puissent être analysée en JSON.

+ +

Transmettre des données et non du code

+ +

Si on a par exemple une extension conçue pour parcourir le code d'une page web, on pourra transmettre des données XPath au lieu d'un code JavaScript.

+ +

Exécuter du code avec des privilèges restreints

+ +

S'il faut nécessairement exécuter du code, il faut le faire avec des privilèges restreints. Cela s'applique généralement aux modules complémentaires ou aux applications XUL. Pour cela, on pourra utiliser Components.utils.evalInSandbox.

+ +

Exemples

+ +

Utiliser eval()

+ +

Dans le code suivant, les deux instructions passées à eval() sous la forme d'une chaîne renvoient 42. La première évaluation porte sur la chaîne "x + y + 1" ; la seconde évaluation porte sur la chaîne de caractères "42".

+ +
var x = 2;
+var y = 39;
+var z = "42";
+eval("x + y + 1"); // renvoie 42
+eval(z);           // renvoie 42
+
+ +

Utiliser eval() pour une chaîne d'instructions

+ +

Dans l'exemple qui suit, eval() est utilisée pour évaluer la chaîne de caractères str. Cette chaîne contient plusieurs instructions JavaScript qui affichent un message dans la console et qui affectent la valeur 42 à la variable z si x vaut cinq et 0 sinon. Lorsque la seconde instruction est exécutée, eval() entraînera l'exécution des instructions, les instructions seront évaluées et la valeur de z sera donc renvoyée.

+ +
var x = 5;
+var str = "if (x == 5) {console.log('z vaut 42'); z = 42;} else z = 0; ";
+console.log("z vaut "+eval(str));
+
+ +

Le résultat d'eval() est celui de la dernière expression

+ +

eval() renvoie la valeur de la dernière expression évaluée :

+ +
var str = "if ( a ) { 1+1; } else { 1+2; }";
+var a = true;
+var b = eval(str);  // renvoie 2
+
+console.log("b vaut : " + b);
+
+a = false;
+b = eval(str);      // renvoie 3
+
+console.log("b vaut : " + b);
+ +

eval() et les fonctions

+ +

Pour qu'une fonction soit restituée lors de l'évaluation, il est nécessaire d'encadrer l'expression contenue dans la chaîne de caractères avec des parenthèses :

+ +
var fctStr1 = "function a() {}"
+var fctStr2 = "(function a() {})"
+var fct1 = eval(fctStr1)  // renvoie undefined
+var fct2 = eval(fctStr2)  // renvoie une function
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.1', 'eval')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-eval-x', 'eval')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-eval-x', 'eval')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes spécifiques à Firefox

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/evalerror/index.html b/files/fr/web/javascript/reference/global_objects/evalerror/index.html deleted file mode 100644 index 402a26e026..0000000000 --- a/files/fr/web/javascript/reference/global_objects/evalerror/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: EvalError -slug: Web/JavaScript/Reference/Global_Objects/EvalError -tags: - - Error - - EvalError - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/EvalError -original_slug: Web/JavaScript/Reference/Objets_globaux/EvalError ---- -
{{JSRef}}
- -

L'objet EvalError indique une erreur concernant la fonction globale {{jsxref("Objets_globaux/eval","eval()")}}. Cette exception n'est plus levée par JavaScript mais l'objet EvalError est conservé pour des raisons de compatibilité.

- -

Syntaxe

- -
new EvalError([message[, nomFichier[, numeroLigne]]])
- -

Paramètres

- -
-
message
-
Paramètre optionnel, une description compréhensible de l'erreur
-
nomFichier {{Non-standard_inline}}
-
Paramètre optionnel, le nom du fichier qui contient le code à l'origine de l'exception
-
numeroLigne {{Non-standard_inline}}
-
Paramètre optionnel, le numéro de la ligne du code qui a entrainé l'exception
-
- -

Propriétés

- -
-
{{jsxref("EvalError.prototype")}}
-
Cette propriété permet l'addition de propriétés à un objet EvalError.
-
- -

Méthodes

- -

L'objet global EvalError ne contient pas de méthodes propres. En revanche, il hérite de certaines méthodes via sa chaîne de prototypes.

- -

Instances de EvalError

- -

Propriétés

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/EvalError/prototype','Properties')}}
- -

Méthodes

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/EvalError/prototype','Methods')}}
- -

Exemples

- -

EvalError n'est pas utilisée par la spécification ECMAScript actuelle et ne sera donc pas levée lors de l'exécution. Cependant, l'objet reste disponible à des fins de compatibilité avec les versions antérieures de la spécification.

- -

Créer une exception EvalError

- -
try {
-  throw new EvalError("Coucou", "unFichier.js", 10);
-} catch (e) {
-  console.log(e instanceof EvalError); // true
-  console.log(e.message);              // "Coucou"
-  console.log(e.name);                 // "EvalError"
-  console.log(e.fileName);             // "unFichier.js"
-  console.log(e.lineNumber);           // 10
-  console.log(e.columnNumber);         // 0
-  console.log(e.stack);                // "@Scratchpad/2:2:9\n"
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale
{{SpecName('ES5.1', '#sec-15.11.6.1', 'EvalError')}}{{Spec2('ES5.1')}}Non utilisé dans cette spécificaition. Présent à des fins de rétrocompatibilité.
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}{{Spec2('ES6')}}Non utilisé dans cette spécificaition. Présent à des fins de rétrocompatibilité.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -
- -

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

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/evalerror/index.md b/files/fr/web/javascript/reference/global_objects/evalerror/index.md new file mode 100644 index 0000000000..402a26e026 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/evalerror/index.md @@ -0,0 +1,115 @@ +--- +title: EvalError +slug: Web/JavaScript/Reference/Global_Objects/EvalError +tags: + - Error + - EvalError + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/EvalError +original_slug: Web/JavaScript/Reference/Objets_globaux/EvalError +--- +
{{JSRef}}
+ +

L'objet EvalError indique une erreur concernant la fonction globale {{jsxref("Objets_globaux/eval","eval()")}}. Cette exception n'est plus levée par JavaScript mais l'objet EvalError est conservé pour des raisons de compatibilité.

+ +

Syntaxe

+ +
new EvalError([message[, nomFichier[, numeroLigne]]])
+ +

Paramètres

+ +
+
message
+
Paramètre optionnel, une description compréhensible de l'erreur
+
nomFichier {{Non-standard_inline}}
+
Paramètre optionnel, le nom du fichier qui contient le code à l'origine de l'exception
+
numeroLigne {{Non-standard_inline}}
+
Paramètre optionnel, le numéro de la ligne du code qui a entrainé l'exception
+
+ +

Propriétés

+ +
+
{{jsxref("EvalError.prototype")}}
+
Cette propriété permet l'addition de propriétés à un objet EvalError.
+
+ +

Méthodes

+ +

L'objet global EvalError ne contient pas de méthodes propres. En revanche, il hérite de certaines méthodes via sa chaîne de prototypes.

+ +

Instances de EvalError

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/EvalError/prototype','Properties')}}
+ +

Méthodes

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/EvalError/prototype','Methods')}}
+ +

Exemples

+ +

EvalError n'est pas utilisée par la spécification ECMAScript actuelle et ne sera donc pas levée lors de l'exécution. Cependant, l'objet reste disponible à des fins de compatibilité avec les versions antérieures de la spécification.

+ +

Créer une exception EvalError

+ +
try {
+  throw new EvalError("Coucou", "unFichier.js", 10);
+} catch (e) {
+  console.log(e instanceof EvalError); // true
+  console.log(e.message);              // "Coucou"
+  console.log(e.name);                 // "EvalError"
+  console.log(e.fileName);             // "unFichier.js"
+  console.log(e.lineNumber);           // 10
+  console.log(e.columnNumber);         // 0
+  console.log(e.stack);                // "@Scratchpad/2:2:9\n"
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale
{{SpecName('ES5.1', '#sec-15.11.6.1', 'EvalError')}}{{Spec2('ES5.1')}}Non utilisé dans cette spécificaition. Présent à des fins de rétrocompatibilité.
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}{{Spec2('ES6')}}Non utilisé dans cette spécificaition. Présent à des fins de rétrocompatibilité.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +
+ +

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

+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/float32array/index.html b/files/fr/web/javascript/reference/global_objects/float32array/index.html deleted file mode 100644 index a6e52bb590..0000000000 --- a/files/fr/web/javascript/reference/global_objects/float32array/index.html +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: Float32Array -slug: Web/JavaScript/Reference/Global_Objects/Float32Array -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/Float32Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Float32Array ---- -
{{JSRef}}
- -

Le tableau typé Float32Array représente un tableau de nombres flottants représentés sur 32 bits (ce qui correspond au type C float), l'ordre des octets utilisés étant celui de la plate-forme. Si on souhaite maîtriser le boutisme (endianness) utilisé, on pourra utiliser une {{jsxref("DataView")}}. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est établi, on peut référencer des éléments dans le tableau en utilisant les méthodes de l'objet ou la syntaxe usuelle des crochets.

- -

Syntaxe

- -
new Float32Array(); // Apparu avec ES2017
-new Float32Array(longueur);
-new Float32Array(tableauTypé);
-new Float32Array(objet);
-new Float32Array(buffer [, décalageOctets [, longueur]]);
- -

Pour plus d'informations sur la syntaxe de ce constructeur et les paramètres utilisés, voir la page {{jsxref("Objets_globaux/TypedArray","TypedArray","#Syntaxe")}}.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float32Array.BYTES_PER_ELEMENT")}}
-
Renvoie le nombre d'octets par élément. 4 dans le cas de Float32Array.
-
Float32Array.length
-
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Float32Array.name")}}
-
Renvoie la chaîne de caractères correspondant au nom du constructeur, dans le cas de Float32Array, ce sera : "Float32Array".
-
{{jsxref("TypedArray.prototype", "Float32Array.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "Float32Array.from()")}}
-
Crée un nouvel objet Float32Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "Float32Array.of()")}}
-
Crée un nouvel objet Float32Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}.
-
- -

Prototype Float32Array

- -

Chacun des objets Float32Array hérite de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Float32Array.prototype.constructor
-
Renvoie la fonction qui a crée le prototype de l'instance. Par défaut, ce sera le constructeur Float32Array.
-
{{jsxref("TypedArray.prototype.buffer", "Float32Array.prototype.buffer")}} {{readonlyInline}}
-
Renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Float32Array. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Float32Array.prototype.byteLength")}} {{readonlyInline}}
-
Renvoie la longueur, exprimée en octets, de l'objet Float32Array à partir du début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Float32Array.prototype.byteOffset")}} {{readonlyInline}}
-
Renvoie le décalage, exprimé en octets, de l'objet Float32Array par rapport au début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}} {{readonlyInline}}
-
Renvoie le nombre d'éléments contenus dans l'objet Float32Array. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Float32Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Float32Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Float32Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Float32Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Float32Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Float32Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Float32Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Float32Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Float32Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Float32Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Float32Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Float32Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Float32Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Float32Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Float32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Float32Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Float32Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Float32Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Float32Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Float32Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Float32Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Float32Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Float32Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Float32Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Float32Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Float32Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Float32Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Float32Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Float32Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet Float32Array :

- -
// Construction à partir d'une longueur
-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
-
-// Construction à partir d'un tableau
-var arr = new Float32Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un tableau typé
-var x = new Float32Array([21, 31]);
-var y = new Float32Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(16);
-var z = new Float32Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var float32 = new Float32Array(iterable);
-// Float32Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{Spec2('Typed Array')}}Remplacée par ECMAScript 2015.
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}Défintion initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin que celui-ci utilise l'opération interne ToIndex et puisse être utilisé sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Float32Array doit être utilisée avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Float32Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Float32Array([1, 2, 3]);
-// TypeError: calling a builtin Float32Array constructor
-// without new is forbidden
- -
var dv = new Float32Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/float32array/index.md b/files/fr/web/javascript/reference/global_objects/float32array/index.md new file mode 100644 index 0000000000..a6e52bb590 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/float32array/index.md @@ -0,0 +1,204 @@ +--- +title: Float32Array +slug: Web/JavaScript/Reference/Global_Objects/Float32Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Float32Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Float32Array +--- +
{{JSRef}}
+ +

Le tableau typé Float32Array représente un tableau de nombres flottants représentés sur 32 bits (ce qui correspond au type C float), l'ordre des octets utilisés étant celui de la plate-forme. Si on souhaite maîtriser le boutisme (endianness) utilisé, on pourra utiliser une {{jsxref("DataView")}}. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est établi, on peut référencer des éléments dans le tableau en utilisant les méthodes de l'objet ou la syntaxe usuelle des crochets.

+ +

Syntaxe

+ +
new Float32Array(); // Apparu avec ES2017
+new Float32Array(longueur);
+new Float32Array(tableauTypé);
+new Float32Array(objet);
+new Float32Array(buffer [, décalageOctets [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe de ce constructeur et les paramètres utilisés, voir la page {{jsxref("Objets_globaux/TypedArray","TypedArray","#Syntaxe")}}.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float32Array.BYTES_PER_ELEMENT")}}
+
Renvoie le nombre d'octets par élément. 4 dans le cas de Float32Array.
+
Float32Array.length
+
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Float32Array.name")}}
+
Renvoie la chaîne de caractères correspondant au nom du constructeur, dans le cas de Float32Array, ce sera : "Float32Array".
+
{{jsxref("TypedArray.prototype", "Float32Array.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "Float32Array.from()")}}
+
Crée un nouvel objet Float32Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "Float32Array.of()")}}
+
Crée un nouvel objet Float32Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}.
+
+ +

Prototype Float32Array

+ +

Chacun des objets Float32Array hérite de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Float32Array.prototype.constructor
+
Renvoie la fonction qui a crée le prototype de l'instance. Par défaut, ce sera le constructeur Float32Array.
+
{{jsxref("TypedArray.prototype.buffer", "Float32Array.prototype.buffer")}} {{readonlyInline}}
+
Renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Float32Array. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Float32Array.prototype.byteLength")}} {{readonlyInline}}
+
Renvoie la longueur, exprimée en octets, de l'objet Float32Array à partir du début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Float32Array.prototype.byteOffset")}} {{readonlyInline}}
+
Renvoie le décalage, exprimé en octets, de l'objet Float32Array par rapport au début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}} {{readonlyInline}}
+
Renvoie le nombre d'éléments contenus dans l'objet Float32Array. Cette propriété est fixée lors de la construction et n'est donc disponible qu'en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Float32Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Float32Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Float32Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Float32Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Float32Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Float32Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Float32Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Float32Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Float32Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Float32Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Float32Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Float32Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Float32Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Float32Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Float32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Float32Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Float32Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Float32Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Float32Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Float32Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Float32Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Float32Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Float32Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Float32Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Float32Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Float32Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Float32Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Float32Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Float32Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet Float32Array :

+ +
// Construction à partir d'une longueur
+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
+
+// Construction à partir d'un tableau
+var arr = new Float32Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un tableau typé
+var x = new Float32Array([21, 31]);
+var y = new Float32Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Float32Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var float32 = new Float32Array(iterable);
+// Float32Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{Spec2('Typed Array')}}Remplacée par ECMAScript 2015.
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}Défintion initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin que celui-ci utilise l'opération interne ToIndex et puisse être utilisé sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Float32Array doit être utilisée avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Float32Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Float32Array([1, 2, 3]);
+// TypeError: calling a builtin Float32Array constructor
+// without new is forbidden
+ +
var dv = new Float32Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/float64array/index.html b/files/fr/web/javascript/reference/global_objects/float64array/index.html deleted file mode 100644 index 9865674fff..0000000000 --- a/files/fr/web/javascript/reference/global_objects/float64array/index.html +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: Float64Array -slug: Web/JavaScript/Reference/Global_Objects/Float64Array -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/Float64Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Float64Array ---- -
{{JSRef}}
- -

Le constructeur Floa64Array permet de représenter un tableau typé dont les éléments sont des nombres flottants représentés sur 64 bits (ce qui correspond à la représentation du type double en C) dans l'ordre des octets utilisé par la plate-forme. Si on souhaite maîtriser le boutisme (endianness), on pourra utiliser un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois construit, il est possible de faire référence aux éléments du tableau en utilisant les méthodes de l'objet ou la syntaxe usuelle pour l'accès aux éléments du tableau (les crochets).

- -

Syntaxe

- -
new Float64Array(); // apparu avec ES2017
-new Float64Array(longueur);
-new Float64Array(tableauTypé);
-new Float64Array(objet);
-new Float64Array(buffer [, positionOctet [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur et ses paramètres, voir TypedArray.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float64Array.BYTES_PER_ELEMENT")}}
-
Renvoie un nombre traduisant la taille de l'élément en octets, 8 dans le cas d'un Float64Array.
-
Float64Array.length
-
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'éléments, voir {{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Float64Array.name")}}
-
Renvoie la chaîne de caractère correspondant au nom du constructeur, dans le cas de Float64Array, ce sera : "Float64Array".
-
{{jsxref("TypedArray.prototype", "Float64Array.prototype")}}
-
Prototype pour les objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "Float64Array.from()")}}
-
Crée un nouvel objet Float64Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "Float64Array.of()")}}
-
Crée un nouvel objet Float64Array à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype de Float64Array

- -

Tous les objets Float64Array héritent de {{jsxref("TypedArray.prototype", "Float64Array.prototype")}}.

- -

Propriétés

- -
-
Float64Array.prototype.constructor
-
Renvoie la fonction qui a créé le prototype de l'instance. Par défaut, ce sera le constructeur natif Float64Array.
-
{{jsxref("TypedArray.prototype.buffer", "Float64Array.prototype.buffer")}} {{readonlyInline}}
-
Renvoie l'{{jsxref("ArrayBuffer")}} référencé par l'objet Float64Array. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Float64Array.prototype.byteLength")}} {{readonlyInline}}
-
Renvoie la longueur, exprimée en octets, de l'objet Float64Array depuis le début de son {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Float64Array.prototype.byteOffset")}} {{readonlyInline}}
-
Renvoie le décalage, exprimé en octets, entre l'objet Float64Array et le début de son {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}} {{readonlyInline}}
-
Renvoie le nombre d'éléments contenus dans l'objet Float64Array. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Float64Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Float64Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Float64Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Float64Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Float64Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Float64Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Float64Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Float64Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Float64Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Float64Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Float64Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Float64Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Float64Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Float64Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Float64Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Float64Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Float64Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Float64Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Float64Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Float64Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Float64Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Float64Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Float64Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Float64Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Float64Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Float64Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Float64Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Float64Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Float64Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet Float64Array :

- -
// Construction avec une longueur de tableau
-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
-
-// Construction à partir d'un tableau
-var arr = new Float64Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un autre tableau typé
-var x = new Float64Array([21, 31]);
-var y = new Float64Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(32);
-var z = new Float64Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var float64 = new Float64Array(iterable);
-// Float64Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Première définition au sein d'un standard ECMAScript. new est nécessaire pour utiliser le constructeur.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin qu'il utilise l'opération interne ToIndex ce qui permet de l'utiliser sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), les constructeurs TypedArray doivent être utilisés avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur TypedArray comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Float64Array([1, 2, 3]);
-// TypeError: calling a builtin Float64Array constructor without new is forbidden
- -
var dv = new Float64Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/float64array/index.md b/files/fr/web/javascript/reference/global_objects/float64array/index.md new file mode 100644 index 0000000000..9865674fff --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/float64array/index.md @@ -0,0 +1,203 @@ +--- +title: Float64Array +slug: Web/JavaScript/Reference/Global_Objects/Float64Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Float64Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Float64Array +--- +
{{JSRef}}
+ +

Le constructeur Floa64Array permet de représenter un tableau typé dont les éléments sont des nombres flottants représentés sur 64 bits (ce qui correspond à la représentation du type double en C) dans l'ordre des octets utilisé par la plate-forme. Si on souhaite maîtriser le boutisme (endianness), on pourra utiliser un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois construit, il est possible de faire référence aux éléments du tableau en utilisant les méthodes de l'objet ou la syntaxe usuelle pour l'accès aux éléments du tableau (les crochets).

+ +

Syntaxe

+ +
new Float64Array(); // apparu avec ES2017
+new Float64Array(longueur);
+new Float64Array(tableauTypé);
+new Float64Array(objet);
+new Float64Array(buffer [, positionOctet [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur et ses paramètres, voir TypedArray.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float64Array.BYTES_PER_ELEMENT")}}
+
Renvoie un nombre traduisant la taille de l'élément en octets, 8 dans le cas d'un Float64Array.
+
Float64Array.length
+
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'éléments, voir {{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Float64Array.name")}}
+
Renvoie la chaîne de caractère correspondant au nom du constructeur, dans le cas de Float64Array, ce sera : "Float64Array".
+
{{jsxref("TypedArray.prototype", "Float64Array.prototype")}}
+
Prototype pour les objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "Float64Array.from()")}}
+
Crée un nouvel objet Float64Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "Float64Array.of()")}}
+
Crée un nouvel objet Float64Array à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype de Float64Array

+ +

Tous les objets Float64Array héritent de {{jsxref("TypedArray.prototype", "Float64Array.prototype")}}.

+ +

Propriétés

+ +
+
Float64Array.prototype.constructor
+
Renvoie la fonction qui a créé le prototype de l'instance. Par défaut, ce sera le constructeur natif Float64Array.
+
{{jsxref("TypedArray.prototype.buffer", "Float64Array.prototype.buffer")}} {{readonlyInline}}
+
Renvoie l'{{jsxref("ArrayBuffer")}} référencé par l'objet Float64Array. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Float64Array.prototype.byteLength")}} {{readonlyInline}}
+
Renvoie la longueur, exprimée en octets, de l'objet Float64Array depuis le début de son {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Float64Array.prototype.byteOffset")}} {{readonlyInline}}
+
Renvoie le décalage, exprimé en octets, entre l'objet Float64Array et le début de son {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}} {{readonlyInline}}
+
Renvoie le nombre d'éléments contenus dans l'objet Float64Array. Cette valeur est fixée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Float64Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Float64Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Float64Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Float64Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Float64Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Float64Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Float64Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Float64Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Float64Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Float64Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Float64Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Float64Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Float64Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Float64Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Float64Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Float64Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Float64Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Float64Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Float64Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Float64Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Float64Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Float64Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Float64Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Float64Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Float64Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Float64Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Float64Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Float64Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Float64Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet Float64Array :

+ +
// Construction avec une longueur de tableau
+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
+
+// Construction à partir d'un tableau
+var arr = new Float64Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un autre tableau typé
+var x = new Float64Array([21, 31]);
+var y = new Float64Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new Float64Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var float64 = new Float64Array(iterable);
+// Float64Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Première définition au sein d'un standard ECMAScript. new est nécessaire pour utiliser le constructeur.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin qu'il utilise l'opération interne ToIndex ce qui permet de l'utiliser sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), les constructeurs TypedArray doivent être utilisés avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur TypedArray comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Float64Array([1, 2, 3]);
+// TypeError: calling a builtin Float64Array constructor without new is forbidden
+ +
var dv = new Float64Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/apply/index.html b/files/fr/web/javascript/reference/global_objects/function/apply/index.html deleted file mode 100644 index a8dcbf5fab..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/apply/index.html +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: Function.prototype.apply() -slug: Web/JavaScript/Reference/Global_Objects/Function/apply -tags: - - Function - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/apply -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/apply ---- -
{{JSRef}}
- -

La méthode apply() appelle une fonction en lui passant une valeur this et des arguments sous forme d'un tableau (ou d'un objet semblable à un tableau).

- -

Note : Bien que la syntaxe de cette fonction ressemble à celle de {{jsxref("Function.call", "call()")}}, elle est différente car call() accepte une liste d'arguments, tandis que apply() accepte un tableau d'arguments.

- -

Note : Quand on utilise {{jsxref("undefined")}} ou {{jsxref("null")}} comme premier argument pour cette fonction, on peut obtenir un résultat similaire avec la syntaxe de décomposition.

- -
{{EmbedInteractiveExample("pages/js/function-apply.html")}}
- -

Syntaxe

- -
fun.apply(thisArg, [argsArray])
- -

Paramètres

- -
-
thisArg
-
La valeur de this fournie pour l'appel à la fonction fun. On notera que, sous certaines conditions, this peut ne pas être la valeur exacte vue par la méthode : si la méthode est une fonction utilisée en mode {{jsxref("Strict_mode", "mode non-strict", "", 1)}}, {{jsxref("null")}} et {{jsxref("undefined")}} seront remplacées par l'objet global, et les valeurs primitives seront encapsulées. Cet argument n'est pas optionnel.
-
argsArray
-
Un objet semblable à un tableau qui définit les arguments avec lesquel fun devrait être appelée, ou {{jsxref("null")}} ou {{jsxref("undefined")}} si aucun argument n'est passé à la fonction. Avec ECMAScript 5, ces arguments peuvent être représentés par un objet semblable un tableau. Voir ci-après pour plus d'informations sur la compatibilité des navigateurs.
-
- -

Valeur de retour

- -

Le résultat obtenu en appelant la fonction avec la valeur this indiquée et les arguments fournis.

- -

Description

- -

Il est possible d'utiliser un objet this différent lors de l'appel à une fonction existante. this fait référence à l'objet courant, l'objet appelant. Avec apply, on peut écrire une méthode une seule fois et en hériter dans un autre objet, sans avoir à la réécrire dans le nouvel objet.

- -

apply est similaire à {{jsxref("Function.call", "call()")}}, hormis pour le type d'arguments supporté. Il est possible d'utiliser un tableau à la place d'un ensemble de paramètres. Avec apply, il est également possible d'utiliser un littéral de tableau, par exemple, fun.apply(this, ['manger', 'bananes']), ou un objet {{jsxref("Array")}}, par exemple, fun.apply(this, new Array('manger', 'bananes')).

- -

On peut aussi passer {{jsxref("Fonctions/arguments", "arguments ")}} en tant que paramètre argsArray. arguments étant une variable locale à la fonction. Celle-ci peut également être utilisée pour tous les arguments non spécifiés de l'objet appelé. Ainsi, il n'est pas nécessaire de connaître les arguments de l'objet appelé lors d'un appel à la méthode apply. arguments peut être utilisé pour passer tous les arguments à l'objet appelé. L'objet appelé gèrera alors la manipulation des arguments.

- -

Depuis la cinquième édition d'ECMAScript, il est possible d'utiliser des objet semblables à des tableaux à la place. En pratique tout objet possédant une propriété length et une propriété entière comprise entre [0..length[ est un objet semblable à un tableau. On peut ainsi, par exemple, utiliser un objet {{domxref("NodeList")}} ou un objet quelconque comme {'length': 2, '0': 'manger', '1': 'bananes'}.

- -
-

Note : Beaucoup de navigateurs, y compris Chrome 14 et Internet Explorer 9 n'acceptent pas encore un objet semblable à un tableau, ils déclencheront un exception.

-
- -

Exemples

- -

Utiliser apply pour chaîner des constructeurs

- -

Il est possible d'utiliser apply afin de chaîner les {{jsxref("Opérateurs/L_opérateur_new", "constructeurs","",1)}} d'un objet, de façon sembable au chaînage utilisé en java. Dans l'exemple suivant, on crée une {{jsxref("Function")}} globale appelée construct, qui permet d'utiliser un objet de type Array associé à un constructeur au lieu d'une liste d'arguments.

- -
Function.prototype.construct = function (aArgs) {
-  var nouvelObjet = Object.create(this.prototype);
-  this.apply(nouvelObjet, aArgs);
-  return nouvelObjet;
-};
-
- -
-

Note : La méthode {{jsxref("Object.create()")}} utilisée ci-avant est relativement nouvelle. Pour une autre méthode qui utilise les closure, on pourra utiliser :

- -
Function.prototype.construct = function(aArgs) {
-  var fConstructeur = this, fNouveauConstructeur = function() {
-    fConstructeur.apply(this, aArgs);
-  };
-  fNouveauConstructeur.prototype = fConstructeur.prototype;
-  return new fNouveauConstructeur();
-};
-
- -

Exemple d'utilisation :

- -
function MonConstructeur () {
-    for (var nProp = 0; nProp < arguments.length; nProp++) {
-        this["propriété" + nProp] = arguments[nProp];
-    }
-}
-
-var monTableau = [4, "Coucou monde !", false];
-var monInstance = MonConstructeur.construct(monTableau);
-
-console.log(monInstance.propriété1); // "Coucou monde !"
-console.log(monInstance instanceof MonConstructeur); // "true"
-console.log(monInstance.constructor); // "MonConstructeur"
-
- -
-

Note : On pourrait également utiliser {{jsxref("Object/__proto__", "Object.__proto__")}}

- -
Function.prototype.construct = function (aArgs) {
-  var oNew = {};
-  oNew.__proto__ = this.prototype;
-  this.apply(oNew, aArgs);
-  return oNew;
-};
-
- -

ou encore le constructeur {{jsxref("Function")}} :

- -
Function.prototype.construct = function (aArgs) {
-  var fNewConstr = new Function("");
-  fNewConstr.prototype = this.prototype;
-  var oNew = new fNewConstr();
-  this.apply(oNew, aArgs);
-  return oNew;
-};
-
-
- -

Note : Attention, cette méthode non-native Function.construct ne fonctionnera pas avec certains contructeurs natifs (tels que {{jsxref("Date", "Date")}}). Dans ce cas précis, on peut utiliser la méthode {{jsxref("Function.bind")}} (pour exemple, si on prend le tableau suivant [2012, 11, 4] utilisé sur le constructeur de l'objet Date : on peut écrire ceci : new (Function.prototype.bind.apply(Date, [null].concat([2012, 11, 4])))() – cependant cela reste une pratique à éviter si possible et à ne pas utiliser en dans un environnement de production).

- -

Utiliser apply et des fonctions natives

- -

Un usage singulier de apply permet d'appeler des fonctions natives pour réaliser par exemple des tâches qui autrement auraient nécessité une boucle sur toutes les valeurs d'un tableau. Pour illustrer ce concept, on prend l'exemple de Math.max/Math.min qui permettent d'extraire la valeur maximum/minimale de notre tableau.

- -
/* min/max tableau de nombres */
-var nombres = [5, 6, 2, 3, 7];
-
-/* usage de Math.min/Math.max et de la méthode apply */
-var max = Math.max.apply(null, nombres);
-/* Equivalent à Math.max(nombres[0], ...)
-  ou Math.max(5, 6, ..) */
-
-var min = Math.min.apply(null, nombres);
-
-/* vs. algorithme trivial avec une boucle */
-max = -Infinity, min = +Infinity;
-
-for (var i = 0; i < nombres.length; i++) {
-  if (nombres[i] > max)
-    max = nombres[i];
-  if (nombres[i] < min)
-    min = nombres[i];
-}
- -

Note : l'utilisation de apply peut provoquer l'atteinte du seuil limite du nombres d'arguments supporté par le moteur Javascript. Les conséquences de cette utilisation abusive (on évoque plus de 10000 arguments) peuvent varier selon les moteurs Javascript (JavaScript contient une limite en dur de 65536), car une liberté subsiste quant à l'implémentation du moteur. Des moteurs lèveront une exception si le seuil est atteint. Il est donc préférable d'apporter une attention toute particulière au nombre d'arguments passés. (Illustrerons ce cas dans l'exemple suivant avec un moteur factice capable de ne gérer que 4 arguments au maximum (les limites natives sont, bien sûr, plus élevées), et reprenons les arguments de l'exemple précédent 5, 6, 2, 3 passés à la méthode apply plutôt que notre tableau entier.) Imaginons que notre tableau soit progressivement peuplé de milliers d'éléments, une stratégie spécifique devra être appliquée, par exemple en appliquant la méthode apply sur des portions du tableau:

- -
function minimumDuTableau(tab) {
-  var min = Infinity;
-  var QUANTUM = 32768;
-
-  for (var i = 0, longueur = tab.length; i < len; i += QUANTUM) {
-    var submin = Math.min.apply(null,
-                                tab.slice(i, Math.min(i + QUANTUM, longueur)));
-    min = Math.min(submin, min);
-  }
-
-  return min;
-}
-
-var min = minimumDuTableau([5, 6, 2, 3, 7]);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.3.4.3', 'Function.prototype.apply')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function.prototype.apply', 'Function.prototype.apply')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function.prototype.apply', 'Function.prototype.apply')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.apply")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/apply/index.md b/files/fr/web/javascript/reference/global_objects/function/apply/index.md new file mode 100644 index 0000000000..a8dcbf5fab --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/apply/index.md @@ -0,0 +1,208 @@ +--- +title: Function.prototype.apply() +slug: Web/JavaScript/Reference/Global_Objects/Function/apply +tags: + - Function + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/apply +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/apply +--- +
{{JSRef}}
+ +

La méthode apply() appelle une fonction en lui passant une valeur this et des arguments sous forme d'un tableau (ou d'un objet semblable à un tableau).

+ +

Note : Bien que la syntaxe de cette fonction ressemble à celle de {{jsxref("Function.call", "call()")}}, elle est différente car call() accepte une liste d'arguments, tandis que apply() accepte un tableau d'arguments.

+ +

Note : Quand on utilise {{jsxref("undefined")}} ou {{jsxref("null")}} comme premier argument pour cette fonction, on peut obtenir un résultat similaire avec la syntaxe de décomposition.

+ +
{{EmbedInteractiveExample("pages/js/function-apply.html")}}
+ +

Syntaxe

+ +
fun.apply(thisArg, [argsArray])
+ +

Paramètres

+ +
+
thisArg
+
La valeur de this fournie pour l'appel à la fonction fun. On notera que, sous certaines conditions, this peut ne pas être la valeur exacte vue par la méthode : si la méthode est une fonction utilisée en mode {{jsxref("Strict_mode", "mode non-strict", "", 1)}}, {{jsxref("null")}} et {{jsxref("undefined")}} seront remplacées par l'objet global, et les valeurs primitives seront encapsulées. Cet argument n'est pas optionnel.
+
argsArray
+
Un objet semblable à un tableau qui définit les arguments avec lesquel fun devrait être appelée, ou {{jsxref("null")}} ou {{jsxref("undefined")}} si aucun argument n'est passé à la fonction. Avec ECMAScript 5, ces arguments peuvent être représentés par un objet semblable un tableau. Voir ci-après pour plus d'informations sur la compatibilité des navigateurs.
+
+ +

Valeur de retour

+ +

Le résultat obtenu en appelant la fonction avec la valeur this indiquée et les arguments fournis.

+ +

Description

+ +

Il est possible d'utiliser un objet this différent lors de l'appel à une fonction existante. this fait référence à l'objet courant, l'objet appelant. Avec apply, on peut écrire une méthode une seule fois et en hériter dans un autre objet, sans avoir à la réécrire dans le nouvel objet.

+ +

apply est similaire à {{jsxref("Function.call", "call()")}}, hormis pour le type d'arguments supporté. Il est possible d'utiliser un tableau à la place d'un ensemble de paramètres. Avec apply, il est également possible d'utiliser un littéral de tableau, par exemple, fun.apply(this, ['manger', 'bananes']), ou un objet {{jsxref("Array")}}, par exemple, fun.apply(this, new Array('manger', 'bananes')).

+ +

On peut aussi passer {{jsxref("Fonctions/arguments", "arguments ")}} en tant que paramètre argsArray. arguments étant une variable locale à la fonction. Celle-ci peut également être utilisée pour tous les arguments non spécifiés de l'objet appelé. Ainsi, il n'est pas nécessaire de connaître les arguments de l'objet appelé lors d'un appel à la méthode apply. arguments peut être utilisé pour passer tous les arguments à l'objet appelé. L'objet appelé gèrera alors la manipulation des arguments.

+ +

Depuis la cinquième édition d'ECMAScript, il est possible d'utiliser des objet semblables à des tableaux à la place. En pratique tout objet possédant une propriété length et une propriété entière comprise entre [0..length[ est un objet semblable à un tableau. On peut ainsi, par exemple, utiliser un objet {{domxref("NodeList")}} ou un objet quelconque comme {'length': 2, '0': 'manger', '1': 'bananes'}.

+ +
+

Note : Beaucoup de navigateurs, y compris Chrome 14 et Internet Explorer 9 n'acceptent pas encore un objet semblable à un tableau, ils déclencheront un exception.

+
+ +

Exemples

+ +

Utiliser apply pour chaîner des constructeurs

+ +

Il est possible d'utiliser apply afin de chaîner les {{jsxref("Opérateurs/L_opérateur_new", "constructeurs","",1)}} d'un objet, de façon sembable au chaînage utilisé en java. Dans l'exemple suivant, on crée une {{jsxref("Function")}} globale appelée construct, qui permet d'utiliser un objet de type Array associé à un constructeur au lieu d'une liste d'arguments.

+ +
Function.prototype.construct = function (aArgs) {
+  var nouvelObjet = Object.create(this.prototype);
+  this.apply(nouvelObjet, aArgs);
+  return nouvelObjet;
+};
+
+ +
+

Note : La méthode {{jsxref("Object.create()")}} utilisée ci-avant est relativement nouvelle. Pour une autre méthode qui utilise les closure, on pourra utiliser :

+ +
Function.prototype.construct = function(aArgs) {
+  var fConstructeur = this, fNouveauConstructeur = function() {
+    fConstructeur.apply(this, aArgs);
+  };
+  fNouveauConstructeur.prototype = fConstructeur.prototype;
+  return new fNouveauConstructeur();
+};
+
+ +

Exemple d'utilisation :

+ +
function MonConstructeur () {
+    for (var nProp = 0; nProp < arguments.length; nProp++) {
+        this["propriété" + nProp] = arguments[nProp];
+    }
+}
+
+var monTableau = [4, "Coucou monde !", false];
+var monInstance = MonConstructeur.construct(monTableau);
+
+console.log(monInstance.propriété1); // "Coucou monde !"
+console.log(monInstance instanceof MonConstructeur); // "true"
+console.log(monInstance.constructor); // "MonConstructeur"
+
+ +
+

Note : On pourrait également utiliser {{jsxref("Object/__proto__", "Object.__proto__")}}

+ +
Function.prototype.construct = function (aArgs) {
+  var oNew = {};
+  oNew.__proto__ = this.prototype;
+  this.apply(oNew, aArgs);
+  return oNew;
+};
+
+ +

ou encore le constructeur {{jsxref("Function")}} :

+ +
Function.prototype.construct = function (aArgs) {
+  var fNewConstr = new Function("");
+  fNewConstr.prototype = this.prototype;
+  var oNew = new fNewConstr();
+  this.apply(oNew, aArgs);
+  return oNew;
+};
+
+
+ +

Note : Attention, cette méthode non-native Function.construct ne fonctionnera pas avec certains contructeurs natifs (tels que {{jsxref("Date", "Date")}}). Dans ce cas précis, on peut utiliser la méthode {{jsxref("Function.bind")}} (pour exemple, si on prend le tableau suivant [2012, 11, 4] utilisé sur le constructeur de l'objet Date : on peut écrire ceci : new (Function.prototype.bind.apply(Date, [null].concat([2012, 11, 4])))() – cependant cela reste une pratique à éviter si possible et à ne pas utiliser en dans un environnement de production).

+ +

Utiliser apply et des fonctions natives

+ +

Un usage singulier de apply permet d'appeler des fonctions natives pour réaliser par exemple des tâches qui autrement auraient nécessité une boucle sur toutes les valeurs d'un tableau. Pour illustrer ce concept, on prend l'exemple de Math.max/Math.min qui permettent d'extraire la valeur maximum/minimale de notre tableau.

+ +
/* min/max tableau de nombres */
+var nombres = [5, 6, 2, 3, 7];
+
+/* usage de Math.min/Math.max et de la méthode apply */
+var max = Math.max.apply(null, nombres);
+/* Equivalent à Math.max(nombres[0], ...)
+  ou Math.max(5, 6, ..) */
+
+var min = Math.min.apply(null, nombres);
+
+/* vs. algorithme trivial avec une boucle */
+max = -Infinity, min = +Infinity;
+
+for (var i = 0; i < nombres.length; i++) {
+  if (nombres[i] > max)
+    max = nombres[i];
+  if (nombres[i] < min)
+    min = nombres[i];
+}
+ +

Note : l'utilisation de apply peut provoquer l'atteinte du seuil limite du nombres d'arguments supporté par le moteur Javascript. Les conséquences de cette utilisation abusive (on évoque plus de 10000 arguments) peuvent varier selon les moteurs Javascript (JavaScript contient une limite en dur de 65536), car une liberté subsiste quant à l'implémentation du moteur. Des moteurs lèveront une exception si le seuil est atteint. Il est donc préférable d'apporter une attention toute particulière au nombre d'arguments passés. (Illustrerons ce cas dans l'exemple suivant avec un moteur factice capable de ne gérer que 4 arguments au maximum (les limites natives sont, bien sûr, plus élevées), et reprenons les arguments de l'exemple précédent 5, 6, 2, 3 passés à la méthode apply plutôt que notre tableau entier.) Imaginons que notre tableau soit progressivement peuplé de milliers d'éléments, une stratégie spécifique devra être appliquée, par exemple en appliquant la méthode apply sur des portions du tableau:

+ +
function minimumDuTableau(tab) {
+  var min = Infinity;
+  var QUANTUM = 32768;
+
+  for (var i = 0, longueur = tab.length; i < len; i += QUANTUM) {
+    var submin = Math.min.apply(null,
+                                tab.slice(i, Math.min(i + QUANTUM, longueur)));
+    min = Math.min(submin, min);
+  }
+
+  return min;
+}
+
+var min = minimumDuTableau([5, 6, 2, 3, 7]);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.3.4.3', 'Function.prototype.apply')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function.prototype.apply', 'Function.prototype.apply')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function.prototype.apply', 'Function.prototype.apply')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.apply")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/arguments/index.html b/files/fr/web/javascript/reference/global_objects/function/arguments/index.html deleted file mode 100644 index 6723204679..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/arguments/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Function.arguments -slug: Web/JavaScript/Reference/Global_Objects/Function/arguments -tags: - - Déprécié - - Function - - JavaScript - - Propriété - - Reference - - arguments -translation_of: Web/JavaScript/Reference/Global_Objects/Function/arguments -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/arguments ---- -
{{JSRef}} {{Deprecated_header}}
- -

La propriété function.arguments fait référence à un objet dont la structure est semblable à celle d'un tableau dont les éléments correspondent aux arguments passés à une fonction. En lieu et place, il faut désormais utiliser {{jsxref("Fonctions/arguments", "arguments")}}. Cette propriété est interdite en mode stricte à cause de l'optimisation de la queue des appels (tail call optimization).

- -

Description

- -

La syntaxe function.arguments est obsolète.  La méthode recommandée pour accéder à l'objet {{jsxref("Fonctions/arguments", "arguments")}} disponible au sein des fonctions est simplement de faire référence à la variable {{jsxref("Fonctions/arguments", "arguments")}}.

- -

Si on utilise la récursivité (autrement dit si une fonction f apparaît plusieurs fois dans la pile d'appels ou encore qu'une fonction f s'appelle elle-même), la valeur de f.arguments représentera les arguments correspondant à l'appel le plus « récent » de la fonction.

- -

La valeur de la propriété arguments est normalement null si la fonction n'est pas « en cours » (au sens où elle aurait été appelée et qu'elle n'ait pas fini son exécution).

- -

Exemples

- -
function f(n) { g(n-1); }
-
-function g(n) {
-  console.log("avant : " + g.arguments[0]);
-  if(n>0) f(n);
-  console.log("après : " + g.arguments[0]);
-}
-
-f(2);
-
-console.log("fonction terminée : " + g.arguments);
-
-// On aura l'affichage de :
-
-// avant : 1
-// avant : 0
-// après : 0
-// après : 1
-// fonction terminée : null
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0. Dépréciée pour être remplacée par {{jsxref("Fonctions/arguments", "arguments")}} décrit par ES3.
{{SpecName('ES5.1', '#sec-10.6', 'arguments object')}}{{Spec2('ES5.1')}}Objet {{jsxref("Fonctions/arguments", "arguments")}}
{{SpecName('ES6', '#sec-arguments-object', 'arguments object')}}{{Spec2('ES6')}}Objet {{jsxref("Fonctions/arguments", "arguments")}}
{{SpecName('ESDraft', '#sec-arguments-object', 'arguments object')}}{{Spec2('ESDraft')}}Objet {{jsxref("Fonctions/arguments", "arguments")}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.arguments")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/arguments/index.md b/files/fr/web/javascript/reference/global_objects/function/arguments/index.md new file mode 100644 index 0000000000..6723204679 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/arguments/index.md @@ -0,0 +1,90 @@ +--- +title: Function.arguments +slug: Web/JavaScript/Reference/Global_Objects/Function/arguments +tags: + - Déprécié + - Function + - JavaScript + - Propriété + - Reference + - arguments +translation_of: Web/JavaScript/Reference/Global_Objects/Function/arguments +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/arguments +--- +
{{JSRef}} {{Deprecated_header}}
+ +

La propriété function.arguments fait référence à un objet dont la structure est semblable à celle d'un tableau dont les éléments correspondent aux arguments passés à une fonction. En lieu et place, il faut désormais utiliser {{jsxref("Fonctions/arguments", "arguments")}}. Cette propriété est interdite en mode stricte à cause de l'optimisation de la queue des appels (tail call optimization).

+ +

Description

+ +

La syntaxe function.arguments est obsolète.  La méthode recommandée pour accéder à l'objet {{jsxref("Fonctions/arguments", "arguments")}} disponible au sein des fonctions est simplement de faire référence à la variable {{jsxref("Fonctions/arguments", "arguments")}}.

+ +

Si on utilise la récursivité (autrement dit si une fonction f apparaît plusieurs fois dans la pile d'appels ou encore qu'une fonction f s'appelle elle-même), la valeur de f.arguments représentera les arguments correspondant à l'appel le plus « récent » de la fonction.

+ +

La valeur de la propriété arguments est normalement null si la fonction n'est pas « en cours » (au sens où elle aurait été appelée et qu'elle n'ait pas fini son exécution).

+ +

Exemples

+ +
function f(n) { g(n-1); }
+
+function g(n) {
+  console.log("avant : " + g.arguments[0]);
+  if(n>0) f(n);
+  console.log("après : " + g.arguments[0]);
+}
+
+f(2);
+
+console.log("fonction terminée : " + g.arguments);
+
+// On aura l'affichage de :
+
+// avant : 1
+// avant : 0
+// après : 0
+// après : 1
+// fonction terminée : null
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0. Dépréciée pour être remplacée par {{jsxref("Fonctions/arguments", "arguments")}} décrit par ES3.
{{SpecName('ES5.1', '#sec-10.6', 'arguments object')}}{{Spec2('ES5.1')}}Objet {{jsxref("Fonctions/arguments", "arguments")}}
{{SpecName('ES6', '#sec-arguments-object', 'arguments object')}}{{Spec2('ES6')}}Objet {{jsxref("Fonctions/arguments", "arguments")}}
{{SpecName('ESDraft', '#sec-arguments-object', 'arguments object')}}{{Spec2('ESDraft')}}Objet {{jsxref("Fonctions/arguments", "arguments")}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.arguments")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/bind/index.html b/files/fr/web/javascript/reference/global_objects/function/bind/index.html deleted file mode 100644 index 747fa29f94..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/bind/index.html +++ /dev/null @@ -1,247 +0,0 @@ ---- -title: Function.prototype.bind() -slug: Web/JavaScript/Reference/Global_Objects/Function/bind -tags: - - ECMAScript 2015 - - ECMAScript 5 - - Function - - JavaScript - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Function/bind -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/bind ---- -
{{JSRef}}
- -

La méthode bind() crée une nouvelle fonction qui, lorsqu'elle est appelée, a pour contexte this la valeur passée en paramètre et éventuellement une suite d'arguments qui précéderont ceux fournis à l'appel de la fonction créée.

- -
{{EmbedInteractiveExample("pages/js/function-bind.html", "taller")}}
- -

Syntaxe

- -
let boundFunc = func.bind(thisArg[, arg1[, arg2[, ...]]])
- -

Paramètres

- -
-
thisArg
-
La valeur que l'on doit passer est le paramètre this de la fonction cible func quand la fonction est appelée. La valeur est ignorée si la fonction liée est construite en utilisant l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Lorsque vous utilisez bind pour créer une fonction (fournie comme un rappel) dans un setTimeout, toute valeur primitive passée comme thisArg est convertie en objet. Si aucun argument n'est fourni dans bind, le this de cette fonction est traité comme le thisArg de la nouvelle fonction.
-
arg1, arg2, ... {{optional_inline}}
-
Arguments à faire précéder aux arguments fournis à la fonction liée lors de l'invocation de func.
-
- -

Valeur de retour

- -

Une copie de la fonction fournie avec la valeur this indiquée et les arguments initiaux fournis.

- -

Description

- -

La fonction bind() crée une nouvelle fonction liée, qui est un objet de fonction exotique (un terme de l'ECMAScript 2015) qui enveloppe l'objet de fonction original. L'appel de la fonction liée entraîne généralement l'exécution de sa fonction enveloppée.

- -

Une fonction liée possède les propriétés internes suivantes :

- -
-
[[BoundTargetFunction]]
-
L'objet de fonction enveloppé
-
[[BoundThis]]
-
La valeur qui est toujours transmise est la valeur this lors de l'appel de la fonction enveloppée.
-
[[BoundArguments]]
-
Une liste de valeurs dont les éléments sont utilisés comme premiers arguments pour tout appel à la fonction enveloppée.
-
[[Call]]
-
Exécute le code associé à cet objet. Invoqué par une expression d'appel de fonction. Les arguments de la méthode interne sont constitués d'une valeur this et d'une liste contenant les arguments passés à la fonction par une expression d'appel.
-
- -

Lorsqu'une fonction liée est appelée, elle appelle la méthode interne [[Call]] dans [[BoundTargetFunction]], avec les arguments suivants Call(boundThis, ...args). Là où boundThis est [[BoundThis]], args est [[BoundArguments]], suivi des arguments passés par l'appel de fonction.

- -

Une fonction liée peut également être construite à l'aide de l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Ce faisant, on agit comme si la fonction cible avait été construite. La valeur fournie this est ignorée, tandis que des arguments préparés sont fournis à la fonction émulée.

- -

Exemples

- -

Créer une fonction liée

- -

La façon la plus simple d'utiliser bind()est de faire une fonction qui, peu importe la façon dont elle est appellée, le sera avec une certaine valeur this donnée.

- -

Une erreur courante lorsqu'on débute en JavaScript est d'extraire une méthode d'un objet, puis plus tard d'appeler cette méthode depuis un objet et de s'attendre à utiliser l'objet original en tant que valeur de this (par exemple en utilisant cette méthode dans un callback). Sans précaution, cependant, l'objet original est perdu. Créer une fonction liée depuis la méthode, en utilisant l'objet original, résout simplement le problème :

- -
this.x = 9; // en dehors de tout contexte,
-            // pour un navigateur, this est
-            // l'objet window
-var module = {
-  x: 81,
-  getX: function() { return this.x; }
-};
-
-module.getX(); // 81
-
-var getX = module.getX;
-getX(); // 9, car ici, this fait référence à l'objet global
-
-// On crée une nouvelle fonction à laquelle on lie module en
-// tant que 'this'
-var boundGetX = getX.bind(module);
-boundGetX(); // 81
-
- -

Fonctions partiellement appliquées

- -

Dans l'exemple suivant, on utilise bind() afin de créer une fonction avec des arguments initiaux prédéfinis. Ces arguments, s'il y en a, suivent le this fourni et sont ensuite insérés au début des arguments passés à la fonction cible, suivis par les arguments passés à la fonction liée au moment où celle-ci est appelée.

- -
function list() {
-  return Array.prototype.slice.call(arguments);
-}
-
-var list1 = list(1, 2, 3); // [1, 2, 3]
-
-// Créer une fonction avec un argument prédéfini
-var leadingThirtysevenList = list.bind(null, 37);
-
-var list2 = leadingThirtysevenList(); // [37]
-var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]
-
-
-function sommeArguments(arg1, arg2){
-  return arg1 + arg2;
-}
-
-var ajouter37 = sommeArguments.bind(null, 37);
-
-var resultat = ajouter37(5); // 37 + 5 = 42
-
- -

Utiliser bind avec setTimeout

- -

Par défaut à l'intérieur de {{domxref("window.setTimeout()")}}, le mot-clé this sera attribué à l'objet {{domxref("window")}} (ou l'objet global). Lorsqu'on travaille avec des méthodes de classe utilisant this qui se réfère à l'instance, on peut lier this de façon explicite afin d'être certain de manipuler l'instance.

- -
function Fleur() {
-  this.nbPétales = Math.floor( Math.random() * 12 ) + 1;
-}
-
-// On déclare floraison après un délai d'une seconde
-Fleur.prototype.floraison = function() {
-  window.setTimeout( this.declare.bind( this ), 1000 );
-};
-
-Fleur.prototype.declare = function() {
-  console.log('Je suis une fleur avec ' +
-     this.nbPétales + ' pétales !');
-};
-
-var fleur = new Fleur();
-fleur.floraison();
-// Après environ 1 seconde, on déclenche la méthode declare
-
- -

Les fonctions liées utilisées en tant que constructeurs

- -
-

Attention : Cette section illustre des capacités marginales et des cas aux limites concernant l'usage de la méthode bind(). Les méthodes montrées ci-après ne sont pas les façons les plus propres de faire les choses et ne devraient pas être utilisées en production.

-
- -

Les fonctions liées sont automatiquement disponibles à l'usage pour toutes les instances initialisées avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}} sur la fonction cible. Quand une fonction liée est utilisée pour construire une valeur, le this fourni est ignoré. Cependant, les arguments fournis sont toujours préremplis lors de l'appel au constructeur :

- -
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 */);
-// non supporté dans le polyfill ci dessous,
-// fonctionne avec le bind natif :
-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; // false
-
- -

On notera qu'il n'y a rien à faire de particulier pour pouvoir utiliser {{jsxref("Opérateurs/L_opérateur_new", "new")}} sur votre fonction liée. Le corollaire est qu'il n'y a rien à faire de plus pour créer une fonction liée qui soit appelée sans préfixe, même s'il est préférable d'appeler une fonction liée uniquement avec le mot-clé {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

- -
// Cet exemple fonctionne dans votre console JavaScript
-// ...(sous réserve d'avoir utilisé le code précédent)
-
-// Peut toujours être appelé comme une fonction normale
-// (même si ce n'est généralement pas l'effet )
-YAxisPoint(13);
-
-emptyObj.x + "," + emptyObj.y; // "0,13"
-
- -

Si on souhaite supporter le cas où la fonction liée  d'une fonction liée en utilisant seulement new, ou juste en l'appellant, la fonction cible doit outrepasser cette restriction.

- -

Créer des raccourcis

- -
-

bind() est également utile dans les cas où on souhaite créer un raccourci vers une fonction qui requiert un this ayant une certaine valeur.

- -

Si, par exemple, on considère la fonction {{jsxref("Array.prototype.slice")}} et qu'on souhaite l'utiliser pour convertir un objet semblable à un tableau en un objet array, on peut créer un raccourci de cette façon :

- -
var slice = Array.prototype.slice;
-
-// ... un peu plus loin
-
-slice.apply(arguments);
- -

Avec bind(), il est possible de simplifier cela. Dans l'exemple qui suit slice est une fonction liée à la fonction {{jsxref("Function.prototype.apply()", "apply()")}} de Function.prototype, et this défini en tant que fonction {{jsxref("Array.prototype.slice()", "slice()")}} de {{jsxref("Array.prototype")}}. Cela signifie que les appels à la méthode apply() peuvent être éliminés :

- -
// pareil que "slice" dans l'exemple précédent
-var unboundSlice = Array.prototype.slice;
-var slice = Function.prototype.apply.bind(unboundSlice);
-
-// ...
-
-slice(arguments);
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.3.4.5', 'Function.prototype.bind')}}{{Spec2('ES5.1')}}Définition initiale.
- Implémentée avec JavaScript 1.8.5
{{SpecName('ES2015', '#sec-function.prototype.apply', 'Function.prototype.bind')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-function.prototype.bind', 'Function.prototype.bind')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.bind")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/bind/index.md b/files/fr/web/javascript/reference/global_objects/function/bind/index.md new file mode 100644 index 0000000000..747fa29f94 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/bind/index.md @@ -0,0 +1,247 @@ +--- +title: Function.prototype.bind() +slug: Web/JavaScript/Reference/Global_Objects/Function/bind +tags: + - ECMAScript 2015 + - ECMAScript 5 + - Function + - JavaScript + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Function/bind +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/bind +--- +
{{JSRef}}
+ +

La méthode bind() crée une nouvelle fonction qui, lorsqu'elle est appelée, a pour contexte this la valeur passée en paramètre et éventuellement une suite d'arguments qui précéderont ceux fournis à l'appel de la fonction créée.

+ +
{{EmbedInteractiveExample("pages/js/function-bind.html", "taller")}}
+ +

Syntaxe

+ +
let boundFunc = func.bind(thisArg[, arg1[, arg2[, ...]]])
+ +

Paramètres

+ +
+
thisArg
+
La valeur que l'on doit passer est le paramètre this de la fonction cible func quand la fonction est appelée. La valeur est ignorée si la fonction liée est construite en utilisant l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Lorsque vous utilisez bind pour créer une fonction (fournie comme un rappel) dans un setTimeout, toute valeur primitive passée comme thisArg est convertie en objet. Si aucun argument n'est fourni dans bind, le this de cette fonction est traité comme le thisArg de la nouvelle fonction.
+
arg1, arg2, ... {{optional_inline}}
+
Arguments à faire précéder aux arguments fournis à la fonction liée lors de l'invocation de func.
+
+ +

Valeur de retour

+ +

Une copie de la fonction fournie avec la valeur this indiquée et les arguments initiaux fournis.

+ +

Description

+ +

La fonction bind() crée une nouvelle fonction liée, qui est un objet de fonction exotique (un terme de l'ECMAScript 2015) qui enveloppe l'objet de fonction original. L'appel de la fonction liée entraîne généralement l'exécution de sa fonction enveloppée.

+ +

Une fonction liée possède les propriétés internes suivantes :

+ +
+
[[BoundTargetFunction]]
+
L'objet de fonction enveloppé
+
[[BoundThis]]
+
La valeur qui est toujours transmise est la valeur this lors de l'appel de la fonction enveloppée.
+
[[BoundArguments]]
+
Une liste de valeurs dont les éléments sont utilisés comme premiers arguments pour tout appel à la fonction enveloppée.
+
[[Call]]
+
Exécute le code associé à cet objet. Invoqué par une expression d'appel de fonction. Les arguments de la méthode interne sont constitués d'une valeur this et d'une liste contenant les arguments passés à la fonction par une expression d'appel.
+
+ +

Lorsqu'une fonction liée est appelée, elle appelle la méthode interne [[Call]] dans [[BoundTargetFunction]], avec les arguments suivants Call(boundThis, ...args). Là où boundThis est [[BoundThis]], args est [[BoundArguments]], suivi des arguments passés par l'appel de fonction.

+ +

Une fonction liée peut également être construite à l'aide de l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Ce faisant, on agit comme si la fonction cible avait été construite. La valeur fournie this est ignorée, tandis que des arguments préparés sont fournis à la fonction émulée.

+ +

Exemples

+ +

Créer une fonction liée

+ +

La façon la plus simple d'utiliser bind()est de faire une fonction qui, peu importe la façon dont elle est appellée, le sera avec une certaine valeur this donnée.

+ +

Une erreur courante lorsqu'on débute en JavaScript est d'extraire une méthode d'un objet, puis plus tard d'appeler cette méthode depuis un objet et de s'attendre à utiliser l'objet original en tant que valeur de this (par exemple en utilisant cette méthode dans un callback). Sans précaution, cependant, l'objet original est perdu. Créer une fonction liée depuis la méthode, en utilisant l'objet original, résout simplement le problème :

+ +
this.x = 9; // en dehors de tout contexte,
+            // pour un navigateur, this est
+            // l'objet window
+var module = {
+  x: 81,
+  getX: function() { return this.x; }
+};
+
+module.getX(); // 81
+
+var getX = module.getX;
+getX(); // 9, car ici, this fait référence à l'objet global
+
+// On crée une nouvelle fonction à laquelle on lie module en
+// tant que 'this'
+var boundGetX = getX.bind(module);
+boundGetX(); // 81
+
+ +

Fonctions partiellement appliquées

+ +

Dans l'exemple suivant, on utilise bind() afin de créer une fonction avec des arguments initiaux prédéfinis. Ces arguments, s'il y en a, suivent le this fourni et sont ensuite insérés au début des arguments passés à la fonction cible, suivis par les arguments passés à la fonction liée au moment où celle-ci est appelée.

+ +
function list() {
+  return Array.prototype.slice.call(arguments);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+
+// Créer une fonction avec un argument prédéfini
+var leadingThirtysevenList = list.bind(null, 37);
+
+var list2 = leadingThirtysevenList(); // [37]
+var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]
+
+
+function sommeArguments(arg1, arg2){
+  return arg1 + arg2;
+}
+
+var ajouter37 = sommeArguments.bind(null, 37);
+
+var resultat = ajouter37(5); // 37 + 5 = 42
+
+ +

Utiliser bind avec setTimeout

+ +

Par défaut à l'intérieur de {{domxref("window.setTimeout()")}}, le mot-clé this sera attribué à l'objet {{domxref("window")}} (ou l'objet global). Lorsqu'on travaille avec des méthodes de classe utilisant this qui se réfère à l'instance, on peut lier this de façon explicite afin d'être certain de manipuler l'instance.

+ +
function Fleur() {
+  this.nbPétales = Math.floor( Math.random() * 12 ) + 1;
+}
+
+// On déclare floraison après un délai d'une seconde
+Fleur.prototype.floraison = function() {
+  window.setTimeout( this.declare.bind( this ), 1000 );
+};
+
+Fleur.prototype.declare = function() {
+  console.log('Je suis une fleur avec ' +
+     this.nbPétales + ' pétales !');
+};
+
+var fleur = new Fleur();
+fleur.floraison();
+// Après environ 1 seconde, on déclenche la méthode declare
+
+ +

Les fonctions liées utilisées en tant que constructeurs

+ +
+

Attention : Cette section illustre des capacités marginales et des cas aux limites concernant l'usage de la méthode bind(). Les méthodes montrées ci-après ne sont pas les façons les plus propres de faire les choses et ne devraient pas être utilisées en production.

+
+ +

Les fonctions liées sont automatiquement disponibles à l'usage pour toutes les instances initialisées avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}} sur la fonction cible. Quand une fonction liée est utilisée pour construire une valeur, le this fourni est ignoré. Cependant, les arguments fournis sont toujours préremplis lors de l'appel au constructeur :

+ +
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 */);
+// non supporté dans le polyfill ci dessous,
+// fonctionne avec le bind natif :
+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; // false
+
+ +

On notera qu'il n'y a rien à faire de particulier pour pouvoir utiliser {{jsxref("Opérateurs/L_opérateur_new", "new")}} sur votre fonction liée. Le corollaire est qu'il n'y a rien à faire de plus pour créer une fonction liée qui soit appelée sans préfixe, même s'il est préférable d'appeler une fonction liée uniquement avec le mot-clé {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

+ +
// Cet exemple fonctionne dans votre console JavaScript
+// ...(sous réserve d'avoir utilisé le code précédent)
+
+// Peut toujours être appelé comme une fonction normale
+// (même si ce n'est généralement pas l'effet )
+YAxisPoint(13);
+
+emptyObj.x + "," + emptyObj.y; // "0,13"
+
+ +

Si on souhaite supporter le cas où la fonction liée  d'une fonction liée en utilisant seulement new, ou juste en l'appellant, la fonction cible doit outrepasser cette restriction.

+ +

Créer des raccourcis

+ +
+

bind() est également utile dans les cas où on souhaite créer un raccourci vers une fonction qui requiert un this ayant une certaine valeur.

+ +

Si, par exemple, on considère la fonction {{jsxref("Array.prototype.slice")}} et qu'on souhaite l'utiliser pour convertir un objet semblable à un tableau en un objet array, on peut créer un raccourci de cette façon :

+ +
var slice = Array.prototype.slice;
+
+// ... un peu plus loin
+
+slice.apply(arguments);
+ +

Avec bind(), il est possible de simplifier cela. Dans l'exemple qui suit slice est une fonction liée à la fonction {{jsxref("Function.prototype.apply()", "apply()")}} de Function.prototype, et this défini en tant que fonction {{jsxref("Array.prototype.slice()", "slice()")}} de {{jsxref("Array.prototype")}}. Cela signifie que les appels à la méthode apply() peuvent être éliminés :

+ +
// pareil que "slice" dans l'exemple précédent
+var unboundSlice = Array.prototype.slice;
+var slice = Function.prototype.apply.bind(unboundSlice);
+
+// ...
+
+slice(arguments);
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.3.4.5', 'Function.prototype.bind')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implémentée avec JavaScript 1.8.5
{{SpecName('ES2015', '#sec-function.prototype.apply', 'Function.prototype.bind')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-function.prototype.bind', 'Function.prototype.bind')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.bind")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/call/index.html b/files/fr/web/javascript/reference/global_objects/function/call/index.html deleted file mode 100644 index 5cc70709d0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/call/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Function.prototype.call() -slug: Web/JavaScript/Reference/Global_Objects/Function/call -tags: - - Function - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/call -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/call ---- -
{{JSRef}}
- -

La méthode call() réalise un appel à une fonction avec une valeur this donnée et des arguments fournis individuellement.

- -

Note : Bien que la syntaxe de cette fonction ressemble à celle de {{jsxref("Function.apply", "apply()")}}, la différence fondamentale réside dans le fait que call() accepte une liste d'arguments, tandis que la méthode apply() accepte un unique tableau d'arguments.

- -
{{EmbedInteractiveExample("pages/js/function-call.html")}}
- -

Syntaxe

- -
fun.call(thisArg[, arg1[, arg2[, ...]]])
- -

Paramètres

- -
-
thisArg
-
La valeur this fournie pour l'appel de la fonction fun. La valeur peut être différente de celle normalement perçue par la méthode : si la méthode est une fonction utilisée dans un code en {{jsxref("Fonctions/Strict_mode", "mode non-strict", "", 1)}}, {{jsxref("null")}} and {{jsxref("undefined")}} seront remplacés par l'objet global et les valeurs primitives seront encapsulées en objets.
-
arg1, arg2, ...
-
Les arguments pour la fonction.
-
- -

Valeur de retour

- -

Le résultat de l'appel de la fonction invoquée avec la valeur this indiquée et les arguments fournis.

- -

Description

- -

La méthode call() permet d'appeler une fonction rattachée à un objet donné sur un autre objet.

- -

Il est possible d'affecter un objet this différent lors de l'appel à une fonction existante. En général, this fait référence à l'objet courant, celui sur lequel est appelée la méthode. Avec call, on peut écrire une méthode une seule fois et ensuite en hériter dans un autre objet, sans avoir à réécrire cette méthode pour ce nouvel objet.

- -

Exemples

- -

Utiliser call() pour chaîner le constructeur d'un objet.

- -

Il est possible d'utiliser call pour chaîner le constructeur d'un objet, de façon similaire à Java. Dans l'exemple suivant, le constructeur de l'objet Product est défini avec deux paramètres, name et price. Deux autres fonctions, Food et Toy invoquent Product en passant this, name et price. Product initialise les propriétés name et price, tandis que les fonctions spécialisées définissent la propriété category.

- -
function Product(name, price) {
-  this.name = name;
-  this.price = price;
-}
-
-function Food(name, price) {
-  Product.call(this, name, price);
-  this.category = 'food';
-}
-
-function Toy(name, price) {
-  Product.call(this, name, price);
-  this.category = 'toy';
-}
-
-var cheese = new Food('feta', 5);
-var fun = new Toy('robot', 40);
-
- -

Utiliser call() pour invoquer une fonction anonyme

- -

Dans cet exemple (purement inventé), on crée une fonction anonyme et on utilise call pour l'invoquer sur chaque objet d'un tableau. Le principal but de cette fonction anonyme est d'ajouter une fonction print sur chaque élément qui permet d'afficher l'index de l'objet. Le passage de l'objet en tant que valeur this n'était pas nécessaire, mais il permet d'expliquer le sujet.

- -
var animaux = [
-  {espece: 'Lion', nom: 'Roi'},
-  {espece: 'Éléphant', nom: 'Dumbo'}
-];
-
-for (var i = 0; i < animaux.length; i++) {
-  (function (i) {
-    this.print = function () {
-      console.log('#' + i  + ' ' + this.espece + ' : ' + this.nom);
-    }
-    this.print();
-  }).call(animaux[i], i);
-}
-
- -

Utiliser call() pour appeler une fonction avec un objet pour this

- -

Dans l'exemple qui suit, on utilise la méthode call() sur la fonction saluer() afin de l'appliquer à l'objet personne1 :

- -
function saluer() {
-  var reponse = [this.nom, "est un", this.role, "."].join(" ");
-  console.log(reponse);
-}
-
-var personne1 = {
-  nom: "Sénèque",
-  role: "philosophe"
-};
-
-saluer.call(personne1); // Sénèque est un philosophe.
-
- -

Utiliser call() pour appeler une fonction sans indiquer de premier argument

- -

Dans l'exemple qui suit, on appelle la fonction afficher() sans lui passer d'argument. C'est donc l'objet global qui est utilisé comme contexte :

- -
var prenom = 'Archibald';
-
-function afficher() {
-  console.log('prenom vaut ' + this.prenom);
-}
-
-afficher.call(); // prenom est Archibald
- -
-

Note : La valeur de this sera {{jsxref("undefined")}} en mode strict.

- -
'use strict';
-
-var prenom = 'Archibald';
-
-function afficher() {
-  console.log('prenom vaut ' + this.prenom);
-}
-
-afficher.call(); // Cannot read the property prenom' of undefined
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.3.4.4', 'Function.prototype.call')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-function.prototype.call', 'Function.prototype.call')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-function.prototype.call', 'Function.prototype.call')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.call")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/call/index.md b/files/fr/web/javascript/reference/global_objects/function/call/index.md new file mode 100644 index 0000000000..5cc70709d0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/call/index.md @@ -0,0 +1,174 @@ +--- +title: Function.prototype.call() +slug: Web/JavaScript/Reference/Global_Objects/Function/call +tags: + - Function + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/call +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/call +--- +
{{JSRef}}
+ +

La méthode call() réalise un appel à une fonction avec une valeur this donnée et des arguments fournis individuellement.

+ +

Note : Bien que la syntaxe de cette fonction ressemble à celle de {{jsxref("Function.apply", "apply()")}}, la différence fondamentale réside dans le fait que call() accepte une liste d'arguments, tandis que la méthode apply() accepte un unique tableau d'arguments.

+ +
{{EmbedInteractiveExample("pages/js/function-call.html")}}
+ +

Syntaxe

+ +
fun.call(thisArg[, arg1[, arg2[, ...]]])
+ +

Paramètres

+ +
+
thisArg
+
La valeur this fournie pour l'appel de la fonction fun. La valeur peut être différente de celle normalement perçue par la méthode : si la méthode est une fonction utilisée dans un code en {{jsxref("Fonctions/Strict_mode", "mode non-strict", "", 1)}}, {{jsxref("null")}} and {{jsxref("undefined")}} seront remplacés par l'objet global et les valeurs primitives seront encapsulées en objets.
+
arg1, arg2, ...
+
Les arguments pour la fonction.
+
+ +

Valeur de retour

+ +

Le résultat de l'appel de la fonction invoquée avec la valeur this indiquée et les arguments fournis.

+ +

Description

+ +

La méthode call() permet d'appeler une fonction rattachée à un objet donné sur un autre objet.

+ +

Il est possible d'affecter un objet this différent lors de l'appel à une fonction existante. En général, this fait référence à l'objet courant, celui sur lequel est appelée la méthode. Avec call, on peut écrire une méthode une seule fois et ensuite en hériter dans un autre objet, sans avoir à réécrire cette méthode pour ce nouvel objet.

+ +

Exemples

+ +

Utiliser call() pour chaîner le constructeur d'un objet.

+ +

Il est possible d'utiliser call pour chaîner le constructeur d'un objet, de façon similaire à Java. Dans l'exemple suivant, le constructeur de l'objet Product est défini avec deux paramètres, name et price. Deux autres fonctions, Food et Toy invoquent Product en passant this, name et price. Product initialise les propriétés name et price, tandis que les fonctions spécialisées définissent la propriété category.

+ +
function Product(name, price) {
+  this.name = name;
+  this.price = price;
+}
+
+function Food(name, price) {
+  Product.call(this, name, price);
+  this.category = 'food';
+}
+
+function Toy(name, price) {
+  Product.call(this, name, price);
+  this.category = 'toy';
+}
+
+var cheese = new Food('feta', 5);
+var fun = new Toy('robot', 40);
+
+ +

Utiliser call() pour invoquer une fonction anonyme

+ +

Dans cet exemple (purement inventé), on crée une fonction anonyme et on utilise call pour l'invoquer sur chaque objet d'un tableau. Le principal but de cette fonction anonyme est d'ajouter une fonction print sur chaque élément qui permet d'afficher l'index de l'objet. Le passage de l'objet en tant que valeur this n'était pas nécessaire, mais il permet d'expliquer le sujet.

+ +
var animaux = [
+  {espece: 'Lion', nom: 'Roi'},
+  {espece: 'Éléphant', nom: 'Dumbo'}
+];
+
+for (var i = 0; i < animaux.length; i++) {
+  (function (i) {
+    this.print = function () {
+      console.log('#' + i  + ' ' + this.espece + ' : ' + this.nom);
+    }
+    this.print();
+  }).call(animaux[i], i);
+}
+
+ +

Utiliser call() pour appeler une fonction avec un objet pour this

+ +

Dans l'exemple qui suit, on utilise la méthode call() sur la fonction saluer() afin de l'appliquer à l'objet personne1 :

+ +
function saluer() {
+  var reponse = [this.nom, "est un", this.role, "."].join(" ");
+  console.log(reponse);
+}
+
+var personne1 = {
+  nom: "Sénèque",
+  role: "philosophe"
+};
+
+saluer.call(personne1); // Sénèque est un philosophe.
+
+ +

Utiliser call() pour appeler une fonction sans indiquer de premier argument

+ +

Dans l'exemple qui suit, on appelle la fonction afficher() sans lui passer d'argument. C'est donc l'objet global qui est utilisé comme contexte :

+ +
var prenom = 'Archibald';
+
+function afficher() {
+  console.log('prenom vaut ' + this.prenom);
+}
+
+afficher.call(); // prenom est Archibald
+ +
+

Note : La valeur de this sera {{jsxref("undefined")}} en mode strict.

+ +
'use strict';
+
+var prenom = 'Archibald';
+
+function afficher() {
+  console.log('prenom vaut ' + this.prenom);
+}
+
+afficher.call(); // Cannot read the property prenom' of undefined
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.3.4.4', 'Function.prototype.call')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-function.prototype.call', 'Function.prototype.call')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-function.prototype.call', 'Function.prototype.call')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.call")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/caller/index.html b/files/fr/web/javascript/reference/global_objects/function/caller/index.html deleted file mode 100644 index 92f4a60f1a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/caller/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Function.caller -slug: Web/JavaScript/Reference/Global_Objects/Function/caller -tags: - - Function - - JavaScript - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/caller ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété function.caller renvoie la fonction qui a appelé la fonction donnée. Cette propriété est interdite en mode strict.

- -

Description

- -

Si la fonction f a été invoquée par du code situé au plus haut niveau, la valeur de f.caller sera {{jsxref("null")}}, sinon, ce sera la fonction qui a appelé f.

- -

Cette propriété remplace la propriété obsolète {{jsxref("Fonctions/arguments/caller", "arguments.caller")}} de l'objet {{jsxref("Fonctions/arguments", "arguments")}}.

- -

La propriété spéciale __caller__ qui renvoyait l'objet qui dans lequel était fait l'appel a été supprimée pour des raisons de sécurités.

- -

Notes

- -

Dans une fonction récursive, cette propriété ne peut pas être utilisée pour reconstituer la pile d'appels (call stack). Par exemple, si on a :

- -
function f(n) { g(n - 1); }
-function g(n) { if (n > 0) { f(n); } else { stop(); } }
-f(2);
-
- -

Au moment où stop() est appelé, la pile sera :

- -
f(2) -> g(1) -> f(1) -> g(0) -> stop()
-
- -

Et ceci est vrai :

- -
stop.caller === g && f.caller === g && g.caller === f
-
- -

Donc si on essaie d'obtenir la pile de cette façon :

- -
var f = stop;
-var stack = 'Stack trace:';
-while (f) {
-  stack += '\n' + f.name;
-  f = f.caller;
-}
-
- -

la boucle ne s'arrêterait jamais.

- -

Exemples

- -

Vérifier la valeur de la propriété caller

- -

Dans l'exemple suivant, on verifie la propriété caller de la fonction.

- -
function maFonction() {
-  if (maFonction.caller == null) {
-    return 'Fonction appelée au plus haut niveau !';
-  } else {
-    return 'Fonction appelée par ' + maFonction.caller;
-  }
-}
-
- -

Spécifications

- -

Ne fait partie d'aucune spécification. Implémentée avec JavaScript 1.5.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.caller")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/caller/index.md b/files/fr/web/javascript/reference/global_objects/function/caller/index.md new file mode 100644 index 0000000000..92f4a60f1a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/caller/index.md @@ -0,0 +1,82 @@ +--- +title: Function.caller +slug: Web/JavaScript/Reference/Global_Objects/Function/caller +tags: + - Function + - JavaScript + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/caller +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété function.caller renvoie la fonction qui a appelé la fonction donnée. Cette propriété est interdite en mode strict.

+ +

Description

+ +

Si la fonction f a été invoquée par du code situé au plus haut niveau, la valeur de f.caller sera {{jsxref("null")}}, sinon, ce sera la fonction qui a appelé f.

+ +

Cette propriété remplace la propriété obsolète {{jsxref("Fonctions/arguments/caller", "arguments.caller")}} de l'objet {{jsxref("Fonctions/arguments", "arguments")}}.

+ +

La propriété spéciale __caller__ qui renvoyait l'objet qui dans lequel était fait l'appel a été supprimée pour des raisons de sécurités.

+ +

Notes

+ +

Dans une fonction récursive, cette propriété ne peut pas être utilisée pour reconstituer la pile d'appels (call stack). Par exemple, si on a :

+ +
function f(n) { g(n - 1); }
+function g(n) { if (n > 0) { f(n); } else { stop(); } }
+f(2);
+
+ +

Au moment où stop() est appelé, la pile sera :

+ +
f(2) -> g(1) -> f(1) -> g(0) -> stop()
+
+ +

Et ceci est vrai :

+ +
stop.caller === g && f.caller === g && g.caller === f
+
+ +

Donc si on essaie d'obtenir la pile de cette façon :

+ +
var f = stop;
+var stack = 'Stack trace:';
+while (f) {
+  stack += '\n' + f.name;
+  f = f.caller;
+}
+
+ +

la boucle ne s'arrêterait jamais.

+ +

Exemples

+ +

Vérifier la valeur de la propriété caller

+ +

Dans l'exemple suivant, on verifie la propriété caller de la fonction.

+ +
function maFonction() {
+  if (maFonction.caller == null) {
+    return 'Fonction appelée au plus haut niveau !';
+  } else {
+    return 'Fonction appelée par ' + maFonction.caller;
+  }
+}
+
+ +

Spécifications

+ +

Ne fait partie d'aucune spécification. Implémentée avec JavaScript 1.5.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.caller")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/displayname/index.html b/files/fr/web/javascript/reference/global_objects/function/displayname/index.html deleted file mode 100644 index 41224d8f33..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/displayname/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Function.displayName -slug: Web/JavaScript/Reference/Global_Objects/Function/displayName -tags: - - Function - - JavaScript - - Non-standard - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/displayName -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/displayName ---- -
{{JSRef}} {{Non-standard_header}}
- -

La propriété function.displayName renvoie le nom affiché de la fonction.

- -

Description

- -

Lorsque la propriété displayName est définie, elle renvoie le nom affiché de la fonction :

- -
function faireTruc() { }
-
-console.log(faireTruc.displayName); // "undefined"
-
-var logMessage = function(contenu) { console.log(contenu) };
-
-logMessage.displayName = 'Afficher les messages dans le journal';
-
-console.log(logMessage.displayName); // "Afficher les messages dans le journal"
-
- -

Il est possible de définir une fonction avec un nom d'affichage grâce à une {{jsxref("Fonctions", "expression de fonctions","",1)}}:

- -
var objet = {
-  uneMéthode: function () {}
-};
-
-objet.uneMéthode.displayName = 'uneMéthode';
-
-console.log(objet.uneMéthode.displayName);
-// "uneMéthode"
-
-try { uneMéthode } catch(e) { console.log(e); }
-// ReferenceError: uneMéthode is not defined
-
- -

La propriété displayName peut être changée dynamiquement :

- -
var objet = {
-  // anonyme
-  uneMéthode: function(valeur) {
-    this.displayName = "uneMéthode (" + valeur + ")";
-  }
-};
-
-console.log(objet.uneMéthode.displayName); // "undefined"
-
-objet.uneMéthode("123")
-console.log(objet.uneMéthode.displayName); // "uneMéthode (123)"
-
- -

Exemples

- -

On souhaite généralement utiliser cette propriété dans les consoles et profileurs plutôt que {{jsxref("Function.name", "func.name")}}

- -

Le code suivant devrait afficher quelque chose comme "function Ma Fonction()":

- -
var a = function () { };
-a.displayName = 'Ma Fonction';
-
-a;
-
- -

Spécifications

- -

N'appartient à aucune spécification.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.displayName")}}

diff --git a/files/fr/web/javascript/reference/global_objects/function/displayname/index.md b/files/fr/web/javascript/reference/global_objects/function/displayname/index.md new file mode 100644 index 0000000000..41224d8f33 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/displayname/index.md @@ -0,0 +1,80 @@ +--- +title: Function.displayName +slug: Web/JavaScript/Reference/Global_Objects/Function/displayName +tags: + - Function + - JavaScript + - Non-standard + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/displayName +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/displayName +--- +
{{JSRef}} {{Non-standard_header}}
+ +

La propriété function.displayName renvoie le nom affiché de la fonction.

+ +

Description

+ +

Lorsque la propriété displayName est définie, elle renvoie le nom affiché de la fonction :

+ +
function faireTruc() { }
+
+console.log(faireTruc.displayName); // "undefined"
+
+var logMessage = function(contenu) { console.log(contenu) };
+
+logMessage.displayName = 'Afficher les messages dans le journal';
+
+console.log(logMessage.displayName); // "Afficher les messages dans le journal"
+
+ +

Il est possible de définir une fonction avec un nom d'affichage grâce à une {{jsxref("Fonctions", "expression de fonctions","",1)}}:

+ +
var objet = {
+  uneMéthode: function () {}
+};
+
+objet.uneMéthode.displayName = 'uneMéthode';
+
+console.log(objet.uneMéthode.displayName);
+// "uneMéthode"
+
+try { uneMéthode } catch(e) { console.log(e); }
+// ReferenceError: uneMéthode is not defined
+
+ +

La propriété displayName peut être changée dynamiquement :

+ +
var objet = {
+  // anonyme
+  uneMéthode: function(valeur) {
+    this.displayName = "uneMéthode (" + valeur + ")";
+  }
+};
+
+console.log(objet.uneMéthode.displayName); // "undefined"
+
+objet.uneMéthode("123")
+console.log(objet.uneMéthode.displayName); // "uneMéthode (123)"
+
+ +

Exemples

+ +

On souhaite généralement utiliser cette propriété dans les consoles et profileurs plutôt que {{jsxref("Function.name", "func.name")}}

+ +

Le code suivant devrait afficher quelque chose comme "function Ma Fonction()":

+ +
var a = function () { };
+a.displayName = 'Ma Fonction';
+
+a;
+
+ +

Spécifications

+ +

N'appartient à aucune spécification.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.displayName")}}

diff --git a/files/fr/web/javascript/reference/global_objects/function/index.html b/files/fr/web/javascript/reference/global_objects/function/index.html deleted file mode 100644 index cbac58bc3c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/index.html +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Function -slug: Web/JavaScript/Reference/Global_Objects/Function -tags: - - Constructor - - Function - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function -original_slug: Web/JavaScript/Reference/Objets_globaux/Function ---- -
{{JSRef}}
- -

Le constructeur Function crée un nouvel objet Function. En JavaScript, chaque fonction est un objet Function.

- -

Appeler ce constructeur permet de créer des fonctions dynamiquement mais cette méthode souffre de défauts équivalents à {{jsxref("eval")}} en termes de sécurité et de performance. Toutefois, à la différence d'eval, le constructeur Function permet d'exécuter du code dans la portée globale.

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

Syntaxe

- -
new Function ([arg1[, arg2[, ...argN]],] corpsFonction)
- -

Paramètres

- -
-
arg1, arg2, ... argN
-
Les noms utilisés par la fonction pour les arguments formellement déclarés. Chacun doit être une chaîne de caractères correspondant à un identifiant JavaScript valide (ou une liste de telles chaînes séparées par des virgules). Par exemple : "x", "uneValeur", ou "a,b".
-
corpsFonction
-
Une chaîne de caractères qui contient les instructions JavaScript définissant la fonction.
-
- -

Description

- -

Les objets Function créés avec le constructeur Function sont analysés quand la fonction est créée. Ceci est moins efficace que de déclarer une fonction grâce à une {{jsxref("Opérateurs/L_opérateur_function","expression de fonction","",1)}} ou à une instruction {{jsxref("Instructions/function","function")}} car celles crées de cette façon sont analysées avec le reste du code.

- -

Tous les arguments passés à la fonction seront traités avec les noms des identifiants des paramètres de la fonction à créer, dans le même ordre dans lequel ils ont été passés. Si un argument n'est pas passé, la valeur du paramètre dans la fonction sera {{jsxref("undefined")}}.

- -

Appeler le constructeur Function comme une fonction (c'est-à-dire sans utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_new","new")}}) a le même effet que quand il est appelé comme constructeur.

- -

Propriétés et méthodes de Function

- -

L'objet global Function ne possède pas de méthodes ou de propriétés propres. Cependant, il est lui-même une fonction et hérite de certaines méthodes et propriétés depuis {{jsxref("Function.prototype")}} grâce à la chaîne de prototype.

- -

Le prototype de Function

- -

Propriétés

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/prototype', 'Propri.C3.A9t.C3.A9s')}}
- -

Méthodes

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/prototype', 'M.C3.A9thodes')}}
- -

Les instances de Function

- -

Les instances de Function héritent des méthodes et propriétés de {{jsxref("Function.prototype")}}. Comme pour les autres constructeurs, il est possible de modifier le prototype du constructeur afin d'apporter des modifications à toutes les instances de Function.

- -

Exemple

- -

Définir des arguments avec le constructeur Function

- -

Le code suivant permet de créer un objet Function qui utilise deux arguments :

- -
// Cet exemple peut être lancé dans votre console JavaScript
-
-// On crée un fonction qui prend deux arguments
-// et qui en renvoie la somme
-var ajoute = new Function('a', 'b', 'return a + b');
-
-// On appelle la fonction
-ajoute(2, 6);
-// > 8
-
- -

Les arguments "a" et "b" sont les noms des arguments formellement déclarés utilisés dans le corps de la fonction : "return a + b".

- -

Différence entre le constructeur Function et les déclarations de fonction

- -

Les fonctions créées avec le constructeur {{jsxref("Function()")}} ne créent pas de fermetures liées au contexte de leur création. Ainsi, lorsqu'elles sont exécutées, elles ne peuvent accéder qu'aux variables globales et à leurs propres valeurs locales. Elles ne peuvent pas accéder aux variables de la portée dans laquelle le constructeur Function a été invoqué. Le comportement est différent de celui qu'on obtient avec {{jsxref("eval")}} avec du code contenant une expression de fonction.

- -
var x = 10;
-
-function créerFonction1() {
-  var x = 20;
-  return new Function("return x;"); // ici |x| fait référence au |x| global
-}
-
-function créerFonction2() {
-  var x = 20;
-  function f() {
-    return x; // ici |x| fait référence au |x| local juste avant
-  }
-  return f;
-}
-
-var f1 = créerFonction1();
-console.log(f1());          // 10
-var f2 = créerFonction2();
-console.log(f2());          // 20
- -

Bien que ce code fonctionne dans un navigateur web, l'appel à f1() provoquera une {{jsxref("ReferenceError")}} dans Node.js car x ne sera pas trouvé. En effet, pour Node, la portée de plus haut niveau n'est pas la portée globale et x est ici local à la fonction.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.3', 'Function')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function-objects', 'Function')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/index.md b/files/fr/web/javascript/reference/global_objects/function/index.md new file mode 100644 index 0000000000..cbac58bc3c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/index.md @@ -0,0 +1,150 @@ +--- +title: Function +slug: Web/JavaScript/Reference/Global_Objects/Function +tags: + - Constructor + - Function + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function +original_slug: Web/JavaScript/Reference/Objets_globaux/Function +--- +
{{JSRef}}
+ +

Le constructeur Function crée un nouvel objet Function. En JavaScript, chaque fonction est un objet Function.

+ +

Appeler ce constructeur permet de créer des fonctions dynamiquement mais cette méthode souffre de défauts équivalents à {{jsxref("eval")}} en termes de sécurité et de performance. Toutefois, à la différence d'eval, le constructeur Function permet d'exécuter du code dans la portée globale.

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

Syntaxe

+ +
new Function ([arg1[, arg2[, ...argN]],] corpsFonction)
+ +

Paramètres

+ +
+
arg1, arg2, ... argN
+
Les noms utilisés par la fonction pour les arguments formellement déclarés. Chacun doit être une chaîne de caractères correspondant à un identifiant JavaScript valide (ou une liste de telles chaînes séparées par des virgules). Par exemple : "x", "uneValeur", ou "a,b".
+
corpsFonction
+
Une chaîne de caractères qui contient les instructions JavaScript définissant la fonction.
+
+ +

Description

+ +

Les objets Function créés avec le constructeur Function sont analysés quand la fonction est créée. Ceci est moins efficace que de déclarer une fonction grâce à une {{jsxref("Opérateurs/L_opérateur_function","expression de fonction","",1)}} ou à une instruction {{jsxref("Instructions/function","function")}} car celles crées de cette façon sont analysées avec le reste du code.

+ +

Tous les arguments passés à la fonction seront traités avec les noms des identifiants des paramètres de la fonction à créer, dans le même ordre dans lequel ils ont été passés. Si un argument n'est pas passé, la valeur du paramètre dans la fonction sera {{jsxref("undefined")}}.

+ +

Appeler le constructeur Function comme une fonction (c'est-à-dire sans utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_new","new")}}) a le même effet que quand il est appelé comme constructeur.

+ +

Propriétés et méthodes de Function

+ +

L'objet global Function ne possède pas de méthodes ou de propriétés propres. Cependant, il est lui-même une fonction et hérite de certaines méthodes et propriétés depuis {{jsxref("Function.prototype")}} grâce à la chaîne de prototype.

+ +

Le prototype de Function

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/prototype', 'Propri.C3.A9t.C3.A9s')}}
+ +

Méthodes

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Function/prototype', 'M.C3.A9thodes')}}
+ +

Les instances de Function

+ +

Les instances de Function héritent des méthodes et propriétés de {{jsxref("Function.prototype")}}. Comme pour les autres constructeurs, il est possible de modifier le prototype du constructeur afin d'apporter des modifications à toutes les instances de Function.

+ +

Exemple

+ +

Définir des arguments avec le constructeur Function

+ +

Le code suivant permet de créer un objet Function qui utilise deux arguments :

+ +
// Cet exemple peut être lancé dans votre console JavaScript
+
+// On crée un fonction qui prend deux arguments
+// et qui en renvoie la somme
+var ajoute = new Function('a', 'b', 'return a + b');
+
+// On appelle la fonction
+ajoute(2, 6);
+// > 8
+
+ +

Les arguments "a" et "b" sont les noms des arguments formellement déclarés utilisés dans le corps de la fonction : "return a + b".

+ +

Différence entre le constructeur Function et les déclarations de fonction

+ +

Les fonctions créées avec le constructeur {{jsxref("Function()")}} ne créent pas de fermetures liées au contexte de leur création. Ainsi, lorsqu'elles sont exécutées, elles ne peuvent accéder qu'aux variables globales et à leurs propres valeurs locales. Elles ne peuvent pas accéder aux variables de la portée dans laquelle le constructeur Function a été invoqué. Le comportement est différent de celui qu'on obtient avec {{jsxref("eval")}} avec du code contenant une expression de fonction.

+ +
var x = 10;
+
+function créerFonction1() {
+  var x = 20;
+  return new Function("return x;"); // ici |x| fait référence au |x| global
+}
+
+function créerFonction2() {
+  var x = 20;
+  function f() {
+    return x; // ici |x| fait référence au |x| local juste avant
+  }
+  return f;
+}
+
+var f1 = créerFonction1();
+console.log(f1());          // 10
+var f2 = créerFonction2();
+console.log(f2());          // 20
+ +

Bien que ce code fonctionne dans un navigateur web, l'appel à f1() provoquera une {{jsxref("ReferenceError")}} dans Node.js car x ne sera pas trouvé. En effet, pour Node, la portée de plus haut niveau n'est pas la portée globale et x est ici local à la fonction.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.3', 'Function')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-function-objects', 'Function')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/length/index.html b/files/fr/web/javascript/reference/global_objects/function/length/index.html deleted file mode 100644 index 7493f7d759..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/length/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Function.length -slug: Web/JavaScript/Reference/Global_Objects/Function/length -tags: - - Function - - JavaScript - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/length -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/length ---- -
{{JSRef}}
- -

La propriété length définit le nombre de paramètres attendus par la fonction.

- -
{{EmbedInteractiveExample("pages/js/function-length.html")}}
- - - -
{{js_property_attributes(0,0,1)}}
- -

Description

- -

length est une propriété des fonctions qui indique le nombre d'arguments attendus par la fonction (ce qui correspond au nombre d'arguments formellement déclarés). Cette quantité n'inclue pas les {{jsxref("Fonctions/paramètres_du_reste", "paramètres du reste", "", 1)}} et ne compte que les paramètres situés avant le premier paramètre avec une valeur par défaut. Cette propriété est différente de {{jsxref("Fonctions/arguments/length", "arguments.length")}} qui est locale à la fonction et qui décrit le nombre d'arguments réellement passés à la fonction.

- -

Propriété du constructeur Function

- -

Le constructeur {{jsxref("Function")}} est lui-même un objet {{jsxref("Function")}}. Sa propriété length vaut 1. Les attributs de cette propriété sont : Écrivable : false, Énumérable : false, Configurable : true.

- -

Propriété du prototype de Function

- -

La propriété length du prototype de {{jsxref("Function")}} vaut 0.

- -

Exemples

- -
console.log(Function.length); /* 1 */
-
-console.log((function()        {}).length); /* 0 */
-console.log((function(a)       {}).length); /* 1 */
-console.log((function(a, b)    {}).length); /* 2 etc. */
-console.log((function(...args) {}).length);
-// 0, le paramètre du reste n'est pas compté
-console.log((function(a, b = 1, c) {}).length);
-// 1, seuls les paramètres avant les valeurs par
-// défaut sont comptés
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.3.5.1', 'Function.length')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-function-instances-length', 'Function.length')}}{{Spec2('ES6')}}L'attribut configurable de cette propriété vaut true désormais.
{{SpecName('ESDraft', '#sec-function-instances-length', 'Function.length')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.length")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/length/index.md b/files/fr/web/javascript/reference/global_objects/function/length/index.md new file mode 100644 index 0000000000..7493f7d759 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/length/index.md @@ -0,0 +1,88 @@ +--- +title: Function.length +slug: Web/JavaScript/Reference/Global_Objects/Function/length +tags: + - Function + - JavaScript + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/length +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/length +--- +
{{JSRef}}
+ +

La propriété length définit le nombre de paramètres attendus par la fonction.

+ +
{{EmbedInteractiveExample("pages/js/function-length.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

Description

+ +

length est une propriété des fonctions qui indique le nombre d'arguments attendus par la fonction (ce qui correspond au nombre d'arguments formellement déclarés). Cette quantité n'inclue pas les {{jsxref("Fonctions/paramètres_du_reste", "paramètres du reste", "", 1)}} et ne compte que les paramètres situés avant le premier paramètre avec une valeur par défaut. Cette propriété est différente de {{jsxref("Fonctions/arguments/length", "arguments.length")}} qui est locale à la fonction et qui décrit le nombre d'arguments réellement passés à la fonction.

+ +

Propriété du constructeur Function

+ +

Le constructeur {{jsxref("Function")}} est lui-même un objet {{jsxref("Function")}}. Sa propriété length vaut 1. Les attributs de cette propriété sont : Écrivable : false, Énumérable : false, Configurable : true.

+ +

Propriété du prototype de Function

+ +

La propriété length du prototype de {{jsxref("Function")}} vaut 0.

+ +

Exemples

+ +
console.log(Function.length); /* 1 */
+
+console.log((function()        {}).length); /* 0 */
+console.log((function(a)       {}).length); /* 1 */
+console.log((function(a, b)    {}).length); /* 2 etc. */
+console.log((function(...args) {}).length);
+// 0, le paramètre du reste n'est pas compté
+console.log((function(a, b = 1, c) {}).length);
+// 1, seuls les paramètres avant les valeurs par
+// défaut sont comptés
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.3.5.1', 'Function.length')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-function-instances-length', 'Function.length')}}{{Spec2('ES6')}}L'attribut configurable de cette propriété vaut true désormais.
{{SpecName('ESDraft', '#sec-function-instances-length', 'Function.length')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.length")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/name/index.html b/files/fr/web/javascript/reference/global_objects/function/name/index.html deleted file mode 100644 index 0f8df52d94..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/name/index.html +++ /dev/null @@ -1,200 +0,0 @@ ---- -title: Function.name -slug: Web/JavaScript/Reference/Global_Objects/Function/name -tags: - - ECMAScript 2015 - - Function - - JavaScript - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/name -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/name ---- -
{{JSRef}}
- -

La propriété function.name est une propriété en lecture seule qui renvoie le nom de la fonction courante ou "anonymous" si celle-ci a été créée de façon anonyme.

- -
{{EmbedInteractiveExample("pages/js/function-name.html")}}
- - - -
{{js_property_attributes(0,0,1)}}
- -
-

Note : Dans les implémentations non-standards antérieures à ES2015, l'attribut configurable valait false.

-
- -

Exemples

- -

Instruction de fonction

- -

La propriété name renvoie le nom de la fonction lorsque celle-ci est utilisée dans une instruction de fonction.

- -
function faireUnTruc() {}
-faireUnTruc.name; // "faireUnTruc"
-
- -

Fonctions créées avec un constructeur

- -

Lorsqu'on crée une fonction avec new Function(...) ou simplement Function(...), on crée uniquement des objets dont le nom est "anonymous".

- -
(new Function).name; // "anonymous"
- -

Inférence des noms de fonction

- -

Les variables et les méthodes permettent d'inférer (c'est-à-dire de « deviner ») le nom des fonctions anonymes en fonction de leur position syntaxique (cette fonctionnalité est apparue avec ECMAScript 2015).

- -
var f = function() {};
-var objet = {
-  uneMéthode: function() {}
-};
-
-console.log(f.name); // "f"
-console.log(objet.uneMéthode.name); // "uneMéthode"
-
- -

On peut définir une fonction avec un nom grâce à une {{jsxref("Opérateurs/L_opérateur_function", "expression de fonction", "", 1)}}:

- -
var objet = {
-  uneMéthode: function objet_maMéthode() {}
-};
-console.log(objet.uneMéthode.name); // logs "objet_maMéthode"
-
-try { objet_maMéthode } catch(e) { console.log(e); }
-// ReferenceError: objet_maMéthode is not defined
-
- -

On ne peut pas changer le nom d'une fonction, cette propriété est uniquement en lecture :

- -
var objet = {
-  // anonyme
-  uneMéthode: function() {}
-};
-
-objet.uneMéthode.name = 'uneMéthode';
-console.log(object.uneMéthode.name); // une chaîne vide, uneMéthode est anonyme
-
- -

Pour modifier le nom, on pourrait cependant utiliser la méthode {{jsxref("Object.defineProperty()")}}.

- -

Notation raccourcie pour les méthodes

- -
var o = {
-  toto(){}
-};
-o.toto.name; // "toto";
- -

Noms des fonctions liées

- -

{{jsxref("Function.bind()")}} produit une fonction dont le nom sera la chaîne "bound " suivi du nom de la fonction.

- -
function toto() {};
-toto.bind({}).name; // "bound toto"
-
- -

Noms de fonction pour les accesseurs et les mutateurs

- -

Lorsqu'on utilise les propriétés d'accesseur get / set, "get" ou "set" apparaîtra avant le nom de la fonction.

- -
var o = {
-  get toto(){},
-  set toto(x){}
-};
-
-var descripteur = Object.getOwnPropertyDescriptor(o, "toto");
-descripteur.get.name; // "get toto"
-descripteur.set.name; // "set toto";
- -

Noms des fonctions utilisées dans les classes

- -

On peut utiliser la notation obj.constructor.name pour vérifier la « classe » d'un objet (attention aux avertissements ci-après) :

- -
function Toto() {}  // Syntaxe ES2015 : class Toto {}
-
-var instanceDeToto = new Toto();
-console.log(instanceDeToto.constructor.name); // affiche "Toto" dans la console
-
- -

Attention : l'interpréteur utilisera la propriété native Function.name uniquement si la fonction ne possède pas une propriété en propre intitulée name (cf section 9.2.11 de la spécification ECMAScript2015). Cependant, ES2015 indique que les propriétés définies avec mot-clé static seront des propriétés propres de la fonction constructrice (cf. ECMAScript2015, 14.5.14.21.b + 12.2.6.9). Ainsi, il n'est plus possible d'obtenir le nom de la classe si celle-ci possède une méthode statique intitulée name() :

- -
class Toto {
-  constructor() {}
-  static name() {}
-}
-
- -

Avec static name(), Toto.name ne contient plus le nom de la classe mais une référence à l'objet name(). La définition utilisée ci-avant se comporte de façon semblable à ce fragment de code ES5 :

- -
function Toto() {}
-Object.defineProperty(Toto, 'name', { writable: true });
-Toto.name = function() {};
-
- -

Il est donc parfois erroné de penser que Function.name pointe toujours vers le nom de la classe.

- -

Noms de fonction sous la forme de symboles

- -

Si un symbole ({{jsxref("Symbol")}}) est utilisé comme nom d'une fonction et que celui-ci dispose d'une description, c'est cette dernière qui sera utilisée comme nom de la méthode, entre crochets :

- -
var sym1 = Symbol("Toto");
-var sym2 = Symbol();
-var o = {
-  [sym1]: function(){},
-  [sym2]: function(){}
-};
-
-o[sym1].name; // "[Toto]"
-o[sym2].name; // ""
- -

Compresseurs et outils de minification JavaScript

- -

Attention à l'utilisation de Function.name lorsque le code source est transformé par certains outils. En effet, ceux-ci réduisent généralement la taille d'un programme en compressant les espaces et en modifiant parfois les noms de variables. Ainsi, un fragment de code comme :

- -
function Toto() {};
-var toto = new Toto();
-
-if (Toto.constructor.name === 'Toto') {
-  console.log("'toto' est une instance de 'Toto'");
-} else {
-  console.log('Oups !');
-}
-
- -

pourrait être compressé en :

- -
function a() {};
-var b = new a();
-if (b.constructor.name === 'Toto') {
-  console.log("'toto' est une instance de 'Toto'");
-} else {
-  console.log('Oups !');
-}
-
- -

Dans la version non-compressée, la condition du test est remplie et on affiche 'toto' est une instance de 'Toto' dans la console. Mais dans la version compressée, la condition n'est pas vérifiée. Lorsqu'on utilise name, il faut s'assurer que les outils utilisés ne modifient pas le nom des fonctions.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-name', 'name')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-function-instances-name', 'name')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.name")}}

diff --git a/files/fr/web/javascript/reference/global_objects/function/name/index.md b/files/fr/web/javascript/reference/global_objects/function/name/index.md new file mode 100644 index 0000000000..0f8df52d94 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/name/index.md @@ -0,0 +1,200 @@ +--- +title: Function.name +slug: Web/JavaScript/Reference/Global_Objects/Function/name +tags: + - ECMAScript 2015 + - Function + - JavaScript + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/name +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/name +--- +
{{JSRef}}
+ +

La propriété function.name est une propriété en lecture seule qui renvoie le nom de la fonction courante ou "anonymous" si celle-ci a été créée de façon anonyme.

+ +
{{EmbedInteractiveExample("pages/js/function-name.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +
+

Note : Dans les implémentations non-standards antérieures à ES2015, l'attribut configurable valait false.

+
+ +

Exemples

+ +

Instruction de fonction

+ +

La propriété name renvoie le nom de la fonction lorsque celle-ci est utilisée dans une instruction de fonction.

+ +
function faireUnTruc() {}
+faireUnTruc.name; // "faireUnTruc"
+
+ +

Fonctions créées avec un constructeur

+ +

Lorsqu'on crée une fonction avec new Function(...) ou simplement Function(...), on crée uniquement des objets dont le nom est "anonymous".

+ +
(new Function).name; // "anonymous"
+ +

Inférence des noms de fonction

+ +

Les variables et les méthodes permettent d'inférer (c'est-à-dire de « deviner ») le nom des fonctions anonymes en fonction de leur position syntaxique (cette fonctionnalité est apparue avec ECMAScript 2015).

+ +
var f = function() {};
+var objet = {
+  uneMéthode: function() {}
+};
+
+console.log(f.name); // "f"
+console.log(objet.uneMéthode.name); // "uneMéthode"
+
+ +

On peut définir une fonction avec un nom grâce à une {{jsxref("Opérateurs/L_opérateur_function", "expression de fonction", "", 1)}}:

+ +
var objet = {
+  uneMéthode: function objet_maMéthode() {}
+};
+console.log(objet.uneMéthode.name); // logs "objet_maMéthode"
+
+try { objet_maMéthode } catch(e) { console.log(e); }
+// ReferenceError: objet_maMéthode is not defined
+
+ +

On ne peut pas changer le nom d'une fonction, cette propriété est uniquement en lecture :

+ +
var objet = {
+  // anonyme
+  uneMéthode: function() {}
+};
+
+objet.uneMéthode.name = 'uneMéthode';
+console.log(object.uneMéthode.name); // une chaîne vide, uneMéthode est anonyme
+
+ +

Pour modifier le nom, on pourrait cependant utiliser la méthode {{jsxref("Object.defineProperty()")}}.

+ +

Notation raccourcie pour les méthodes

+ +
var o = {
+  toto(){}
+};
+o.toto.name; // "toto";
+ +

Noms des fonctions liées

+ +

{{jsxref("Function.bind()")}} produit une fonction dont le nom sera la chaîne "bound " suivi du nom de la fonction.

+ +
function toto() {};
+toto.bind({}).name; // "bound toto"
+
+ +

Noms de fonction pour les accesseurs et les mutateurs

+ +

Lorsqu'on utilise les propriétés d'accesseur get / set, "get" ou "set" apparaîtra avant le nom de la fonction.

+ +
var o = {
+  get toto(){},
+  set toto(x){}
+};
+
+var descripteur = Object.getOwnPropertyDescriptor(o, "toto");
+descripteur.get.name; // "get toto"
+descripteur.set.name; // "set toto";
+ +

Noms des fonctions utilisées dans les classes

+ +

On peut utiliser la notation obj.constructor.name pour vérifier la « classe » d'un objet (attention aux avertissements ci-après) :

+ +
function Toto() {}  // Syntaxe ES2015 : class Toto {}
+
+var instanceDeToto = new Toto();
+console.log(instanceDeToto.constructor.name); // affiche "Toto" dans la console
+
+ +

Attention : l'interpréteur utilisera la propriété native Function.name uniquement si la fonction ne possède pas une propriété en propre intitulée name (cf section 9.2.11 de la spécification ECMAScript2015). Cependant, ES2015 indique que les propriétés définies avec mot-clé static seront des propriétés propres de la fonction constructrice (cf. ECMAScript2015, 14.5.14.21.b + 12.2.6.9). Ainsi, il n'est plus possible d'obtenir le nom de la classe si celle-ci possède une méthode statique intitulée name() :

+ +
class Toto {
+  constructor() {}
+  static name() {}
+}
+
+ +

Avec static name(), Toto.name ne contient plus le nom de la classe mais une référence à l'objet name(). La définition utilisée ci-avant se comporte de façon semblable à ce fragment de code ES5 :

+ +
function Toto() {}
+Object.defineProperty(Toto, 'name', { writable: true });
+Toto.name = function() {};
+
+ +

Il est donc parfois erroné de penser que Function.name pointe toujours vers le nom de la classe.

+ +

Noms de fonction sous la forme de symboles

+ +

Si un symbole ({{jsxref("Symbol")}}) est utilisé comme nom d'une fonction et que celui-ci dispose d'une description, c'est cette dernière qui sera utilisée comme nom de la méthode, entre crochets :

+ +
var sym1 = Symbol("Toto");
+var sym2 = Symbol();
+var o = {
+  [sym1]: function(){},
+  [sym2]: function(){}
+};
+
+o[sym1].name; // "[Toto]"
+o[sym2].name; // ""
+ +

Compresseurs et outils de minification JavaScript

+ +

Attention à l'utilisation de Function.name lorsque le code source est transformé par certains outils. En effet, ceux-ci réduisent généralement la taille d'un programme en compressant les espaces et en modifiant parfois les noms de variables. Ainsi, un fragment de code comme :

+ +
function Toto() {};
+var toto = new Toto();
+
+if (Toto.constructor.name === 'Toto') {
+  console.log("'toto' est une instance de 'Toto'");
+} else {
+  console.log('Oups !');
+}
+
+ +

pourrait être compressé en :

+ +
function a() {};
+var b = new a();
+if (b.constructor.name === 'Toto') {
+  console.log("'toto' est une instance de 'Toto'");
+} else {
+  console.log('Oups !');
+}
+
+ +

Dans la version non-compressée, la condition du test est remplie et on affiche 'toto' est une instance de 'Toto' dans la console. Mais dans la version compressée, la condition n'est pas vérifiée. Lorsqu'on utilise name, il faut s'assurer que les outils utilisés ne modifient pas le nom des fonctions.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-name', 'name')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-function-instances-name', 'name')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.name")}}

diff --git a/files/fr/web/javascript/reference/global_objects/function/tosource/index.html b/files/fr/web/javascript/reference/global_objects/function/tosource/index.html deleted file mode 100644 index cfc1e8f26a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/tosource/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Function.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Function/toSource -tags: - - Function - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/toSource ---- -
{{JSRef}}{{non-standard_header}}
- -

La méthode toSource() renvoie une chaîne de caractères représentant le code source de l'objet.

- -

Syntaxe

- -
function.toSource();
-Function.toSource();
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant le code source de l'objet.

- -

Description

- -

La méthode toSource() renvoie les valeurs suivantes :

- - - -

De façon générale, cette méthode est utilisée en interne par le moteur JavaScript et n'est pas utilisée dans les scripts tiers. Il est possible d'utiliser cette méthode pour une aide au débogage et pouvoir examiner le contenu d'un objet.

- -

Spécifications

- -

Ne fait partie d'aucune spécification. Implémentée avec JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/tosource/index.md b/files/fr/web/javascript/reference/global_objects/function/tosource/index.md new file mode 100644 index 0000000000..cfc1e8f26a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/tosource/index.md @@ -0,0 +1,66 @@ +--- +title: Function.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Function/toSource +tags: + - Function + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/toSource +--- +
{{JSRef}}{{non-standard_header}}
+ +

La méthode toSource() renvoie une chaîne de caractères représentant le code source de l'objet.

+ +

Syntaxe

+ +
function.toSource();
+Function.toSource();
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant le code source de l'objet.

+ +

Description

+ +

La méthode toSource() renvoie les valeurs suivantes :

+ + + +

De façon générale, cette méthode est utilisée en interne par le moteur JavaScript et n'est pas utilisée dans les scripts tiers. Il est possible d'utiliser cette méthode pour une aide au débogage et pouvoir examiner le contenu d'un objet.

+ +

Spécifications

+ +

Ne fait partie d'aucune spécification. Implémentée avec JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/function/tostring/index.html b/files/fr/web/javascript/reference/global_objects/function/tostring/index.html deleted file mode 100644 index 625eb83203..0000000000 --- a/files/fr/web/javascript/reference/global_objects/function/tostring/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Function.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Function/toString -tags: - - Function - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Function/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Function/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaîne de caractères représentant le code source de la fonction.

- -
{{EmbedInteractiveExample("pages/js/function-tostring.html")}}
- -

Syntaxe

- -
function.toString(indentation)
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le code source de la fonction.

- -

Description

- -

L'objet {{jsxref("Function")}} redéfinit la méthode {{jsxref("Object.prototype.toString", "toString")}} de l'objet {{jsxref("Object")}} ; il n'hérite donc pas de {{jsxref("Object.prototype.toString")}}. Pour les objets {{jsxref("Function")}}, la méthode toString renvoie une chaîne de caractères représentant l'objet sous la forme d'une déclaration de fonction. Pour ce faire, toString décompile la fonction pour renvoyer une chaîne qui contient le mot-clé function, la liste des arguments, les accolades et la source correspondant au corps de la fonction.

- -

Le moteur JavaScript appelle la méthode toString automatiquement lorsqu'un objet {{jsxref("Function")}} doit être représenté textuellement (par exemple lorsqu'une fonction doit être concaténée avec une chaîne de caractères).

- -

La méthode toString() lèvera une exception {{jsxref("TypeError")}} (« Function.prototype.toString called on incompatible object ») si la valeur this n'est pas un objet Function.

- -
Function.prototype.toString.call("toto"); // TypeError
-
- -

Si la méthode toString() est appelée sur des fonctions natives qui ne sont pas définies dans le script, toString() renvoie une chaîne de caractères indiquant le caractère natif :

- -
Math.abs.toString();
-
-"function abs() {
-    [native code]
-}"
- -

Si la méthode toString() est appelée sur une fonction créée avec le constructeur Function, toString() renverra le code source d'une fonction intitulée anonymous et utilisera les paramètres et le corps de la fonction fournis.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
Function.prototype.toString()BrouillonStandardise la chaîne de caractères utilisée pour les fonctions natives ainsi que la gestion des fins de ligne.
{{SpecName('ES6', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}{{Spec2('ES6')}}Critères supplémentaires ajoutés sur la représentation de la chaîne.
{{SpecName('ESDraft', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Function.toString")}}

- -

Notes spécifiques à Firefox

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/function/tostring/index.md b/files/fr/web/javascript/reference/global_objects/function/tostring/index.md new file mode 100644 index 0000000000..625eb83203 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/function/tostring/index.md @@ -0,0 +1,95 @@ +--- +title: Function.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Function/toString +tags: + - Function + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Function/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Function/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaîne de caractères représentant le code source de la fonction.

+ +
{{EmbedInteractiveExample("pages/js/function-tostring.html")}}
+ +

Syntaxe

+ +
function.toString(indentation)
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le code source de la fonction.

+ +

Description

+ +

L'objet {{jsxref("Function")}} redéfinit la méthode {{jsxref("Object.prototype.toString", "toString")}} de l'objet {{jsxref("Object")}} ; il n'hérite donc pas de {{jsxref("Object.prototype.toString")}}. Pour les objets {{jsxref("Function")}}, la méthode toString renvoie une chaîne de caractères représentant l'objet sous la forme d'une déclaration de fonction. Pour ce faire, toString décompile la fonction pour renvoyer une chaîne qui contient le mot-clé function, la liste des arguments, les accolades et la source correspondant au corps de la fonction.

+ +

Le moteur JavaScript appelle la méthode toString automatiquement lorsqu'un objet {{jsxref("Function")}} doit être représenté textuellement (par exemple lorsqu'une fonction doit être concaténée avec une chaîne de caractères).

+ +

La méthode toString() lèvera une exception {{jsxref("TypeError")}} (« Function.prototype.toString called on incompatible object ») si la valeur this n'est pas un objet Function.

+ +
Function.prototype.toString.call("toto"); // TypeError
+
+ +

Si la méthode toString() est appelée sur des fonctions natives qui ne sont pas définies dans le script, toString() renvoie une chaîne de caractères indiquant le caractère natif :

+ +
Math.abs.toString();
+
+"function abs() {
+    [native code]
+}"
+ +

Si la méthode toString() est appelée sur une fonction créée avec le constructeur Function, toString() renverra le code source d'une fonction intitulée anonymous et utilisera les paramètres et le corps de la fonction fournis.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
Function.prototype.toString()BrouillonStandardise la chaîne de caractères utilisée pour les fonctions natives ainsi que la gestion des fins de ligne.
{{SpecName('ES6', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}{{Spec2('ES6')}}Critères supplémentaires ajoutés sur la représentation de la chaîne.
{{SpecName('ESDraft', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Function.toString")}}

+ +

Notes spécifiques à Firefox

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/generator/index.html b/files/fr/web/javascript/reference/global_objects/generator/index.html deleted file mode 100644 index 646ecd415a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/generator/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Generator -slug: Web/JavaScript/Reference/Global_Objects/Generator -tags: - - ECMAScript 2015 - - Generator - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Generator -original_slug: Web/JavaScript/Reference/Objets_globaux/Generator ---- -
{{JSRef}}
- -

L'objet Generator est renvoyé par une {{jsxref("Instructions/function*","fonction génératrice","",1)}}, c'est à la fois un itérateur et un itérable.

- -

Syntaxe

- -
function* gen() {
-  yield 1;
-  yield 2;
-  yield 3;
-}
-
-var g = gen(); // "Generator { }"
- -

Méthodes

- -
-
{{jsxref("Generator.prototype.next()")}}
-
Renvoie une valeur générée par l'expression {{jsxref("Opérateurs/yield", "yield")}}.
-
{{jsxref("Generator.prototype.return()")}}
-
Renvoie la valeur donnée et termine le générateur.
-
{{jsxref("Generator.prototype.throw()")}}
-
Lève une exception dans un générateur. Cette opération termine le générateur, sauf si l'exception est interceptée dans le générateur.
-
- -

Exemple

- -

Un itérateur infini

- -
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
-// ...
- -

Générateurs historiques

- -

Firefox (SpiderMonkey) implémente également une version antérieure pour les générateurs avec JavaScript 1.7. Pour cette syntaxe, il n'y a pas besoin d'utiliser l'astérisque dans la déclaration de la fonction, il suffit d'utiliser le mot-clé yield dans le corps de la fonction. Les générateurs historiques sont une fonctionnalité dépréciée et seront supprimés à l'avenir ({{bug(1083482)}}), il est fortement déconseillé de les utiliser.

- -

Méthodes pour les générateurs historiques

- -
-
Generator.prototype.next() {{non-standard_inline}}
-
Renvoie une valeur générée par l'expression {{jsxref("Opérateurs/yield", "yield")}}. Cette méthode correspond à next() pour les générateurs ES2015.
-
Generator.prototype.close() {{non-standard_inline}}
-
Clôture le générateur, tout appel ultérieur à next() renverra une exception {{jsxref("StopIteration")}}. Cela correspond à la méthode return() pour les générateurs ES2015.
-
Generator.prototype.send() {{non-standard_inline}}
-
Utilisée pour envoyer une valeur à un générateur. La valeur est renvoyée avec une expression {{jsxref("Opérateurs/yield", "yield")}} et renvoie une valeur générée par la prochaine expression {{jsxref("Opérateurs/yield", "yield")}}. send(x) correspond à next(x) pour les générateurs ES2015.
-
Generator.prototype.throw() {{non-standard_inline}}
-
Lève une exception au sein d'un générateur. Cela correspond à la méthode throw() pour les générateurs ES2015.
-
- -

Exemple utilisant un générateur historique

- -
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 (le générateur est clôturé)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- -

Générateurs historiques

- - - -

Générateurs ES2015

- - diff --git a/files/fr/web/javascript/reference/global_objects/generator/index.md b/files/fr/web/javascript/reference/global_objects/generator/index.md new file mode 100644 index 0000000000..646ecd415a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/generator/index.md @@ -0,0 +1,134 @@ +--- +title: Generator +slug: Web/JavaScript/Reference/Global_Objects/Generator +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator +original_slug: Web/JavaScript/Reference/Objets_globaux/Generator +--- +
{{JSRef}}
+ +

L'objet Generator est renvoyé par une {{jsxref("Instructions/function*","fonction génératrice","",1)}}, c'est à la fois un itérateur et un itérable.

+ +

Syntaxe

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen(); // "Generator { }"
+ +

Méthodes

+ +
+
{{jsxref("Generator.prototype.next()")}}
+
Renvoie une valeur générée par l'expression {{jsxref("Opérateurs/yield", "yield")}}.
+
{{jsxref("Generator.prototype.return()")}}
+
Renvoie la valeur donnée et termine le générateur.
+
{{jsxref("Generator.prototype.throw()")}}
+
Lève une exception dans un générateur. Cette opération termine le générateur, sauf si l'exception est interceptée dans le générateur.
+
+ +

Exemple

+ +

Un itérateur infini

+ +
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
+// ...
+ +

Générateurs historiques

+ +

Firefox (SpiderMonkey) implémente également une version antérieure pour les générateurs avec JavaScript 1.7. Pour cette syntaxe, il n'y a pas besoin d'utiliser l'astérisque dans la déclaration de la fonction, il suffit d'utiliser le mot-clé yield dans le corps de la fonction. Les générateurs historiques sont une fonctionnalité dépréciée et seront supprimés à l'avenir ({{bug(1083482)}}), il est fortement déconseillé de les utiliser.

+ +

Méthodes pour les générateurs historiques

+ +
+
Generator.prototype.next() {{non-standard_inline}}
+
Renvoie une valeur générée par l'expression {{jsxref("Opérateurs/yield", "yield")}}. Cette méthode correspond à next() pour les générateurs ES2015.
+
Generator.prototype.close() {{non-standard_inline}}
+
Clôture le générateur, tout appel ultérieur à next() renverra une exception {{jsxref("StopIteration")}}. Cela correspond à la méthode return() pour les générateurs ES2015.
+
Generator.prototype.send() {{non-standard_inline}}
+
Utilisée pour envoyer une valeur à un générateur. La valeur est renvoyée avec une expression {{jsxref("Opérateurs/yield", "yield")}} et renvoie une valeur générée par la prochaine expression {{jsxref("Opérateurs/yield", "yield")}}. send(x) correspond à next(x) pour les générateurs ES2015.
+
Generator.prototype.throw() {{non-standard_inline}}
+
Lève une exception au sein d'un générateur. Cela correspond à la méthode throw() pour les générateurs ES2015.
+
+ +

Exemple utilisant un générateur historique

+ +
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 (le générateur est clôturé)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ +

Générateurs historiques

+ + + +

Générateurs ES2015

+ + diff --git a/files/fr/web/javascript/reference/global_objects/generator/next/index.html b/files/fr/web/javascript/reference/global_objects/generator/next/index.html deleted file mode 100644 index f88fc2d356..0000000000 --- a/files/fr/web/javascript/reference/global_objects/generator/next/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Generator.prototype.next() -slug: Web/JavaScript/Reference/Global_Objects/Generator/next -tags: - - ECMAScript 2015 - - Generator - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Generator/next -original_slug: Web/JavaScript/Reference/Objets_globaux/Generator/next ---- -
{{JSRef}}
- -

La méthode next() renvoie un objet possédant deux propriétés done et value. Cette méthode peut également recevoir un paramètre pour envoyer une valeur au générateur.

- -

Syntaxe

- -
gen.next(valeur)
- -

Paramètres

- -
-
valeur
-
La valeur à envoyer au générateur. La valeur sera affectée comme résultat d'une expression yield. Autrement dit, lorsque le générateur contient une expression de la forme variable = yield expression, c'est l'argument valeur qui sera affecté à variable.
-
- -

Valeur de retour

- -

Un {{jsxref("Object")}} possédant deux propriétés :

- - - -

Exemples

- -

Utiliser next()

- -

L'exemple suivant illustre comment utiliser un générateur simple et les objets renvoyés par la méthode next :

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

Envoyer des valeurs à un générateur

- -

Ici, next est appelé avec une valeur. On notera ici que le premier appel n'affiche rien car le générateur n'a encore rien généré.

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Generator.next")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/generator/next/index.md b/files/fr/web/javascript/reference/global_objects/generator/next/index.md new file mode 100644 index 0000000000..f88fc2d356 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/generator/next/index.md @@ -0,0 +1,113 @@ +--- +title: Generator.prototype.next() +slug: Web/JavaScript/Reference/Global_Objects/Generator/next +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/next +original_slug: Web/JavaScript/Reference/Objets_globaux/Generator/next +--- +
{{JSRef}}
+ +

La méthode next() renvoie un objet possédant deux propriétés done et value. Cette méthode peut également recevoir un paramètre pour envoyer une valeur au générateur.

+ +

Syntaxe

+ +
gen.next(valeur)
+ +

Paramètres

+ +
+
valeur
+
La valeur à envoyer au générateur. La valeur sera affectée comme résultat d'une expression yield. Autrement dit, lorsque le générateur contient une expression de la forme variable = yield expression, c'est l'argument valeur qui sera affecté à variable.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Object")}} possédant deux propriétés :

+ + + +

Exemples

+ +

Utiliser next()

+ +

L'exemple suivant illustre comment utiliser un générateur simple et les objets renvoyés par la méthode next :

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

Envoyer des valeurs à un générateur

+ +

Ici, next est appelé avec une valeur. On notera ici que le premier appel n'affiche rien car le générateur n'a encore rien généré.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator.prototype.next', 'Generator.prototype.next')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Generator.next")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/generator/return/index.html b/files/fr/web/javascript/reference/global_objects/generator/return/index.html deleted file mode 100644 index 3ddfa7f463..0000000000 --- a/files/fr/web/javascript/reference/global_objects/generator/return/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Generator.prototype.return() -slug: Web/JavaScript/Reference/Global_Objects/Generator/return -tags: - - ECMAScript 2015 - - Generator - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Generator/return -original_slug: Web/JavaScript/Reference/Objets_globaux/Generator/return ---- -
{{JSRef}}
- -

La méthode return() renvoie la valeur fournie et termine le générateur.

- -

Syntaxe

- -
gen.return(valeur)
- -

Paramètres

- -
-
valeur
-
La valeur à renvoyer
-
- -

Valeur de retour

- -

La valeur fournie comme argument.

- -

Exemples

- -

Utiliser return()

- -

L'exemple suivant illustre une utilisation simple d'un générateur et de la méthode return().

- -
function* gen() {
-  yield 1;
-  yield 2;
-  yield 3;
-}
-
-var g = gen();
-
-g.next();         // { value: 1, done: false }
-g.return("toto"); // { value: "toto", done: true }
-g.next();         // { value: undefined, done: true }
-
- -
-

Note : Si done vaut true, return(valeur) renverra la même chose que next() : undefined. Si aucun argument n'est fourni, la propriété value de l'objet renvoyé sera la même qu'avec un appel à .next(). Si un argument est fourni, c'est lui qui sera utilisé comme valeur pour l'attribut value du résultat.

- -
function* gen() {
-  yield 1;
-  yield 2;
-  yield 3;
-}
-var g = gen();
-console.log(g.next()); // { value: 1; done: false}
-console.log(g.next()); // { value: 2; done: false}
-console.log(g.next()); // { value: 3; done: false}
-console.log(g.next()); // { value: undefined; done: true}
-console.log(g.return()); // { value: undefined; done: true}
-console.log(g.return(1)); // { value: 1; done: true}
-
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Generator.return")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/generator/return/index.md b/files/fr/web/javascript/reference/global_objects/generator/return/index.md new file mode 100644 index 0000000000..3ddfa7f463 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/generator/return/index.md @@ -0,0 +1,101 @@ +--- +title: Generator.prototype.return() +slug: Web/JavaScript/Reference/Global_Objects/Generator/return +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/return +original_slug: Web/JavaScript/Reference/Objets_globaux/Generator/return +--- +
{{JSRef}}
+ +

La méthode return() renvoie la valeur fournie et termine le générateur.

+ +

Syntaxe

+ +
gen.return(valeur)
+ +

Paramètres

+ +
+
valeur
+
La valeur à renvoyer
+
+ +

Valeur de retour

+ +

La valeur fournie comme argument.

+ +

Exemples

+ +

Utiliser return()

+ +

L'exemple suivant illustre une utilisation simple d'un générateur et de la méthode return().

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+
+var g = gen();
+
+g.next();         // { value: 1, done: false }
+g.return("toto"); // { value: "toto", done: true }
+g.next();         // { value: undefined, done: true }
+
+ +
+

Note : Si done vaut true, return(valeur) renverra la même chose que next() : undefined. Si aucun argument n'est fourni, la propriété value de l'objet renvoyé sera la même qu'avec un appel à .next(). Si un argument est fourni, c'est lui qui sera utilisé comme valeur pour l'attribut value du résultat.

+ +
function* gen() {
+  yield 1;
+  yield 2;
+  yield 3;
+}
+var g = gen();
+console.log(g.next()); // { value: 1; done: false}
+console.log(g.next()); // { value: 2; done: false}
+console.log(g.next()); // { value: 3; done: false}
+console.log(g.next()); // { value: undefined; done: true}
+console.log(g.return()); // { value: undefined; done: true}
+console.log(g.return(1)); // { value: 1; done: true}
+
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator.prototype.return', 'Generator.prototype.return')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Generator.return")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/generator/throw/index.html b/files/fr/web/javascript/reference/global_objects/generator/throw/index.html deleted file mode 100644 index 547c877869..0000000000 --- a/files/fr/web/javascript/reference/global_objects/generator/throw/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Generator.prototype.throw() -slug: Web/JavaScript/Reference/Global_Objects/Generator/throw -tags: - - ECMAScript 2015 - - Generator - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw -original_slug: Web/JavaScript/Reference/Objets_globaux/Generator/throw ---- -
{{JSRef}}
- -

La méthode throw() lève une erreur dans un générateur.

- -

Syntaxe

- -
gen.throw(exception)
- -

Paramètres

- -
-
exception
-
L'exception à lever. On préfèrera généralement utiliser un objet qui est une instance d'{{jsxref("Error")}}.
-
- -

Valeur de retour

- -

Un {{jsxref("Object")}} avec deux propriétés :

- - - -

Exemples

- -

Utiliser throw()

- -

Dans l'exemple suivant, on utilise un générateur simple et on génère une exception grâce à la méthode throw(). Une exception peut être interceptée avec un bloc {{jsxref("Instructions/try...catch","try...catch")}} usuel.

- -
function* gen() {
-  while(true) {
-    try {
-       yield 42;
-    } catch(e) {
-      console.log("Erreur interceptée !");
-    }
-  }
-}
-
-var g = gen();
-g.next();
-// { value: 42, done: false }
-g.throw(new Error("Quelque chose s'est mal passé"));
-// "Erreur interceptée !"
-// { value: 42, done: false }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES2015', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Generator.throw")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/generator/throw/index.md b/files/fr/web/javascript/reference/global_objects/generator/throw/index.md new file mode 100644 index 0000000000..547c877869 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/generator/throw/index.md @@ -0,0 +1,98 @@ +--- +title: Generator.prototype.throw() +slug: Web/JavaScript/Reference/Global_Objects/Generator/throw +tags: + - ECMAScript 2015 + - Generator + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw +original_slug: Web/JavaScript/Reference/Objets_globaux/Generator/throw +--- +
{{JSRef}}
+ +

La méthode throw() lève une erreur dans un générateur.

+ +

Syntaxe

+ +
gen.throw(exception)
+ +

Paramètres

+ +
+
exception
+
L'exception à lever. On préfèrera généralement utiliser un objet qui est une instance d'{{jsxref("Error")}}.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Object")}} avec deux propriétés :

+ + + +

Exemples

+ +

Utiliser throw()

+ +

Dans l'exemple suivant, on utilise un générateur simple et on génère une exception grâce à la méthode throw(). Une exception peut être interceptée avec un bloc {{jsxref("Instructions/try...catch","try...catch")}} usuel.

+ +
function* gen() {
+  while(true) {
+    try {
+       yield 42;
+    } catch(e) {
+      console.log("Erreur interceptée !");
+    }
+  }
+}
+
+var g = gen();
+g.next();
+// { value: 42, done: false }
+g.throw(new Error("Quelque chose s'est mal passé"));
+// "Erreur interceptée !"
+// { value: 42, done: false }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES2015', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Generator.throw")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/generatorfunction/index.html b/files/fr/web/javascript/reference/global_objects/generatorfunction/index.html deleted file mode 100644 index 8f92be2961..0000000000 --- a/files/fr/web/javascript/reference/global_objects/generatorfunction/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: GeneratorFunction -slug: Web/JavaScript/Reference/Global_Objects/GeneratorFunction -tags: - - Constructor - - ECMAScript 2015 - - GeneratorFunction - - Iterator - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction -original_slug: Web/JavaScript/Reference/Objets_globaux/GeneratorFunction ---- -
{{JSRef}}
- -

Le constructeur GeneratorFunction permet de créer un nouvel objet qui est une {{jsxref("Instructions/function*", "fonction génératrice","",1)}}. En JavaScript, chaque générateur (ou fonction génératrice) est un objet GeneratorFunction.

- -

L'objet GeneratorFunction n'est pas un objet global. Il peut être obtenu en exécutant le code suivant :

- -
Object.getPrototypeOf(function*(){}).constructor
-
- -

Syntaxe

- -
new GeneratorFunction ([arg1[, arg2[, ...argN]],] corpsFonction)
- -

Paramètres

- -
-
arg1, arg2, ... argN
-
Les noms à utiliser pour les arguments formellement déclarés. Chacun doit être une chaîne de caractères correspondant à un identifiant JavaScript valide ou une liste de telles chaînes séparées par des virgules. Par exemple, on peut avoir "x", "maValeur", ou "a,b".
-
corpsFonction
-
Une chaîne qui contient les instructions JavaScript qui composent la définition de la fonction.
-
- -

Description

- -

Les {{jsxref("Instructions/function*", "fonctions génératrices","",1)}} créées avec le constructeur GeneratorFunction sont analysés lorsque la fonction est crée. Cela est moins efficace que de déclarer un générateur avec une expression {{jsxref("Statements/function*", "function*")}} puis de l'appeler car ces fonctions sont analysées avec le reste du code (ce qui permet au moteur JavaScript d'effectuer certaines optimisations).

- -

Tous les arguments passés à la fonction sont traités par la suite avec les noms des identifiants utilisés pour les noms des paramètres lors de la création de la fonction et avec cet ordre là.

- -
-

Note : Les {{jsxref("Instructions/function*", "générateurs","",1)}} créés avec le constructeur GeneratorFunction ne créent pas de fermetures avec leurs contextes de création. Ils sont toujours créés dans la portée globale. Lorsqu'ils sont exécutés, ils n'ont accès qu'à leurs variables locales et aux variables globales et ils n'ont pas accès aux variables de la portée où a eu lieu l'appel à GeneratorFunction. Ce comportement est différent de celui obtenu lorsqu'on appelle {{jsxref("Objets_globaux/eval", "eval")}} avec du code correspondant à une expression de générateur.

-
- -

L'appel du constructeur GeneratorFunction comme fonction (c'est-à-dire sans utiliser l'opérateur new) aura le même effet que si celui-ci est invoqué comme constructeur.

- -

Propriétés

- -
-
GeneratorFunction.length
-
La propriété de longueur du constructeur GeneratorFunction qui vaut 1.
-
{{jsxref("GeneratorFunction.prototype")}}
-
Le prototype du constructeur qui permet d'ajouter des propriétés à tous les générateurs.
-
- -

Le prototype de GeneratorFunction

- -

Propriétés

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/GeneratorFunction/prototype', 'Properties')}}
- -

Les instances de GeneratorFunction

- -

Les instances de GeneratorFunction héritent des méthodes et propriétés de {{jsxref("GeneratorFunction.prototype")}}. Comme pour tous les constructeurs, il est possible de modifier le prototype afin d'apporter des modifications à toutes les instances de GeneratorFunction.

- -

Exemples

- -

Créer un générateur en utilisant le constructeur GeneratorFunction

- -
var GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
-var g = new GeneratorFunction("a", "yield a * 2");
-var itérateur = g(10);
-console.log(itérateur.next().value); // 20
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES2015', '#sec-generatorfunction-objects', 'GeneratorFunction')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generatorfunction-objects', 'GeneratorFunction')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/generatorfunction/index.md b/files/fr/web/javascript/reference/global_objects/generatorfunction/index.md new file mode 100644 index 0000000000..8f92be2961 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/generatorfunction/index.md @@ -0,0 +1,112 @@ +--- +title: GeneratorFunction +slug: Web/JavaScript/Reference/Global_Objects/GeneratorFunction +tags: + - Constructor + - ECMAScript 2015 + - GeneratorFunction + - Iterator + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction +original_slug: Web/JavaScript/Reference/Objets_globaux/GeneratorFunction +--- +
{{JSRef}}
+ +

Le constructeur GeneratorFunction permet de créer un nouvel objet qui est une {{jsxref("Instructions/function*", "fonction génératrice","",1)}}. En JavaScript, chaque générateur (ou fonction génératrice) est un objet GeneratorFunction.

+ +

L'objet GeneratorFunction n'est pas un objet global. Il peut être obtenu en exécutant le code suivant :

+ +
Object.getPrototypeOf(function*(){}).constructor
+
+ +

Syntaxe

+ +
new GeneratorFunction ([arg1[, arg2[, ...argN]],] corpsFonction)
+ +

Paramètres

+ +
+
arg1, arg2, ... argN
+
Les noms à utiliser pour les arguments formellement déclarés. Chacun doit être une chaîne de caractères correspondant à un identifiant JavaScript valide ou une liste de telles chaînes séparées par des virgules. Par exemple, on peut avoir "x", "maValeur", ou "a,b".
+
corpsFonction
+
Une chaîne qui contient les instructions JavaScript qui composent la définition de la fonction.
+
+ +

Description

+ +

Les {{jsxref("Instructions/function*", "fonctions génératrices","",1)}} créées avec le constructeur GeneratorFunction sont analysés lorsque la fonction est crée. Cela est moins efficace que de déclarer un générateur avec une expression {{jsxref("Statements/function*", "function*")}} puis de l'appeler car ces fonctions sont analysées avec le reste du code (ce qui permet au moteur JavaScript d'effectuer certaines optimisations).

+ +

Tous les arguments passés à la fonction sont traités par la suite avec les noms des identifiants utilisés pour les noms des paramètres lors de la création de la fonction et avec cet ordre là.

+ +
+

Note : Les {{jsxref("Instructions/function*", "générateurs","",1)}} créés avec le constructeur GeneratorFunction ne créent pas de fermetures avec leurs contextes de création. Ils sont toujours créés dans la portée globale. Lorsqu'ils sont exécutés, ils n'ont accès qu'à leurs variables locales et aux variables globales et ils n'ont pas accès aux variables de la portée où a eu lieu l'appel à GeneratorFunction. Ce comportement est différent de celui obtenu lorsqu'on appelle {{jsxref("Objets_globaux/eval", "eval")}} avec du code correspondant à une expression de générateur.

+
+ +

L'appel du constructeur GeneratorFunction comme fonction (c'est-à-dire sans utiliser l'opérateur new) aura le même effet que si celui-ci est invoqué comme constructeur.

+ +

Propriétés

+ +
+
GeneratorFunction.length
+
La propriété de longueur du constructeur GeneratorFunction qui vaut 1.
+
{{jsxref("GeneratorFunction.prototype")}}
+
Le prototype du constructeur qui permet d'ajouter des propriétés à tous les générateurs.
+
+ +

Le prototype de GeneratorFunction

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/GeneratorFunction/prototype', 'Properties')}}
+ +

Les instances de GeneratorFunction

+ +

Les instances de GeneratorFunction héritent des méthodes et propriétés de {{jsxref("GeneratorFunction.prototype")}}. Comme pour tous les constructeurs, il est possible de modifier le prototype afin d'apporter des modifications à toutes les instances de GeneratorFunction.

+ +

Exemples

+ +

Créer un générateur en utilisant le constructeur GeneratorFunction

+ +
var GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
+var g = new GeneratorFunction("a", "yield a * 2");
+var itérateur = g(10);
+console.log(itérateur.next().value); // 20
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES2015', '#sec-generatorfunction-objects', 'GeneratorFunction')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generatorfunction-objects', 'GeneratorFunction')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/globalthis/index.html b/files/fr/web/javascript/reference/global_objects/globalthis/index.html deleted file mode 100644 index 428d089b96..0000000000 --- a/files/fr/web/javascript/reference/global_objects/globalthis/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: globalThis -slug: Web/JavaScript/Reference/Global_Objects/globalThis -tags: - - JavaScript - - Reference - - globalThis -translation_of: Web/JavaScript/Reference/Global_Objects/globalThis -original_slug: Web/JavaScript/Reference/Objets_globaux/globalThis ---- -
{{jsSidebar("Objects")}}
- -

La propriété globale globalThis renvoie l'objet global de plus haut niveau.

- -
{{EmbedInteractiveExample("pages/js/globalprops-globalthis.html")}}
- -

Syntaxe

- -
globalThis
-
- -

Description

- -

Par le passé, il était nécessaire d'utiliser différentes syntaxes pour différents environnements afin d'accéder à la portée globale. Sur le Web, on peut utiliser {{domxref("Window.window", "window")}}, {{domxref("Window.self", "self")}} ou {{domxref("Window.frames", "frames")}} ; pour les web workers, seul self peut être employé ; pour Node.js aucun de ces mots-clés ne fonctionne et il faut utiliser global.
- Le mot-clé this pouvait être utilisé à l'intérieur des fonctions en mode non-strict mais vaudra sinon undefined dans les modules et dans les fonctions utilisant le mode strict.

- -

La propriété globalThis fournit une méthode standard d'accès à l'objet this global, quel que soit l'environnement. Contrairement aux propriétés window et self, ce mot-clé fonctionnera quel que soit le contexte (que celui-ci soit doté de fenêtres ou non). Ainsi, on peut accéder à l'objet global de façon homogène, quel que soit l'environnement dans lequel le code est utilisé.

- -

Pour mieux mémoriser ce nom, on se rappellera que la valeur de this dans la portée globale est globalThis.

- -

Accès indirect à la variable globale dans un contexte web

- -

Dans la plupart des environnements, globalThis sera une référence directe à l'objet global. Cependant, dans les navigateurs web, avec les principes de sécurité relatifs aux iframes et aux liens entre les fenêtres, globalThis fournira un {{jsxref("Proxy")}} sur l'objet global (auquel on n'aura donc pas accès directement).

- -

Nommage

- -

D'autres noms furent proposés pour cette fonctionnalité (tels que self et global) mais ils furent écartés car ils pouvaient entraîner des problèmes de compatibilité avec du code existant. Pour plus de détails, voir le document de la proposition pour le nommage.

- -

Exemples

- -

Avant l'introduction de globalThis, la seule façon qui permettait d'obtenir l'objet global de l'environnement de façon homogène était Function('return this')(). Toutefois, cela enfreignait certaines règles CSP avec certains réglages et es6-shim, par exemple, devait utiliser une logique conditionnelle :

- -
var getGlobal = function () {
-  if (typeof self !== 'undefined') { return self; }
-  if (typeof window !== 'undefined') { return window; }
-  if (typeof global !== 'undefined') { return global; }
-  throw new Error("impossible de trouver l'objet global");
-};
-
-var globals = getGlobal();
-
-if (typeof globals.setTimeout !== 'function') {
-  // pas de setTimeout pour cet environnement
-}
-
- -

Avec globalThis, il n'est plus nécessaire de parcourir les différents mots-clés des différents environnements :

- -
if (typeof globalThis.setTimeout !== 'function') {
-  // pas de setTimeout pour cet environnement
-}
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour globalThisProposition de niveau 3 (stage 3)
- -

Compatibilité des navigateurs

- -

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

diff --git a/files/fr/web/javascript/reference/global_objects/globalthis/index.md b/files/fr/web/javascript/reference/global_objects/globalthis/index.md new file mode 100644 index 0000000000..428d089b96 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/globalthis/index.md @@ -0,0 +1,84 @@ +--- +title: globalThis +slug: Web/JavaScript/Reference/Global_Objects/globalThis +tags: + - JavaScript + - Reference + - globalThis +translation_of: Web/JavaScript/Reference/Global_Objects/globalThis +original_slug: Web/JavaScript/Reference/Objets_globaux/globalThis +--- +
{{jsSidebar("Objects")}}
+ +

La propriété globale globalThis renvoie l'objet global de plus haut niveau.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-globalthis.html")}}
+ +

Syntaxe

+ +
globalThis
+
+ +

Description

+ +

Par le passé, il était nécessaire d'utiliser différentes syntaxes pour différents environnements afin d'accéder à la portée globale. Sur le Web, on peut utiliser {{domxref("Window.window", "window")}}, {{domxref("Window.self", "self")}} ou {{domxref("Window.frames", "frames")}} ; pour les web workers, seul self peut être employé ; pour Node.js aucun de ces mots-clés ne fonctionne et il faut utiliser global.
+ Le mot-clé this pouvait être utilisé à l'intérieur des fonctions en mode non-strict mais vaudra sinon undefined dans les modules et dans les fonctions utilisant le mode strict.

+ +

La propriété globalThis fournit une méthode standard d'accès à l'objet this global, quel que soit l'environnement. Contrairement aux propriétés window et self, ce mot-clé fonctionnera quel que soit le contexte (que celui-ci soit doté de fenêtres ou non). Ainsi, on peut accéder à l'objet global de façon homogène, quel que soit l'environnement dans lequel le code est utilisé.

+ +

Pour mieux mémoriser ce nom, on se rappellera que la valeur de this dans la portée globale est globalThis.

+ +

Accès indirect à la variable globale dans un contexte web

+ +

Dans la plupart des environnements, globalThis sera une référence directe à l'objet global. Cependant, dans les navigateurs web, avec les principes de sécurité relatifs aux iframes et aux liens entre les fenêtres, globalThis fournira un {{jsxref("Proxy")}} sur l'objet global (auquel on n'aura donc pas accès directement).

+ +

Nommage

+ +

D'autres noms furent proposés pour cette fonctionnalité (tels que self et global) mais ils furent écartés car ils pouvaient entraîner des problèmes de compatibilité avec du code existant. Pour plus de détails, voir le document de la proposition pour le nommage.

+ +

Exemples

+ +

Avant l'introduction de globalThis, la seule façon qui permettait d'obtenir l'objet global de l'environnement de façon homogène était Function('return this')(). Toutefois, cela enfreignait certaines règles CSP avec certains réglages et es6-shim, par exemple, devait utiliser une logique conditionnelle :

+ +
var getGlobal = function () {
+  if (typeof self !== 'undefined') { return self; }
+  if (typeof window !== 'undefined') { return window; }
+  if (typeof global !== 'undefined') { return global; }
+  throw new Error("impossible de trouver l'objet global");
+};
+
+var globals = getGlobal();
+
+if (typeof globals.setTimeout !== 'function') {
+  // pas de setTimeout pour cet environnement
+}
+
+ +

Avec globalThis, il n'est plus nécessaire de parcourir les différents mots-clés des différents environnements :

+ +
if (typeof globalThis.setTimeout !== 'function') {
+  // pas de setTimeout pour cet environnement
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour globalThisProposition de niveau 3 (stage 3)
+ +

Compatibilité des navigateurs

+ +

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

diff --git a/files/fr/web/javascript/reference/global_objects/index.html b/files/fr/web/javascript/reference/global_objects/index.html deleted file mode 100644 index b8eb0beaa1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/index.html +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: Objets globaux -slug: Web/JavaScript/Reference/Global_Objects -tags: - - Aperçu - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects -original_slug: Web/JavaScript/Reference/Objets_globaux ---- -
{{jsSidebar("Objects")}}
- -

Cette partie référence tous les objets natifs standards JavaScript, avec leurs propriétés et méthodes.

- -

Le terme « objets globaux » (ou objets natifs standards) ne doit pas ici être confondu avec l'objet global. Ici, « objets globaux » se réfère aux objets de portée globale. L'objet global lui-même peut être accédé en utilisant {{jsxref("Opérateurs/L_opérateur_this", "this")}} dans la portée globale (uniquement lorsque le mode strict n'est pas utilisé, sinon, il renvoie {{jsxref("undefined")}}). En réalité, la portée globale consiste des propriétés de l'objet global (avec ses propriétés héritées, s'il en a).

- -
-

Note : En mode strict, la portée globale représentée par this sera {{jsxref("undefined")}}.

-
- -

Les autres objets de la portée globale sont créés par les scripts utilisateurs ou fournis par l'application hôte dans laquelle s'exécute JavaScript. Les objets mis à disposition par les navigateurs web sont documentés dans la référence API. Pour plus d'informations sur la distinction entre le DOM et JavaScript, voir l'aperçu des technologies JavaScript.

- -

Objets globaux standards (par catégorie)

- -

Propriétés - valeurs

- -

Les propriétés globales renvoient une valeur simple, elles ne possèdent aucune propriété ou méthode :

- - - -

Propriétés - fonctions

- -

Les fonctions globales, appelées globalement (et non par rapport à un objet), renvoient directement leur résultat à l'objet appelant.

- - - -

Objets fondamentaux

- -

Ces objets sont les objets fondamentaux de JavaScript. Parmi ces objets, on retrouve les objets génériques, les fonctions et les erreurs.

- - - -

Nombres et dates

- -

Ces objets permettent de manipuler les nombres, dates et calculs mathématiques.

- - - -

Manipulation de textes

- -

Ces objets permettent de manipuler des chaînes de caractères.

- - - -

Collections indexées

- -

Ces objets sont des collections ordonnées par un index. Cela inclut les tableaux (typés) et les objets semblables aux tableaux.

- - - -

Collections avec clefs

- -

Ces objets représentent des collections d'objets avec clefs. Ils contiennent des éléments itérables, dans leur ordre d'insertion.

- - - -

Données structurées

- -

Ces objets permettent de représenter et de manipuler des tampons de données (buffers) et des données utilisant la notation JSON (JavaScript Object Notation).

- - - -

Objets de contrôle d'abstraction

- - - -

Introspection

- - - -

Internationalisation

- -

Ces objets ont été ajoutés à ECMAScript pour des traitements dépendants de particularités linguistiques. Ils possèdent leur propre spécification.

- - - -

WebAssembly

- - - -

Autres

- - diff --git a/files/fr/web/javascript/reference/global_objects/index.md b/files/fr/web/javascript/reference/global_objects/index.md new file mode 100644 index 0000000000..b8eb0beaa1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/index.md @@ -0,0 +1,186 @@ +--- +title: Objets globaux +slug: Web/JavaScript/Reference/Global_Objects +tags: + - Aperçu + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects +original_slug: Web/JavaScript/Reference/Objets_globaux +--- +
{{jsSidebar("Objects")}}
+ +

Cette partie référence tous les objets natifs standards JavaScript, avec leurs propriétés et méthodes.

+ +

Le terme « objets globaux » (ou objets natifs standards) ne doit pas ici être confondu avec l'objet global. Ici, « objets globaux » se réfère aux objets de portée globale. L'objet global lui-même peut être accédé en utilisant {{jsxref("Opérateurs/L_opérateur_this", "this")}} dans la portée globale (uniquement lorsque le mode strict n'est pas utilisé, sinon, il renvoie {{jsxref("undefined")}}). En réalité, la portée globale consiste des propriétés de l'objet global (avec ses propriétés héritées, s'il en a).

+ +
+

Note : En mode strict, la portée globale représentée par this sera {{jsxref("undefined")}}.

+
+ +

Les autres objets de la portée globale sont créés par les scripts utilisateurs ou fournis par l'application hôte dans laquelle s'exécute JavaScript. Les objets mis à disposition par les navigateurs web sont documentés dans la référence API. Pour plus d'informations sur la distinction entre le DOM et JavaScript, voir l'aperçu des technologies JavaScript.

+ +

Objets globaux standards (par catégorie)

+ +

Propriétés - valeurs

+ +

Les propriétés globales renvoient une valeur simple, elles ne possèdent aucune propriété ou méthode :

+ + + +

Propriétés - fonctions

+ +

Les fonctions globales, appelées globalement (et non par rapport à un objet), renvoient directement leur résultat à l'objet appelant.

+ + + +

Objets fondamentaux

+ +

Ces objets sont les objets fondamentaux de JavaScript. Parmi ces objets, on retrouve les objets génériques, les fonctions et les erreurs.

+ + + +

Nombres et dates

+ +

Ces objets permettent de manipuler les nombres, dates et calculs mathématiques.

+ + + +

Manipulation de textes

+ +

Ces objets permettent de manipuler des chaînes de caractères.

+ + + +

Collections indexées

+ +

Ces objets sont des collections ordonnées par un index. Cela inclut les tableaux (typés) et les objets semblables aux tableaux.

+ + + +

Collections avec clefs

+ +

Ces objets représentent des collections d'objets avec clefs. Ils contiennent des éléments itérables, dans leur ordre d'insertion.

+ + + +

Données structurées

+ +

Ces objets permettent de représenter et de manipuler des tampons de données (buffers) et des données utilisant la notation JSON (JavaScript Object Notation).

+ + + +

Objets de contrôle d'abstraction

+ + + +

Introspection

+ + + +

Internationalisation

+ +

Ces objets ont été ajoutés à ECMAScript pour des traitements dépendants de particularités linguistiques. Ils possèdent leur propre spécification.

+ + + +

WebAssembly

+ + + +

Autres

+ + diff --git a/files/fr/web/javascript/reference/global_objects/infinity/index.html b/files/fr/web/javascript/reference/global_objects/infinity/index.html deleted file mode 100644 index 7188beb806..0000000000 --- a/files/fr/web/javascript/reference/global_objects/infinity/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Infinity -slug: Web/JavaScript/Reference/Global_Objects/Infinity -tags: - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Infinity -original_slug: Web/JavaScript/Reference/Objets_globaux/Infinity ---- -
{{jsSidebar("Objects")}}
- -

La propriété globale Infinity est une valeur numérique représentant l'infini.

- -

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

- -
{{EmbedInteractiveExample("pages/js/globalprops-infinity.html")}}
- -

Syntaxe

- -
Infinity
- -

Description

- -

Infinity est une propriété de l'objet global , c'est-à-dire qu'elle est accessible globalement.

- -

La valeur initiale d'Infinity est {{jsxref("Number.POSITIVE_INFINITY")}}. La valeur Infinity (infinité positive) est une valeur plus grande que n'importe quel nombre. Cette valeur se comporte comme l'infini mathématique ; par exemple, tout ce qui est multiplié par Infinity vaut Infinity, et tout ce qui est divisé par Infinity vaut 0.

- -

D'après la spécification ECMAScript 5, Infinity est en lecture seule.

- -

Exemples

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

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3
{{SpecName('ES5.1', '#sec-15.1.1.2', 'Infinity')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/infinity/index.md b/files/fr/web/javascript/reference/global_objects/infinity/index.md new file mode 100644 index 0000000000..7188beb806 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/infinity/index.md @@ -0,0 +1,80 @@ +--- +title: Infinity +slug: Web/JavaScript/Reference/Global_Objects/Infinity +tags: + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Infinity +original_slug: Web/JavaScript/Reference/Objets_globaux/Infinity +--- +
{{jsSidebar("Objects")}}
+ +

La propriété globale Infinity est une valeur numérique représentant l'infini.

+ +

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

+ +
{{EmbedInteractiveExample("pages/js/globalprops-infinity.html")}}
+ +

Syntaxe

+ +
Infinity
+ +

Description

+ +

Infinity est une propriété de l'objet global , c'est-à-dire qu'elle est accessible globalement.

+ +

La valeur initiale d'Infinity est {{jsxref("Number.POSITIVE_INFINITY")}}. La valeur Infinity (infinité positive) est une valeur plus grande que n'importe quel nombre. Cette valeur se comporte comme l'infini mathématique ; par exemple, tout ce qui est multiplié par Infinity vaut Infinity, et tout ce qui est divisé par Infinity vaut 0.

+ +

D'après la spécification ECMAScript 5, Infinity est en lecture seule.

+ +

Exemples

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3
{{SpecName('ES5.1', '#sec-15.1.1.2', 'Infinity')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/int16array/index.html b/files/fr/web/javascript/reference/global_objects/int16array/index.html deleted file mode 100644 index c23c5289a6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/int16array/index.html +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: Int16Array -slug: Web/JavaScript/Reference/Global_Objects/Int16Array -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/Int16Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Int16Array ---- -
{{JSRef}}
- -

Le tableau typé Int16Array permet de représenter un tableau d'entiers signés (en complément à deux) représentés sur 16 bits et dans l'ordre des octets de la plate-forme. Pour avoir un contrôle sur le boutisme utilisé, il faudra utiliser un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois le tableau construit, il est possible de faire référence aux éléments en utilisant les méthodes de l'objet ou en utilisant la notation usuelle de parcours d'un tableau (la syntaxe utilisant les crochets).

- -

Syntaxe

- -
new Int16Array(); // apparu avec ES2017
-new Int16Array(longueur);
-new Int16Array(tableauTypé);
-new Int16Array(objet);
-new Int16Array(buffer [, positionOctet [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur, voir la page sur les tableaux typés (TypedArray).

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int16Array.BYTES_PER_ELEMENT")}}
-
Renvoie un nombre représentant la taille d'un élément du tableau en termes d'octets. Dans le cas de Int16Array, la propriété vaudra 2.
-
Int16Array.length
-
Une propriété de longueur qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Int16Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Int16Array.name")}}
-
Renvoie la chaîne de caractère représentant le nom du constructeur. Dans le cas de Int16Array, la propriété vaudra "Int16Array".
-
{{jsxref("TypedArray.prototype", "Int16Array.prototype")}}
-
Prototype pour les objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "Int16Array.from()")}}
-
Crée un nouvel objet Int16Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "Int16Array.of()")}}
-
Crée un nouvel objet Int16Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}.
-
- -

Prototype de Int16Array

- -

Tous les objets Int16Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Int16Array.prototype.constructor
-
Renvoie la fonction qui a créé le prototype de l'instance. Par défaut, ce sera le constructeur natif Int16Array.
-
{{jsxref("TypedArray.prototype.buffer", "Int16Array.prototype.buffer")}} {{readonlyInline}}
-
Renvoie l'{{jsxref("ArrayBuffer")}} référencée par l'objet Int16Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Int16Array.prototype.byteLength")}} {{readonlyInline}}
-
Renvoie la longueur, exprimée en octets, de l'objet Int16Array depuis le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Int16Array.prototype.byteOffset")}} {{readonlyInline}}
-
Renvoie le décalage, exprimé en octets, entre l'objet Int16Array et le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Int16Array.prototype.length")}} {{readonlyInline}}
-
Renvoie le nombre d'éléments contenus dans l'objet Int16Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Int16Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Int16Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Int16Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Int16Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Int16Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Int16Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Int16Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Int16Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Int16Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Int16Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Int16Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Int16Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Int16Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Int16Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Int16Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Int16Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Int16Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Int16Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Int16Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Int16Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Int16Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Int16Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Int16Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Int16Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Int16Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Int16Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Int16Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Int16Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Int16Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un Int16Array :

- -
// Construction à partir d'une longueur
-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
-
-// Construction à partir d'un tableau
-var arr = new Int16Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un autre TypedArray
-var x = new Int16Array([21, 31]);
-var y = new Int16Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(8);
-var z = new Int16Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var int16 = new Int16Array(iterable);
-// Int16Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Int16Array afin d'utiliser l'opération interne ToIndex pour permettre de l'utiliser sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Int16Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Int16Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Int16Array([1, 2, 3]);
-// TypeError: calling a builtin Int16Array constructor
-// without new is forbidden
- -
var dv = new Int16Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/int16array/index.md b/files/fr/web/javascript/reference/global_objects/int16array/index.md new file mode 100644 index 0000000000..c23c5289a6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/int16array/index.md @@ -0,0 +1,204 @@ +--- +title: Int16Array +slug: Web/JavaScript/Reference/Global_Objects/Int16Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Int16Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Int16Array +--- +
{{JSRef}}
+ +

Le tableau typé Int16Array permet de représenter un tableau d'entiers signés (en complément à deux) représentés sur 16 bits et dans l'ordre des octets de la plate-forme. Pour avoir un contrôle sur le boutisme utilisé, il faudra utiliser un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois le tableau construit, il est possible de faire référence aux éléments en utilisant les méthodes de l'objet ou en utilisant la notation usuelle de parcours d'un tableau (la syntaxe utilisant les crochets).

+ +

Syntaxe

+ +
new Int16Array(); // apparu avec ES2017
+new Int16Array(longueur);
+new Int16Array(tableauTypé);
+new Int16Array(objet);
+new Int16Array(buffer [, positionOctet [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur, voir la page sur les tableaux typés (TypedArray).

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int16Array.BYTES_PER_ELEMENT")}}
+
Renvoie un nombre représentant la taille d'un élément du tableau en termes d'octets. Dans le cas de Int16Array, la propriété vaudra 2.
+
Int16Array.length
+
Une propriété de longueur qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Int16Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Int16Array.name")}}
+
Renvoie la chaîne de caractère représentant le nom du constructeur. Dans le cas de Int16Array, la propriété vaudra "Int16Array".
+
{{jsxref("TypedArray.prototype", "Int16Array.prototype")}}
+
Prototype pour les objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "Int16Array.from()")}}
+
Crée un nouvel objet Int16Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "Int16Array.of()")}}
+
Crée un nouvel objet Int16Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}.
+
+ +

Prototype de Int16Array

+ +

Tous les objets Int16Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Int16Array.prototype.constructor
+
Renvoie la fonction qui a créé le prototype de l'instance. Par défaut, ce sera le constructeur natif Int16Array.
+
{{jsxref("TypedArray.prototype.buffer", "Int16Array.prototype.buffer")}} {{readonlyInline}}
+
Renvoie l'{{jsxref("ArrayBuffer")}} référencée par l'objet Int16Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Int16Array.prototype.byteLength")}} {{readonlyInline}}
+
Renvoie la longueur, exprimée en octets, de l'objet Int16Array depuis le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Int16Array.prototype.byteOffset")}} {{readonlyInline}}
+
Renvoie le décalage, exprimé en octets, entre l'objet Int16Array et le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Int16Array.prototype.length")}} {{readonlyInline}}
+
Renvoie le nombre d'éléments contenus dans l'objet Int16Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Int16Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Int16Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Int16Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Int16Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Int16Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Int16Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Int16Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Int16Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Int16Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Int16Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Int16Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Int16Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Int16Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Int16Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Int16Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Int16Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Int16Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Int16Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Int16Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Int16Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Int16Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Int16Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Int16Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Int16Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Int16Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Int16Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Int16Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Int16Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Int16Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un Int16Array :

+ +
// Construction à partir d'une longueur
+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
+
+// Construction à partir d'un tableau
+var arr = new Int16Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un autre TypedArray
+var x = new Int16Array([21, 31]);
+var y = new Int16Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Int16Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var int16 = new Int16Array(iterable);
+// Int16Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Int16Array afin d'utiliser l'opération interne ToIndex pour permettre de l'utiliser sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Int16Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Int16Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Int16Array([1, 2, 3]);
+// TypeError: calling a builtin Int16Array constructor
+// without new is forbidden
+ +
var dv = new Int16Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/int32array/index.html b/files/fr/web/javascript/reference/global_objects/int32array/index.html deleted file mode 100644 index b2eac551a2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/int32array/index.html +++ /dev/null @@ -1,204 +0,0 @@ ---- -title: Int32Array -slug: Web/JavaScript/Reference/Global_Objects/Int32Array -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/Int32Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Int32Array ---- -
{{JSRef}}
- -

Le tableau typé Int32Array permet de représenter un tableau d'entiers signés (en complément à deux) représentés sur 32 bits et dans l'ordre des octets de la plate-forme. Pour avoir un contrôle sur le boutisme utilisé, il faudra utiliser un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois le tableau construit, il est possible de faire référence aux éléments en utilisant les méthodes de l'objet ou en utilisant la notation usuelle de parcours d'un tableau (la syntaxe utilisant les crochets).

- -

Syntaxe

- -
new Int32Array(); // apparu avec ES2017
-new Int32Array(longueur);
-new Int32Array(tableauTypé);
-new Int32Array(objet);
-new Int32Array(buffer [, positionOctet [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur, voir la page sur les tableaux typés (TypedArray).

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int32Array.BYTES_PER_ELEMENT")}}
-
Renvoie un nombre représentant la taille d'un élément du tableau en termes d'octets. Dans le cas de Int32Array, la propriété vaudra 4.
-
Int32Array.length
-
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'éléments, voir {{jsxref("TypedArray.prototype.length", "Int32Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Int32Array.name")}}
-
Renvoie la chaîne de caractère représentant le nom du constructeur. Dans le cas de Int32Array, la propriété vaudra "Int32Array".
-
{{jsxref("TypedArray.prototype", "Int32Array.prototype")}}
-
Prototype pour les objets TypedArray.
-
- -

Méthodes

- -
-
Int32Array.from()
-
Crée un nouvel objet Int32Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
-
Int32Array.of()
-
Crée un nouvel objet Int32Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}
-
- -

Prototype de Int32Array

- -

Tous les objets Int32Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Int32Array.prototype.constructor
-
Renvoie la fonction qui a créé le prototype de l'instance. Par défaut, ce sera le constructeur natif Int32Array.
-
{{jsxref("TypedArray.prototype.buffer", "Int32Array.prototype.buffer")}} {{readonlyInline}}
-
Renvoie l'{{jsxref("ArrayBuffer")}} référencée par l'objet Int32Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Int32Array.prototype.byteLength")}} {{readonlyInline}}
-
Renvoie la longueur, exprimée en octets, de l'objet Int32Array depuis le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Int32Array.prototype.byteOffset")}} {{readonlyInline}}
-
Renvoie le décalage, exprimé en octets, entre l'objet Int32Array et le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Int32Array.prototype.length")}} {{readonlyInline}}
-
Renvoie le nombre d'éléments contenus dans l'objet Int32Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Int32Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Int32Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Int32Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Int32Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Int32Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Int32Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Int32Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Int32Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Int32Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Int32Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Int32Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Int32Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Int32Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Int32Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Int32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Int32Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Int32Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Int32Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Int32Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Int32Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Int32Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Int32Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Int32Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Int32Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Int32Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Int32Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Int32Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Int32Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Int32Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet Int32Array :

- -
// Construction à partir d'une longueur
-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
-
-// Construction à partir d'un tableau
-var arr = new Int32Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un autre TypedArray
-var x = new Int32Array([21, 31]);
-var y = new Int32Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(16);
-var z = new Int32Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var int32 = new Int32Array(iterable);
-// Int32Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin de pouvoir utiliser l'opération interne ToIndex et permettre de l'utiliser sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Int32Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Int32Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Int32Array([1, 2, 3]);
-// TypeError: calling a builtin Int32Array constructor
-// without new is forbidden
- -
var dv = new Int32Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/int32array/index.md b/files/fr/web/javascript/reference/global_objects/int32array/index.md new file mode 100644 index 0000000000..b2eac551a2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/int32array/index.md @@ -0,0 +1,204 @@ +--- +title: Int32Array +slug: Web/JavaScript/Reference/Global_Objects/Int32Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/Int32Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Int32Array +--- +
{{JSRef}}
+ +

Le tableau typé Int32Array permet de représenter un tableau d'entiers signés (en complément à deux) représentés sur 32 bits et dans l'ordre des octets de la plate-forme. Pour avoir un contrôle sur le boutisme utilisé, il faudra utiliser un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois le tableau construit, il est possible de faire référence aux éléments en utilisant les méthodes de l'objet ou en utilisant la notation usuelle de parcours d'un tableau (la syntaxe utilisant les crochets).

+ +

Syntaxe

+ +
new Int32Array(); // apparu avec ES2017
+new Int32Array(longueur);
+new Int32Array(tableauTypé);
+new Int32Array(objet);
+new Int32Array(buffer [, positionOctet [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur, voir la page sur les tableaux typés (TypedArray).

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int32Array.BYTES_PER_ELEMENT")}}
+
Renvoie un nombre représentant la taille d'un élément du tableau en termes d'octets. Dans le cas de Int32Array, la propriété vaudra 4.
+
Int32Array.length
+
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'éléments, voir {{jsxref("TypedArray.prototype.length", "Int32Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Int32Array.name")}}
+
Renvoie la chaîne de caractère représentant le nom du constructeur. Dans le cas de Int32Array, la propriété vaudra "Int32Array".
+
{{jsxref("TypedArray.prototype", "Int32Array.prototype")}}
+
Prototype pour les objets TypedArray.
+
+ +

Méthodes

+ +
+
Int32Array.from()
+
Crée un nouvel objet Int32Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
+
Int32Array.of()
+
Crée un nouvel objet Int32Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}
+
+ +

Prototype de Int32Array

+ +

Tous les objets Int32Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Int32Array.prototype.constructor
+
Renvoie la fonction qui a créé le prototype de l'instance. Par défaut, ce sera le constructeur natif Int32Array.
+
{{jsxref("TypedArray.prototype.buffer", "Int32Array.prototype.buffer")}} {{readonlyInline}}
+
Renvoie l'{{jsxref("ArrayBuffer")}} référencée par l'objet Int32Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Int32Array.prototype.byteLength")}} {{readonlyInline}}
+
Renvoie la longueur, exprimée en octets, de l'objet Int32Array depuis le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Int32Array.prototype.byteOffset")}} {{readonlyInline}}
+
Renvoie le décalage, exprimé en octets, entre l'objet Int32Array et le début de l'{{jsxref("ArrayBuffer")}} correspondant. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Int32Array.prototype.length")}} {{readonlyInline}}
+
Renvoie le nombre d'éléments contenus dans l'objet Int32Array. Cette propriété est déterminée lors de la construction de l'objet et n'est accessible qu'en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Int32Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Int32Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Int32Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Int32Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Int32Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Int32Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Int32Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Int32Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Int32Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Int32Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Int32Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Int32Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Int32Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Int32Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Int32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Int32Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Int32Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Int32Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Int32Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Int32Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Int32Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Int32Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Int32Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Int32Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Int32Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Int32Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Int32Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Int32Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Int32Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet Int32Array :

+ +
// Construction à partir d'une longueur
+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
+
+// Construction à partir d'un tableau
+var arr = new Int32Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un autre TypedArray
+var x = new Int32Array([21, 31]);
+var y = new Int32Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Int32Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var int32 = new Int32Array(iterable);
+// Int32Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin de pouvoir utiliser l'opération interne ToIndex et permettre de l'utiliser sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Int32Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Int32Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Int32Array([1, 2, 3]);
+// TypeError: calling a builtin Int32Array constructor
+// without new is forbidden
+ +
var dv = new Int32Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/int8array/index.html b/files/fr/web/javascript/reference/global_objects/int8array/index.html deleted file mode 100644 index b15a6f7ffd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/int8array/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Int8Array -slug: Web/JavaScript/Reference/Global_Objects/Int8Array -tags: - - Constructor - - Int8Array - - JavaScript - - Reference - - TypedArray - - TypedArrrays -translation_of: Web/JavaScript/Reference/Global_Objects/Int8Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Int8Array ---- -
{{JSRef}}
- -

Le tableau typé Int8Array permet de représenter un tableau d'entiers signés (en complément à deux) représentés sur 8 bits. Les éléments du tableau sont initialisés à 0. Une fois le tableau construit, il est possible de faire référence aux éléments en utilisant les méthodes de l'objet ou en utilisant la notation usuelle de parcours d'un tableau (la syntaxe utilisant les crochets).

- -

Syntaxe

- -
new Int8Array(); // apparu avec ES2017
-new Int8Array(length);
-new Int8Array(typedArray);
-new Int8Array(object);
-new Int8Array(buffer [, byteOffset [, length]]);
- -

Pour plus d'informations sur la syntaxe du constructeur, voir la page sur les tableaux typés (TypedArray).

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int8Array.BYTES_PER_ELEMENT")}}
-
Renvoie un nombre représentant la taille d'un élément du tableau en termes d'octets. Dans le cas de Int8Array, la propriété vaudra 1.
-
Int8Array.length
-
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Int8Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Int8Array.name")}}
-
Renvoie la chaîne de caractère représentant le nom du constructeur. Dans le cas de Int8Array, la propriété vaudra "Int8Array".
-
{{jsxref("TypedArray.prototype", "Int8Array.prototype")}}
-
Prototype pour les objets TypedArray.
-
- -

Méthodes

- -
-
Int8Array.from()
-
Crée un nouvel objet Int8Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
-
Int8Array.of()
-
Crée un nouvel objet Int8Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}.
-
- -

Prototype de Int8Array

- -

Tous les objets Int8Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Int8Array.prototype.constructor
-
Renvoie la fonction qui a créé l'instance. Par défaut, c'est le constructeur Int8Array.
-
{{jsxref("TypedArray.prototype.buffer", "Int8Array.prototype.buffer")}} {{readonlyInline}}
-
Renvoie l'objet {{jsxref("ArrayBuffer")}} auquel fait référence le tableau Int8Array. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
-
{{jsxref("TypedArray.prototype.byteLength", "Int8Array.prototype.byteLength")}} {{readonlyInline}}
-
Renvoie la longueur (exprimée en octet) du tableau Int8Array depuis le début du tampon {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
-
{{jsxref("TypedArray.prototype.byteOffset", "Int8Array.prototype.byteOffset")}} {{readonlyInline}}
-
Renvoie le décalage (exprimé en octets) du tableau Int8Array par rapport au début du tampon {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
-
{{jsxref("TypedArray.prototype.length", "Int8Array.prototype.length")}} {{readonlyInline}}
-
Renvoie le nombre d'éléments contenus dans le tableau Int8Array. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Int8Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Int8Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Int8Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Int8Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Int8Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Int8Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Int8Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Int8Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Int8Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Int8Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Int8Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Int8Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Int8Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Int8Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Int8Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Int8Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Int8Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Int8Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Int8Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Int8Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Int8Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Int8Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Int8Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Int8Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Int8Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Int8Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Int8Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Int8Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Int8Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet Int8Array :

- -
// Construction à partir d'une longueur
-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
-
-// Construction à partir d'un tableau
-var arr = new Int8Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un autre TypedArray
-var x = new Int8Array([21, 31]);
-var y = new Int8Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(8);
-var z = new Int8Array(buffer, 1, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var int8 = new Int8Array(iterable);
-// Int8Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin d'utiliser l'opération interne ToIndex et permettre de l'utiliser sans constructeur.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Int8Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Int8Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Int8Array([1, 2, 3]);
-// TypeError: calling a builtin Int8Array constructor
-// without new is forbidden
- -
var dv = new Int8Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/int8array/index.md b/files/fr/web/javascript/reference/global_objects/int8array/index.md new file mode 100644 index 0000000000..b15a6f7ffd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/int8array/index.md @@ -0,0 +1,205 @@ +--- +title: Int8Array +slug: Web/JavaScript/Reference/Global_Objects/Int8Array +tags: + - Constructor + - Int8Array + - JavaScript + - Reference + - TypedArray + - TypedArrrays +translation_of: Web/JavaScript/Reference/Global_Objects/Int8Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Int8Array +--- +
{{JSRef}}
+ +

Le tableau typé Int8Array permet de représenter un tableau d'entiers signés (en complément à deux) représentés sur 8 bits. Les éléments du tableau sont initialisés à 0. Une fois le tableau construit, il est possible de faire référence aux éléments en utilisant les méthodes de l'objet ou en utilisant la notation usuelle de parcours d'un tableau (la syntaxe utilisant les crochets).

+ +

Syntaxe

+ +
new Int8Array(); // apparu avec ES2017
+new Int8Array(length);
+new Int8Array(typedArray);
+new Int8Array(object);
+new Int8Array(buffer [, byteOffset [, length]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur, voir la page sur les tableaux typés (TypedArray).

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int8Array.BYTES_PER_ELEMENT")}}
+
Renvoie un nombre représentant la taille d'un élément du tableau en termes d'octets. Dans le cas de Int8Array, la propriété vaudra 1.
+
Int8Array.length
+
Une propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Int8Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Int8Array.name")}}
+
Renvoie la chaîne de caractère représentant le nom du constructeur. Dans le cas de Int8Array, la propriété vaudra "Int8Array".
+
{{jsxref("TypedArray.prototype", "Int8Array.prototype")}}
+
Prototype pour les objets TypedArray.
+
+ +

Méthodes

+ +
+
Int8Array.from()
+
Crée un nouvel objet Int8Array à partir d'un objet semblable à un tableau ou d'un objet itérable. Voir également la page {{jsxref("Array.from()")}}.
+
Int8Array.of()
+
Crée un nouvel objet Int8Array à partir d'un nombre variable d'arguments. Voir également la page {{jsxref("Array.of()")}}.
+
+ +

Prototype de Int8Array

+ +

Tous les objets Int8Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Int8Array.prototype.constructor
+
Renvoie la fonction qui a créé l'instance. Par défaut, c'est le constructeur Int8Array.
+
{{jsxref("TypedArray.prototype.buffer", "Int8Array.prototype.buffer")}} {{readonlyInline}}
+
Renvoie l'objet {{jsxref("ArrayBuffer")}} auquel fait référence le tableau Int8Array. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
+
{{jsxref("TypedArray.prototype.byteLength", "Int8Array.prototype.byteLength")}} {{readonlyInline}}
+
Renvoie la longueur (exprimée en octet) du tableau Int8Array depuis le début du tampon {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
+
{{jsxref("TypedArray.prototype.byteOffset", "Int8Array.prototype.byteOffset")}} {{readonlyInline}}
+
Renvoie le décalage (exprimé en octets) du tableau Int8Array par rapport au début du tampon {{jsxref("ArrayBuffer")}}. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
+
{{jsxref("TypedArray.prototype.length", "Int8Array.prototype.length")}} {{readonlyInline}}
+
Renvoie le nombre d'éléments contenus dans le tableau Int8Array. Cette valeur est fixée lors de la construction et est uniquement disponible en lecture.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Int8Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Int8Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Int8Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Int8Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Int8Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Int8Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Int8Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Int8Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Int8Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Int8Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Int8Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Int8Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Int8Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Int8Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Int8Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Int8Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Int8Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Int8Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Int8Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Int8Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Int8Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Int8Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Int8Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Int8Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Int8Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Int8Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Int8Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Int8Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Int8Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet Int8Array :

+ +
// Construction à partir d'une longueur
+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
+
+// Construction à partir d'un tableau
+var arr = new Int8Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un autre TypedArray
+var x = new Int8Array([21, 31]);
+var y = new Int8Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Int8Array(buffer, 1, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var int8 = new Int8Array(iterable);
+// Int8Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée dans ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur afin d'utiliser l'opération interne ToIndex et permettre de l'utiliser sans constructeur.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Int8Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Int8Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Int8Array([1, 2, 3]);
+// TypeError: calling a builtin Int8Array constructor
+// without new is forbidden
+ +
var dv = new Int8Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/internalerror/index.html b/files/fr/web/javascript/reference/global_objects/internalerror/index.html deleted file mode 100644 index 02a1e3afdd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/internalerror/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: InternalError -slug: Web/JavaScript/Reference/Global_Objects/InternalError -tags: - - Error - - InternalError - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/InternalError -original_slug: Web/JavaScript/Reference/Objets_globaux/InternalError ---- -
{{JSRef}} {{non-standard_header}}
- -

L'objet InternalError indique qu'une erreur liée au moteur JavaScript s'est produite. Par exemple "InternalError : Niveau de récursion trop important".

- -

Syntaxe

- -
new InternalError([message[, fileName[, lineNumber]]])
- -

Paramètres

- -
-
message
-
Paramètre optionnel. Une description de l'erreur compréhensible pour un être humain.
-
fileName {{Non-standard_inline}}
-
Paramètre optionnel. Le nom du fichier contenant le code à l'origine de l'erreur.
-
lineNumber {{Non-standard_inline}}
-
Paramètre optionnel. Le numéro de la ligne du code à l'origine de l'erreur.
-
- -

Description

- -

Une exception InternalError est levée à chaque fois qu'il se produit une erreur interne au moteur JavaScript.

- -

Le plus souvent, cette exception se produit lorsque quelque chose atteint un niveau trop élévé. Par exemple :

- - - -

Propriétés

- -
-
{{jsxref("InternalError.prototype")}}
-
Permet l'ajout de nouvelles propriétés à un objet InternalError.
-
- -

Méthodes

- -

L'objet global InternalError ne contient pas de méthode propre. En revanche, il hérite de certaines méthodes via sa chaîne de prototypes.

- -

Instances de InternalError

- -

Propriétés

- -
{{page("/fr/docs/JavaScript/Reference/Objets_globaux/InternalError/prototype","Properties")}}
- -

Méthodes

- -
{{page("/fr/docs/JavaScript/Reference/Objets_globaux/InternalError/prototype","Methods")}}
- -

Spécifications

- -

Cet objet ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/internalerror/index.md b/files/fr/web/javascript/reference/global_objects/internalerror/index.md new file mode 100644 index 0000000000..02a1e3afdd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/internalerror/index.md @@ -0,0 +1,78 @@ +--- +title: InternalError +slug: Web/JavaScript/Reference/Global_Objects/InternalError +tags: + - Error + - InternalError + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/InternalError +original_slug: Web/JavaScript/Reference/Objets_globaux/InternalError +--- +
{{JSRef}} {{non-standard_header}}
+ +

L'objet InternalError indique qu'une erreur liée au moteur JavaScript s'est produite. Par exemple "InternalError : Niveau de récursion trop important".

+ +

Syntaxe

+ +
new InternalError([message[, fileName[, lineNumber]]])
+ +

Paramètres

+ +
+
message
+
Paramètre optionnel. Une description de l'erreur compréhensible pour un être humain.
+
fileName {{Non-standard_inline}}
+
Paramètre optionnel. Le nom du fichier contenant le code à l'origine de l'erreur.
+
lineNumber {{Non-standard_inline}}
+
Paramètre optionnel. Le numéro de la ligne du code à l'origine de l'erreur.
+
+ +

Description

+ +

Une exception InternalError est levée à chaque fois qu'il se produit une erreur interne au moteur JavaScript.

+ +

Le plus souvent, cette exception se produit lorsque quelque chose atteint un niveau trop élévé. Par exemple :

+ + + +

Propriétés

+ +
+
{{jsxref("InternalError.prototype")}}
+
Permet l'ajout de nouvelles propriétés à un objet InternalError.
+
+ +

Méthodes

+ +

L'objet global InternalError ne contient pas de méthode propre. En revanche, il hérite de certaines méthodes via sa chaîne de prototypes.

+ +

Instances de InternalError

+ +

Propriétés

+ +
{{page("/fr/docs/JavaScript/Reference/Objets_globaux/InternalError/prototype","Properties")}}
+ +

Méthodes

+ +
{{page("/fr/docs/JavaScript/Reference/Objets_globaux/InternalError/prototype","Methods")}}
+ +

Spécifications

+ +

Cet objet ne fait partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.html b/files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.html deleted file mode 100644 index 90931a110d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Intl.Collator.prototype.compare -slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare -tags: - - Collator - - Internationalisation - - Intl - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator/compare ---- -
{{JSRef}}
- -

La méthode Intl.Collator.prototype.compare() compare deux chaînes de caractères en tenant compte des options spécifiées pour la locale et l'ordre de tri dans l'objet {{jsxref("Collator")}}.

- -
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-compare.html")}}
- -

Syntaxe

- -
collator.compare(chaine1, chaine2)
- -

Paramètres

- -
-
chaine1, chaine2
-
Les chaînes de caractères à comparer.
-
- -

Description

- -

L'accesseur compare renvoie un nombre qui indique le résultat de la comparaison entre chaine1 et chaine2 selon l'ordre de tri de l'objet {{jsxref("Collator")}} : la valeur obtenue sera négative si chaine1 précède chaine2, positive si chaine1 succède à chaine2, nulle si les deux chaînes sont considérées égales.

- -

Exemples

- -

Utiliser compare() pour trier un tableau

- -

Dans cet exemple, on utilise la fonction de l'accesseur compare pour trier des tableaux. On observe que la fonction est liée à l'objet Collator, on peut donc directement la passer à la méthode {{jsxref("Array.prototype.sort()")}}.

- -
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"
- -

Utiliser compare() pour chercher dans un tableau

- -

Ici, on utilise la fonction de l'accesseur compare pour trouver les chaînes égales à une chaîne donnée parmi un tableau :

- -
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"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES Int 1.0', '#sec-10.3.2', 'Intl.Collator.prototype.compare')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.3.2', 'Intl.Collator.prototype.compare')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.Collator.prototype.compare', 'Intl.Collator.prototype.compare')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Collator.compare")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.md b/files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.md new file mode 100644 index 0000000000..90931a110d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/collator/compare/index.md @@ -0,0 +1,98 @@ +--- +title: Intl.Collator.prototype.compare +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare +tags: + - Collator + - Internationalisation + - Intl + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator/compare +--- +
{{JSRef}}
+ +

La méthode Intl.Collator.prototype.compare() compare deux chaînes de caractères en tenant compte des options spécifiées pour la locale et l'ordre de tri dans l'objet {{jsxref("Collator")}}.

+ +
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-compare.html")}}
+ +

Syntaxe

+ +
collator.compare(chaine1, chaine2)
+ +

Paramètres

+ +
+
chaine1, chaine2
+
Les chaînes de caractères à comparer.
+
+ +

Description

+ +

L'accesseur compare renvoie un nombre qui indique le résultat de la comparaison entre chaine1 et chaine2 selon l'ordre de tri de l'objet {{jsxref("Collator")}} : la valeur obtenue sera négative si chaine1 précède chaine2, positive si chaine1 succède à chaine2, nulle si les deux chaînes sont considérées égales.

+ +

Exemples

+ +

Utiliser compare() pour trier un tableau

+ +

Dans cet exemple, on utilise la fonction de l'accesseur compare pour trier des tableaux. On observe que la fonction est liée à l'objet Collator, on peut donc directement la passer à la méthode {{jsxref("Array.prototype.sort()")}}.

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

Utiliser compare() pour chercher dans un tableau

+ +

Ici, on utilise la fonction de l'accesseur compare pour trouver les chaînes égales à une chaîne donnée parmi un tableau :

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES Int 1.0', '#sec-10.3.2', 'Intl.Collator.prototype.compare')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.3.2', 'Intl.Collator.prototype.compare')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.Collator.prototype.compare', 'Intl.Collator.prototype.compare')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Collator.compare")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/index.html b/files/fr/web/javascript/reference/global_objects/intl/collator/index.html deleted file mode 100644 index 32b32ac4ef..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/collator/index.html +++ /dev/null @@ -1,175 +0,0 @@ ---- -title: Intl.Collator -slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator -tags: - - Collator - - Constructeur - - Internationalisation - - Intl - - JavaScript - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator ---- -
{{JSRef}}
- -

L'objet Intl.Collator est un constructeur de « collecteurs », des objets permettant de comparer des chaînes de caractères en tenant compte de la locale.

- -
{{EmbedInteractiveExample("pages/js/intl-collator.html")}}
- -

Syntaxe

- -
new Intl.Collator([locales [, options]])
- -

Paramètres

- -
-
locales
-
-

Une chaîne de caractères avec une balise de langue BCP 47 ou un tableau qui contient des chaînes dans ce format. Pour plus d'informations sur le format et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}}. Pour ce constructeur, les clés d'extensions Unicode suivantes sont acceptées :

- -
-
co
-
Les variantes dans les méthodes de regroupement (« collation ») des chaînes de caractères. Les valeurs autorisées pour cette clé sont : "big5han", "dict", "direct", "ducet", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan". Les valeurs "standard" et "search" sont ignorées. Elles sont remplacées par la propriété usage de l'argument options (voir ci-après).
-
kn
-
Indique si on ordonne les nombres (par exemple : "1" < "2" < "10"). Les valeurs possibles sont "true" et "false". Cette option est également disponible via une propriété de l'objet options. Si l'extension Unicode et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
-
kf
-
Indique si on ordonne les majuscules avant les minuscules ou l'inverse. Les valeurs possibles sont "upper", "lower", ou "false" (on utilise alors l'ordre par défaut de la locale). Cette option est également disponible via une propriété de l'objet options. Si l'extension Unicode et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
-
-
-
options
-
-

Un objet qui disposent des propriétés suivantes :

- -
-
localeMatcher
-
L'algorithme de correspondance à utiliser pour les locales. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Voir la {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}} pour plus d'informations à ce sujet.
-
usage
-
Indique l'usage de le comparaison : le tri ou la recherche de chaînes correspondantes. Les valeurs possibles sont "sort" pour le tri et "search" pour la recherche. La valeur par défaut est "sort".
-
sensitivity
-
Indique les différences entre les chaînes de caractères qui font qu'une chaîne est considérée différente d'une autre. Les valeurs possibles sont : -
    -
  • "base" : Seules les chaînes dont les lettres de base sont différentes sont considérées inégales. Par exemple : a ≠ b, a = á, a = A.
  • -
  • "accent" : Seules les chaînes de caractères dont les lettres de bases ou les accents ou les autres marques diacritiques diffèrent sont considérées inégales. Par exemple : a ≠ b, a ≠ á, a = A.
  • -
  • "case" : Seules les chaines dont les lettres de base ou la casse sont diffèrent sont considérées comme inégales. Par exemple : a ≠ b, a = á, a ≠ A.
  • -
  • "variant" : Les chaînes qui diffèrent par leurs caractères de base, leurs accents et autres marques diacritiques, la casse sont considérées comme inégales. D'autres différences peuvent également être prises en compte. Par exemple : a ≠ b, a ≠ á, a ≠ A.
  • -
- -

La valeur par défaut est "variant" si on utilise la comparaison pour du tri (usage="sort"). Pour l'utilisation "search" (recherche), la valeur par défaut dépend de la locale.

-
-
ignorePunctuation
-
Indique si la ponctuation doit être ignorée. Les valeurs possibles sont true et false. La valeur par défaut est false.
-
numeric
-
Indique si on ordonne les nombres (par exemple : "1" < "2" < "10"). Les valeurs possibles sont true et false. La valeur par défaut est false. Si l'extension Unicode correspondante et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
-
caseFirst
-
Indique si on ordonne les majuscules avant les minuscules ou l'inverse. Les valeurs possibles sont "upper", "lower", ou "false" (on utilise alors l'ordre par défaut de la locale), la valeur par défaut est "false". Si l'extension Unicode correspondante et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
-
-
-
- -

Description

- -

L'objet Intl.Collator possède les propriétés et méthodes suivantes :

- -

Propriétés

- -
-
{{jsxref("Collator.prototype", "Intl.Collator.prototype")}}
-
Permet d'ajouter des propriétés à toutes les instances.
-
- -

Méthodes

- -
-
{{jsxref("Collator.supportedLocalesOf", "Intl.Collator.supportedLocalesOf()")}}
-
Renvoie un tableau qui contient les locales supportées pour lesquelles il n'est pas nécessaire de revenir à la locale par défaut de l'environnement.
-
- -

Instances de Collator

- -

Propriétés

- -

Les instances de Collator héritent des propriétés suivantes grâce à leur prototype :

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Collator/prototype','Propriétés')}}
- -

Méthodes

- -
-

Les instances de Collator héritent des méthodes suivantes grâce à leur prototype :

-{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Collator/prototype','Méthodes')}}
- -

Exemples

- -

Utiliser Collator

- -

L'exemple qui suit illustre les différents résultats qu'on peut obtenir :

- -
console.log(new Intl.Collator().compare('a', 'c')); // → une valeur négative
-console.log(new Intl.Collator().compare('c', 'a')); // → une valeur positive
-console.log(new Intl.Collator().compare('a', 'a')); // → 0
-
- -

Les résultats indiqués sont génériques et en pratique peuvent varier entre les navigateurs et les versions des navigateurs. En effet les valeurs obtenues dépendent de l'implémentation. Les spécifications indiquent uniquement le signe (positif ou négatif) du résultat.

- -

Utiliser locales

- -

Les résultats fournis par {{jsxref("Collator.prototype.compare()")}} varient selon les locales. Afin d'obtenir le bon ordre lexicographique dans votre application, il est nécessaire de spécifier la locale de l'utilisateur (et éventuellement des locales pour des cas de replis) en utilisant l'argument locales :

- -
// en allemand, 'ä' est équivalent à 'a' pour le tri
-console.log(new Intl.Collator("de").compare("ä", "z"));
-// → une valeur négative
-
-// en suédois, 'ä' arrive après 'z'
-console.log(new Intl.Collator("sv").compare("ä", "z"));
-// → une valeur positive
-
- -

Utiliser options

- -

Les résultats fournis par {{jsxref("Collator.prototype.compare()")}} peuvent être adaptés grâce à l'argument options :

- -
// en allemand, 'ä' est composé de la lettre de base 'a'
-console.log(new Intl.Collator("de", {sensitivity: "base"}).compare("ä", "a"));
-// → 0
-
-// en suédois, 'ä' et 'a' sont distincts en termes de base
-console.log(new Intl.Collator("sv", {sensitivity: "base"}).compare("ä", "a"));
-// → une valeur positive
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-10.1', 'Intl.Collator')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.1', 'Intl.Collator')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#collator-objects', 'Intl.Collator')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Collator")}}

- -

Voir aussi

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl','Voir_aussi')}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/index.md b/files/fr/web/javascript/reference/global_objects/intl/collator/index.md new file mode 100644 index 0000000000..32b32ac4ef --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/collator/index.md @@ -0,0 +1,175 @@ +--- +title: Intl.Collator +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator +tags: + - Collator + - Constructeur + - Internationalisation + - Intl + - JavaScript + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator +--- +
{{JSRef}}
+ +

L'objet Intl.Collator est un constructeur de « collecteurs », des objets permettant de comparer des chaînes de caractères en tenant compte de la locale.

+ +
{{EmbedInteractiveExample("pages/js/intl-collator.html")}}
+ +

Syntaxe

+ +
new Intl.Collator([locales [, options]])
+ +

Paramètres

+ +
+
locales
+
+

Une chaîne de caractères avec une balise de langue BCP 47 ou un tableau qui contient des chaînes dans ce format. Pour plus d'informations sur le format et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}}. Pour ce constructeur, les clés d'extensions Unicode suivantes sont acceptées :

+ +
+
co
+
Les variantes dans les méthodes de regroupement (« collation ») des chaînes de caractères. Les valeurs autorisées pour cette clé sont : "big5han", "dict", "direct", "ducet", "gb2312", "phonebk", "phonetic", "pinyin", "reformed", "searchjl", "stroke", "trad", "unihan". Les valeurs "standard" et "search" sont ignorées. Elles sont remplacées par la propriété usage de l'argument options (voir ci-après).
+
kn
+
Indique si on ordonne les nombres (par exemple : "1" < "2" < "10"). Les valeurs possibles sont "true" et "false". Cette option est également disponible via une propriété de l'objet options. Si l'extension Unicode et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
+
kf
+
Indique si on ordonne les majuscules avant les minuscules ou l'inverse. Les valeurs possibles sont "upper", "lower", ou "false" (on utilise alors l'ordre par défaut de la locale). Cette option est également disponible via une propriété de l'objet options. Si l'extension Unicode et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
+
+
+
options
+
+

Un objet qui disposent des propriétés suivantes :

+ +
+
localeMatcher
+
L'algorithme de correspondance à utiliser pour les locales. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Voir la {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}} pour plus d'informations à ce sujet.
+
usage
+
Indique l'usage de le comparaison : le tri ou la recherche de chaînes correspondantes. Les valeurs possibles sont "sort" pour le tri et "search" pour la recherche. La valeur par défaut est "sort".
+
sensitivity
+
Indique les différences entre les chaînes de caractères qui font qu'une chaîne est considérée différente d'une autre. Les valeurs possibles sont : +
    +
  • "base" : Seules les chaînes dont les lettres de base sont différentes sont considérées inégales. Par exemple : a ≠ b, a = á, a = A.
  • +
  • "accent" : Seules les chaînes de caractères dont les lettres de bases ou les accents ou les autres marques diacritiques diffèrent sont considérées inégales. Par exemple : a ≠ b, a ≠ á, a = A.
  • +
  • "case" : Seules les chaines dont les lettres de base ou la casse sont diffèrent sont considérées comme inégales. Par exemple : a ≠ b, a = á, a ≠ A.
  • +
  • "variant" : Les chaînes qui diffèrent par leurs caractères de base, leurs accents et autres marques diacritiques, la casse sont considérées comme inégales. D'autres différences peuvent également être prises en compte. Par exemple : a ≠ b, a ≠ á, a ≠ A.
  • +
+ +

La valeur par défaut est "variant" si on utilise la comparaison pour du tri (usage="sort"). Pour l'utilisation "search" (recherche), la valeur par défaut dépend de la locale.

+
+
ignorePunctuation
+
Indique si la ponctuation doit être ignorée. Les valeurs possibles sont true et false. La valeur par défaut est false.
+
numeric
+
Indique si on ordonne les nombres (par exemple : "1" < "2" < "10"). Les valeurs possibles sont true et false. La valeur par défaut est false. Si l'extension Unicode correspondante et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
+
caseFirst
+
Indique si on ordonne les majuscules avant les minuscules ou l'inverse. Les valeurs possibles sont "upper", "lower", ou "false" (on utilise alors l'ordre par défaut de la locale), la valeur par défaut est "false". Si l'extension Unicode correspondante et la propriété de l'objet options sont définies, ce sera cette dernière qui sera prise en compte.
+
+
+
+ +

Description

+ +

L'objet Intl.Collator possède les propriétés et méthodes suivantes :

+ +

Propriétés

+ +
+
{{jsxref("Collator.prototype", "Intl.Collator.prototype")}}
+
Permet d'ajouter des propriétés à toutes les instances.
+
+ +

Méthodes

+ +
+
{{jsxref("Collator.supportedLocalesOf", "Intl.Collator.supportedLocalesOf()")}}
+
Renvoie un tableau qui contient les locales supportées pour lesquelles il n'est pas nécessaire de revenir à la locale par défaut de l'environnement.
+
+ +

Instances de Collator

+ +

Propriétés

+ +

Les instances de Collator héritent des propriétés suivantes grâce à leur prototype :

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Collator/prototype','Propriétés')}}
+ +

Méthodes

+ +
+

Les instances de Collator héritent des méthodes suivantes grâce à leur prototype :

+{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Collator/prototype','Méthodes')}}
+ +

Exemples

+ +

Utiliser Collator

+ +

L'exemple qui suit illustre les différents résultats qu'on peut obtenir :

+ +
console.log(new Intl.Collator().compare('a', 'c')); // → une valeur négative
+console.log(new Intl.Collator().compare('c', 'a')); // → une valeur positive
+console.log(new Intl.Collator().compare('a', 'a')); // → 0
+
+ +

Les résultats indiqués sont génériques et en pratique peuvent varier entre les navigateurs et les versions des navigateurs. En effet les valeurs obtenues dépendent de l'implémentation. Les spécifications indiquent uniquement le signe (positif ou négatif) du résultat.

+ +

Utiliser locales

+ +

Les résultats fournis par {{jsxref("Collator.prototype.compare()")}} varient selon les locales. Afin d'obtenir le bon ordre lexicographique dans votre application, il est nécessaire de spécifier la locale de l'utilisateur (et éventuellement des locales pour des cas de replis) en utilisant l'argument locales :

+ +
// en allemand, 'ä' est équivalent à 'a' pour le tri
+console.log(new Intl.Collator("de").compare("ä", "z"));
+// → une valeur négative
+
+// en suédois, 'ä' arrive après 'z'
+console.log(new Intl.Collator("sv").compare("ä", "z"));
+// → une valeur positive
+
+ +

Utiliser options

+ +

Les résultats fournis par {{jsxref("Collator.prototype.compare()")}} peuvent être adaptés grâce à l'argument options :

+ +
// en allemand, 'ä' est composé de la lettre de base 'a'
+console.log(new Intl.Collator("de", {sensitivity: "base"}).compare("ä", "a"));
+// → 0
+
+// en suédois, 'ä' et 'a' sont distincts en termes de base
+console.log(new Intl.Collator("sv", {sensitivity: "base"}).compare("ä", "a"));
+// → une valeur positive
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-10.1', 'Intl.Collator')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.1', 'Intl.Collator')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#collator-objects', 'Intl.Collator')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Collator")}}

+ +

Voir aussi

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl','Voir_aussi')}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html b/files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html deleted file mode 100644 index 5a82466c9f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Intl.Collator.prototype.resolvedOptions() -slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions -tags: - - Collator - - Internationalisation - - Intl - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator/resolvedOptions ---- -
{{JSRef}}
- -

La méthode Intl.Collator.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de locale et de collation calculées à l'initialisation de l'objet {{jsxref("Collator")}}.

- -
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-resolvedoptions.html")}}
- -

Syntaxe

- -
collator.resolvedOptions()
- -

Valeur de retour

- -

Un nouvel objet dont les propriétés reflètent les options de locale et de collations calculées lors de l'initialisation de l'objet {{jsxref("Collator")}}.

- -

Description

- -

L'objet renvoyé par cette méthode contient les propriétés suivantes :

- -
-
locale
-
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
-
usage,sensitivity, ignorePunctuation
-
Les valeurs demandées pour ces propriétés via l'argument options ou celles utilisées par défaut.
-
collation
-
La valeur demandée pour l'extension Unicode "co" si elle est supportée par la locale utilisée, sinon "default".
-
numeric, caseFirst
-
Les valeurs demandées pour ces propriétés via l'argument options ou l'utilisation des extensions Unicode "kn" et "kf" ou les valeurs par défaut. Si l'implémentation utilisée ne supporte pas ces propriétés, elles sont omises.
-
- -

Exemples

- -
var de = new Intl.Collator('de', { sensitivity: 'base' })
-var usedOptions = de.resolvedOptions();
-
-usedOptions.locale;            // "de"
-usedOptions.usage;             // "sort"
-usedOptions.sensitivity;        // "base"
-usedOptions.ignorePunctuation; // false
-usedOptions.collation;         // "default"
-usedOptions.numeric;           // false
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-10.3.3', 'Intl.Collator.prototype.resolvedOptions')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.3.3', 'Intl.Collator.prototype.resolvedOptions')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#sec-Intl.Collator.prototype.resolvedOptions', 'Intl.Collator.prototype.resolvedOptions')}}{{Spec2('ES Int Draft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Collator.resolvedOptions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.md b/files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.md new file mode 100644 index 0000000000..5a82466c9f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.md @@ -0,0 +1,92 @@ +--- +title: Intl.Collator.prototype.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions +tags: + - Collator + - Internationalisation + - Intl + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator/resolvedOptions +--- +
{{JSRef}}
+ +

La méthode Intl.Collator.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de locale et de collation calculées à l'initialisation de l'objet {{jsxref("Collator")}}.

+ +
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-resolvedoptions.html")}}
+ +

Syntaxe

+ +
collator.resolvedOptions()
+ +

Valeur de retour

+ +

Un nouvel objet dont les propriétés reflètent les options de locale et de collations calculées lors de l'initialisation de l'objet {{jsxref("Collator")}}.

+ +

Description

+ +

L'objet renvoyé par cette méthode contient les propriétés suivantes :

+ +
+
locale
+
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
+
usage,sensitivity, ignorePunctuation
+
Les valeurs demandées pour ces propriétés via l'argument options ou celles utilisées par défaut.
+
collation
+
La valeur demandée pour l'extension Unicode "co" si elle est supportée par la locale utilisée, sinon "default".
+
numeric, caseFirst
+
Les valeurs demandées pour ces propriétés via l'argument options ou l'utilisation des extensions Unicode "kn" et "kf" ou les valeurs par défaut. Si l'implémentation utilisée ne supporte pas ces propriétés, elles sont omises.
+
+ +

Exemples

+ +
var de = new Intl.Collator('de', { sensitivity: 'base' })
+var usedOptions = de.resolvedOptions();
+
+usedOptions.locale;            // "de"
+usedOptions.usage;             // "sort"
+usedOptions.sensitivity;        // "base"
+usedOptions.ignorePunctuation; // false
+usedOptions.collation;         // "default"
+usedOptions.numeric;           // false
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-10.3.3', 'Intl.Collator.prototype.resolvedOptions')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.3.3', 'Intl.Collator.prototype.resolvedOptions')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#sec-Intl.Collator.prototype.resolvedOptions', 'Intl.Collator.prototype.resolvedOptions')}}{{Spec2('ES Int Draft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Collator.resolvedOptions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html b/files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html deleted file mode 100644 index 763a01dd1c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Intl.Collator.supportedLocalesOf() -slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf -tags: - - Collator - - Internationalisation - - Intl - - JavaScript - - Méthode - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator/supportedLocalesOf ---- -
{{JSRef}}
- -

La méthode Intl.Collator.supportedLocalesOf() renvoie, parmi les locales fournies, un tableau contenant les locales supportées et qui ne nécessitent pas d'utiliser la locale par défaut de l'environnement.

- -
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-supportedlocalesof.html")}}
- -

Syntaxe

- -
Intl.Collator.supportedLocalesOf(locales [, options])
- -

Paramètres

- -
-
locales
-
Une chaîne de caractères qui est une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations concernant la forme générale de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
-
options{{optional_inline}}
-
-

Paramètre facultatif. Un objet qui peut posséder les propriétés suivantes :

- -
-
localeMatcher
-
-

L'algorithme utilisé pour la correspondance entre chaînes de caractères. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Pour plus d'informations, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}}.

-
-
-
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langues qui sont prises en charge pour la collation sans qu'il faille utiliser la locale par défaut de l'environnement d'exécution.

- -

Description

- -

Cette méthode renvoie un tableau qui est un sous-ensemble des balises de locales fournies avec l'argument locales. Les balises renvoyées sont celles supportées par l'environnement navigateur en termes de collation (comparaison) et qui ne nécessitent pas d'utiliser la locale par défaut.

- -

Exemples

- -

Si on dispose d'un environnement (un navigateur par exemple) qui supporte la comparaison de chaînes dans les locales indonésienne, allemande mais pas balinaise,  supportedLocalesOf renvoie les balises pour l'indonésien et l'allemand quand bien même la collation avec pinyin n'est pas utilisée avec l'indonésien et qu'il n'existe pas une version spécifique de l'allemand pour l'Indonésie. On illustre ici l'algorithme "lookup". SI on utilisait "best fit" pour trouver les locales correspondantes, on aurait pu avoir une balise supplémentaire pour le balinais en plus car la plupart des balinais comprennent l'indonésien.

- -
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"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-10.2.2', 'Intl.Collator.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.2.2', 'Intl.Collator.supportedLocalesOf')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.Collator.supportedLocalesOf', 'Intl.Collator.supportedLocalesOf')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Collator.supportedLocalesOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.md b/files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.md new file mode 100644 index 0000000000..763a01dd1c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.md @@ -0,0 +1,95 @@ +--- +title: Intl.Collator.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf +tags: + - Collator + - Internationalisation + - Intl + - JavaScript + - Méthode + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Collator/supportedLocalesOf +--- +
{{JSRef}}
+ +

La méthode Intl.Collator.supportedLocalesOf() renvoie, parmi les locales fournies, un tableau contenant les locales supportées et qui ne nécessitent pas d'utiliser la locale par défaut de l'environnement.

+ +
{{EmbedInteractiveExample("pages/js/intl-collator-prototype-supportedlocalesof.html")}}
+ +

Syntaxe

+ +
Intl.Collator.supportedLocalesOf(locales [, options])
+ +

Paramètres

+ +
+
locales
+
Une chaîne de caractères qui est une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations concernant la forme générale de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
+
options{{optional_inline}}
+
+

Paramètre facultatif. Un objet qui peut posséder les propriétés suivantes :

+ +
+
localeMatcher
+
+

L'algorithme utilisé pour la correspondance entre chaînes de caractères. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Pour plus d'informations, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}}.

+
+
+
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langues qui sont prises en charge pour la collation sans qu'il faille utiliser la locale par défaut de l'environnement d'exécution.

+ +

Description

+ +

Cette méthode renvoie un tableau qui est un sous-ensemble des balises de locales fournies avec l'argument locales. Les balises renvoyées sont celles supportées par l'environnement navigateur en termes de collation (comparaison) et qui ne nécessitent pas d'utiliser la locale par défaut.

+ +

Exemples

+ +

Si on dispose d'un environnement (un navigateur par exemple) qui supporte la comparaison de chaînes dans les locales indonésienne, allemande mais pas balinaise,  supportedLocalesOf renvoie les balises pour l'indonésien et l'allemand quand bien même la collation avec pinyin n'est pas utilisée avec l'indonésien et qu'il n'existe pas une version spécifique de l'allemand pour l'Indonésie. On illustre ici l'algorithme "lookup". SI on utilisait "best fit" pour trouver les locales correspondantes, on aurait pu avoir une balise supplémentaire pour le balinais en plus car la plupart des balinais comprennent l'indonésien.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-10.2.2', 'Intl.Collator.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-10.2.2', 'Intl.Collator.supportedLocalesOf')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.Collator.supportedLocalesOf', 'Intl.Collator.supportedLocalesOf')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Collator.supportedLocalesOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html deleted file mode 100644 index b04b345861..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Intl.DateTimeFormat.prototype.format -slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format -tags: - - Internationalisation - - Intl - - JavaScript - - Propriété - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/format ---- -
{{JSRef}}
- -

La méthode Intl.DateTimeFormat.prototype.format() est un accesseur formate une date selon les options de locale et de format de l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}.

- -
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-format.html")}}
- -

Syntaxe

- -
dateTimeFormat.format(date)
- -

Paramètres

- -
-
date
-
La date à formater.
-
- -

Description

- -

L'accesseur format permet de formater une date en une chaîne de caractères en fonction des options de locale et de format définies pour l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}.

- -

Exemples

- -

Utiliser format

- -

On peut utiliser la fonction renvoyée par l'accesseur format pour formater une date. Par exemple selon la locale serbe :

- -
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."
- -

Utiliser format avec map()

- -

On peut également utiliser la fonction renvoyée par l'accesseur format pour formater toutes les dates d'un tableau. On observe que la fonction est liée à l'objet DateTimeFormat dont elle provient, on peut donc la passer directement à {{jsxref("Array.prototype.map()")}}.

- -
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"
- -

Comparaison des dates formatées et des valeurs statiques

- -

La plupart du temps, le format renvoyé par format() est cohérent. Toutefois, cela peut évoluer à l'avenir et n'est pas garanti pour l'ensemble des langues (de telles variations sont souhaitables et permises par la spécification). Ainsi, IE et Edge ajoutent des caractères de contrôle bidirectionnels autour des dates afin que le texte produit ait une directionalité cohérente avec le texte avec lequel elles seront concaténées.

- -

Aussi, mieux vaut ne pas comparer un résultat fourni par format() avec une valeur statique :

- -
let d = new Date("2019-01-01T00:00:00.000000Z");
-let formattedDate = Intl.DateTimeFormat(undefined, {
-  year: 'numeric',
-  month: 'numeric',
-  day: 'numeric',
-  hour: 'numeric',
-  minute: 'numeric',
-  second: 'numeric'
-}).format(d);
-
-"1.1.2019, 01:00:00" === formattedDate;
-// true pour Firefox et les autres
-// false pour IE et Edge
-
- -
-

Note : Voir aussi ce fil StackOverflow pour plus de détails et d'exemples.

-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-12.3.2', 'Intl.DateTimeFormat.format')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-12.3.2', 'Intl.DateTimeFormat.format')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.prototype.format', 'Intl.DateTimeFormat.format')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.DateTimeFormat.format")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md new file mode 100644 index 0000000000..b04b345861 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/format/index.md @@ -0,0 +1,123 @@ +--- +title: Intl.DateTimeFormat.prototype.format +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format +tags: + - Internationalisation + - Intl + - JavaScript + - Propriété + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/format +--- +
{{JSRef}}
+ +

La méthode Intl.DateTimeFormat.prototype.format() est un accesseur formate une date selon les options de locale et de format de l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}.

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-format.html")}}
+ +

Syntaxe

+ +
dateTimeFormat.format(date)
+ +

Paramètres

+ +
+
date
+
La date à formater.
+
+ +

Description

+ +

L'accesseur format permet de formater une date en une chaîne de caractères en fonction des options de locale et de format définies pour l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}.

+ +

Exemples

+ +

Utiliser format

+ +

On peut utiliser la fonction renvoyée par l'accesseur format pour formater une date. Par exemple selon la locale serbe :

+ +
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."
+ +

Utiliser format avec map()

+ +

On peut également utiliser la fonction renvoyée par l'accesseur format pour formater toutes les dates d'un tableau. On observe que la fonction est liée à l'objet DateTimeFormat dont elle provient, on peut donc la passer directement à {{jsxref("Array.prototype.map()")}}.

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

Comparaison des dates formatées et des valeurs statiques

+ +

La plupart du temps, le format renvoyé par format() est cohérent. Toutefois, cela peut évoluer à l'avenir et n'est pas garanti pour l'ensemble des langues (de telles variations sont souhaitables et permises par la spécification). Ainsi, IE et Edge ajoutent des caractères de contrôle bidirectionnels autour des dates afin que le texte produit ait une directionalité cohérente avec le texte avec lequel elles seront concaténées.

+ +

Aussi, mieux vaut ne pas comparer un résultat fourni par format() avec une valeur statique :

+ +
let d = new Date("2019-01-01T00:00:00.000000Z");
+let formattedDate = Intl.DateTimeFormat(undefined, {
+  year: 'numeric',
+  month: 'numeric',
+  day: 'numeric',
+  hour: 'numeric',
+  minute: 'numeric',
+  second: 'numeric'
+}).format(d);
+
+"1.1.2019, 01:00:00" === formattedDate;
+// true pour Firefox et les autres
+// false pour IE et Edge
+
+ +
+

Note : Voir aussi ce fil StackOverflow pour plus de détails et d'exemples.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-12.3.2', 'Intl.DateTimeFormat.format')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-12.3.2', 'Intl.DateTimeFormat.format')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.prototype.format', 'Intl.DateTimeFormat.format')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.DateTimeFormat.format")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html deleted file mode 100644 index c618202292..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Intl.DateTimeFormat.prototype.formatRange() -slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRange -tags: - - Internationalisation - - Intl - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRange -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatRange ---- -

{{JSRef}}

- -

La méthode Intl.DateTimeFormat.prototype.formatRange() permet de formater un intervalle de dates de la façon la plus concise en fonction de la locale et des options fournies lors de l'initialisation de l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}.

- -
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-formatrange.html")}}
- -

Syntaxe

- -
Intl.DateTimeFormat.prototype.formatRange(dateDébut, dateFin)
- -

Exemples

- -

Utilisation simple de formatRange()

- -

Cette méthode reçoit comme arguments deux objets {{jsxref("Date")}} et renvoie l'intervalle de la façon la plus concise possible (selon les options fournies lors de l'instanciation du formateur Intl.DateTimeFormat).

- -
let date1 = new Date(Date.UTC(2007, 0, 10, 10, 0, 0));
-let date2 = new Date(Date.UTC(2007, 0, 10, 11, 0, 0));
-let date3 = new Date(Date.UTC(2007, 0, 20, 10, 0, 0));
-// > 'Wed, 10 Jan 2007 10:00:00 GMT'
-// > 'Wed, 10 Jan 2007 11:00:00 GMT'
-// > 'Sat, 20 Jan 2007 10:00:00 GMT'
-
-let fmt1 = new Intl.DateTimeFormat("en", {
-    year: '2-digit',
-    month: 'numeric',
-    day: 'numeric',
-    hour: 'numeric',
-    minute: 'numeric'
-});
-console.log(fmt1.format(date1));
-console.log(fmt1.formatRange(date1, date2));
-console.log(fmt1.formatRange(date1, date3));
-// > '1/10/07, 10:00 AM'
-// > '1/10/07, 10:00 – 11:00 AM'
-// > '1/10/07, 10:00 AM – 1/20/07, 10:00 AM'
-
-let fmt2 = new Intl.DateTimeFormat("en", {
-    year: 'numeric',
-    month: 'short',
-    day: 'numeric'
-});
-console.log(fmt2.format(date1));
-console.log(fmt2.formatRange(date1, date2));
-console.log(fmt2.formatRange(date1, date3));
-// > 'Jan 10, 2007'
-// > 'Jan 10, 2007'
-// > 'Jan 10 – 20, 2007'
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Intl.DateTimeFormat.prototype.formatRangeBrouillon de niveau 3
- -

Voir aussi

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md new file mode 100644 index 0000000000..c618202292 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrange/index.md @@ -0,0 +1,81 @@ +--- +title: Intl.DateTimeFormat.prototype.formatRange() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRange +tags: + - Internationalisation + - Intl + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRange +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatRange +--- +

{{JSRef}}

+ +

La méthode Intl.DateTimeFormat.prototype.formatRange() permet de formater un intervalle de dates de la façon la plus concise en fonction de la locale et des options fournies lors de l'initialisation de l'objet {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}.

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-formatrange.html")}}
+ +

Syntaxe

+ +
Intl.DateTimeFormat.prototype.formatRange(dateDébut, dateFin)
+ +

Exemples

+ +

Utilisation simple de formatRange()

+ +

Cette méthode reçoit comme arguments deux objets {{jsxref("Date")}} et renvoie l'intervalle de la façon la plus concise possible (selon les options fournies lors de l'instanciation du formateur Intl.DateTimeFormat).

+ +
let date1 = new Date(Date.UTC(2007, 0, 10, 10, 0, 0));
+let date2 = new Date(Date.UTC(2007, 0, 10, 11, 0, 0));
+let date3 = new Date(Date.UTC(2007, 0, 20, 10, 0, 0));
+// > 'Wed, 10 Jan 2007 10:00:00 GMT'
+// > 'Wed, 10 Jan 2007 11:00:00 GMT'
+// > 'Sat, 20 Jan 2007 10:00:00 GMT'
+
+let fmt1 = new Intl.DateTimeFormat("en", {
+    year: '2-digit',
+    month: 'numeric',
+    day: 'numeric',
+    hour: 'numeric',
+    minute: 'numeric'
+});
+console.log(fmt1.format(date1));
+console.log(fmt1.formatRange(date1, date2));
+console.log(fmt1.formatRange(date1, date3));
+// > '1/10/07, 10:00 AM'
+// > '1/10/07, 10:00 – 11:00 AM'
+// > '1/10/07, 10:00 AM – 1/20/07, 10:00 AM'
+
+let fmt2 = new Intl.DateTimeFormat("en", {
+    year: 'numeric',
+    month: 'short',
+    day: 'numeric'
+});
+console.log(fmt2.format(date1));
+console.log(fmt2.formatRange(date1, date2));
+console.log(fmt2.formatRange(date1, date3));
+// > 'Jan 10, 2007'
+// > 'Jan 10, 2007'
+// > 'Jan 10 – 20, 2007'
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Intl.DateTimeFormat.prototype.formatRangeBrouillon de niveau 3
+ +

Voir aussi

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html deleted file mode 100644 index 1bc99d14f8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Intl.DateTimeFormat.prototype.formatRangeToParts() -slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRangeToParts -tags: - - Internationalization - - JavaScript - - Localization - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRangeToParts -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatRangeToParts ---- -

{{JSRef}}

- -

La fonction Intl.DateTimeFormat.prototype.formatRangeToParts() permet, selon la locale utilisée, de représenter chaque élément de l'intervalle de dates via DateTimeFormat.

- -

Syntaxe

- -
Intl.DateTimeFormat.prototype.formatRangeToParts(dateDebut, dateFin)
- -

Exemples

- -

Usage basique de formatRangeToParts

- -

Cette fonction reçoit deux Dates et retourne un Array d'objets contenant les élements qui représentent chaque partie de l'intervalle de date formatée, selon la locale utilisée.

- -
let date1 = new Date(Date.UTC(2007, 0, 10, 10, 0, 0));
-let date2 = new Date(Date.UTC(2007, 0, 10, 11, 0, 0));
-// > 'Wed, 10 Jan 2007 10:00:00 GMT'
-// > 'Wed, 10 Jan 2007 11:00:00 GMT'
-
-let fmt = new Intl.DateTimeFormat("en", {
-    hour: 'numeric',
-    minute: 'numeric'
-});
-
-console.log(fmt.formatRange(date1, date2));
-// > '10:00 – 11:00 AM'
-
-fmt.formatRangeToParts(date1, date2);
-// retourne la valeur:
-// [
-//   { type: 'hour',      value: '10',  source: "startRange" },
-//   { type: 'literal',   value: ':',   source: "startRange" },
-//   { type: 'minute',    value: '00',  source: "startRange" },
-//   { type: 'literal',   value: ' – ', source: "shared"     },
-//   { type: 'hour',      value: '11',  source: "endRange"   },
-//   { type: 'literal',   value: ':',   source: "endRange"   },
-//   { type: 'minute',    value: '00',  source: "endRange"   },
-//   { type: 'literal',   value: ' ',   source: "shared"     },
-//   { type: 'dayPeriod', value: 'AM',  source: "shared"     }
-// ]
- -

Spécifications

- - - - - - - - - - - - - - -
SpecificationStatusComment
Intl.DateTimeFormat.prototype.formatRangeStage 3
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Intl.DateTimeFormat.formatRangeToParts")}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md new file mode 100644 index 0000000000..1bc99d14f8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formatrangetoparts/index.md @@ -0,0 +1,74 @@ +--- +title: Intl.DateTimeFormat.prototype.formatRangeToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRangeToParts +tags: + - Internationalization + - JavaScript + - Localization + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatRangeToParts +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatRangeToParts +--- +

{{JSRef}}

+ +

La fonction Intl.DateTimeFormat.prototype.formatRangeToParts() permet, selon la locale utilisée, de représenter chaque élément de l'intervalle de dates via DateTimeFormat.

+ +

Syntaxe

+ +
Intl.DateTimeFormat.prototype.formatRangeToParts(dateDebut, dateFin)
+ +

Exemples

+ +

Usage basique de formatRangeToParts

+ +

Cette fonction reçoit deux Dates et retourne un Array d'objets contenant les élements qui représentent chaque partie de l'intervalle de date formatée, selon la locale utilisée.

+ +
let date1 = new Date(Date.UTC(2007, 0, 10, 10, 0, 0));
+let date2 = new Date(Date.UTC(2007, 0, 10, 11, 0, 0));
+// > 'Wed, 10 Jan 2007 10:00:00 GMT'
+// > 'Wed, 10 Jan 2007 11:00:00 GMT'
+
+let fmt = new Intl.DateTimeFormat("en", {
+    hour: 'numeric',
+    minute: 'numeric'
+});
+
+console.log(fmt.formatRange(date1, date2));
+// > '10:00 – 11:00 AM'
+
+fmt.formatRangeToParts(date1, date2);
+// retourne la valeur:
+// [
+//   { type: 'hour',      value: '10',  source: "startRange" },
+//   { type: 'literal',   value: ':',   source: "startRange" },
+//   { type: 'minute',    value: '00',  source: "startRange" },
+//   { type: 'literal',   value: ' – ', source: "shared"     },
+//   { type: 'hour',      value: '11',  source: "endRange"   },
+//   { type: 'literal',   value: ':',   source: "endRange"   },
+//   { type: 'minute',    value: '00',  source: "endRange"   },
+//   { type: 'literal',   value: ' ',   source: "shared"     },
+//   { type: 'dayPeriod', value: 'AM',  source: "shared"     }
+// ]
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpecificationStatusComment
Intl.DateTimeFormat.prototype.formatRangeStage 3
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("javascript.builtins.Intl.DateTimeFormat.formatRangeToParts")}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html deleted file mode 100644 index 4293903628..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Intl.DateTimeFormat.prototype.formatToParts() -slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts -tags: - - DateTimeFormat - - Internationalisation - - Intl - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatToParts ---- -
{{JSRef}}
- -

La méthode Intl.DateTimeFormat.prototype.formatToParts() permet de mettre en forme des chaînes de caractères avec des informations temporelles selon la locale utilisée.

- -

Syntaxe

- -
Intl.DateTimeFormat.prototype.formatToParts(date)
- -

Paramètres

- -
-
date {{optional_inline}}
-
La date qu'on souhaite mettre en forme.
-
- -

Valeur de retour

- -

Un tableau ({{jsxref("Array")}}) d'objets qui contiennent les composants de la date mis en forme.

- -

Description

- -

La méthode formatToParts() est utile lorsqu'on souhaite mettre en forme des dates de façon personnalisée. Elle renvoie un tableau d'objets qui contiennent les fragments spécifiques à la locale, à partir desquels on peut construire des chaînes tout en conservant les parties spécifique à la locale. La structure de l'objet renvoyé par la méthode est semblable à celle-ci :

- -
[
-  { type: "day", value: "17" },
-  { type: "weekday", value "Monday" }
-]
- -

Les types possibles sont :

- -
-
day
-
La chaîne utilisée pour désigner le jour, par exemple "17".
-
dayPeriod
-
La chaîne utilisée pour désigner le moment de la journée, par exemple "AM" (qui désigne la matinée, avant midi) ou "PM" (qui désigne l'après-midi).
-
era
-
La chaîne utilisée pour l'ère (par exemple "BC" ou "AD").
-
hour
-
La chaîne utilisée pour l'heure (par exemple "3" or "03").
-
literal
-
La chaîne utilisée pour séparée le jour de l'heure (par exemple " : , / ").
-
minute
-
La chaîne utilisée pour les minutes (par exemple "00").
-
month
-
La chaîne utilisée pour le mois (par exemple "12").
-
second
-
La chaîne utilisée pour les secondes (par exemple "02").
-
timeZoneName
-
La chaîne utilisée pour désigner le fuseau horaire (par exemple "UTC").
-
weekday
-
La chaîne de caractères utilisée pour le jour de la semaine, par exemple "M", "Monday" ou "Montag".
-
year
-
La chaîne utilisée pour désigner l'année (par exemple "2012" ou "96").
-
- -

Exemples

- -

DateTimeFormat produit des chaînes localisées opaques qui ne peuvent pas être manipulées directement :

- -
var date = Date.UTC(2012, 11, 17, 3, 0, 42);
-
-var formatter = new Intl.DateTimeFormat("en-us", {
-  weekday: 'long',
-  year: 'numeric',
-  month: 'numeric',
-  day: 'numeric',
-  hour: 'numeric',
-  minute: 'numeric',
-  second: 'numeric',
-  hour12: true,
-  timeZone: "UTC"
-});
-
-formatter.format(date);
-// "Monday, 12/17/2012, 3:00:42 AM"
-
- -

Cependant, pour de nombreuses interfaces utilisateur, on peut vouloir personnaliser la mise en forme de cette chaîne de caractères. La méthode formatToParts permet une mise en forme dans le souci de la locale en manipulant les différentes composantes :

- -
formatter.formatToParts(date);
-
-// return value:
-[
-  { type: 'weekday',   value: 'Monday' },
-  { type: 'separator', value: ', '     },
-  { type: 'month',     value: '12'     },
-  { type: 'literal', value: '/'      },
-  { type: 'day',       value: '17'     },
-  { 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'     }
-]
-
- -

L'information étant décomposée, on peut alors la mettre en forme et la recomposée de façon adaptée :

- -
var dateString = formatter.formatToParts(date).map(({type, value}) => {
-  switch (type) {
-    case 'dayPeriod': return `<strong>${value}</strong>`;
-    default : return value;
-  }
-}).reduce((string, part) => string + part);
-
-console.log(formatter.format(date));
-// "Monday, 12/17/2012, 3:00:42 AM"
-
-console.log(dateString);
-// "Monday, 12/17/2012, 3:00:42 <strong>AM</strong>"
- -

Prothèse d'émulation (polyfill)

- -

Une prothèse de cette fonctionnalité est disponible sur le dépôt décrivant la proposition de fonctionnalité.

- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.prototype.formatToParts', 'Intl.DateTimeFormat.prototype.formatToParts')}}{{Spec2('ES Int Draft')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.DateTimeFormat.formatToParts")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md new file mode 100644 index 0000000000..4293903628 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.md @@ -0,0 +1,165 @@ +--- +title: Intl.DateTimeFormat.prototype.formatToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts +tags: + - DateTimeFormat + - Internationalisation + - Intl + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/formatToParts +--- +
{{JSRef}}
+ +

La méthode Intl.DateTimeFormat.prototype.formatToParts() permet de mettre en forme des chaînes de caractères avec des informations temporelles selon la locale utilisée.

+ +

Syntaxe

+ +
Intl.DateTimeFormat.prototype.formatToParts(date)
+ +

Paramètres

+ +
+
date {{optional_inline}}
+
La date qu'on souhaite mettre en forme.
+
+ +

Valeur de retour

+ +

Un tableau ({{jsxref("Array")}}) d'objets qui contiennent les composants de la date mis en forme.

+ +

Description

+ +

La méthode formatToParts() est utile lorsqu'on souhaite mettre en forme des dates de façon personnalisée. Elle renvoie un tableau d'objets qui contiennent les fragments spécifiques à la locale, à partir desquels on peut construire des chaînes tout en conservant les parties spécifique à la locale. La structure de l'objet renvoyé par la méthode est semblable à celle-ci :

+ +
[
+  { type: "day", value: "17" },
+  { type: "weekday", value "Monday" }
+]
+ +

Les types possibles sont :

+ +
+
day
+
La chaîne utilisée pour désigner le jour, par exemple "17".
+
dayPeriod
+
La chaîne utilisée pour désigner le moment de la journée, par exemple "AM" (qui désigne la matinée, avant midi) ou "PM" (qui désigne l'après-midi).
+
era
+
La chaîne utilisée pour l'ère (par exemple "BC" ou "AD").
+
hour
+
La chaîne utilisée pour l'heure (par exemple "3" or "03").
+
literal
+
La chaîne utilisée pour séparée le jour de l'heure (par exemple " : , / ").
+
minute
+
La chaîne utilisée pour les minutes (par exemple "00").
+
month
+
La chaîne utilisée pour le mois (par exemple "12").
+
second
+
La chaîne utilisée pour les secondes (par exemple "02").
+
timeZoneName
+
La chaîne utilisée pour désigner le fuseau horaire (par exemple "UTC").
+
weekday
+
La chaîne de caractères utilisée pour le jour de la semaine, par exemple "M", "Monday" ou "Montag".
+
year
+
La chaîne utilisée pour désigner l'année (par exemple "2012" ou "96").
+
+ +

Exemples

+ +

DateTimeFormat produit des chaînes localisées opaques qui ne peuvent pas être manipulées directement :

+ +
var date = Date.UTC(2012, 11, 17, 3, 0, 42);
+
+var formatter = new Intl.DateTimeFormat("en-us", {
+  weekday: 'long',
+  year: 'numeric',
+  month: 'numeric',
+  day: 'numeric',
+  hour: 'numeric',
+  minute: 'numeric',
+  second: 'numeric',
+  hour12: true,
+  timeZone: "UTC"
+});
+
+formatter.format(date);
+// "Monday, 12/17/2012, 3:00:42 AM"
+
+ +

Cependant, pour de nombreuses interfaces utilisateur, on peut vouloir personnaliser la mise en forme de cette chaîne de caractères. La méthode formatToParts permet une mise en forme dans le souci de la locale en manipulant les différentes composantes :

+ +
formatter.formatToParts(date);
+
+// return value:
+[
+  { type: 'weekday',   value: 'Monday' },
+  { type: 'separator', value: ', '     },
+  { type: 'month',     value: '12'     },
+  { type: 'literal', value: '/'      },
+  { type: 'day',       value: '17'     },
+  { 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'     }
+]
+
+ +

L'information étant décomposée, on peut alors la mettre en forme et la recomposée de façon adaptée :

+ +
var dateString = formatter.formatToParts(date).map(({type, value}) => {
+  switch (type) {
+    case 'dayPeriod': return `<strong>${value}</strong>`;
+    default : return value;
+  }
+}).reduce((string, part) => string + part);
+
+console.log(formatter.format(date));
+// "Monday, 12/17/2012, 3:00:42 AM"
+
+console.log(dateString);
+// "Monday, 12/17/2012, 3:00:42 <strong>AM</strong>"
+ +

Prothèse d'émulation (polyfill)

+ +

Une prothèse de cette fonctionnalité est disponible sur le dépôt décrivant la proposition de fonctionnalité.

+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.prototype.formatToParts', 'Intl.DateTimeFormat.prototype.formatToParts')}}{{Spec2('ES Int Draft')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.DateTimeFormat.formatToParts")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.html b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.html deleted file mode 100644 index d8cc5bc6fd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.html +++ /dev/null @@ -1,294 +0,0 @@ ---- -title: Intl.DateTimeFormat -slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat -tags: - - Internationalisation - - Intl - - JavaScript - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat ---- -
{{JSRef}}
- -

L'objet Intl.DateTimeFormat est un constructeur d'objets permettant de formatter des dates et des heures selon une langue.

- -
{{EmbedInteractiveExample("pages/js/intl-datetimeformat.html")}}
- -

Syntaxe

- -
new Intl.DateTimeFormat([locales[, options]])
-Intl.DateTimeFormat.call(this[, locales[, options]])
- -

Paramètres

- -
-
locales{{optional_inline}}
-
-

Ce paramètre optionnel est une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour utiliser la locale par défaut du navigateur, on pourra omettre cet argument (ou passer la valeur undefined). Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}. Les clefs d'extensions Unicode suivantes sont autorisées :

- -
-
nu
-
Système de numérotation. Les valeurs possibles incluent : "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
-
ca
-
Calendrier. Les valeurs possibles incluent : "buddhist", "chinese", "coptic", "ethiopia", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".
-
hc
-
Le type de cycle horaire à utiliser. Les valeurs possibles sont "h11", "h12", "h23", "h24".
-
-
-
options
-
-

Un objet avec certaines ou toutes les propriétés suivantes :

- -
-
localeMatcher
-
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}
-
timeZone
-
Le fuseau horaire à utiliser. La seule valeur que doivent reconnaitre les implémentations est "UTC" ; la valeur par défaut est le fuseau horaire du moteur JavaScript. Les implémentations peuvent aussi reconnaitre les noms de fuseau horaire de la base de données IANA de fuseaux horaires, tel que "Asia/Shanghai", "Asia/Kolkata", "America/New_York".
-
hour12
-
S'il faut utiliser le format horaire sur 12 heures (au lieu de celui-ci sur 24 heures). Les valeurs possibles sont true et false ; la valeur par défaut dépend de la locale. Cette option surcharge l'étiquette hc et/ou l'option hourCycle.
-
hourCycle
-
Le cycle horaire à utiliser. Les valeurs possibles sont "h11", "h12", "h23", "h24". Cette option surcharge l'étiquette hc mais sera remplacée par hour12 si cette dernière est présente.
-
formatMatcher
-
L'algorithme de correspondance à utiliser pour le formattage. Les valeurs possibles sont "basic" et "best fit" ; par défaut "best fit". Voir les paragraphes suivants pour des informations concernant l'usage de cette propriété.
-
- -

Les propriétés suivantes décrivent les composants date-heure à utiliser pour le formattage de la sortie.  Les implémentations ont pour obligation de supporter au minimum les ensembles suivants :

- -
    -
  • weekday, year, month, day, hour, minute, second
  • -
  • weekday, year, month, day
  • -
  • year, month, day
  • -
  • year, month
  • -
  • month, day
  • -
  • hour, minute, second
  • -
  • hour, minute
  • -
- -

Les implémentations peuvent supporter d'autres sous-ensembles, et les demandes seront évaluées face à toutes les combinaisons de sous-ensembles disponibles pour trouver la meilleure correspondance. Deux algorithmes sont disponibles pour cette évaluation et choisis par la propriété formatMatcher : un algorithme "basic" complètement spécifié et un algorithme "best fit" dépendant de l'implémentation.

- -
-
weekday
-
La représentation du jour de la semaine. Les valeurs possibles sont : -
    -
  • "long" (par exemple Thursday)
  • -
  • "short" (par exemple Thu)
  • -
  • "narrow" (par exemple T). Deux jours de la semaines pourront partager la même représentation dans certaines locales (par exemple, en anglais Tuesday sera également représenté avec T en notation étroite).
  • -
-
-
era
-
La représentation de l'ère. Les valeurs possibles sont : -
    -
  • "long" (par exemple Anno Domini)
  • -
  • "short" (par exemple AD)
  • -
  • "narrow" (par exemple A)
  • -
-
-
year
-
La représentation de l'année. Les valeurs possibles sont : -
    -
  • "numeric" (par exemple 2012)
  • -
  • "2-digit" (par exemple 12)
  • -
-
-
month
-
La représentation du mois. Les valeurs possibles sont : -
    -
  • "numeric" (par exemple 2)
  • -
  • "2-digit" (par exemple 02)
  • -
  • "long" (par exemple March)
  • -
  • "short" (par exemple Mar)
  • -
  • "narrow" (par exemple M). Dans certaines locales, deux mois pourront partager la même représentation avec le style étroit (par exemple, May en anglais, sera également représenté avec M).
  • -
-
-
day
-
La représentation du jour. Les valeurs possibles sont : -
    -
  • "numeric" (par exemple 1)
  • -
  • "2-digit" (par exemple 01)
  • -
-
-
hour
-
La représentation de l'heure. Les valeurs possibles sont : -
    -
  • "numeric" (par exemple 1)
  • -
  • "2-digit" (par exemple 01)
  • -
-
-
minute
-
La représentation des minutes. Les valeurs possibles sont : -
    -
  • "numeric" (par exemple 1)
  • -
  • "2-digit" (par exemple 01)
  • -
-
-
second
-
La représentation des secondes. Les valeurs possibles sont : -
    -
  • "numeric" (par exemple 1)
  • -
  • "2-digit" (par exemple 01)
  • -
-
-
timeZoneName
-
La représentation du fuseau horaire. Les valeurs possibles sont : -
    -
  • "long" (par exemple British Summer Time)
  • -
  • "short" (par exemple GMT+1)
  • -
-
-
- -

La valeur par défaut pour chaque composante est {{jsxref("undefined")}}, mais si toutes les composantes valent undefined, alors year, month, et day seront considérés comme "numeric".

-
-
- -

Description

- -

Propriétés

- -
-
{{jsxref("DateTimeFormat.prototype", "Intl.DateTimeFormat.prototype")}}
-
Permet l'ajout de propriétés à tous les objets.
-
- -

Méthodes

- -
-
{{jsxref("DateTimeFormat.supportedLocalesOf", "Intl.DateTimeFormat.supportedLocalesOf()")}}
-
Renvoie un tableau contenant les locales supportées parmis les locales fournies, sans qu'il soit nécessaire de recourir à la locale par défaut de l'implémentation.
-
- -

Instances de DateTimeFormat

- -

Propriétés

- -

Les instances de DateTimeFormat() héritent des propriétés suivantes depuis leur prototype :

- -
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat/prototype','Properties')}}
- -

Méthodes

- -
-

Les instances de DateTimeFormat() héritent des propriétés suivantes depuis leur prototype :

-{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat/prototype','Méthodes')}}
- -

Exemples

- -

Utiliser DateTimeFormat()

- -

Dans une utilisation basique sans préciser de locale, DateTimeFormat() utilise la locale et les options par défaut

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// DateTimeFormat sans arguments dépend de l'implémentation,
-// la locale par défaut, et le fuseau horaire par défaut
-console.log(new Intl.DateTimeFormat().format(date));
-// → "20/12/2012" avec une locale fr-Fr et un fuseau horaire CEST
- -

Utiliser locales

- -

Cet exemple montre quelques variations de formattage pour les dates et les heures localisées. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// les formats qui suivent se basent sur le
-// fuseau horaire CEST
-
-// l'anglais américain utilise l'ordre mois-jour-année
-console.log(new Intl.DateTimeFormat("en-US").format(date));
-// → "12/20/2012"
-
-// l'anglais britannique utilise l'ordre jour-mois-année
-console.log(new Intl.DateTimeFormat("en-GB").format(date));
-// → "20/12/2012"
-
-// le coréen utilise l'ordre année-mois-jour
-console.log(new Intl.DateTimeFormat("ko-KR").format(date));
-// → "2012. 12. 20."
-
-// l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
-console.log(new Intl.DateTimeFormat("ar-EG").format(date));
-// → "٢٠‏/١٢‏/٢٠١٢"
-
-// en ce qui concerne le japonais, les applications peuvent
-// souhaiter utiliser le calendrier japonais
-// pour lequel 2012 était l'année 24 de l'ère Heisei
-console.log(new Intl.DateTimeFormat("ja-JP-u-ca-japanese").format(date));
-// → "24/12/20"
-
-// quand un langage non support est demandé (ex : le balinais)
-// il est possible de fournir un langage de recours (ici l'indonésien)
-console.log(new Intl.DateTimeFormat(["ban", "id"]).format(date));
-// → "20/12/2012"
-
- -

Utiliser options

- -

Les formats de la date et de l'heure peuvent être personnalisés en utilisant l'argument options :

- -
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
-
-// fournir le jour de la semaine avec une date longue
-var options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
-console.log(new Intl.DateTimeFormat("de-DE", options).format(date));
-// → "Donnerstag, 20. Dezember 2012"
-
-// une application peut vouloir utiliser UTC et le rendre visible
-options.timeZone = "UTC";
-options.timeZoneName = "short";
-console.log(new Intl.DateTimeFormat("en-US", options).format(date));
-// → "Thursday, December 20, 2012, GMT"
-
-// parfois, vous voulez être précis
-options = {hour: "numeric", minute: "numeric", second: "numeric",
-           timeZoneName: "short"};
-console.log(new Intl.DateTimeFormat("en-AU", options).format(date));
-// → "2:00:00 pm AEDT"
-
-// parfois, même les USA ont besoin d'afficher une heure sur 24h
-options = {year: "numeric", month: "numeric", day: "numeric",
-           hour: "numeric", minute: "numeric", second: "numeric",
-           hour12: false};
-console.log(new Intl.DateTimeFormat("en-US", options));
-// → "12/19/2012, 19:00:00"
-
-// pour utiliser la locale par défaut du navigateur :
-console.log(new Intl.DateTimeFormat('default', options).format(date));
-// → "12/19/2012, 19:00:00" (peut varier selon la locale du navigateur)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-12.1', 'Intl.DateTimeFormat')}}{{Spec2('ES Int 1.0')}}Première définition.
{{SpecName('ES Int 2.0', '#sec-12.1', 'Intl.DateTimeFormat')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#datetimeformat-objects', 'Intl.DateTimeFormat')}}{{Spec2('ES Int Draft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.DateTimeFormat")}}

- -

Voir aussi

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}
diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.md b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.md new file mode 100644 index 0000000000..d8cc5bc6fd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/index.md @@ -0,0 +1,294 @@ +--- +title: Intl.DateTimeFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat +tags: + - Internationalisation + - Intl + - JavaScript + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat +--- +
{{JSRef}}
+ +

L'objet Intl.DateTimeFormat est un constructeur d'objets permettant de formatter des dates et des heures selon une langue.

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat.html")}}
+ +

Syntaxe

+ +
new Intl.DateTimeFormat([locales[, options]])
+Intl.DateTimeFormat.call(this[, locales[, options]])
+ +

Paramètres

+ +
+
locales{{optional_inline}}
+
+

Ce paramètre optionnel est une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour utiliser la locale par défaut du navigateur, on pourra omettre cet argument (ou passer la valeur undefined). Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}. Les clefs d'extensions Unicode suivantes sont autorisées :

+ +
+
nu
+
Système de numérotation. Les valeurs possibles incluent : "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
+
ca
+
Calendrier. Les valeurs possibles incluent : "buddhist", "chinese", "coptic", "ethiopia", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".
+
hc
+
Le type de cycle horaire à utiliser. Les valeurs possibles sont "h11", "h12", "h23", "h24".
+
+
+
options
+
+

Un objet avec certaines ou toutes les propriétés suivantes :

+ +
+
localeMatcher
+
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}
+
timeZone
+
Le fuseau horaire à utiliser. La seule valeur que doivent reconnaitre les implémentations est "UTC" ; la valeur par défaut est le fuseau horaire du moteur JavaScript. Les implémentations peuvent aussi reconnaitre les noms de fuseau horaire de la base de données IANA de fuseaux horaires, tel que "Asia/Shanghai", "Asia/Kolkata", "America/New_York".
+
hour12
+
S'il faut utiliser le format horaire sur 12 heures (au lieu de celui-ci sur 24 heures). Les valeurs possibles sont true et false ; la valeur par défaut dépend de la locale. Cette option surcharge l'étiquette hc et/ou l'option hourCycle.
+
hourCycle
+
Le cycle horaire à utiliser. Les valeurs possibles sont "h11", "h12", "h23", "h24". Cette option surcharge l'étiquette hc mais sera remplacée par hour12 si cette dernière est présente.
+
formatMatcher
+
L'algorithme de correspondance à utiliser pour le formattage. Les valeurs possibles sont "basic" et "best fit" ; par défaut "best fit". Voir les paragraphes suivants pour des informations concernant l'usage de cette propriété.
+
+ +

Les propriétés suivantes décrivent les composants date-heure à utiliser pour le formattage de la sortie.  Les implémentations ont pour obligation de supporter au minimum les ensembles suivants :

+ +
    +
  • weekday, year, month, day, hour, minute, second
  • +
  • weekday, year, month, day
  • +
  • year, month, day
  • +
  • year, month
  • +
  • month, day
  • +
  • hour, minute, second
  • +
  • hour, minute
  • +
+ +

Les implémentations peuvent supporter d'autres sous-ensembles, et les demandes seront évaluées face à toutes les combinaisons de sous-ensembles disponibles pour trouver la meilleure correspondance. Deux algorithmes sont disponibles pour cette évaluation et choisis par la propriété formatMatcher : un algorithme "basic" complètement spécifié et un algorithme "best fit" dépendant de l'implémentation.

+ +
+
weekday
+
La représentation du jour de la semaine. Les valeurs possibles sont : +
    +
  • "long" (par exemple Thursday)
  • +
  • "short" (par exemple Thu)
  • +
  • "narrow" (par exemple T). Deux jours de la semaines pourront partager la même représentation dans certaines locales (par exemple, en anglais Tuesday sera également représenté avec T en notation étroite).
  • +
+
+
era
+
La représentation de l'ère. Les valeurs possibles sont : +
    +
  • "long" (par exemple Anno Domini)
  • +
  • "short" (par exemple AD)
  • +
  • "narrow" (par exemple A)
  • +
+
+
year
+
La représentation de l'année. Les valeurs possibles sont : +
    +
  • "numeric" (par exemple 2012)
  • +
  • "2-digit" (par exemple 12)
  • +
+
+
month
+
La représentation du mois. Les valeurs possibles sont : +
    +
  • "numeric" (par exemple 2)
  • +
  • "2-digit" (par exemple 02)
  • +
  • "long" (par exemple March)
  • +
  • "short" (par exemple Mar)
  • +
  • "narrow" (par exemple M). Dans certaines locales, deux mois pourront partager la même représentation avec le style étroit (par exemple, May en anglais, sera également représenté avec M).
  • +
+
+
day
+
La représentation du jour. Les valeurs possibles sont : +
    +
  • "numeric" (par exemple 1)
  • +
  • "2-digit" (par exemple 01)
  • +
+
+
hour
+
La représentation de l'heure. Les valeurs possibles sont : +
    +
  • "numeric" (par exemple 1)
  • +
  • "2-digit" (par exemple 01)
  • +
+
+
minute
+
La représentation des minutes. Les valeurs possibles sont : +
    +
  • "numeric" (par exemple 1)
  • +
  • "2-digit" (par exemple 01)
  • +
+
+
second
+
La représentation des secondes. Les valeurs possibles sont : +
    +
  • "numeric" (par exemple 1)
  • +
  • "2-digit" (par exemple 01)
  • +
+
+
timeZoneName
+
La représentation du fuseau horaire. Les valeurs possibles sont : +
    +
  • "long" (par exemple British Summer Time)
  • +
  • "short" (par exemple GMT+1)
  • +
+
+
+ +

La valeur par défaut pour chaque composante est {{jsxref("undefined")}}, mais si toutes les composantes valent undefined, alors year, month, et day seront considérés comme "numeric".

+
+
+ +

Description

+ +

Propriétés

+ +
+
{{jsxref("DateTimeFormat.prototype", "Intl.DateTimeFormat.prototype")}}
+
Permet l'ajout de propriétés à tous les objets.
+
+ +

Méthodes

+ +
+
{{jsxref("DateTimeFormat.supportedLocalesOf", "Intl.DateTimeFormat.supportedLocalesOf()")}}
+
Renvoie un tableau contenant les locales supportées parmis les locales fournies, sans qu'il soit nécessaire de recourir à la locale par défaut de l'implémentation.
+
+ +

Instances de DateTimeFormat

+ +

Propriétés

+ +

Les instances de DateTimeFormat() héritent des propriétés suivantes depuis leur prototype :

+ +
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat/prototype','Properties')}}
+ +

Méthodes

+ +
+

Les instances de DateTimeFormat() héritent des propriétés suivantes depuis leur prototype :

+{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/DateTimeFormat/prototype','Méthodes')}}
+ +

Exemples

+ +

Utiliser DateTimeFormat()

+ +

Dans une utilisation basique sans préciser de locale, DateTimeFormat() utilise la locale et les options par défaut

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// DateTimeFormat sans arguments dépend de l'implémentation,
+// la locale par défaut, et le fuseau horaire par défaut
+console.log(new Intl.DateTimeFormat().format(date));
+// → "20/12/2012" avec une locale fr-Fr et un fuseau horaire CEST
+ +

Utiliser locales

+ +

Cet exemple montre quelques variations de formattage pour les dates et les heures localisées. Afin d'obtenir le langage utilisé au sein de l'interface utilisateur de votre application, vérifiez de bien fournir ce langage (et éventuellement des locales de recours) en utilisant l'argument locales :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// les formats qui suivent se basent sur le
+// fuseau horaire CEST
+
+// l'anglais américain utilise l'ordre mois-jour-année
+console.log(new Intl.DateTimeFormat("en-US").format(date));
+// → "12/20/2012"
+
+// l'anglais britannique utilise l'ordre jour-mois-année
+console.log(new Intl.DateTimeFormat("en-GB").format(date));
+// → "20/12/2012"
+
+// le coréen utilise l'ordre année-mois-jour
+console.log(new Intl.DateTimeFormat("ko-KR").format(date));
+// → "2012. 12. 20."
+
+// l'arabe, dans la plupart des pays arabophones, utilise les chiffres arabes
+console.log(new Intl.DateTimeFormat("ar-EG").format(date));
+// → "٢٠‏/١٢‏/٢٠١٢"
+
+// en ce qui concerne le japonais, les applications peuvent
+// souhaiter utiliser le calendrier japonais
+// pour lequel 2012 était l'année 24 de l'ère Heisei
+console.log(new Intl.DateTimeFormat("ja-JP-u-ca-japanese").format(date));
+// → "24/12/20"
+
+// quand un langage non support est demandé (ex : le balinais)
+// il est possible de fournir un langage de recours (ici l'indonésien)
+console.log(new Intl.DateTimeFormat(["ban", "id"]).format(date));
+// → "20/12/2012"
+
+ +

Utiliser options

+ +

Les formats de la date et de l'heure peuvent être personnalisés en utilisant l'argument options :

+ +
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// fournir le jour de la semaine avec une date longue
+var options = {weekday: "long", year: "numeric", month: "long", day: "numeric"};
+console.log(new Intl.DateTimeFormat("de-DE", options).format(date));
+// → "Donnerstag, 20. Dezember 2012"
+
+// une application peut vouloir utiliser UTC et le rendre visible
+options.timeZone = "UTC";
+options.timeZoneName = "short";
+console.log(new Intl.DateTimeFormat("en-US", options).format(date));
+// → "Thursday, December 20, 2012, GMT"
+
+// parfois, vous voulez être précis
+options = {hour: "numeric", minute: "numeric", second: "numeric",
+           timeZoneName: "short"};
+console.log(new Intl.DateTimeFormat("en-AU", options).format(date));
+// → "2:00:00 pm AEDT"
+
+// parfois, même les USA ont besoin d'afficher une heure sur 24h
+options = {year: "numeric", month: "numeric", day: "numeric",
+           hour: "numeric", minute: "numeric", second: "numeric",
+           hour12: false};
+console.log(new Intl.DateTimeFormat("en-US", options));
+// → "12/19/2012, 19:00:00"
+
+// pour utiliser la locale par défaut du navigateur :
+console.log(new Intl.DateTimeFormat('default', options).format(date));
+// → "12/19/2012, 19:00:00" (peut varier selon la locale du navigateur)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-12.1', 'Intl.DateTimeFormat')}}{{Spec2('ES Int 1.0')}}Première définition.
{{SpecName('ES Int 2.0', '#sec-12.1', 'Intl.DateTimeFormat')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#datetimeformat-objects', 'Intl.DateTimeFormat')}}{{Spec2('ES Int Draft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.DateTimeFormat")}}

+ +

Voir aussi

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}
diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html deleted file mode 100644 index e00599b987..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Intl.DateTimeFormat.prototype.resolvedOptions() -slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions -tags: - - DateTimeFormat - - Internationalization - - Intl - - JavaScript - - Localization - - Method - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/resolvedOptions ---- -
{{JSRef}}
- -

La méthode Intl.DateTimeFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de format et de locale pour les heures et dates, calculées pendant l'initialisation de l'objet Intl.DateTimeFormat.

- -
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-resolvedoptions.html")}}
- -

Syntaxe

- -
resolvedOptions()
- -

Valeur de retour

- -

Un nouvel objet dont les propriétés reflètent les options de format et de locale pour les heures et dates, calculées pendant l'initialisation de l'objet Intl.DateTimeFormat.

- -

Description

- -

La valeur renvoyée par cette méthode contient les propriétés suivantes :

- -
-
locale
-
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
-
calendar
-
Le calendrier utilisé (ex. "gregory" pour le calendrier grégorien).
-
numberingSystem
-
Les valeurs demandées pour les extensions Unicode "ca" et "nu" ou leurs valeurs par défaut.
-
timeZone
-
La valeur fournie par l'argument options pour cette propriété ou undefined (qui représente le fuseau horaire de l'environnement) si aucune valeur n'a été fournie. Les applications ne doivent pas s'appuyer sur ce dernier cas. En effet, de futures versions pourraient renvoyer une chaîne de caractères représentant le fuseau horaire de l'environnement et non pas undefined.
-
hour12
-
La valeur fournie pour cette propriété dans l'argument options.
-
weekday, era, year, month, day, hour, minute, second, timeZoneName
-
Les valeurs qui correspondent entre les propriétés de l'argument options et les combinaisons disponibles dans l'environnement pour les formats de date et d'heure pour la locale. Certaines de ces propriétés peuvent ne pas être présentes, cela indique que les composants indiqués ne seront pas représentés.
-
- -

Exemples

- -

Utiliser la méthode resolvedOptions()

-
var germanFakeRegion = new Intl.DateTimeFormat("de-XX", { timeZone: "UTC" });
-var usedOptions = germanFakeRegion.resolvedOptions();
-
-usedOptions.locale;          // "de"
-usedOptions.calendar;        // "gregory"
-usedOptions.numberingSystem; // "latn"
-usedOptions.timeZone;        // "UTC"
-usedOptions.month;           // "numeric"
- -

Spécifications

- -{{Specifications}} - -

Compatibilité des navigateurs

- -
{{Compat}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md new file mode 100644 index 0000000000..e00599b987 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.md @@ -0,0 +1,73 @@ +--- +title: Intl.DateTimeFormat.prototype.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions +tags: + - DateTimeFormat + - Internationalization + - Intl + - JavaScript + - Localization + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/resolvedOptions +--- +
{{JSRef}}
+ +

La méthode Intl.DateTimeFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de format et de locale pour les heures et dates, calculées pendant l'initialisation de l'objet Intl.DateTimeFormat.

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-resolvedoptions.html")}}
+ +

Syntaxe

+ +
resolvedOptions()
+ +

Valeur de retour

+ +

Un nouvel objet dont les propriétés reflètent les options de format et de locale pour les heures et dates, calculées pendant l'initialisation de l'objet Intl.DateTimeFormat.

+ +

Description

+ +

La valeur renvoyée par cette méthode contient les propriétés suivantes :

+ +
+
locale
+
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
+
calendar
+
Le calendrier utilisé (ex. "gregory" pour le calendrier grégorien).
+
numberingSystem
+
Les valeurs demandées pour les extensions Unicode "ca" et "nu" ou leurs valeurs par défaut.
+
timeZone
+
La valeur fournie par l'argument options pour cette propriété ou undefined (qui représente le fuseau horaire de l'environnement) si aucune valeur n'a été fournie. Les applications ne doivent pas s'appuyer sur ce dernier cas. En effet, de futures versions pourraient renvoyer une chaîne de caractères représentant le fuseau horaire de l'environnement et non pas undefined.
+
hour12
+
La valeur fournie pour cette propriété dans l'argument options.
+
weekday, era, year, month, day, hour, minute, second, timeZoneName
+
Les valeurs qui correspondent entre les propriétés de l'argument options et les combinaisons disponibles dans l'environnement pour les formats de date et d'heure pour la locale. Certaines de ces propriétés peuvent ne pas être présentes, cela indique que les composants indiqués ne seront pas représentés.
+
+ +

Exemples

+ +

Utiliser la méthode resolvedOptions()

+
var germanFakeRegion = new Intl.DateTimeFormat("de-XX", { timeZone: "UTC" });
+var usedOptions = germanFakeRegion.resolvedOptions();
+
+usedOptions.locale;          // "de"
+usedOptions.calendar;        // "gregory"
+usedOptions.numberingSystem; // "latn"
+usedOptions.timeZone;        // "UTC"
+usedOptions.month;           // "numeric"
+ +

Spécifications

+ +{{Specifications}} + +

Compatibilité des navigateurs

+ +
{{Compat}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html deleted file mode 100644 index 73aecce3f5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Intl.DateTimeFormat.supportedLocalesOf() -slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/supportedLocalesOf ---- -
{{JSRef}}
- -

À partir d'une locale ou d'un tableau de locales Intl.DateTimeFormat.supportedLocalesOf() renvoie un tableau qui contient les locales supportées pour le formatage des dates et des heures qui ne nécessitent pas d'avoir recours à la locale par défaut de l'environnement.

- -
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-supportedlocalesof.html")}}
- -

Syntaxe

- -
Intl.DateTimeFormat.supportedLocalesOf(locales[, options])
- -

Paramètres

- -
-
locales
-
Un chaîne de caractères au format d'une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations sur le format de l'argument locales, voir la page {{jsxref("Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
-
options
-
-

Paramètre optionnel, un objet pouvant avoir la propriété suivante :

- -
-
localeMatcher
-
L'algorithme de correspondance entre locales à utiliser. Les valeurs possibles sont "lookup" et "best fit". Pour plus d'informations sur ce sujet, voir la page {{jsxref("Intl", "Intl", "#Choix_de_la_locale")}}.
-
-
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langue qui sont prises en charge pour la mise en forme de l'heure et de la date sans qu'il soit nécessaire d'utiliser la locale par défaut de l'environnement d'exécution.

- -

Description

- -

Renvoie un tableau qui est un sous-ensemble de locales. Les balises de langues renvoyées sont celles supportées par l'environnement pour le formatage des heures et des dates. Ces balises sont déterminées en fonction de l'algorithme de correspondances de locale et des locales utilisées. Le tableau résultant fournit les locales qui permettent de ne pas avoir à utiliser la locale par défaut.

- -

Exemple

- -

Utiliser supportedLocalesOf

- -

Si on dispose d'un environnement qui supporte les locales indonésienne et allemande mais pas balinaise pour le formatage des dates et des heures,  supportedLocalesOf renverra les balises BCP 47 pour l'indonésien et l'allemand (bien que la collation pinyin ne soit pas pertinente pour les dates ni pour l'indonésien et qu'il soit peu probable qu'une variante indonésienne existe pour l'allemand). Pour l'exemple, on l'utilise l'algorithme "lookup". Si on utilisait "best fit", on pourrait considérer que l'indonésien est adéquat pour la locale balinaise (sachant que la plupart des balinais comprend l'indonésien) et donc également renvoyer la balise balinaise.

- -
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"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-12.2.2', 'Intl.DateTimeFormat.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-12.2.2', 'Intl.DateTimeFormat.supportedLocalesOf')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.supportedLocalesOf', 'Intl.DateTimeFormat.supportedLocalesOf')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.DateTimeFormat.supportedLocalesOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.md b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.md new file mode 100644 index 0000000000..73aecce3f5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.md @@ -0,0 +1,95 @@ +--- +title: Intl.DateTimeFormat.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/DateTimeFormat/supportedLocalesOf +--- +
{{JSRef}}
+ +

À partir d'une locale ou d'un tableau de locales Intl.DateTimeFormat.supportedLocalesOf() renvoie un tableau qui contient les locales supportées pour le formatage des dates et des heures qui ne nécessitent pas d'avoir recours à la locale par défaut de l'environnement.

+ +
{{EmbedInteractiveExample("pages/js/intl-datetimeformat-prototype-supportedlocalesof.html")}}
+ +

Syntaxe

+ +
Intl.DateTimeFormat.supportedLocalesOf(locales[, options])
+ +

Paramètres

+ +
+
locales
+
Un chaîne de caractères au format d'une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations sur le format de l'argument locales, voir la page {{jsxref("Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
+
options
+
+

Paramètre optionnel, un objet pouvant avoir la propriété suivante :

+ +
+
localeMatcher
+
L'algorithme de correspondance entre locales à utiliser. Les valeurs possibles sont "lookup" et "best fit". Pour plus d'informations sur ce sujet, voir la page {{jsxref("Intl", "Intl", "#Choix_de_la_locale")}}.
+
+
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langue qui sont prises en charge pour la mise en forme de l'heure et de la date sans qu'il soit nécessaire d'utiliser la locale par défaut de l'environnement d'exécution.

+ +

Description

+ +

Renvoie un tableau qui est un sous-ensemble de locales. Les balises de langues renvoyées sont celles supportées par l'environnement pour le formatage des heures et des dates. Ces balises sont déterminées en fonction de l'algorithme de correspondances de locale et des locales utilisées. Le tableau résultant fournit les locales qui permettent de ne pas avoir à utiliser la locale par défaut.

+ +

Exemple

+ +

Utiliser supportedLocalesOf

+ +

Si on dispose d'un environnement qui supporte les locales indonésienne et allemande mais pas balinaise pour le formatage des dates et des heures,  supportedLocalesOf renverra les balises BCP 47 pour l'indonésien et l'allemand (bien que la collation pinyin ne soit pas pertinente pour les dates ni pour l'indonésien et qu'il soit peu probable qu'une variante indonésienne existe pour l'allemand). Pour l'exemple, on l'utilise l'algorithme "lookup". Si on utilisait "best fit", on pourrait considérer que l'indonésien est adéquat pour la locale balinaise (sachant que la plupart des balinais comprend l'indonésien) et donc également renvoyer la balise balinaise.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-12.2.2', 'Intl.DateTimeFormat.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-12.2.2', 'Intl.DateTimeFormat.supportedLocalesOf')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.supportedLocalesOf', 'Intl.DateTimeFormat.supportedLocalesOf')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.DateTimeFormat.supportedLocalesOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.html b/files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.html deleted file mode 100644 index ff150634f6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Intl.DisplayNames() constructor -slug: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/DisplayNames -tags: - - API - - Constructeur - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/DisplayNames ---- -
{{JSRef}}
- -

Le constructeur Intl.DisplayNames() crée des objets qui permettent de fournir des traductions constantes des noms de langues, régions et systèmes d'écriture.

- -
{{EmbedInteractiveExample("pages/js/intl-displaynames.html")}}
- -

Syntaxe

- -
new Intl.DisplayNames([langues[, options]])
-
- -

Paramètres

- -
-
langues {{optional_inline}}
-
-

Une chaine avec un code de langue BCP 47, ou un tableau de telles chaines. Pour comprendre la forme générale et l'interprétation de cet argument, voyez {{jsxref("Intl", "Intl page", "#Locale_identification_and_negotiation", 1)}}. Les clés d'extensions Unicode suivantes sont permises :

- -
-
nu
-
Le système de numération à utiliser. Les valeurs possibles sont : "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
-
-
-
options {{optional_inline}}
-
-

Un objet avec certaines des des propriétés suivantes :

- -
-
localeMatcher
-
L'algorithme de correspondance régional à utiliser. Les valeurs possibles sont "lookup" et "best fit" ; celle par défaut étant "best fit". Pour plus d'informations à propos de cette option, voir {{jsxref("Global_Objects/Intl", "Intl page", "#Locale_negotiation", 1)}}.
-
style
-
Le style de mise en forme à utiliser, celui par défaut étant "long". -
    -
  • "narrow"
  • -
  • "short"
  • -
  • "long"
  • -
-
-
type
-
Le type à utiliser, celui par défaut étant "language". -
    -
  • "language"
  • -
  • "region"
  • -
  • "script"
  • -
  • "currency"
  • -
-
-
fallback
-
La valeur par défaut à utiliser, celle par défaut étant "code". -
    -
  • "code"
  • -
  • "none"
  • -
-
-
-
-
- -

Exemples

- -

Utilisation simple

- -

Dans son utilisation simple, sans spécifier de langue, une chaine dans la langue locale par défaut et avec les options par défaut sera retournée.

- -
console.log((new Intl.DisplayNames()).of('US'));
-// Expected output: 'us'
-
- -

Spécifications

- - - - - - - - - - -
Spécification
{{SpecName('Intl.DisplayNames', '#sec-intl-displaynames-constructor', 'the Intl.DisplayNames constructor')}}
- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.Intl.DisplayNames.DisplayNames")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.md b/files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.md new file mode 100644 index 0000000000..ff150634f6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/displaynames/displaynames/index.md @@ -0,0 +1,104 @@ +--- +title: Intl.DisplayNames() constructor +slug: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/DisplayNames +tags: + - API + - Constructeur + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames/DisplayNames +--- +
{{JSRef}}
+ +

Le constructeur Intl.DisplayNames() crée des objets qui permettent de fournir des traductions constantes des noms de langues, régions et systèmes d'écriture.

+ +
{{EmbedInteractiveExample("pages/js/intl-displaynames.html")}}
+ +

Syntaxe

+ +
new Intl.DisplayNames([langues[, options]])
+
+ +

Paramètres

+ +
+
langues {{optional_inline}}
+
+

Une chaine avec un code de langue BCP 47, ou un tableau de telles chaines. Pour comprendre la forme générale et l'interprétation de cet argument, voyez {{jsxref("Intl", "Intl page", "#Locale_identification_and_negotiation", 1)}}. Les clés d'extensions Unicode suivantes sont permises :

+ +
+
nu
+
Le système de numération à utiliser. Les valeurs possibles sont : "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
+
+
+
options {{optional_inline}}
+
+

Un objet avec certaines des des propriétés suivantes :

+ +
+
localeMatcher
+
L'algorithme de correspondance régional à utiliser. Les valeurs possibles sont "lookup" et "best fit" ; celle par défaut étant "best fit". Pour plus d'informations à propos de cette option, voir {{jsxref("Global_Objects/Intl", "Intl page", "#Locale_negotiation", 1)}}.
+
style
+
Le style de mise en forme à utiliser, celui par défaut étant "long". +
    +
  • "narrow"
  • +
  • "short"
  • +
  • "long"
  • +
+
+
type
+
Le type à utiliser, celui par défaut étant "language". +
    +
  • "language"
  • +
  • "region"
  • +
  • "script"
  • +
  • "currency"
  • +
+
+
fallback
+
La valeur par défaut à utiliser, celle par défaut étant "code". +
    +
  • "code"
  • +
  • "none"
  • +
+
+
+
+
+ +

Exemples

+ +

Utilisation simple

+ +

Dans son utilisation simple, sans spécifier de langue, une chaine dans la langue locale par défaut et avec les options par défaut sera retournée.

+ +
console.log((new Intl.DisplayNames()).of('US'));
+// Expected output: 'us'
+
+ +

Spécifications

+ + + + + + + + + + +
Spécification
{{SpecName('Intl.DisplayNames', '#sec-intl-displaynames-constructor', 'the Intl.DisplayNames constructor')}}
+ +

Compatibilité des navigateurs

+ +
+ + +

{{Compat("javascript.builtins.Intl.DisplayNames.DisplayNames")}}

+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/displaynames/index.html b/files/fr/web/javascript/reference/global_objects/intl/displaynames/index.html deleted file mode 100644 index 91ea840564..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/displaynames/index.html +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: Intl.DisplayNames -slug: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames -tags: - - Class - - DisplayNames - - Internationalization - - Intl - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames ---- -
{{JSRef}}
- -

L'objet Intl.DisplayNames est un constructeur d'objets qui permettent de fournir des traductions des noms de langues, régions et systèmes d'écriture.

- -
{{EmbedInteractiveExample("pages/js/intl-displaynames.html")}}
- - - -

Constructeur

- -
-
Intl.DisplayNames()
-
Crée un nouvel objet Intl.DisplayNames.
-
- -

Méthodes statiques

- -
-
Intl.DisplayNames.supportedLocalesOf()
-
Retourne un tableau contenant les langues fournies qui sont supportées sans avoir à se rabattre sur la langue locale par défaut au moment de l'exécution.
-
- -

Méthodes des instances

- -
-
Intl.DisplayNames.prototype.of()
-
Cette méthodes reçoit un code et retourne une chaine à partir sur la langue et les options fournies lors de l'instanciation de Intl.DisplayNames.
-
Intl.DisplayNames.prototype.resolvedOptions()
-
Retourne un nouvel objet dont les propriété feflètent la langue et les options de formattage calculées lors de l'initialisation de l'objet.
-
- -

Exemples

- -

Affichage des noms de régions

- -

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant à un code de région dans cette langue.

- -
// Obtenir le nom d'une région en anglais
-let nomsRégions = new Intl.DisplayNames(['en'], {type: 'region'});
-nomsRégions.of('419'); // "Latin America"
-nomsRégions.of('BZ');  // "Belize"
-nomsRégions.of('US');  // "United States"
-nomsRégions.of('BA');  // "Bosnia & Herzegovina"
-nomsRégions.of('MM');  // "Myanmar (Burma)"
-
-// Obtenir le nom d'une région en chinois traditionnel
-nomsRégions = new Intl.DisplayNames(['zh-Hant'], {type: 'region'});
-nomsRégions.of('419'; // "拉丁美洲"
-nomsRégions.of('BZ'); // "貝里斯"
-nomsRégions.of('US'); // "美國"
-nomsRégions.of('BA'); // "波士尼亞與赫塞哥維納"
-nomsRégions.of('MM'); // "緬甸"
- -

Affichage des noms de langues

- -

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant à un code de langue (possiblement suivi d'un code de système d'écriture ou de région) dans cette langue.

- -
// Obtenir le nom d'une langue en anglais
-let nomsLangues= new Intl.DisplayNames(['en'], {type: 'language'});
-nomsLangues.of('fr');      // "French"
-nomsLangues.of('de');      // "German"
-nomsLangues.of('fr-CA');   // "Canadian French"
-nomsLangues.of('zh-Hant'); // "Traditional Chinese"
-nomsLangues.of('en-US');   // "American English"
-nomsLangues.of('zh-TW');   // "Chinese (Taiwan)"
-
-// Obtenir le nom d'une langue en chinois traditionnel
-nomsLangues = new Intl.DisplayNames(['zh-Hant'], {type: 'language'});
-nomsLangues.of('fr'); // "法文"
-nomsLangues.of('zh'); // "中文"
-nomsLangues.of('de'); // "德文"
- -

Affichage des noms de systèmes d'écriture

- -

To create an Intl.DisplayNames for a locale and get the display name for a script code.

- -

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant à un code de système d'écriture dans cette langue.

- -
// Obtenir le nom d'un système d'écriture en anglais
-let nomsSystèmes = new Intl.DisplayNames(['en'], {type: 'script'});
-nomsSystèmes.of('Latn'); // "Latin"
-nomsSystèmes.of('Arab'); // "Arabic"
-nomsSystèmes.of('Kana'); // "Katakana"
-
-// Obtenir le nom d'un système d'écriture en chinois traditionnel
-nomsSystèmes = new Intl.DisplayNames(['zh-Hant'], {type: 'script'});
-nomsSystèmes.of('Latn'); // "拉丁文"
-nomsSystèmes.of('Arab'); // "阿拉伯文"
-nomsSystèmes.of('Kana'); // "片假名"
- -

Affichage des noms de devises

- -

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant au code d'une devise.

- -
// Obtenir le nom d'une devise in English
-let nomsDevises = new Intl.DisplayNames(['en'], {type: 'currency'});
-nomsDevises.of('USD'); // "US Dollar"
-nomsDevises.of('EUR'); // "Euro"
-nomsDevises.of('TWD'); // "New Taiwan Dollar"
-nomsDevises.of('CNY'); // "Chinese Yuan"
-
-// Obtenir le nom d'une devise in Traditional Chinese
-nomsDevises = new Intl.DisplayNames(['zh-Hant'], {type: 'currency'});
-nomsDevises.of('USD'); // "美元"
-nomsDevises.of('EUR'); // "歐元"
-nomsDevises.of('TWD'); // "新台幣"
-nomsDevises.of('CNY'); // "人民幣"
- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('Intl.DisplayNames', '#intl-displaynames-objects', 'DisplayNames')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.DisplayNames")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/displaynames/index.md b/files/fr/web/javascript/reference/global_objects/intl/displaynames/index.md new file mode 100644 index 0000000000..91ea840564 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/displaynames/index.md @@ -0,0 +1,144 @@ +--- +title: Intl.DisplayNames +slug: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames +tags: + - Class + - DisplayNames + - Internationalization + - Intl + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames +--- +
{{JSRef}}
+ +

L'objet Intl.DisplayNames est un constructeur d'objets qui permettent de fournir des traductions des noms de langues, régions et systèmes d'écriture.

+ +
{{EmbedInteractiveExample("pages/js/intl-displaynames.html")}}
+ + + +

Constructeur

+ +
+
Intl.DisplayNames()
+
Crée un nouvel objet Intl.DisplayNames.
+
+ +

Méthodes statiques

+ +
+
Intl.DisplayNames.supportedLocalesOf()
+
Retourne un tableau contenant les langues fournies qui sont supportées sans avoir à se rabattre sur la langue locale par défaut au moment de l'exécution.
+
+ +

Méthodes des instances

+ +
+
Intl.DisplayNames.prototype.of()
+
Cette méthodes reçoit un code et retourne une chaine à partir sur la langue et les options fournies lors de l'instanciation de Intl.DisplayNames.
+
Intl.DisplayNames.prototype.resolvedOptions()
+
Retourne un nouvel objet dont les propriété feflètent la langue et les options de formattage calculées lors de l'initialisation de l'objet.
+
+ +

Exemples

+ +

Affichage des noms de régions

+ +

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant à un code de région dans cette langue.

+ +
// Obtenir le nom d'une région en anglais
+let nomsRégions = new Intl.DisplayNames(['en'], {type: 'region'});
+nomsRégions.of('419'); // "Latin America"
+nomsRégions.of('BZ');  // "Belize"
+nomsRégions.of('US');  // "United States"
+nomsRégions.of('BA');  // "Bosnia & Herzegovina"
+nomsRégions.of('MM');  // "Myanmar (Burma)"
+
+// Obtenir le nom d'une région en chinois traditionnel
+nomsRégions = new Intl.DisplayNames(['zh-Hant'], {type: 'region'});
+nomsRégions.of('419'; // "拉丁美洲"
+nomsRégions.of('BZ'); // "貝里斯"
+nomsRégions.of('US'); // "美國"
+nomsRégions.of('BA'); // "波士尼亞與赫塞哥維納"
+nomsRégions.of('MM'); // "緬甸"
+ +

Affichage des noms de langues

+ +

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant à un code de langue (possiblement suivi d'un code de système d'écriture ou de région) dans cette langue.

+ +
// Obtenir le nom d'une langue en anglais
+let nomsLangues= new Intl.DisplayNames(['en'], {type: 'language'});
+nomsLangues.of('fr');      // "French"
+nomsLangues.of('de');      // "German"
+nomsLangues.of('fr-CA');   // "Canadian French"
+nomsLangues.of('zh-Hant'); // "Traditional Chinese"
+nomsLangues.of('en-US');   // "American English"
+nomsLangues.of('zh-TW');   // "Chinese (Taiwan)"
+
+// Obtenir le nom d'une langue en chinois traditionnel
+nomsLangues = new Intl.DisplayNames(['zh-Hant'], {type: 'language'});
+nomsLangues.of('fr'); // "法文"
+nomsLangues.of('zh'); // "中文"
+nomsLangues.of('de'); // "德文"
+ +

Affichage des noms de systèmes d'écriture

+ +

To create an Intl.DisplayNames for a locale and get the display name for a script code.

+ +

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant à un code de système d'écriture dans cette langue.

+ +
// Obtenir le nom d'un système d'écriture en anglais
+let nomsSystèmes = new Intl.DisplayNames(['en'], {type: 'script'});
+nomsSystèmes.of('Latn'); // "Latin"
+nomsSystèmes.of('Arab'); // "Arabic"
+nomsSystèmes.of('Kana'); // "Katakana"
+
+// Obtenir le nom d'un système d'écriture en chinois traditionnel
+nomsSystèmes = new Intl.DisplayNames(['zh-Hant'], {type: 'script'});
+nomsSystèmes.of('Latn'); // "拉丁文"
+nomsSystèmes.of('Arab'); // "阿拉伯文"
+nomsSystèmes.of('Kana'); // "片假名"
+ +

Affichage des noms de devises

+ +

Pour créer un objet Intl.DisplayNames pour une langue et obtenir le nom correspondant au code d'une devise.

+ +
// Obtenir le nom d'une devise in English
+let nomsDevises = new Intl.DisplayNames(['en'], {type: 'currency'});
+nomsDevises.of('USD'); // "US Dollar"
+nomsDevises.of('EUR'); // "Euro"
+nomsDevises.of('TWD'); // "New Taiwan Dollar"
+nomsDevises.of('CNY'); // "Chinese Yuan"
+
+// Obtenir le nom d'une devise in Traditional Chinese
+nomsDevises = new Intl.DisplayNames(['zh-Hant'], {type: 'currency'});
+nomsDevises.of('USD'); // "美元"
+nomsDevises.of('EUR'); // "歐元"
+nomsDevises.of('TWD'); // "新台幣"
+nomsDevises.of('CNY'); // "人民幣"
+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('Intl.DisplayNames', '#intl-displaynames-objects', 'DisplayNames')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.DisplayNames")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html b/files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html deleted file mode 100644 index a239a169c1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Intl.getCanonicalLocales() -slug: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/getCanonicalLocales ---- -
{{JSRef}}
- -

La méthode Intl.getCanonicalLocales() renvoie un tableau contenant les noms canoniques des locales. Les doublons seront fusionnés et les éléments passés en arguments doivent être des étiquettes de langues valides.

- -
{{EmbedInteractiveExample("pages/js/intl-getcanonicallocales.html")}}
- -

Syntaxe

- -
Intl.getCanonicalLocales(locales)
- -

Paramètres

- -
-
locales
-
Une liste de chaînes ({{jsxref("String")}}) dont on veut obtenir les noms canoniques pour les locales correspondantes.
-
- -

Valeur de retour

- -

Un tableau qui contient les noms canoniques des locales.

- -

Exemples

- -
Intl.getCanonicalLocales("EN-US"); // ["en-US"]
-Intl.getCanonicalLocales(["EN-US", "Fr"]); // ["en-US", "fr"]
-
-Intl.getCanonicalLocales("EN_US");
-// RangeError:'EN_US' is not a structurally valid language tag
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int Draft', '#sec-intl.getcanonicallocales', 'Intl.getCanonicalLocales')}}{{Spec2('ES Int Draft')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.getCanonicalLocales")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.md b/files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.md new file mode 100644 index 0000000000..a239a169c1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/getcanonicallocales/index.md @@ -0,0 +1,70 @@ +--- +title: Intl.getCanonicalLocales() +slug: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/getCanonicalLocales +--- +
{{JSRef}}
+ +

La méthode Intl.getCanonicalLocales() renvoie un tableau contenant les noms canoniques des locales. Les doublons seront fusionnés et les éléments passés en arguments doivent être des étiquettes de langues valides.

+ +
{{EmbedInteractiveExample("pages/js/intl-getcanonicallocales.html")}}
+ +

Syntaxe

+ +
Intl.getCanonicalLocales(locales)
+ +

Paramètres

+ +
+
locales
+
Une liste de chaînes ({{jsxref("String")}}) dont on veut obtenir les noms canoniques pour les locales correspondantes.
+
+ +

Valeur de retour

+ +

Un tableau qui contient les noms canoniques des locales.

+ +

Exemples

+ +
Intl.getCanonicalLocales("EN-US"); // ["en-US"]
+Intl.getCanonicalLocales(["EN-US", "Fr"]); // ["en-US", "fr"]
+
+Intl.getCanonicalLocales("EN_US");
+// RangeError:'EN_US' is not a structurally valid language tag
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int Draft', '#sec-intl.getcanonicallocales', 'Intl.getCanonicalLocales')}}{{Spec2('ES Int Draft')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.getCanonicalLocales")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/index.html b/files/fr/web/javascript/reference/global_objects/intl/index.html deleted file mode 100644 index 7f1ccb56fd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/index.html +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Intl -slug: Web/JavaScript/Reference/Global_Objects/Intl -tags: - - Espace de noms - - Internationalisation - - Intl - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl ---- -
{{JSRef}}
- -

L'objet Intl est l'espace de noms pour l'API d'Internationalisation d'ECMAScript. Elle fournit des outils de comparaison de chaînes de caractères, de formatage des nombres, de dates et de l'heure selon les langues. Intl donne accès à plusieurs constructeurs et fonctionnalités communs aux constructeurs destinés à l'internationalion et à d'autres fonctions dépendantes des langues.

- -

Propriétés constructrices

- -
-
{{jsxref("Objets_globaux/Collator", "Intl.Collator")}}
-
Le constructeur pour les ordonnanceurs (collators en anglais) et les objets qui permettent la comparaison de chaînes de caractères selon les règles spécifiques d'une langue.
-
{{jsxref("Objets_globaux/DateTimeFormat", "Intl.DateTimeFormat")}}
-
Le constructeur pour les objets qui permettent le formatage des dates et de l'heure selon les règles spécifiques d'une langue.
-
{{jsxref("Global_Objects/Intl/DisplayNames/DisplayNames", "Intl.DisplayNames()")}}
-
Le constructeur pour les objets qui permettent de fournir des traductions constantes de noms de langues, régions et systèmes d'écriture.
-
{{jsxref("Objets_globaux/ListFormat", "Intl.ListFormat")}}
-
Le constructeur pour les objets qui permettent le formatage des listes selon les règles spécifiques d'une langue.
-
{{jsxref("Global_Objects/Intl/Locale/Locale", "Intl.Locale()")}}
-
Le constructeur pour les objets qui représentent un identifiant de langue Unicode.
-
{{jsxref("Objets_globaux/NumberFormat", "Intl.NumberFormat")}}
-
Le constructeur pour les objets qui permettent le formatage des nombres selon les règles spécifiques d'une langue.
-
{{jsxref("Objets_globaux/PluralRules","Intl.PluralRules")}}
-
Le constructeur pour les objets qui permettent le formatage prenant en compte le pluriel et les règles de pluriel spécifiques d'une langue.
-
{{jsxref("Objets_globaux/RelativeTimeFormat","Intl.RelativeTimeFormat")}}
-
Le constructeur pour les objets qui permettent le formatage d'intervalles de temps spécifiques d'une langue.
-
- -

Méthodes statiques

- -
-
{{jsxref("Intl.getCanonicalLocales()")}}
-
Méthode renvoyant les noms canoniques des locales.
-
- -

Identification et choix de la locale

- -

Les constructeurs d'internationalisation, ainsi que plusieurs autres méthodes spécifiques à une langue dans d'autres constructeurs (voir ci-dessous {{anch("See_also", "Voir aussi")}}), utilisent un schéma commun pour identifier les locales et déterminer celle qu'ils utiliseront effectivement : ils acceptent tous les arguments locales et options, et ils négocient les locales demandées face aux locales qu'ils supportent, en utilisant un algorithme spécifié dans la propriété options.localeMatcher.

- -

Argument locales

- -

L'argument locales peut être soit une chaîne de caractères comportant une balise de langue BCP 47, soit un tableau de telles balises. Si l'argument n'est pas fourni ou est indéfini, la locale par défaut de l'environnement d'exécution est utilisée.

- -

Une balise de langue BCP 47 définit un langage et contient au minimum un code de langue principale. Dans sa forme la plus fréquente, elle peut contenir, dans l'ordre : un code de langue, un code de script et un code de pays ou de région, tous séparés par des tirets. Bien que la balise ne soit sensible à la casse, il est recommandé d'utiliser des initiales majuscules pour le code de script, des majuscules pour les codes de pays et de région, et des minuscules pour tout le reste.

- -

Exemples :

- - - -

Les sous balises identifiant les langues, les scripts, les pays (régions) et les variantes (rarement utilisées) dans les balises de langue BCP 47 peuvent être trouvées dans le registre IANA des Sous balises de Langues

- -

La BCP 47 permet également des extensions. Les fonctions d'internalisation de JavaScript utilisent l'extension "u" (Unicode), qui peut utilisée pour demander une personnalisation supplémentaire des objets {{jsxref("Collator")}}, {{jsxref("NumberFormat")}}, ou {{jsxref("DateTimeFormat")}}. Exemples :

- - - -

Négociation de la locale

- -

L'argument locales, après retrait de toutes les extensions Unicode, est interprété comme une requête classée par priorité émanant de l'application. L'environnement d'exécution le compare aux locales dont il dispose et choisit la meilleure disponible. Il existe deux algorithmes d'association : l'apparieur "lookup" suit l'algorithme Lookup spécifié dans BCP 47; l'apparieur "meilleure correspondance" laisse l'environnement d'exécution fournir une locale qui est au moins aussi, mais possiblement mieux, adaptée à la demande que le résultat de l'algorithme Lookup. Si l'application ne fournit pas d'argument locales ou que l'environnement d'exécution ne dispose pas d'une locale qui corresponde à la requête, alors la locale par défaut de l'environnement d'exécution est utilisée. L'apparieur peut être choisi en utilisant une propriété de l'argument options (voir ci-dessous).

- -

Si la balise de la langue choisie comporte une sous chaîne d'extension Unicode, cette extension est maintenant utilisée pour personnaliser l'objet construit ou le comportement de la fonction. Chaque constructeur ou fonction ne supporte qu'un sous-ensemble des clés définies pour le extension Unicode, et les valeurs supportées dépendent souvent de la balise de langue. Par exemple, la clé "co" (collation) n'est supportée que par le constructeur {{jsxref("Collator")}}, et sa valeur "phonebk" n'est supportée que pour l'allemand.

- -

Argument options

- -

L'argument options doit être un objet ayant des propriétés qui varient suivant qu'il s'agit des constructeurs ou des fonctions. Si l'argument options n'est pas fourni ou est indéfini, des valeurs par défaut seront utilisées pour toutes les propriétés.

- -

Une propriété est supportée par tous les constructeurs et toutes les fonctions fondés sur les locales : la propriété localeMatcher, dont la valeur doit être la chaîne "lookup" ou "best fit", et qui sélectionne l'un des algorithmes d'appariement décrits ci-dessus.

- -

Exemples

- -

Formater des dates et nombres

- -

Vous pouvez utiliser Intl pour formater des dates et nombres dans un format qui est conventionnel pour une langue et une région spécifiques :

- -
const compte = 26254.39;
-const date = new Date("2012-05-24");
-
-function afficher (langue) {
-  console.log(
-    `${new Intl.DateTimeFormat(langue).format(date)} ${new Intl.NumberFormat(langue).format(compte)}`
-  );
-}
-
-afficher("en-US");
-// résultat attendu : 5/24/2012 26,254.39
-
-afficher("de-DE");
-// résultat attendu : 24.5.2012 26.254,39
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-8', 'Intl')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-8', 'Intl')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#intl-object', 'Intl')}}{{Spec2('ES Int Draft')}}Ajout de Intl.getCanonicalLocales dans la 4e édition.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/index.md b/files/fr/web/javascript/reference/global_objects/intl/index.md new file mode 100644 index 0000000000..7f1ccb56fd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/index.md @@ -0,0 +1,162 @@ +--- +title: Intl +slug: Web/JavaScript/Reference/Global_Objects/Intl +tags: + - Espace de noms + - Internationalisation + - Intl + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl +--- +
{{JSRef}}
+ +

L'objet Intl est l'espace de noms pour l'API d'Internationalisation d'ECMAScript. Elle fournit des outils de comparaison de chaînes de caractères, de formatage des nombres, de dates et de l'heure selon les langues. Intl donne accès à plusieurs constructeurs et fonctionnalités communs aux constructeurs destinés à l'internationalion et à d'autres fonctions dépendantes des langues.

+ +

Propriétés constructrices

+ +
+
{{jsxref("Objets_globaux/Collator", "Intl.Collator")}}
+
Le constructeur pour les ordonnanceurs (collators en anglais) et les objets qui permettent la comparaison de chaînes de caractères selon les règles spécifiques d'une langue.
+
{{jsxref("Objets_globaux/DateTimeFormat", "Intl.DateTimeFormat")}}
+
Le constructeur pour les objets qui permettent le formatage des dates et de l'heure selon les règles spécifiques d'une langue.
+
{{jsxref("Global_Objects/Intl/DisplayNames/DisplayNames", "Intl.DisplayNames()")}}
+
Le constructeur pour les objets qui permettent de fournir des traductions constantes de noms de langues, régions et systèmes d'écriture.
+
{{jsxref("Objets_globaux/ListFormat", "Intl.ListFormat")}}
+
Le constructeur pour les objets qui permettent le formatage des listes selon les règles spécifiques d'une langue.
+
{{jsxref("Global_Objects/Intl/Locale/Locale", "Intl.Locale()")}}
+
Le constructeur pour les objets qui représentent un identifiant de langue Unicode.
+
{{jsxref("Objets_globaux/NumberFormat", "Intl.NumberFormat")}}
+
Le constructeur pour les objets qui permettent le formatage des nombres selon les règles spécifiques d'une langue.
+
{{jsxref("Objets_globaux/PluralRules","Intl.PluralRules")}}
+
Le constructeur pour les objets qui permettent le formatage prenant en compte le pluriel et les règles de pluriel spécifiques d'une langue.
+
{{jsxref("Objets_globaux/RelativeTimeFormat","Intl.RelativeTimeFormat")}}
+
Le constructeur pour les objets qui permettent le formatage d'intervalles de temps spécifiques d'une langue.
+
+ +

Méthodes statiques

+ +
+
{{jsxref("Intl.getCanonicalLocales()")}}
+
Méthode renvoyant les noms canoniques des locales.
+
+ +

Identification et choix de la locale

+ +

Les constructeurs d'internationalisation, ainsi que plusieurs autres méthodes spécifiques à une langue dans d'autres constructeurs (voir ci-dessous {{anch("See_also", "Voir aussi")}}), utilisent un schéma commun pour identifier les locales et déterminer celle qu'ils utiliseront effectivement : ils acceptent tous les arguments locales et options, et ils négocient les locales demandées face aux locales qu'ils supportent, en utilisant un algorithme spécifié dans la propriété options.localeMatcher.

+ +

Argument locales

+ +

L'argument locales peut être soit une chaîne de caractères comportant une balise de langue BCP 47, soit un tableau de telles balises. Si l'argument n'est pas fourni ou est indéfini, la locale par défaut de l'environnement d'exécution est utilisée.

+ +

Une balise de langue BCP 47 définit un langage et contient au minimum un code de langue principale. Dans sa forme la plus fréquente, elle peut contenir, dans l'ordre : un code de langue, un code de script et un code de pays ou de région, tous séparés par des tirets. Bien que la balise ne soit sensible à la casse, il est recommandé d'utiliser des initiales majuscules pour le code de script, des majuscules pour les codes de pays et de région, et des minuscules pour tout le reste.

+ +

Exemples :

+ + + +

Les sous balises identifiant les langues, les scripts, les pays (régions) et les variantes (rarement utilisées) dans les balises de langue BCP 47 peuvent être trouvées dans le registre IANA des Sous balises de Langues

+ +

La BCP 47 permet également des extensions. Les fonctions d'internalisation de JavaScript utilisent l'extension "u" (Unicode), qui peut utilisée pour demander une personnalisation supplémentaire des objets {{jsxref("Collator")}}, {{jsxref("NumberFormat")}}, ou {{jsxref("DateTimeFormat")}}. Exemples :

+ + + +

Négociation de la locale

+ +

L'argument locales, après retrait de toutes les extensions Unicode, est interprété comme une requête classée par priorité émanant de l'application. L'environnement d'exécution le compare aux locales dont il dispose et choisit la meilleure disponible. Il existe deux algorithmes d'association : l'apparieur "lookup" suit l'algorithme Lookup spécifié dans BCP 47; l'apparieur "meilleure correspondance" laisse l'environnement d'exécution fournir une locale qui est au moins aussi, mais possiblement mieux, adaptée à la demande que le résultat de l'algorithme Lookup. Si l'application ne fournit pas d'argument locales ou que l'environnement d'exécution ne dispose pas d'une locale qui corresponde à la requête, alors la locale par défaut de l'environnement d'exécution est utilisée. L'apparieur peut être choisi en utilisant une propriété de l'argument options (voir ci-dessous).

+ +

Si la balise de la langue choisie comporte une sous chaîne d'extension Unicode, cette extension est maintenant utilisée pour personnaliser l'objet construit ou le comportement de la fonction. Chaque constructeur ou fonction ne supporte qu'un sous-ensemble des clés définies pour le extension Unicode, et les valeurs supportées dépendent souvent de la balise de langue. Par exemple, la clé "co" (collation) n'est supportée que par le constructeur {{jsxref("Collator")}}, et sa valeur "phonebk" n'est supportée que pour l'allemand.

+ +

Argument options

+ +

L'argument options doit être un objet ayant des propriétés qui varient suivant qu'il s'agit des constructeurs ou des fonctions. Si l'argument options n'est pas fourni ou est indéfini, des valeurs par défaut seront utilisées pour toutes les propriétés.

+ +

Une propriété est supportée par tous les constructeurs et toutes les fonctions fondés sur les locales : la propriété localeMatcher, dont la valeur doit être la chaîne "lookup" ou "best fit", et qui sélectionne l'un des algorithmes d'appariement décrits ci-dessus.

+ +

Exemples

+ +

Formater des dates et nombres

+ +

Vous pouvez utiliser Intl pour formater des dates et nombres dans un format qui est conventionnel pour une langue et une région spécifiques :

+ +
const compte = 26254.39;
+const date = new Date("2012-05-24");
+
+function afficher (langue) {
+  console.log(
+    `${new Intl.DateTimeFormat(langue).format(date)} ${new Intl.NumberFormat(langue).format(compte)}`
+  );
+}
+
+afficher("en-US");
+// résultat attendu : 5/24/2012 26,254.39
+
+afficher("de-DE");
+// résultat attendu : 24.5.2012 26.254,39
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-8', 'Intl')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-8', 'Intl')}}{{Spec2('ES Int 2.0')}}
{{SpecName('ES Int Draft', '#intl-object', 'Intl')}}{{Spec2('ES Int Draft')}}Ajout de Intl.getCanonicalLocales dans la 4e édition.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.html b/files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.html deleted file mode 100644 index ab43e1466e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Intl​.ListFormat.prototype​.format() -slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/format -tags: - - Internationalisation - - Intl - - JavaScript - - ListFormat - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/format -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/format ---- -
{{JSRef}}
- -

La méthode format() renvoie une chaîne de caractères représentant la liste passée en argument, mise en forme selon la langue choisie (lors de la construction de l'objet Intl.ListFormat).

- -
{{EmbedInteractiveExample("pages/js/intl-listformat.html")}}
- -

Description

- -

La méthode format() renvoie une chaîne de caractères qui a été formatée en fonction des paramètres fournis à l'objet Intl.ListFormat. Les paramètres locales et options permettent de personnaliser le comportement de format() et de gérer différentes conventions linguistiques au sein d'une application, notamment pour la mise en forme des listes.

- -

Syntaxe

- -
listFormat.format([list]);
- -

Paramètres

- -
-
list
-
Un objet itérable (ex. un tableau / {{jsxref("Array")}}).
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant les éléments de la liste et mise en forme en fonction de la langue souhaitée (grâce au paramètre locales passé au constructeur Intl.ListFormat).

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormat.prototype.formatProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.ListFormat.format")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.md b/files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.md new file mode 100644 index 0000000000..ab43e1466e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/listformat/format/index.md @@ -0,0 +1,67 @@ +--- +title: Intl​.ListFormat.prototype​.format() +slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/format +tags: + - Internationalisation + - Intl + - JavaScript + - ListFormat + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/format +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/format +--- +
{{JSRef}}
+ +

La méthode format() renvoie une chaîne de caractères représentant la liste passée en argument, mise en forme selon la langue choisie (lors de la construction de l'objet Intl.ListFormat).

+ +
{{EmbedInteractiveExample("pages/js/intl-listformat.html")}}
+ +

Description

+ +

La méthode format() renvoie une chaîne de caractères qui a été formatée en fonction des paramètres fournis à l'objet Intl.ListFormat. Les paramètres locales et options permettent de personnaliser le comportement de format() et de gérer différentes conventions linguistiques au sein d'une application, notamment pour la mise en forme des listes.

+ +

Syntaxe

+ +
listFormat.format([list]);
+ +

Paramètres

+ +
+
list
+
Un objet itérable (ex. un tableau / {{jsxref("Array")}}).
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant les éléments de la liste et mise en forme en fonction de la langue souhaitée (grâce au paramètre locales passé au constructeur Intl.ListFormat).

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormat.prototype.formatProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.ListFormat.format")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.html b/files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.html deleted file mode 100644 index 8f13257373..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Intl​.List​Format​.prototype​.formatToParts() -slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/formatToParts -tags: - - Internationalisation - - Intl - - JavaScript - - ListFormat - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/formatToParts -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/formatToParts ---- -
{{JSRef}}{{Draft}}
- -

La méthode Intl.ListFormat.prototype.formatToParts() renvoie un tableau ({{jsxref("Array")}}) d'objets représentants les différentes composantes de la chaine de caractères qui est le résultat du formatage de la liste (selon les options de locale et de style indiquées).

- -

Syntaxe

- -
Intl.ListFormat.prototype.formatToParts(list)
-
- -

Paramètres

- -
-
list
-
Un tableau ({{jsxref("Array")}}) de valeurs à mettre en forme selon une locale et des options de style.
-
- -

Valeur de retour

- -

Un tableau ({{jsxref("Array")}}) de fragments composants la chaîne de caractères pour la liste formatée.

- -

Description

- -

Alors que la méthode {{jsxref("ListFormat.prototype.format()", "Intl.ListFormat.prototype.format()")}} renvoie une chaîne de caractères avec la liste formatée (en fonction de la locale et des options de style), formatToParts() renvoie un tableau des différentes composantes de cette chaîne.

- -

Chaque élément du tableau résultant possède deux propriétés : type et value. La propriété type pourra valoir "element" (pour indiquer une valeur de la liste) ou "literal" (pour indiquer un élément linguistique). La propriété value fournit quant à elle le contenu du fragment sous forme d'une chaîne de caractères.

- -

Les options de locale et de style utilisées pour le formatage sont fournies lors de la construction de l'instance {{jsxref("ListFormat", "Intl.ListFormat")}}.

- -

Exemples

- -
const fruits = ['Apple', 'Orange', 'Pineapple'];
-const myListFormat = new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' });
-
-console.table(myListFormat.formatToParts(fruits));
-// [
-//  { "type": "element", "value": "Apple" },
-//  { "type": "literal", "value": ", " },
-//  { "type": "element", "value": "Orange" },
-//  { "type": "literal", "value": ", and " },
-//  { "type": "element", "value": "Pineapple" }
-// ]
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Intl.ListFormat.prototype.formatToParts proposalStage 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.ListFormat.formatToParts")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.md b/files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.md new file mode 100644 index 0000000000..8f13257373 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/listformat/formattoparts/index.md @@ -0,0 +1,89 @@ +--- +title: Intl​.List​Format​.prototype​.formatToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/formatToParts +tags: + - Internationalisation + - Intl + - JavaScript + - ListFormat + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/formatToParts +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/formatToParts +--- +
{{JSRef}}{{Draft}}
+ +

La méthode Intl.ListFormat.prototype.formatToParts() renvoie un tableau ({{jsxref("Array")}}) d'objets représentants les différentes composantes de la chaine de caractères qui est le résultat du formatage de la liste (selon les options de locale et de style indiquées).

+ +

Syntaxe

+ +
Intl.ListFormat.prototype.formatToParts(list)
+
+ +

Paramètres

+ +
+
list
+
Un tableau ({{jsxref("Array")}}) de valeurs à mettre en forme selon une locale et des options de style.
+
+ +

Valeur de retour

+ +

Un tableau ({{jsxref("Array")}}) de fragments composants la chaîne de caractères pour la liste formatée.

+ +

Description

+ +

Alors que la méthode {{jsxref("ListFormat.prototype.format()", "Intl.ListFormat.prototype.format()")}} renvoie une chaîne de caractères avec la liste formatée (en fonction de la locale et des options de style), formatToParts() renvoie un tableau des différentes composantes de cette chaîne.

+ +

Chaque élément du tableau résultant possède deux propriétés : type et value. La propriété type pourra valoir "element" (pour indiquer une valeur de la liste) ou "literal" (pour indiquer un élément linguistique). La propriété value fournit quant à elle le contenu du fragment sous forme d'une chaîne de caractères.

+ +

Les options de locale et de style utilisées pour le formatage sont fournies lors de la construction de l'instance {{jsxref("ListFormat", "Intl.ListFormat")}}.

+ +

Exemples

+ +
const fruits = ['Apple', 'Orange', 'Pineapple'];
+const myListFormat = new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' });
+
+console.table(myListFormat.formatToParts(fruits));
+// [
+//  { "type": "element", "value": "Apple" },
+//  { "type": "literal", "value": ", " },
+//  { "type": "element", "value": "Orange" },
+//  { "type": "literal", "value": ", and " },
+//  { "type": "element", "value": "Pineapple" }
+// ]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Intl.ListFormat.prototype.formatToParts proposalStage 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.ListFormat.formatToParts")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/index.html b/files/fr/web/javascript/reference/global_objects/intl/listformat/index.html deleted file mode 100644 index 6bc6208998..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/listformat/index.html +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: Intl.ListFormat -slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat -tags: - - Experimental - - Internationalisation - - Intl - - JavaScript - - ListFormat - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat ---- -
{{JSRef}}
- -

L'objet Intl.ListFormat est un constructeur d'objets qui permettent de formater des listes de façon différente selon la langue utilisée.

- -
{{EmbedInteractiveExample("pages/js/intl-listformat.html")}}
- - - -

Syntax

- -
new Intl.ListFormat([locales[, options]])
-
- -

Paramètres

- -
-
locales{{optional_inline}}
-
-

Paramètre optionnel. Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.

-
-
options{{optional_inline}}
-
-

Paramètre optionnel. Un objet avec certaines ou toutes les propriétés suivantes :

- -
-
localeMatcher
-
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Intl","Intl","##Choix_de_la_locale")}}.
-
type
-
Le format de sortie pour le message. Les valeurs possibles sont : -
    -
  • "conjunction" : qui concaténera les éléments de la liste avec des et. Cela produira par exemple, en anglais : A, B, and C
  • -
  • "disjunction" : qui concaténera les éléments de la liste avec des ou. Cela produira par exemple, en anglais : A, B, or C
  • -
  • "unit" : qui permet de gérer des listes de valeurs avec des unités. Cela produira par exemple 5 livres, 12 onces
  • -
-
-
style
-
Le niveau de concision/longueur du message obtenu. Les valeurs possibles sont : -
    -
  • "long" : par exemple A, B, and C
  • -
  • "narrow" : cette valeur permet uniquement d'utiliser le type unit et affichera un message concis : par exemple A, B, C
  • -
  • "short" : par exemple A, B, C
  • -
-
-
-
-
- -

Description

- -

Propriétés

- -
-
{{jsxref("ListFormat.prototype", "Intl.ListFormat.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à l'ensemble des objets de ce type.
-
- -

Méthodes

- -
-
{{jsxref("ListFormat.supportedLocalesOf", "Intl.ListFormat.supportedLocalesOf()")}}
-
Cette méthode renvoie un tableau des locales prises en charge par le moteur pour le formatage des heures sans qu'il y ait besoin d'utiliser la locale de l'environnement d'exécution.
-
- -

Instances de Intl.ListFormat

- -

Toutes les instances de Intl.ListFormat héritent de Intl.ListFormat.prototype.

- -

Propriétés

- -
-
Intl.ListFormat.prototype.constructor
-
Définit la fonction qui crée le prototype d'un objet.
-
- -

Méthodes

- -
-
{{jsxref("ListFormat.prototype.format","Intl.ListFormat.prototype.format()")}}
-
Renvoie une chaîne de caractères mise en forme selon la langue voulue et qui représente les éléments de la liste.
-
- -

Exemples

- -

Utiliser format()

- -

Dans l'exemple qui suit, on voit comment créer un formateur de liste pour l'anglais.

- -
const list = ['Motorcycle', 'Bus', 'Car'];
-
- console.log(new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' }).format(list));
-// > Motorcycle, Bus and Car
-
- console.log(new Intl.ListFormat('en-GB', { style: 'short', type: 'disjunction' }).format(list));
-// > Motorcycle, Bus or Car
-
- console.log(new Intl.ListFormat('en-GB', { style: 'narrow', type: 'unit' }).format(list));
-// > Motorcycle Bus Car
-
- -

Utiliser formatToParts()

- -

Dans l'exemple qui suit, on voit comment créer un formateur de liste, renvoyant les fragments, pour l'anglais

- -
const list = ['Motorcycle', 'Bus', 'Car'];
-console.log(new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' }).formatToParts(list));
-
-// > [ { "type": "element", "value": "Motorcycle" },
-       { "type": "literal", "value": ", " },
-       { "type": "element", "value": "Bus" },
-       { "type": "literal", "value": ", and " },
-       { "type": "element", "value": "Car" } ];
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormatProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.ListFormat")}}

- -

Voir aussi

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}
diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/index.md b/files/fr/web/javascript/reference/global_objects/intl/listformat/index.md new file mode 100644 index 0000000000..6bc6208998 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/listformat/index.md @@ -0,0 +1,152 @@ +--- +title: Intl.ListFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat +tags: + - Experimental + - Internationalisation + - Intl + - JavaScript + - ListFormat + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat +--- +
{{JSRef}}
+ +

L'objet Intl.ListFormat est un constructeur d'objets qui permettent de formater des listes de façon différente selon la langue utilisée.

+ +
{{EmbedInteractiveExample("pages/js/intl-listformat.html")}}
+ + + +

Syntax

+ +
new Intl.ListFormat([locales[, options]])
+
+ +

Paramètres

+ +
+
locales{{optional_inline}}
+
+

Paramètre optionnel. Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.

+
+
options{{optional_inline}}
+
+

Paramètre optionnel. Un objet avec certaines ou toutes les propriétés suivantes :

+ +
+
localeMatcher
+
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Intl","Intl","##Choix_de_la_locale")}}.
+
type
+
Le format de sortie pour le message. Les valeurs possibles sont : +
    +
  • "conjunction" : qui concaténera les éléments de la liste avec des et. Cela produira par exemple, en anglais : A, B, and C
  • +
  • "disjunction" : qui concaténera les éléments de la liste avec des ou. Cela produira par exemple, en anglais : A, B, or C
  • +
  • "unit" : qui permet de gérer des listes de valeurs avec des unités. Cela produira par exemple 5 livres, 12 onces
  • +
+
+
style
+
Le niveau de concision/longueur du message obtenu. Les valeurs possibles sont : +
    +
  • "long" : par exemple A, B, and C
  • +
  • "narrow" : cette valeur permet uniquement d'utiliser le type unit et affichera un message concis : par exemple A, B, C
  • +
  • "short" : par exemple A, B, C
  • +
+
+
+
+
+ +

Description

+ +

Propriétés

+ +
+
{{jsxref("ListFormat.prototype", "Intl.ListFormat.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à l'ensemble des objets de ce type.
+
+ +

Méthodes

+ +
+
{{jsxref("ListFormat.supportedLocalesOf", "Intl.ListFormat.supportedLocalesOf()")}}
+
Cette méthode renvoie un tableau des locales prises en charge par le moteur pour le formatage des heures sans qu'il y ait besoin d'utiliser la locale de l'environnement d'exécution.
+
+ +

Instances de Intl.ListFormat

+ +

Toutes les instances de Intl.ListFormat héritent de Intl.ListFormat.prototype.

+ +

Propriétés

+ +
+
Intl.ListFormat.prototype.constructor
+
Définit la fonction qui crée le prototype d'un objet.
+
+ +

Méthodes

+ +
+
{{jsxref("ListFormat.prototype.format","Intl.ListFormat.prototype.format()")}}
+
Renvoie une chaîne de caractères mise en forme selon la langue voulue et qui représente les éléments de la liste.
+
+ +

Exemples

+ +

Utiliser format()

+ +

Dans l'exemple qui suit, on voit comment créer un formateur de liste pour l'anglais.

+ +
const list = ['Motorcycle', 'Bus', 'Car'];
+
+ console.log(new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' }).format(list));
+// > Motorcycle, Bus and Car
+
+ console.log(new Intl.ListFormat('en-GB', { style: 'short', type: 'disjunction' }).format(list));
+// > Motorcycle, Bus or Car
+
+ console.log(new Intl.ListFormat('en-GB', { style: 'narrow', type: 'unit' }).format(list));
+// > Motorcycle Bus Car
+
+ +

Utiliser formatToParts()

+ +

Dans l'exemple qui suit, on voit comment créer un formateur de liste, renvoyant les fragments, pour l'anglais

+ +
const list = ['Motorcycle', 'Bus', 'Car'];
+console.log(new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' }).formatToParts(list));
+
+// > [ { "type": "element", "value": "Motorcycle" },
+       { "type": "literal", "value": ", " },
+       { "type": "element", "value": "Bus" },
+       { "type": "literal", "value": ", and " },
+       { "type": "element", "value": "Car" } ];
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormatProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.ListFormat")}}

+ +

Voir aussi

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}
diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.html b/files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.html deleted file mode 100644 index c486feed3d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Intl​.List​Format​.prototype​.resolvedOptions() -slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/resolvedOptions -tags: - - Internationalisation - - Intl - - JavaScript - - ListFormat - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/resolvedOptions -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/resolvedOptions ---- -
{{JSRef}}{{Draft}}
- -

La méthode  Intl.ListFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de locale et de style calculées à l'initialisation de l'objet {{jsxref("ListFormat")}}.

- -

Syntaxe

- -
listFormat.resolvedOptions()
- -

Valeur de retour

- -

Un nouvel objet dont les propriétés reflètent les options de locale et de style calculées lors de l'initialisation de l'objet {{jsxref("ListFormat")}}.

- -

Description

- -

L'objet renvoyé par resolvedOptions() possède les propriétés suivantes :

- -
-
locale
-
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
-
style
-
La valeur fournie au constructeur via l'argument options ou la valeur utilisée par défaut ("long"). Cette propriété peut valoir "long", "short" ou "narrow".
-
type
-
La valeur fournie au constructeur via l'argument options ou la valeur par défaut ("conjunction"). Cette propriété peut valoir "conjunction", "disjunction" ou "unit".
-
- -

Exemples

- -
const deListFormatter = new Intl.ListFormat("de-DE", { style: "short" });
-
-const usedOptions = de.resolvedOptions();
-console.log(usedOptions.locale); // "de-DE"
-console.log(usedOptions.style);  // "short"
-console.log(usedOptions.type);   // "conjunction" (la valeur par défaut)
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormat.prototype.resolvedOptions()Proposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.ListFormat.resolvedOptions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.md b/files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.md new file mode 100644 index 0000000000..c486feed3d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/listformat/resolvedoptions/index.md @@ -0,0 +1,81 @@ +--- +title: Intl​.List​Format​.prototype​.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/resolvedOptions +tags: + - Internationalisation + - Intl + - JavaScript + - ListFormat + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/resolvedOptions +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/resolvedOptions +--- +
{{JSRef}}{{Draft}}
+ +

La méthode  Intl.ListFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de locale et de style calculées à l'initialisation de l'objet {{jsxref("ListFormat")}}.

+ +

Syntaxe

+ +
listFormat.resolvedOptions()
+ +

Valeur de retour

+ +

Un nouvel objet dont les propriétés reflètent les options de locale et de style calculées lors de l'initialisation de l'objet {{jsxref("ListFormat")}}.

+ +

Description

+ +

L'objet renvoyé par resolvedOptions() possède les propriétés suivantes :

+ +
+
locale
+
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
+
style
+
La valeur fournie au constructeur via l'argument options ou la valeur utilisée par défaut ("long"). Cette propriété peut valoir "long", "short" ou "narrow".
+
type
+
La valeur fournie au constructeur via l'argument options ou la valeur par défaut ("conjunction"). Cette propriété peut valoir "conjunction", "disjunction" ou "unit".
+
+ +

Exemples

+ +
const deListFormatter = new Intl.ListFormat("de-DE", { style: "short" });
+
+const usedOptions = de.resolvedOptions();
+console.log(usedOptions.locale); // "de-DE"
+console.log(usedOptions.style);  // "short"
+console.log(usedOptions.type);   // "conjunction" (la valeur par défaut)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormat.prototype.resolvedOptions()Proposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.ListFormat.resolvedOptions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.html b/files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.html deleted file mode 100644 index b5f54c9535..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Intl.ListFormat.supportedLocalesOf() -slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/supportedLocalesOf -tags: - - Intl - - JavaScript - - ListFormat - - Méthode - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/supportedLocalesOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/supportedLocalesOf ---- -
{{JSRef}}
- -

The Intl.ListFormat.supportedLocalesOf() renvoie, parmi les locales fournies, un tableau contenant les locales supportées pour le formatage des listes et qui ne nécessitent pas d'utiliser la locale par défaut de l'environnement.

- -

Syntaxe

- -
Intl.ListFormat.supportedLocalesOf(locales[, options])
- -

Paramètres

- -
-
locales
-
Une chaîne de caractères qui est une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations concernant la forme générale de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
-
options{{optional_inline}}
-
-

Paramètre facultatif. Un objet qui peut posséder les propriétés suivantes :

- -
-
localeMatcher
-
-

L'algorithme utilisé pour la correspondance entre chaînes de caractères. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Pour plus d'informations, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}}.

-
-
-
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langues qui sont prises en charge pour le formatage des listes sans qu'il faille utiliser la locale par défaut de l'environnement d'exécution.

- -

Description

- -

Cette méthode renvoie un tableau qui est un sous-ensemble des balises de locales fournies avec l'argument locales. Les balises renvoyées sont celles supportées par l'environnement navigateur en termes de formatage des listes et qui ne nécessitent pas d'utiliser la locale par défaut.

- -

Exemples

- -

Utiliser supportedLocalesOf

- -

Si on dispose d'un environnement (un navigateur par exemple) qui supporte le formatage des listes dans les locales indonésienne, allemande mais pas balinaise,  supportedLocalesOf renvoie les balises pour l'indonésien et l'allemand quand bien même le formatage des listes pinyin n'est pas utilisée avec l'indonésien et qu'il n'existe pas une version spécifique de l'allemand pour l'Indonésie. On illustre ici l'algorithme "lookup". SI on utilisait "best fit" pour trouver les locales correspondantes, on aurait pu avoir une balise supplémentaire pour le balinais en plus car la plupart des balinais comprennent l'indonésien.

- -
const locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
-const options = { localeMatcher: 'lookup' };
-console.log(Intl.ListFormat.supportedLocalesOf(locales, options).join(', '));
-// → "id-u-co-pinyin, de-ID"
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormat.supportedLocalesOfProposition de niveau 3 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.ListFormat.supportedLocalesOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.md b/files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.md new file mode 100644 index 0000000000..b5f54c9535 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/listformat/supportedlocalesof/index.md @@ -0,0 +1,87 @@ +--- +title: Intl.ListFormat.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/supportedLocalesOf +tags: + - Intl + - JavaScript + - ListFormat + - Méthode + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat/supportedLocalesOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/ListFormat/supportedLocalesOf +--- +
{{JSRef}}
+ +

The Intl.ListFormat.supportedLocalesOf() renvoie, parmi les locales fournies, un tableau contenant les locales supportées pour le formatage des listes et qui ne nécessitent pas d'utiliser la locale par défaut de l'environnement.

+ +

Syntaxe

+ +
Intl.ListFormat.supportedLocalesOf(locales[, options])
+ +

Paramètres

+ +
+
locales
+
Une chaîne de caractères qui est une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations concernant la forme générale de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
+
options{{optional_inline}}
+
+

Paramètre facultatif. Un objet qui peut posséder les propriétés suivantes :

+ +
+
localeMatcher
+
+

L'algorithme utilisé pour la correspondance entre chaînes de caractères. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Pour plus d'informations, voir la page {{jsxref("Objets_globaux/Intl", "Intl", "#Choix_de_la_locale")}}.

+
+
+
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langues qui sont prises en charge pour le formatage des listes sans qu'il faille utiliser la locale par défaut de l'environnement d'exécution.

+ +

Description

+ +

Cette méthode renvoie un tableau qui est un sous-ensemble des balises de locales fournies avec l'argument locales. Les balises renvoyées sont celles supportées par l'environnement navigateur en termes de formatage des listes et qui ne nécessitent pas d'utiliser la locale par défaut.

+ +

Exemples

+ +

Utiliser supportedLocalesOf

+ +

Si on dispose d'un environnement (un navigateur par exemple) qui supporte le formatage des listes dans les locales indonésienne, allemande mais pas balinaise,  supportedLocalesOf renvoie les balises pour l'indonésien et l'allemand quand bien même le formatage des listes pinyin n'est pas utilisée avec l'indonésien et qu'il n'existe pas une version spécifique de l'allemand pour l'Indonésie. On illustre ici l'algorithme "lookup". SI on utilisait "best fit" pour trouver les locales correspondantes, on aurait pu avoir une balise supplémentaire pour le balinais en plus car la plupart des balinais comprennent l'indonésien.

+ +
const locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
+const options = { localeMatcher: 'lookup' };
+console.log(Intl.ListFormat.supportedLocalesOf(locales, options).join(', '));
+// → "id-u-co-pinyin, de-ID"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.ListFormat.supportedLocalesOfProposition de niveau 3 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.ListFormat.supportedLocalesOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.html deleted file mode 100644 index a13032aa1d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Intl.Locale.prototype.baseName -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/baseName -tags: - - Internationalisation - - Intl - - JavaScript - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/baseName -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/baseName ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.baseName renvoie un extrait de la chaîne de caractères représentant l'objet Locale. Cet extrait contient les informations essentielles à propos de l'objet Locale.

- -

Description

- -

Un objet Intl.Locale représente une locale ainsi que des options qui lui sont associées. La propriété baseName renvoie des informations essentielles quant à la locale sous la forme d'une chaîne de caractères. Cette chaîne est un extrait de la représentation textuelle complète de l'objet Locale. Cet extrait contient notamment la langue, le script utilisé ainsi que la région (s'ils sont disponibles).

- -

Si on utilise la grammaire Unicode, baseName renvoie la sous-séquence language ["-" script] ["-" region] *("-" variant).

- -

Exemples

- -

Exemple simple

- -
let myLoc = new Intl.Locale("fr-Latn-CA"); // Sets locale to Candanian French
-console.log(myLoc.toString()); // Prints out "fr-Latn-CA-u-ca-gregory"
-console.log(myLoc.baseName); // Prints out "fr-Latn-CA"
- -

Exemple avec certaines options

- -
// Sets language to Japanese, region to Japan,
-
-// calendar to Gregorian, hour cycle to 24 hours
-let japan = new Intl.Locale("ja-JP-u-ca-gregory-hc-24");
-console.log(japan.toString()); // Prints out "ja-JP-u-ca-gregory-hc-h24"
-console.log(japan.baseName); // Prints out "ja-JP"
- -

Exemple avec options qui surchargent

- -
// Input string indicates language as Dutch and region as Belgium,
-
-// but options object overrides the region and sets it to the Netherlands
-let dutch = new Intl.Locale("nl-Latn-BE", {region: "NL"});
-
-console.log(dutch.baseName); // Prints out "nl-Latn-NL"
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.baseNameProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.baseName")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.md new file mode 100644 index 0000000000..a13032aa1d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/basename/index.md @@ -0,0 +1,74 @@ +--- +title: Intl.Locale.prototype.baseName +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/baseName +tags: + - Internationalisation + - Intl + - JavaScript + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/baseName +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/baseName +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.baseName renvoie un extrait de la chaîne de caractères représentant l'objet Locale. Cet extrait contient les informations essentielles à propos de l'objet Locale.

+ +

Description

+ +

Un objet Intl.Locale représente une locale ainsi que des options qui lui sont associées. La propriété baseName renvoie des informations essentielles quant à la locale sous la forme d'une chaîne de caractères. Cette chaîne est un extrait de la représentation textuelle complète de l'objet Locale. Cet extrait contient notamment la langue, le script utilisé ainsi que la région (s'ils sont disponibles).

+ +

Si on utilise la grammaire Unicode, baseName renvoie la sous-séquence language ["-" script] ["-" region] *("-" variant).

+ +

Exemples

+ +

Exemple simple

+ +
let myLoc = new Intl.Locale("fr-Latn-CA"); // Sets locale to Candanian French
+console.log(myLoc.toString()); // Prints out "fr-Latn-CA-u-ca-gregory"
+console.log(myLoc.baseName); // Prints out "fr-Latn-CA"
+ +

Exemple avec certaines options

+ +
// Sets language to Japanese, region to Japan,
+
+// calendar to Gregorian, hour cycle to 24 hours
+let japan = new Intl.Locale("ja-JP-u-ca-gregory-hc-24");
+console.log(japan.toString()); // Prints out "ja-JP-u-ca-gregory-hc-h24"
+console.log(japan.baseName); // Prints out "ja-JP"
+ +

Exemple avec options qui surchargent

+ +
// Input string indicates language as Dutch and region as Belgium,
+
+// but options object overrides the region and sets it to the Netherlands
+let dutch = new Intl.Locale("nl-Latn-BE", {region: "NL"});
+
+console.log(dutch.baseName); // Prints out "nl-Latn-NL"
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.baseNameProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.baseName")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.html deleted file mode 100644 index a27a8efbb5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Intl.Locale.prototype.calendar -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/calendar ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.calendar est une propriété (via un accesseur) qui renvoie le type de calendrier utilisé par l'instance de Locale.

- -

Description

- -

La propriété calendar renvoie la partie de la locale qui indique le calendrier utilisé. Bien que la plupart des régions utilise le calendrier grégorien, il existe différents calendriers utilisés. Le tableau qui suit indique les clés Unicode pour les différents calendriers ainsi qu'une description.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Clés Unicode pour les calendriers
Clé UnicodeDescription
buddhistCalendrier bouddhiste
chineseCalendrier chinois traditionnel
copticCalendrier copte
dangiCalendrier coréen traditionnel
ethioaaCalendrier éthiopique, Amete Alem (an 0 situé environ à  5493 ans avant notre ère)
ethiopicCalendrier éthiopique, Amete Mihret (an 0 situé environ à 8 ans de notre ère)
gregoryCalendrier grégorien
hebrewCalendrier traditionnel hébreux
indianCalendrier indien
islamicCalendrier islamique
islamic-umalquraCalendrier islamique, Umm al-Qura
islamic-tblaCalendrier islamique tabulaire (années intercalaires [2,5,7,10,13,16,18,21,24,26,29] - origine des temps astronomique)
islamic-civilCalendrier islamique tabulaire (années intercalaires [2,5,7,10,13,16,18,21,24,26,29] - origine des temps civile)
islamic-rgsaCalendrier islamique vu de l'Arabie saoudite
iso8601Calendrier ISO (calendrier grégorien utilisant la numérotation des semaines ISO 8601)
japaneseCalendrier japonais impérial
persianCalendrier perse
rocCalendrier de la République de Chine
-

Attention : La clé  islamicc est désormais dépréciée et il faut utiliser islamic-civil à la place.

- -

islamicc

-
Calendrier arabe civil (algorithmique)
- -

Exemples

- -

Indiquer le calendrier via la chaîne de définition de la locale

- -

Les calendriers font partie des « clés d'extension ». Ces clés permettent d'ajouter des informations supplémentaires aux locales et sont ajoutées via l'extension -u. Ainsi, on peut indiquer le calendrier utilisé via la chaîne de locale passée comme argument au constructeur {{jsxref("Locale", "Intl.Locale")}}. Pour ce faire, on ajoutera d'abord -u à la chaîne « courte » de la locale puis -ca afin d'indiquer qu'on précise le calendrier et enfin la chaîne représentant la clé du calendrier.

- -
let frBuddhist = new Intl.Locale("fr-FR-u-ca-buddhist");
-console.log(frBuddhist.calendar); // affiche "buddhist" dans la console
- -

Spécifier un calendrier grâce à un objet de configuration

- -

Le constructeur {{jsxref("Locale", "Intl.Locale")}} peut utiliser un argument optionnel qui est un objet permettant de configurer la locale via différentes extensions dont les calendriers. En utilisant la propriété calendar de cet objet, on définit le calendrier qui sera utilisé :

- -
let frBuddhist = new Intl.Locale("fr-FR", {calendar: "buddhist"});
-console.log(frBuddhist.calendar); // affiche "buddhist" dans la console
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.calendarProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.calendar")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.md new file mode 100644 index 0000000000..a27a8efbb5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/calendar/index.md @@ -0,0 +1,157 @@ +--- +title: Intl.Locale.prototype.calendar +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/calendar +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.calendar est une propriété (via un accesseur) qui renvoie le type de calendrier utilisé par l'instance de Locale.

+ +

Description

+ +

La propriété calendar renvoie la partie de la locale qui indique le calendrier utilisé. Bien que la plupart des régions utilise le calendrier grégorien, il existe différents calendriers utilisés. Le tableau qui suit indique les clés Unicode pour les différents calendriers ainsi qu'une description.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Clés Unicode pour les calendriers
Clé UnicodeDescription
buddhistCalendrier bouddhiste
chineseCalendrier chinois traditionnel
copticCalendrier copte
dangiCalendrier coréen traditionnel
ethioaaCalendrier éthiopique, Amete Alem (an 0 situé environ à  5493 ans avant notre ère)
ethiopicCalendrier éthiopique, Amete Mihret (an 0 situé environ à 8 ans de notre ère)
gregoryCalendrier grégorien
hebrewCalendrier traditionnel hébreux
indianCalendrier indien
islamicCalendrier islamique
islamic-umalquraCalendrier islamique, Umm al-Qura
islamic-tblaCalendrier islamique tabulaire (années intercalaires [2,5,7,10,13,16,18,21,24,26,29] - origine des temps astronomique)
islamic-civilCalendrier islamique tabulaire (années intercalaires [2,5,7,10,13,16,18,21,24,26,29] - origine des temps civile)
islamic-rgsaCalendrier islamique vu de l'Arabie saoudite
iso8601Calendrier ISO (calendrier grégorien utilisant la numérotation des semaines ISO 8601)
japaneseCalendrier japonais impérial
persianCalendrier perse
rocCalendrier de la République de Chine
+

Attention : La clé  islamicc est désormais dépréciée et il faut utiliser islamic-civil à la place.

+ +

islamicc

+
Calendrier arabe civil (algorithmique)
+ +

Exemples

+ +

Indiquer le calendrier via la chaîne de définition de la locale

+ +

Les calendriers font partie des « clés d'extension ». Ces clés permettent d'ajouter des informations supplémentaires aux locales et sont ajoutées via l'extension -u. Ainsi, on peut indiquer le calendrier utilisé via la chaîne de locale passée comme argument au constructeur {{jsxref("Locale", "Intl.Locale")}}. Pour ce faire, on ajoutera d'abord -u à la chaîne « courte » de la locale puis -ca afin d'indiquer qu'on précise le calendrier et enfin la chaîne représentant la clé du calendrier.

+ +
let frBuddhist = new Intl.Locale("fr-FR-u-ca-buddhist");
+console.log(frBuddhist.calendar); // affiche "buddhist" dans la console
+ +

Spécifier un calendrier grâce à un objet de configuration

+ +

Le constructeur {{jsxref("Locale", "Intl.Locale")}} peut utiliser un argument optionnel qui est un objet permettant de configurer la locale via différentes extensions dont les calendriers. En utilisant la propriété calendar de cet objet, on définit le calendrier qui sera utilisé :

+ +
let frBuddhist = new Intl.Locale("fr-FR", {calendar: "buddhist"});
+console.log(frBuddhist.calendar); // affiche "buddhist" dans la console
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.calendarProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.calendar")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.html deleted file mode 100644 index e271f2b621..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Intl.Locale.prototype.caseFirst -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/caseFirst -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference - - Unicode -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/caseFirst -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/caseFirst ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.caseFirst est une propriété (via un accesseur) qui renvoie si la casse est prise en compte par la locale pour ses règles de collation (celles qui permettent d'ordonner des chaînes de caractères entre elles).

- -

Description

- -

Les règles de collation des locales sont utilisées afin de déterminer la façon dont les chaînes sont ordonnées pour cette locale. Certaines locales utilisent la casse (minuscule ou majuscule) dans ce processus de collation. Cette règle peut être exprimée via la propriété caseFirst d'une instance Locale.

- -

Cette propriété peut avoir une des 3 valeurs suivantes :

- - - - - - - - - - - - - - - - - - - - - - - -
Valeurs pour caseFirst
ValeurDescription
upperLes majuscules devraient être triées avant les minuscules.
lowerLes minuscules devraient être triées avant les majuscules.
falseLa casse n'a pas d'importance pour le tri des chaînes.
- -

Exemples

- -

Définir caseFirst grâce à la chaîne de description de la locale

- -

Le constructeur Intl.Locale prend comme premier argument une chaîne de caractères qui décrit la locale. On peut allonger cette chaîne avec certaines valeurs afin de l'affiner.

- -

Dans la spécification Unicode sur les clés des extensions, caseFirst correspond à la clé kf. kf. Il est possible d'ajouter des extensions à la chaîne identifiant la locale en la concaténant à -u puis en concaténant la clé de l'extension qu'on souhaite préciser (ici -kf) puis en ajoutant enfin la valeur pour cette extension (ici upper) :

- -
let caseFirstStr = new Intl.Locale("fr-Latn-FR-u-kf-upper");
-console.log(caseFirstStr.caseFirst); // Prints "upper"
- -

Définir caseFirst via l'objet de configuration

- -

Le constructeur Intl.Locale permet d'utiliser un objet de configuration comme deuxième argument. Les propriétés de cet objet seront autant d'extensions Unicode à utiliser pour la locale. Ici, on peut utiliser un objet avec la propriété caseFirst pour indiquer l'impact de la casse sur la collation de cette locale :

- -
let caseFirstObj= new Intl.Locale("en-Latn-US", {caseFirst: "lower"});
-console.log(us12hour.caseFirst); // affichera "lower" dans la console.
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.caseFirst")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.md new file mode 100644 index 0000000000..e271f2b621 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/casefirst/index.md @@ -0,0 +1,93 @@ +--- +title: Intl.Locale.prototype.caseFirst +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/caseFirst +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/caseFirst +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/caseFirst +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.caseFirst est une propriété (via un accesseur) qui renvoie si la casse est prise en compte par la locale pour ses règles de collation (celles qui permettent d'ordonner des chaînes de caractères entre elles).

+ +

Description

+ +

Les règles de collation des locales sont utilisées afin de déterminer la façon dont les chaînes sont ordonnées pour cette locale. Certaines locales utilisent la casse (minuscule ou majuscule) dans ce processus de collation. Cette règle peut être exprimée via la propriété caseFirst d'une instance Locale.

+ +

Cette propriété peut avoir une des 3 valeurs suivantes :

+ + + + + + + + + + + + + + + + + + + + + + + +
Valeurs pour caseFirst
ValeurDescription
upperLes majuscules devraient être triées avant les minuscules.
lowerLes minuscules devraient être triées avant les majuscules.
falseLa casse n'a pas d'importance pour le tri des chaînes.
+ +

Exemples

+ +

Définir caseFirst grâce à la chaîne de description de la locale

+ +

Le constructeur Intl.Locale prend comme premier argument une chaîne de caractères qui décrit la locale. On peut allonger cette chaîne avec certaines valeurs afin de l'affiner.

+ +

Dans la spécification Unicode sur les clés des extensions, caseFirst correspond à la clé kf. kf. Il est possible d'ajouter des extensions à la chaîne identifiant la locale en la concaténant à -u puis en concaténant la clé de l'extension qu'on souhaite préciser (ici -kf) puis en ajoutant enfin la valeur pour cette extension (ici upper) :

+ +
let caseFirstStr = new Intl.Locale("fr-Latn-FR-u-kf-upper");
+console.log(caseFirstStr.caseFirst); // Prints "upper"
+ +

Définir caseFirst via l'objet de configuration

+ +

Le constructeur Intl.Locale permet d'utiliser un objet de configuration comme deuxième argument. Les propriétés de cet objet seront autant d'extensions Unicode à utiliser pour la locale. Ici, on peut utiliser un objet avec la propriété caseFirst pour indiquer l'impact de la casse sur la collation de cette locale :

+ +
let caseFirstObj= new Intl.Locale("en-Latn-US", {caseFirst: "lower"});
+console.log(us12hour.caseFirst); // affichera "lower" dans la console.
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.caseFirst")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.html deleted file mode 100644 index fe261c15a3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.html +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Intl.Locale.prototype.collation -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/collation -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/collation -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/collation ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.collation est une propriété (à laquelle on accède via un accesseur) qui renvoie le type de collation pour l'instance de Locale courante. La collation est la méthode qui permet d'ordonner des chaînes de caractères en fonction des règles de la locale.

- -

Description

- -

La collation est la façon dont les chaînes de caractères sont ordonnées. Elle est utilisée lorsqu'on doit trier des chaînes de caractères (des résultats de recherche, des enregistrements dans une base de donnée, etc.). Bien que cela puisse sembler trivial, la collation varie d'une région à l'autre et d'une langue à une autre. Cette propriété permet aux développeurs de connaître le type de collation pour une locale donnée.

- -

Voici un tableau listant les types de collation possibles tels que définis dans la spécification Unicode sur la collation.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Les différents types de collation
Type de collationDescription
big5hanOrdre pinyin pour l'alphabet latin et ordre big5 pour les caractères CJK (utilisés en chinois)
compatUne version précédente de l'ordre, utilisée à des fins de compatibilité
dictOrdre à la façon d'un dictionnaire (comme utilisé en cingalais)
-
-

Attention : Le type direct a été déprécié et ne doit pas être utilisé.

-
- -

direct

-
Ordre des points de code binaires (utilisé en hindoux)
ducetLa collation Unicode par défaut pour les éléments d'un tableau
emojiL'ordre recommandé pour les émojis
eorRègles d'ordre européennes
gb2312Ordre pinyin pour l'alphabet latin et ordre gb2312han pour les caractères CJK (utilisés en chinois)
phonebkOrdre à la façon d'un annuaire (tel qu'en allemand)
phoneticOrdre phonétique, basé sur la prononciation
pinyinOrdre pinyin pour les caractères de l'alphabet latin et les caractères CJK (utilisés en chniois)
reformedOrdre réformé (tel qu'en suédois)
searchCollation spéciale pour les chaînes de caractères utilisées pour des recherches
searchjlCollation spéciale pour la recherche des consonnes initiales en coréen
standardL'ordre par défaut pour chaque langue
strokeOrdre pinyin pour l'alphabet latin et ordre de dessin (stroke) pour les caractères CJK (utilisés en chinois)
tradOrdre traditionnel (tel qu'en espagnol)
unihanOrdre pinyin pour l'alphabet latin et ordre Unihan radical pour les caractères CJK (utilisés en chinois)
zhuyin -

Ordre pinyin pour l'alphabet latin, ordre zhuyin pour les caractères Bopomofo et CJK (utilisés en chinois)

-
- -

Exemples

- -

À l'instar des autres étiquettes, le type de collation peut être défini pour l'objet {{jsxref("Locale", "Intl.Locale")}} via la chaîne de caractères qui définit la locale ou grâce au deuxième paramètre du constructeur qui est un objet de configuration.

- -

Définir le type de collation via la chaîne décrivant la locale

- -

Le premier argument passé à Intl.Locale est une chaîne de caractères qui décrit la locale. Cette chaîne peut contenir des fragments additionnels (en plus de l'identifiant canonique de la locale). Pour cela, on ajoutera -u afin d'indiquer qu'on définit une extension. On ajoutera ensuite la clé identifiant cette extension, ici -co pour la collation. Enfin, on ajoutera la valeur souhaitée pour cette extension (dans cet exemple, -emoji) :

- -
let stringColl = new Intl.Locale("en-Latn-US-u-co-emoji");
-console.log(stringColl.collation); // Affichera "emoji" dans la console
-
- -

Définir le type de collation via l'objet de configuration

- -

Le constructeur Intl.Locale possède un deuxième argument optionnel qui est un objet de configuration. Chaque propriété de cet objet pourra permettre de préciser une extension à la locale, y compris un type de collation. Pour définir le type de collation, on pourra utiliser une propriété collation sur cet objet avec une des valeurs indiquées ci-avant :

- -
let configColl = new Intl.Locale("en-Latn-US", {collation: "emoji"});
-console.log(configColl.collation); // Affichera "emoji" dans la console
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.collationProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Locale.collation")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.md new file mode 100644 index 0000000000..fe261c15a3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/collation/index.md @@ -0,0 +1,166 @@ +--- +title: Intl.Locale.prototype.collation +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/collation +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/collation +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/collation +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.collation est une propriété (à laquelle on accède via un accesseur) qui renvoie le type de collation pour l'instance de Locale courante. La collation est la méthode qui permet d'ordonner des chaînes de caractères en fonction des règles de la locale.

+ +

Description

+ +

La collation est la façon dont les chaînes de caractères sont ordonnées. Elle est utilisée lorsqu'on doit trier des chaînes de caractères (des résultats de recherche, des enregistrements dans une base de donnée, etc.). Bien que cela puisse sembler trivial, la collation varie d'une région à l'autre et d'une langue à une autre. Cette propriété permet aux développeurs de connaître le type de collation pour une locale donnée.

+ +

Voici un tableau listant les types de collation possibles tels que définis dans la spécification Unicode sur la collation.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Les différents types de collation
Type de collationDescription
big5hanOrdre pinyin pour l'alphabet latin et ordre big5 pour les caractères CJK (utilisés en chinois)
compatUne version précédente de l'ordre, utilisée à des fins de compatibilité
dictOrdre à la façon d'un dictionnaire (comme utilisé en cingalais)
+
+

Attention : Le type direct a été déprécié et ne doit pas être utilisé.

+
+ +

direct

+
Ordre des points de code binaires (utilisé en hindoux)
ducetLa collation Unicode par défaut pour les éléments d'un tableau
emojiL'ordre recommandé pour les émojis
eorRègles d'ordre européennes
gb2312Ordre pinyin pour l'alphabet latin et ordre gb2312han pour les caractères CJK (utilisés en chinois)
phonebkOrdre à la façon d'un annuaire (tel qu'en allemand)
phoneticOrdre phonétique, basé sur la prononciation
pinyinOrdre pinyin pour les caractères de l'alphabet latin et les caractères CJK (utilisés en chniois)
reformedOrdre réformé (tel qu'en suédois)
searchCollation spéciale pour les chaînes de caractères utilisées pour des recherches
searchjlCollation spéciale pour la recherche des consonnes initiales en coréen
standardL'ordre par défaut pour chaque langue
strokeOrdre pinyin pour l'alphabet latin et ordre de dessin (stroke) pour les caractères CJK (utilisés en chinois)
tradOrdre traditionnel (tel qu'en espagnol)
unihanOrdre pinyin pour l'alphabet latin et ordre Unihan radical pour les caractères CJK (utilisés en chinois)
zhuyin +

Ordre pinyin pour l'alphabet latin, ordre zhuyin pour les caractères Bopomofo et CJK (utilisés en chinois)

+
+ +

Exemples

+ +

À l'instar des autres étiquettes, le type de collation peut être défini pour l'objet {{jsxref("Locale", "Intl.Locale")}} via la chaîne de caractères qui définit la locale ou grâce au deuxième paramètre du constructeur qui est un objet de configuration.

+ +

Définir le type de collation via la chaîne décrivant la locale

+ +

Le premier argument passé à Intl.Locale est une chaîne de caractères qui décrit la locale. Cette chaîne peut contenir des fragments additionnels (en plus de l'identifiant canonique de la locale). Pour cela, on ajoutera -u afin d'indiquer qu'on définit une extension. On ajoutera ensuite la clé identifiant cette extension, ici -co pour la collation. Enfin, on ajoutera la valeur souhaitée pour cette extension (dans cet exemple, -emoji) :

+ +
let stringColl = new Intl.Locale("en-Latn-US-u-co-emoji");
+console.log(stringColl.collation); // Affichera "emoji" dans la console
+
+ +

Définir le type de collation via l'objet de configuration

+ +

Le constructeur Intl.Locale possède un deuxième argument optionnel qui est un objet de configuration. Chaque propriété de cet objet pourra permettre de préciser une extension à la locale, y compris un type de collation. Pour définir le type de collation, on pourra utiliser une propriété collation sur cet objet avec une des valeurs indiquées ci-avant :

+ +
let configColl = new Intl.Locale("en-Latn-US", {collation: "emoji"});
+console.log(configColl.collation); // Affichera "emoji" dans la console
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.collationProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Locale.collation")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html deleted file mode 100644 index c46c209435..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Intl.Locale.prototype.hourCycle -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/hourCycle ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.hourCycle est une propriété accessible via un accesseur qui renvoie la convention pour le format des heures utilisée par la locale courante.

- -

Description

- -

Il existe deux types de conventions pour la représentation des heures : sur douze heures d'une part et sur vingt-quatre heures d'autre part. La propriété hourCycle permet aux développeurs de connaître la représentation utilisée par une locale donnée. À l'instar des autres données fournies par les instances de Locale, hourCycle représente une extension Unicode qui permet d'affiner le comportement d'une locale. Les valeurs de cette propriété/extension peuvent être :

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Valeurs possibles pour l'extension hourCycle
CléDescription
h12Système horaire sur les heures 1 à 12 (correspond à la notation "h" pour les motifs de recherche). L'horloge est sur douze heures et minuit commence à 12:00 AM.
h23Système horaire sur les heures 0 à 23 (correspond à la notation "H" pour les motifs de recherche). L'horloge est sur vingt-quatre heures et minuit commence à 0:00.
h11Système horaire sur les heures 0 à 11 (correspond à la notation "K" pour les motifs de recherche). L'horloge est sur douze heures et minuit commence à 0:00 AM.
h24Système horaire sur les heures 1 à 24 (correspond à la notation "K" pour les motifs de recherche). L'horloge est sur vingt-quatre heures et minuit commence à 24:00.
- -

Exemples

- -

Définir le format horaire grâce à la chaîne décrivant la locale

- -

Il est possible de préciser la valeur d'une extension Unicode dans la chaîne de caractères représentant la locale. Pour indiquer l'extension, on ajoutera le suffixe -u qui indique une clé d'extension à venir, ensuite on ajoutera la clé de l'extension en question (ici -hc) et enfin on ajoutera la valeur souhaitée pour cette extension.

- -
let fr24hour = new Intl.Locale("fr-FR-u-hc-h23");
-console.log(fr24hour.hourCycle); // Affichera "h23" dans la console
- -

Définir le format horaire grâce à un objet de configuration

- -

Le constructeur Intl.Locale permet d'utiliser un objet de configuration comme deuxième argument. Les propriétés de cet objet permettent de définir différentes extensions, y compris celle pour le format horaire. Pour cela, on indiquera la propriété hourCycle sur l'objet de configuration avec la valeur souhaitée et on passera cet objet au constructeur.

- -
let us12hour = new Intl.Locale("en-US-u-hc-h12");
-console.log(us12hour.hourCycle); // Affichera "h12" dans la console
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.hourCycle")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.md new file mode 100644 index 0000000000..c46c209435 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/hourcycle/index.md @@ -0,0 +1,94 @@ +--- +title: Intl.Locale.prototype.hourCycle +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/hourCycle +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.hourCycle est une propriété accessible via un accesseur qui renvoie la convention pour le format des heures utilisée par la locale courante.

+ +

Description

+ +

Il existe deux types de conventions pour la représentation des heures : sur douze heures d'une part et sur vingt-quatre heures d'autre part. La propriété hourCycle permet aux développeurs de connaître la représentation utilisée par une locale donnée. À l'instar des autres données fournies par les instances de Locale, hourCycle représente une extension Unicode qui permet d'affiner le comportement d'une locale. Les valeurs de cette propriété/extension peuvent être :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Valeurs possibles pour l'extension hourCycle
CléDescription
h12Système horaire sur les heures 1 à 12 (correspond à la notation "h" pour les motifs de recherche). L'horloge est sur douze heures et minuit commence à 12:00 AM.
h23Système horaire sur les heures 0 à 23 (correspond à la notation "H" pour les motifs de recherche). L'horloge est sur vingt-quatre heures et minuit commence à 0:00.
h11Système horaire sur les heures 0 à 11 (correspond à la notation "K" pour les motifs de recherche). L'horloge est sur douze heures et minuit commence à 0:00 AM.
h24Système horaire sur les heures 1 à 24 (correspond à la notation "K" pour les motifs de recherche). L'horloge est sur vingt-quatre heures et minuit commence à 24:00.
+ +

Exemples

+ +

Définir le format horaire grâce à la chaîne décrivant la locale

+ +

Il est possible de préciser la valeur d'une extension Unicode dans la chaîne de caractères représentant la locale. Pour indiquer l'extension, on ajoutera le suffixe -u qui indique une clé d'extension à venir, ensuite on ajoutera la clé de l'extension en question (ici -hc) et enfin on ajoutera la valeur souhaitée pour cette extension.

+ +
let fr24hour = new Intl.Locale("fr-FR-u-hc-h23");
+console.log(fr24hour.hourCycle); // Affichera "h23" dans la console
+ +

Définir le format horaire grâce à un objet de configuration

+ +

Le constructeur Intl.Locale permet d'utiliser un objet de configuration comme deuxième argument. Les propriétés de cet objet permettent de définir différentes extensions, y compris celle pour le format horaire. Pour cela, on indiquera la propriété hourCycle sur l'objet de configuration avec la valeur souhaitée et on passera cet objet au constructeur.

+ +
let us12hour = new Intl.Locale("en-US-u-hc-h12");
+console.log(us12hour.hourCycle); // Affichera "h12" dans la console
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.hourCycle")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/index.html deleted file mode 100644 index 07608fd53c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Intl.Locale -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale -tags: - - Constructeur - - Intl - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale ---- -
{{JSRef}}{{SeeCompatTable}}
- -

Le constructeur Intl.Locale est une propriété native de l'objet Intl représentant l'identifiant d'une locale Unicode.

- -

{{EmbedInteractiveExample("pages/js/intl-locale.html")}}

- -

Syntaxe

- -
new Intl.Locale([tag[, options]])
- -

Paramètres

- -
-
tag
-
La chaîne de caractère représentant l'identifiant d'une locale Unicode.
-
options
-
Un objet contenant la configuration pour la locale. Les clés (noms des propriétés) de cet objets sont des balises Unicode et les valeurs de ces propriétés doivent être des valeurs de balises Unicode valides.
-
- -

Description

- -

L'objet Intl.locale a été conçu afin de manipuler des locales Unicode. Les locales Unicode sont représentées par une chaîne de caractères qu'on appelle « identifiant de locale ». L'identifant de locale se compose d'un identifiant de langue et d'extensions. Les identifiants de langue sont la composante principale d'une locale et contiennent une langue, un système d'écriture et des extensions régionales. Les informations complémentaires sont stockées via les extensions. Ces extensions peuvent fournir des informations quant au type de calendrier utilisé, le format d'heure utilisé ou la numération utilisée.

- -

L'objet Intl.Locale possède les propriétés et méthodes suivantes.

- -

Propriétés

- -
-
{{jsxref("Locale.prototype","Intl.Locale.prototype")}}
-
Le prototype pour le constructeur Locale.
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Locale")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/index.md new file mode 100644 index 0000000000..07608fd53c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/index.md @@ -0,0 +1,71 @@ +--- +title: Intl.Locale +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale +tags: + - Constructeur + - Intl + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale +--- +
{{JSRef}}{{SeeCompatTable}}
+ +

Le constructeur Intl.Locale est une propriété native de l'objet Intl représentant l'identifiant d'une locale Unicode.

+ +

{{EmbedInteractiveExample("pages/js/intl-locale.html")}}

+ +

Syntaxe

+ +
new Intl.Locale([tag[, options]])
+ +

Paramètres

+ +
+
tag
+
La chaîne de caractère représentant l'identifiant d'une locale Unicode.
+
options
+
Un objet contenant la configuration pour la locale. Les clés (noms des propriétés) de cet objets sont des balises Unicode et les valeurs de ces propriétés doivent être des valeurs de balises Unicode valides.
+
+ +

Description

+ +

L'objet Intl.locale a été conçu afin de manipuler des locales Unicode. Les locales Unicode sont représentées par une chaîne de caractères qu'on appelle « identifiant de locale ». L'identifant de locale se compose d'un identifiant de langue et d'extensions. Les identifiants de langue sont la composante principale d'une locale et contiennent une langue, un système d'écriture et des extensions régionales. Les informations complémentaires sont stockées via les extensions. Ces extensions peuvent fournir des informations quant au type de calendrier utilisé, le format d'heure utilisé ou la numération utilisée.

+ +

L'objet Intl.Locale possède les propriétés et méthodes suivantes.

+ +

Propriétés

+ +
+
{{jsxref("Locale.prototype","Intl.Locale.prototype")}}
+
Le prototype pour le constructeur Locale.
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Locale")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/language/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/language/index.html deleted file mode 100644 index 4fe3adfb90..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/language/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Intl.Locale.prototype.language -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/language -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/language -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/language ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.language est une propriété fournie via un accesseur qui renvoie la langue associée à la locale.

- -

Description

- -

La langue est l'une des caractéristiques majeurs d'une locale. La spécification Unicode indique que l'identifiant de la langue d'une locale est composée de l'identifiant canonique de la langue et de l'identifiant de la réponse (on pourra ainsi distinguer l'anglais britannique de l'anglais américain). Toutefois, la propriété language de {{jsxref("Locale", "Locale")}} renvoie uniquement la composante relative à la langue.

- -

Exemples

- -

Indiquer la langue via la chaîne décrivant la locale

- -

Afin de pouvoir représenter une locale Unicode correctement, une chaîne doit commencer par un identifiant de langue. Le principal argument du constructeur {{jsxref("Locale", "Locale")}} doit être un identifiant valide et doit donc contenir la composante liée à la langue.

- -
let langStr = new Intl.Locale("en-Latn-US");
-
-console.log(langStr.language); // Affichera "en" dans la console
- -

Surcharger la langue via l'objet de configuration

- -

Bien que la composante de la langue doive être indiquée dans le premier paramètre, le constructeur {{jsxref("Locale", "Locale")}} prend comme deuxième argument un objet de configuration qui permet de surcharger cette composante.

- -
let langObj = new Intl.Locale("en-Latn-US", {language: "es"});
-
-console.log(langObj.language); // Affichera "es" dans la console
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.languageProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.language")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/language/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/language/index.md new file mode 100644 index 0000000000..4fe3adfb90 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/language/index.md @@ -0,0 +1,68 @@ +--- +title: Intl.Locale.prototype.language +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/language +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/language +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/language +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.language est une propriété fournie via un accesseur qui renvoie la langue associée à la locale.

+ +

Description

+ +

La langue est l'une des caractéristiques majeurs d'une locale. La spécification Unicode indique que l'identifiant de la langue d'une locale est composée de l'identifiant canonique de la langue et de l'identifiant de la réponse (on pourra ainsi distinguer l'anglais britannique de l'anglais américain). Toutefois, la propriété language de {{jsxref("Locale", "Locale")}} renvoie uniquement la composante relative à la langue.

+ +

Exemples

+ +

Indiquer la langue via la chaîne décrivant la locale

+ +

Afin de pouvoir représenter une locale Unicode correctement, une chaîne doit commencer par un identifiant de langue. Le principal argument du constructeur {{jsxref("Locale", "Locale")}} doit être un identifiant valide et doit donc contenir la composante liée à la langue.

+ +
let langStr = new Intl.Locale("en-Latn-US");
+
+console.log(langStr.language); // Affichera "en" dans la console
+ +

Surcharger la langue via l'objet de configuration

+ +

Bien que la composante de la langue doive être indiquée dans le premier paramètre, le constructeur {{jsxref("Locale", "Locale")}} prend comme deuxième argument un objet de configuration qui permet de surcharger cette composante.

+ +
let langObj = new Intl.Locale("en-Latn-US", {language: "es"});
+
+console.log(langObj.language); // Affichera "es" dans la console
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.languageProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.language")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.html deleted file mode 100644 index 74411b818c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Intl.Locale.prototype.maximize() -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/maximize -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/maximize -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/maximize ---- -
{{JSRef}}
- -

La méthode Intl.Locale.prototype.maximize() permet d'obtenir les valeurs les plus vraisemblantes pour la langue, le script et la région de la locale en fonction des valeurs existantes.

- -

{{EmbedInteractiveExample("pages/js/intl-locale-prototype-maximize.html")}}

- -

Syntaxe

- -
locale.maximize()
- -

Valeur de retour

- -

Une instance {{jsxref("Locale", "Locale")}} dont la propriété baseName renvoie le résultat de l'algorithme de vraisemblance des composantes lancé sur {{jsxref("Locale/baseName", "locale.baseName")}}.

- -

Description

- -

Il est parfois utile d'identifier les composantes les plus probables d'une locale en fonction d'un identifiant incomplet. Cette méthode utilise un algorithme qui permet de déduire les composantes restantes les plus probables. Par exemple, si on fournit la langue "en", l'algorithme renverra "en-Latn-US", car l'anglais ne s'écrit qu'avec l'alphabet latin et est le plus largement parlé aux États-Unis. La méthode maximize() n'opère que sur les composantes principales (langue, script, région) et pas sur les extensions éventuellement indiquées après "-u" (dont Locale.hourCycleLocale.calendar et Locale.numeric entre autres).

- -

Exemples

- -
let maLocale = new Intl.Locale("fr", {hourCycle: "h24", calendar: "gregory"});
-console.log(maLocale.baseName); // Affiche "fr"
-console.log(maLocale.toString()); // Affiche "fr-u-ca-gregory-hc-h24"
-let maLocMaximized = maLocale.maximize();
-
-// Affiche "fr-Latn-FR". Les composantes "Latn" et "FR" ont été ajoutées
-// car le français ne s'écrit qu'avec l'alphabet latin et est plus probablement parlé en France.
-console.log(maLocMaximized.baseName);
-
-// Affiche "fr-Latn-FR-u-ca-gregory-hc-h24".
-// On notera que les extensions (après "-u") restent inchangées.
-console.log(myLocMaximized.toString()); 
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.maximize()
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Locale.maximize")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.md new file mode 100644 index 0000000000..74411b818c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/maximize/index.md @@ -0,0 +1,75 @@ +--- +title: Intl.Locale.prototype.maximize() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/maximize +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/maximize +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/maximize +--- +
{{JSRef}}
+ +

La méthode Intl.Locale.prototype.maximize() permet d'obtenir les valeurs les plus vraisemblantes pour la langue, le script et la région de la locale en fonction des valeurs existantes.

+ +

{{EmbedInteractiveExample("pages/js/intl-locale-prototype-maximize.html")}}

+ +

Syntaxe

+ +
locale.maximize()
+ +

Valeur de retour

+ +

Une instance {{jsxref("Locale", "Locale")}} dont la propriété baseName renvoie le résultat de l'algorithme de vraisemblance des composantes lancé sur {{jsxref("Locale/baseName", "locale.baseName")}}.

+ +

Description

+ +

Il est parfois utile d'identifier les composantes les plus probables d'une locale en fonction d'un identifiant incomplet. Cette méthode utilise un algorithme qui permet de déduire les composantes restantes les plus probables. Par exemple, si on fournit la langue "en", l'algorithme renverra "en-Latn-US", car l'anglais ne s'écrit qu'avec l'alphabet latin et est le plus largement parlé aux États-Unis. La méthode maximize() n'opère que sur les composantes principales (langue, script, région) et pas sur les extensions éventuellement indiquées après "-u" (dont Locale.hourCycleLocale.calendar et Locale.numeric entre autres).

+ +

Exemples

+ +
let maLocale = new Intl.Locale("fr", {hourCycle: "h24", calendar: "gregory"});
+console.log(maLocale.baseName); // Affiche "fr"
+console.log(maLocale.toString()); // Affiche "fr-u-ca-gregory-hc-h24"
+let maLocMaximized = maLocale.maximize();
+
+// Affiche "fr-Latn-FR". Les composantes "Latn" et "FR" ont été ajoutées
+// car le français ne s'écrit qu'avec l'alphabet latin et est plus probablement parlé en France.
+console.log(maLocMaximized.baseName);
+
+// Affiche "fr-Latn-FR-u-ca-gregory-hc-h24".
+// On notera que les extensions (après "-u") restent inchangées.
+console.log(myLocMaximized.toString()); 
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.maximize()
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Locale.maximize")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.html deleted file mode 100644 index 78de1ee9b5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Intl.Locale.prototype.minimize() -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/minimize -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/minimize -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/minimize ---- -
{{JSRef}}
- -

La méthode Intl.Locale.prototype.minimize() tente de retirer les informations qui auraient pu être ajoutée à une locale lors d'un appel à {{jsxref("Locale/maximize", "Locale.maximize()")}}.

- -

{{EmbedInteractiveExample("pages/js/intl-locale-prototype-minimize.html")}}

- -

Syntaxe

- -
locale.minimize()
- -

Valeur de retour

- -

Une instance {{jsxref("Locale", "Locale")}} dont la propriété baseName renvoie le résultat de l'exécution de l'algorithme de suppression des composantes probables sur locale.baseName

- -

Description

- -

Cette méthode effectue l'opération inverse de {{jsxref("Locale/maximize", "maximize()")}}, en retirant les fragments de langue/script ou de région qui sont superflus. Ainsi, "en-Latn" pourra être minimisé en "en" car l'anglais s'écrit uniquement à l'aide de l'alphabet latin.

- -

minimize() ne modifie pas les éventuelles extensions décrites dans la chaîne de locale (après le "-u") ou via l'objet de configuration (elle ne modifie donc pas les valeurs de {{jsxref("Locale/hourCycle", "Locale.hourCycle")}}, {{jsxref("Locale/calendar", "Locale.calendar")}} et {{jsxref("Locale/numeric", "Locale.numeric")}}).

- -

Exemples

- -
let maLocale = new Intl.Locale("fr-Latn-FR", {hourCycle: "h24", calendar: "gregory"});
-console.log(maLocale.baseName); // Affiche "fr-Latn-FR"
-console.log(maLocale.toString()); // Affiche "fr-Latn-FR-u-ca-gregory-hc-h24"
-let maLocMinimized = maLocale.minimize();
-
-console.log(maLocMinimized.baseName);
-// Affiche "fr" car le français est écrit uniquement avec l'alphabet latin et
-// parlé le plus largement en France
-
-console.log(maLocMinimized.toString());
-// Affiche "fr-u-ca-gregory-hc-h24". On voit ici que les extensions
-// (décrites après "-u") restent inchangées.
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.minimize()
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Locale.minimize")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.md new file mode 100644 index 0000000000..78de1ee9b5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/minimize/index.md @@ -0,0 +1,77 @@ +--- +title: Intl.Locale.prototype.minimize() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/minimize +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/minimize +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/minimize +--- +
{{JSRef}}
+ +

La méthode Intl.Locale.prototype.minimize() tente de retirer les informations qui auraient pu être ajoutée à une locale lors d'un appel à {{jsxref("Locale/maximize", "Locale.maximize()")}}.

+ +

{{EmbedInteractiveExample("pages/js/intl-locale-prototype-minimize.html")}}

+ +

Syntaxe

+ +
locale.minimize()
+ +

Valeur de retour

+ +

Une instance {{jsxref("Locale", "Locale")}} dont la propriété baseName renvoie le résultat de l'exécution de l'algorithme de suppression des composantes probables sur locale.baseName

+ +

Description

+ +

Cette méthode effectue l'opération inverse de {{jsxref("Locale/maximize", "maximize()")}}, en retirant les fragments de langue/script ou de région qui sont superflus. Ainsi, "en-Latn" pourra être minimisé en "en" car l'anglais s'écrit uniquement à l'aide de l'alphabet latin.

+ +

minimize() ne modifie pas les éventuelles extensions décrites dans la chaîne de locale (après le "-u") ou via l'objet de configuration (elle ne modifie donc pas les valeurs de {{jsxref("Locale/hourCycle", "Locale.hourCycle")}}, {{jsxref("Locale/calendar", "Locale.calendar")}} et {{jsxref("Locale/numeric", "Locale.numeric")}}).

+ +

Exemples

+ +
let maLocale = new Intl.Locale("fr-Latn-FR", {hourCycle: "h24", calendar: "gregory"});
+console.log(maLocale.baseName); // Affiche "fr-Latn-FR"
+console.log(maLocale.toString()); // Affiche "fr-Latn-FR-u-ca-gregory-hc-h24"
+let maLocMinimized = maLocale.minimize();
+
+console.log(maLocMinimized.baseName);
+// Affiche "fr" car le français est écrit uniquement avec l'alphabet latin et
+// parlé le plus largement en France
+
+console.log(maLocMinimized.toString());
+// Affiche "fr-u-ca-gregory-hc-h24". On voit ici que les extensions
+// (décrites après "-u") restent inchangées.
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.minimize()
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Locale.minimize")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html deleted file mode 100644 index a57835345c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.html +++ /dev/null @@ -1,424 +0,0 @@ ---- -title: Intl.Locale.prototype.numberingSystem -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numberingSystem -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numberingSystem -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/numberingSystem ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.numberingSystem est une propriété fournie par un accesseur qui renvoie le système de numération utilisée par la locale.

- -

Description

- -

Un système de numération est un système qui permet d'exprimer les nombres. La propriété numberingSystem permet de connaître le système de numérati Unicode. A table of the standard Unicode numeral systems can be seen belowon de la locale. Les valeurs qui peuvent être fournies par cette propriété sont standardisées par Unicode.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValeurDescription
adlmChiffres adlams
ahomChiffres ahoms
arabChiffres arabes
arabextChiffres arabes étendus
armnNumération arménienne majuscule (algorithmique)
armnlowNumération arménienne minuscule (algorithmique)
baliChiffres balinais
bengChiffres bengalis
bhksChiffres bhaiksuki
brahChiffres brahmis
cakmChiffres chakmas
chamChiffres chams
cyrlNumération cyrillique (algorithmique)
devaChiffres devanagaris
ethiNumération éthiopienne (algorithmique)
financeNumération financière (peut être algorithmique)
fullwideChiffres à pleine chasse
georNumération géorgienne (algorithmique)
gongChiffres Gunjala Gondis
gonmChiffres Masaram Gondis
grekNumération greque majuscule (algorithmique)
greklowNumération greque minuscule (algorithmique)
gujrChiffres Gujaratis
guruChiffres Gurmukhis
hanidaysNumération du jour du mois avec caractère Han (utilisée avec les calendriers lunaires ou traditionnels)
hanidecSystème décimal positionnel utilisant les idéographes des nombres chinois comme chiffres
hansNumération chinoise simplifiée (algorithmique)
hansfinNumération chinoise simplifiée financière (algorithmique)
hantNumération chinoise traditionnelle (algorithmique)
hantfinNumération chinoise traditionnelle financière (algorithmique)
hebrNumération hébraïque (algorithmique)
hmngChiffres Pahawh Hmongs
hmnpChiffres Nyiakeng Puachue Hmongs
javaChiffres javanais
jpanNumération japonaise (algorithmique)
jpanfinNumération japonaise financière (algorithmique)
jpanyearNumération basée sur la première année Gannen du calendrier japonais
kaliChiffres Kayah Lis
khmrChiffres Khmers
kndaChiffres Kannadas
lanaChiffres Tai Tham Hora séculiers
lanathamChiffres Tai Tham Tham ecclésiastiques
laooChiffres laotien
latnChiffres latins
lepcChiffres Lepchas
limbChiffres Limbus
mathboldChiffres mathématiques en gras
mathdblChiffres mathématiques barrés en double
mathmonoChiffres mathématiques à chasse fixe
mathsanbChiffres mathématiques en gras sans empattements
mathsansChiffres mathématiques sans empattements
mlymChiffres Malayalams
modiChiffres Modis
mongChiffres mongols
mrooChiffres Mros
mteiChiffres Meetei Mayeks
mymrChiffres Myanmars
mymrshanChiffres Myanmar Shans
mymrtlngChiffres Myanmar Tai Laings
nativeChiffres natifs
newaChiffres Newas
nkooChiffres N'Kos
olckChiffres Ol Chikis
oryaChiffres Oriyas
osmaChiffres Osmanyas
rohgChiffres Hanifi Rohingyas
romanNumération romaine majuscule (algorithmique)
romanlowNumération romaine minuscule (algorithmique)
saurChiffres Saurashtras
shrdChiffres Sharadas
sindChiffres Khudawadis
sinhChiffres Sinhala Liths
soraChiffres Sora_Sompengs
sundChiffres soudanais
takrChiffres Takris
taluChiffres New Tai Lues
tamlNumération tamoule (algorithmique=
tamldecChiffres tamouls décimaux modernes
teluChiffres Telugus
thaiChiffres thaïs
tirhChiffres Tirhutas
tibtChiffres tibétains
traditioNumération traditionnelle (peut être algorithmique)
vaiiChiffres Vais
waraChiffres Warang Citis
wchoChiffres Wanchos
- -

Exemples

- -

Définir la valeur de numberingSystem grâce à la chaîne décrivant la locale

- -

D'après la spécification Unicode sur les chaînes décrivant les locales, l'extension décrivant le système de numération est indiquée par la clé nu.

- -

Le constructeur Intl.locale prend comme premier argument une chaîne de caractères décrivant la locale. Aussi, on peut indiquer le système de numération après les composantes principales de la chaîne de caractères en lui ajoutant un "-u" (indiquant la présence d'une extension), suivi d'un "-nu" (indiquant que l'extension qui sera indiquée décrit le système de numération, suivi de la valeur voulue pour le système de numération.

- -
let numberingSystemViaStr = new Intl.Locale("fr-Latn-FR-u-nu-mong");
-console.log(numberingSystemStr.numberingSystem);
-// affichera "mong" dans la console
- -

Définir la valeur de numberingSystem grâce à un objet de configuration

- -

Le constructeur Intl.Locale possède un deuxième argument, optionnel, qui est un objet permettant de configurer la locale. Les propriétés de cet objet sont utilisées comme extensions pour la locale ; les clés des propriétés sont les noms des extensions et leurs valeurs sont celles utilisées pour chaque extension. On peut donc utiliser la propriété numberingSystem sur cet objet afin de définir le système de numération à utiliser pour cette locale.

- -
let numberingSystemViaObj= new Intl.Locale("en-Latn-US", {numberingSystem: "latn"});
-console.log(us12hour.numberingSystem);
-// affichera "latn" dans la console
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.numberingSystem")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.md new file mode 100644 index 0000000000..a57835345c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/numberingsystem/index.md @@ -0,0 +1,424 @@ +--- +title: Intl.Locale.prototype.numberingSystem +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numberingSystem +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numberingSystem +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/numberingSystem +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.numberingSystem est une propriété fournie par un accesseur qui renvoie le système de numération utilisée par la locale.

+ +

Description

+ +

Un système de numération est un système qui permet d'exprimer les nombres. La propriété numberingSystem permet de connaître le système de numérati Unicode. A table of the standard Unicode numeral systems can be seen belowon de la locale. Les valeurs qui peuvent être fournies par cette propriété sont standardisées par Unicode.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValeurDescription
adlmChiffres adlams
ahomChiffres ahoms
arabChiffres arabes
arabextChiffres arabes étendus
armnNumération arménienne majuscule (algorithmique)
armnlowNumération arménienne minuscule (algorithmique)
baliChiffres balinais
bengChiffres bengalis
bhksChiffres bhaiksuki
brahChiffres brahmis
cakmChiffres chakmas
chamChiffres chams
cyrlNumération cyrillique (algorithmique)
devaChiffres devanagaris
ethiNumération éthiopienne (algorithmique)
financeNumération financière (peut être algorithmique)
fullwideChiffres à pleine chasse
georNumération géorgienne (algorithmique)
gongChiffres Gunjala Gondis
gonmChiffres Masaram Gondis
grekNumération greque majuscule (algorithmique)
greklowNumération greque minuscule (algorithmique)
gujrChiffres Gujaratis
guruChiffres Gurmukhis
hanidaysNumération du jour du mois avec caractère Han (utilisée avec les calendriers lunaires ou traditionnels)
hanidecSystème décimal positionnel utilisant les idéographes des nombres chinois comme chiffres
hansNumération chinoise simplifiée (algorithmique)
hansfinNumération chinoise simplifiée financière (algorithmique)
hantNumération chinoise traditionnelle (algorithmique)
hantfinNumération chinoise traditionnelle financière (algorithmique)
hebrNumération hébraïque (algorithmique)
hmngChiffres Pahawh Hmongs
hmnpChiffres Nyiakeng Puachue Hmongs
javaChiffres javanais
jpanNumération japonaise (algorithmique)
jpanfinNumération japonaise financière (algorithmique)
jpanyearNumération basée sur la première année Gannen du calendrier japonais
kaliChiffres Kayah Lis
khmrChiffres Khmers
kndaChiffres Kannadas
lanaChiffres Tai Tham Hora séculiers
lanathamChiffres Tai Tham Tham ecclésiastiques
laooChiffres laotien
latnChiffres latins
lepcChiffres Lepchas
limbChiffres Limbus
mathboldChiffres mathématiques en gras
mathdblChiffres mathématiques barrés en double
mathmonoChiffres mathématiques à chasse fixe
mathsanbChiffres mathématiques en gras sans empattements
mathsansChiffres mathématiques sans empattements
mlymChiffres Malayalams
modiChiffres Modis
mongChiffres mongols
mrooChiffres Mros
mteiChiffres Meetei Mayeks
mymrChiffres Myanmars
mymrshanChiffres Myanmar Shans
mymrtlngChiffres Myanmar Tai Laings
nativeChiffres natifs
newaChiffres Newas
nkooChiffres N'Kos
olckChiffres Ol Chikis
oryaChiffres Oriyas
osmaChiffres Osmanyas
rohgChiffres Hanifi Rohingyas
romanNumération romaine majuscule (algorithmique)
romanlowNumération romaine minuscule (algorithmique)
saurChiffres Saurashtras
shrdChiffres Sharadas
sindChiffres Khudawadis
sinhChiffres Sinhala Liths
soraChiffres Sora_Sompengs
sundChiffres soudanais
takrChiffres Takris
taluChiffres New Tai Lues
tamlNumération tamoule (algorithmique=
tamldecChiffres tamouls décimaux modernes
teluChiffres Telugus
thaiChiffres thaïs
tirhChiffres Tirhutas
tibtChiffres tibétains
traditioNumération traditionnelle (peut être algorithmique)
vaiiChiffres Vais
waraChiffres Warang Citis
wchoChiffres Wanchos
+ +

Exemples

+ +

Définir la valeur de numberingSystem grâce à la chaîne décrivant la locale

+ +

D'après la spécification Unicode sur les chaînes décrivant les locales, l'extension décrivant le système de numération est indiquée par la clé nu.

+ +

Le constructeur Intl.locale prend comme premier argument une chaîne de caractères décrivant la locale. Aussi, on peut indiquer le système de numération après les composantes principales de la chaîne de caractères en lui ajoutant un "-u" (indiquant la présence d'une extension), suivi d'un "-nu" (indiquant que l'extension qui sera indiquée décrit le système de numération, suivi de la valeur voulue pour le système de numération.

+ +
let numberingSystemViaStr = new Intl.Locale("fr-Latn-FR-u-nu-mong");
+console.log(numberingSystemStr.numberingSystem);
+// affichera "mong" dans la console
+ +

Définir la valeur de numberingSystem grâce à un objet de configuration

+ +

Le constructeur Intl.Locale possède un deuxième argument, optionnel, qui est un objet permettant de configurer la locale. Les propriétés de cet objet sont utilisées comme extensions pour la locale ; les clés des propriétés sont les noms des extensions et leurs valeurs sont celles utilisées pour chaque extension. On peut donc utiliser la propriété numberingSystem sur cet objet afin de définir le système de numération à utiliser pour cette locale.

+ +
let numberingSystemViaObj= new Intl.Locale("en-Latn-US", {numberingSystem: "latn"});
+console.log(us12hour.numberingSystem);
+// affichera "latn" dans la console
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.numberingSystem")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.html deleted file mode 100644 index d38122f7be..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Intl.Locale.prototype.numeric -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numeric -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numeric -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/numeric ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.numeric est une propriété fournie par un accesseur et qui indique si la locale possède une collation spécifique pour les caractères numériques (la collation étant la méthode qui permet d'ordonner des chaînes de caractères entre elles).

- -

Description

- -

À l'instar de {{jsxref("Locale.caseFirst", "Intl.Locale.caseFirst")}}, numeric représente une modification des règles de collation utilisée par la locale. numeric est un booléen (true ou false). Lorsque cette propriété vaut false, il n'y a pas de gestion particulière des chiffres et si cette propriété vaut true, cela indique que les caractères numériques sont pris en compte lors de la collation des chaînes. Ainsi, les séquences de chiffres décimaux seront comparés comme des nombres. Ainsi, la chaîne de caractères "A-21" sera considérée inférieure à "A-123".

- -

Exemples

- -

Définir numeric grâce à la chaîne de description de la locale

- -

Selon la spécification Unicode sur les chaînes de caractères décrivant les locales, les valeurs de numeric sont associées à la clé kn. Pour utiliser cette clé dans la chaîne de description de la locale (le premier argument de Intl.Locale), après la chaîne de base, on pourra ajouter un suffixe avec "-u" afin d'indiquer la présence d'une extension, puis "-kn" afin de préciser l'extension en question et enfin la valeur souhaitée pour cette extension. Si on veut que numeric soit true, il suffit d'ajouter la clé kn. Pour indiquer la valeur false, il faudra explicitement ajouter "-false".

- -
let numericViaStr = new Intl.Locale("fr-Latn-FR-u-kn-false");
-console.log(numericStr.numeric);
-// Affichera "false" dans la console
- -

Définir numeric via l'objet de configuration de l'instance

- -

Le constructeur Intl.Locale possède un deuxième argument, optionnel, qui est un objet permettant de configurer la locale. Les propriétés de cet objet sont utilisées comme extensions pour la locale ; les clés des propriétés sont les noms des extensions et leurs valeurs sont celles utilisées pour chaque extension. On peut donc utiliser la propriété numeric sur cet objet afin de définir le système de numération à utiliser pour cette locale.

- -
let numericViaObj= new Intl.Locale("en-Latn-US", {numeric: true});
-console.log(us12hour.numeric);
-// Affichera "true" dans la console
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.numeric")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.md new file mode 100644 index 0000000000..d38122f7be --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/numeric/index.md @@ -0,0 +1,68 @@ +--- +title: Intl.Locale.prototype.numeric +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numeric +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/numeric +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/numeric +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.numeric est une propriété fournie par un accesseur et qui indique si la locale possède une collation spécifique pour les caractères numériques (la collation étant la méthode qui permet d'ordonner des chaînes de caractères entre elles).

+ +

Description

+ +

À l'instar de {{jsxref("Locale.caseFirst", "Intl.Locale.caseFirst")}}, numeric représente une modification des règles de collation utilisée par la locale. numeric est un booléen (true ou false). Lorsque cette propriété vaut false, il n'y a pas de gestion particulière des chiffres et si cette propriété vaut true, cela indique que les caractères numériques sont pris en compte lors de la collation des chaînes. Ainsi, les séquences de chiffres décimaux seront comparés comme des nombres. Ainsi, la chaîne de caractères "A-21" sera considérée inférieure à "A-123".

+ +

Exemples

+ +

Définir numeric grâce à la chaîne de description de la locale

+ +

Selon la spécification Unicode sur les chaînes de caractères décrivant les locales, les valeurs de numeric sont associées à la clé kn. Pour utiliser cette clé dans la chaîne de description de la locale (le premier argument de Intl.Locale), après la chaîne de base, on pourra ajouter un suffixe avec "-u" afin d'indiquer la présence d'une extension, puis "-kn" afin de préciser l'extension en question et enfin la valeur souhaitée pour cette extension. Si on veut que numeric soit true, il suffit d'ajouter la clé kn. Pour indiquer la valeur false, il faudra explicitement ajouter "-false".

+ +
let numericViaStr = new Intl.Locale("fr-Latn-FR-u-kn-false");
+console.log(numericStr.numeric);
+// Affichera "false" dans la console
+ +

Définir numeric via l'objet de configuration de l'instance

+ +

Le constructeur Intl.Locale possède un deuxième argument, optionnel, qui est un objet permettant de configurer la locale. Les propriétés de cet objet sont utilisées comme extensions pour la locale ; les clés des propriétés sont les noms des extensions et leurs valeurs sont celles utilisées pour chaque extension. On peut donc utiliser la propriété numeric sur cet objet afin de définir le système de numération à utiliser pour cette locale.

+ +
let numericViaObj= new Intl.Locale("en-Latn-US", {numeric: true});
+console.log(us12hour.numeric);
+// Affichera "true" dans la console
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.LocaleProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.numeric")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/region/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/region/index.html deleted file mode 100644 index 603db078a8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/region/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Intl.Locale.prototype.region -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/region -tags: - - Internationalisation - - Intl - - JavaScript - - Locale - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/region -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/region ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.region est fournie par un accesseur qui renvoie la région du monde (il s'agit généralement d'un pays) associée à la locale courante.

- -

Description

- -

La région est un fragment majeur de l'identifiant de la locale car il situe la locale dans une zone donnée du monde. Connaître la région associée à la locale est crucial pour identifier les différences entre les locales. Ainsi, on parle anglais aux États-Unis et au Royaume-Uni mais il existe certaines différences d'orthographe entre ces pays. Connaître la région d'une locale peut permettre aux développeurs d'adapter leurs sites et applications selon la région depuis laquelle ils sont consultés.

- -

Exemples

- -

Définir la région avec la chaîne de caractères décrivant la locale

- -

La région est la troisième composante d'une chaîne représentant un identifiant de langue Unicode. Cette chaîne de caractères est généralement passée au constructeur {{jsxref("Locale", "Locale")}}.

- -
let regionStr = new Intl.Locale("en-Latn-US");
-
-console.log(regionStr.region);
-// Affichera "US" dans la console
- -

Définir la région via l'objet de configuration du constructeur

- -

Le constructeur {{jsxref("Locale", "Locale")}} prend comme second argument un objet de paramétrage dont chacune des propriétés permet de définir une extension ou une composante de la locale.

- -
let regionObj = new Intl.Locale("fr-Latn", {region: "FR"});
-
-console.log(regionObj.region);
-// Affichera "FR" dans la console
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.regionProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.region")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/region/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/region/index.md new file mode 100644 index 0000000000..603db078a8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/region/index.md @@ -0,0 +1,70 @@ +--- +title: Intl.Locale.prototype.region +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/region +tags: + - Internationalisation + - Intl + - JavaScript + - Locale + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/region +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/region +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.region est fournie par un accesseur qui renvoie la région du monde (il s'agit généralement d'un pays) associée à la locale courante.

+ +

Description

+ +

La région est un fragment majeur de l'identifiant de la locale car il situe la locale dans une zone donnée du monde. Connaître la région associée à la locale est crucial pour identifier les différences entre les locales. Ainsi, on parle anglais aux États-Unis et au Royaume-Uni mais il existe certaines différences d'orthographe entre ces pays. Connaître la région d'une locale peut permettre aux développeurs d'adapter leurs sites et applications selon la région depuis laquelle ils sont consultés.

+ +

Exemples

+ +

Définir la région avec la chaîne de caractères décrivant la locale

+ +

La région est la troisième composante d'une chaîne représentant un identifiant de langue Unicode. Cette chaîne de caractères est généralement passée au constructeur {{jsxref("Locale", "Locale")}}.

+ +
let regionStr = new Intl.Locale("en-Latn-US");
+
+console.log(regionStr.region);
+// Affichera "US" dans la console
+ +

Définir la région via l'objet de configuration du constructeur

+ +

Le constructeur {{jsxref("Locale", "Locale")}} prend comme second argument un objet de paramétrage dont chacune des propriétés permet de définir une extension ou une composante de la locale.

+ +
let regionObj = new Intl.Locale("fr-Latn", {region: "FR"});
+
+console.log(regionObj.region);
+// Affichera "FR" dans la console
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.regionProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.region")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/script/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/script/index.html deleted file mode 100644 index 138d442ed8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/script/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Intl.Locale.prototype.script -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/script -tags: - - Internationalisation - - Intl - - JavaScript - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/script -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/script ---- -
{{JSRef}}
- -

La propriété Intl.Locale.prototype.script est fournie via un accesseur et renvoie le script utilisé pour l'écriture d'une langue donnée pour la locale courante.

- -

Description

- -

Un script, ou système d'écriture, est l'une des caractéristiques fondamentales d'une locale. Il décrit l'ensemble des symboles (ou glyphes) qui sont utilisés pour écrire dans une langue donnée. Ainsi, le script associé à l'anglais est l'alphabet latin, le script associé au coréen est le Hangul. Dans la plupart des cas, indiquer le script n'est pas strictement nécessaire car une langue ne s'écrit que dans un script donné. Il existe toutefois des exceptions et il est préférable d'indique le script afin d'avoir un identifiant de langue Unicode complet.

- -

Exemples

- -

Définir le script via la chaîne de description de la locale

- -

Le script correspond à la deuxième partie d'un identifiant de langue Unicode valide. On peut donc le définir en passant un tel identifiant au constructeur {{jsxref("Locale", "Locale")}}. Toutefois, cette composante n'est pas obligatoire pour créer une instance de Locale.

- -
let scriptStr = new Intl.Locale("en-Latn-US");
-
-console.log(scriptStr.script); // Affichera "Latn" dans la console
- -

Définir le script grâce à l'objet de configuration du constructeur

- -

Le constructeur {{jsxref("Locale", "Locale")}} permet d'utiliser un objet de configuration dont les propriétés définiront les caractéristiques de la locale :

- -
let scriptObj = new Intl.Locale("fr-FR", {script: "Latn"});
-
-console.log(scriptObj.script); // Affichera "Latn" dans la console
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.scriptProposition de niveau 3
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Intl.Locale.script")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/script/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/script/index.md new file mode 100644 index 0000000000..138d442ed8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/script/index.md @@ -0,0 +1,67 @@ +--- +title: Intl.Locale.prototype.script +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/script +tags: + - Internationalisation + - Intl + - JavaScript + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/script +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/script +--- +
{{JSRef}}
+ +

La propriété Intl.Locale.prototype.script est fournie via un accesseur et renvoie le script utilisé pour l'écriture d'une langue donnée pour la locale courante.

+ +

Description

+ +

Un script, ou système d'écriture, est l'une des caractéristiques fondamentales d'une locale. Il décrit l'ensemble des symboles (ou glyphes) qui sont utilisés pour écrire dans une langue donnée. Ainsi, le script associé à l'anglais est l'alphabet latin, le script associé au coréen est le Hangul. Dans la plupart des cas, indiquer le script n'est pas strictement nécessaire car une langue ne s'écrit que dans un script donné. Il existe toutefois des exceptions et il est préférable d'indique le script afin d'avoir un identifiant de langue Unicode complet.

+ +

Exemples

+ +

Définir le script via la chaîne de description de la locale

+ +

Le script correspond à la deuxième partie d'un identifiant de langue Unicode valide. On peut donc le définir en passant un tel identifiant au constructeur {{jsxref("Locale", "Locale")}}. Toutefois, cette composante n'est pas obligatoire pour créer une instance de Locale.

+ +
let scriptStr = new Intl.Locale("en-Latn-US");
+
+console.log(scriptStr.script); // Affichera "Latn" dans la console
+ +

Définir le script grâce à l'objet de configuration du constructeur

+ +

Le constructeur {{jsxref("Locale", "Locale")}} permet d'utiliser un objet de configuration dont les propriétés définiront les caractéristiques de la locale :

+ +
let scriptObj = new Intl.Locale("fr-FR", {script: "Latn"});
+
+console.log(scriptObj.script); // Affichera "Latn" dans la console
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.scriptProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Intl.Locale.script")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.html b/files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.html deleted file mode 100644 index 96e0b7767b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Intl.Locale.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/toString -tags: - - Intl - - JavaScript - - Locale - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/toString ---- -
{{JSRef}}
- -

La méthode Intl.Locale.prototype.toString() renvoie l'identifiant de locale complet pour la locale courante.

- -

{{EmbedInteractiveExample("pages/js/intl-locale-prototype-tostring.html")}}

- -

Syntaxe

- -
locale.toString()
- -

Valeur de retour

- -

La chaîne de caractères représentant l'identifiant complet de la locale.

- -

Description

- -

Une instance de Locale est une représentation JavaScript d'une locale au sens Unicode. Les informations décrivant une locale donnée (la langue, le système d'écriture, le type de calendrier, etc.) peuvent être encodées en une chaîne de caractères qui est l'identifiant de la locale. Lorsqu'on appelle la méthode toString() sur une instance de Locale, on obtiendra l'identifiant complet de la locale.

- -

Exemples

- -
let maLocale = new Intl.Locale("fr-Latn-FR", {hourCycle: "h24", calendar: "gregory"});
-console.log(maLocale.baseName); // Affiche "fr-Latn-FR"
-console.log(maLocale.toString()); // Affiche "fr-Latn-FR-u-ca-gregory-hc-h24"
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.toString()Proposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.Locale.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.md b/files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.md new file mode 100644 index 0000000000..96e0b7767b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/locale/tostring/index.md @@ -0,0 +1,66 @@ +--- +title: Intl.Locale.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Intl/Locale/toString +tags: + - Intl + - JavaScript + - Locale + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Locale/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/Locale/toString +--- +
{{JSRef}}
+ +

La méthode Intl.Locale.prototype.toString() renvoie l'identifiant de locale complet pour la locale courante.

+ +

{{EmbedInteractiveExample("pages/js/intl-locale-prototype-tostring.html")}}

+ +

Syntaxe

+ +
locale.toString()
+ +

Valeur de retour

+ +

La chaîne de caractères représentant l'identifiant complet de la locale.

+ +

Description

+ +

Une instance de Locale est une représentation JavaScript d'une locale au sens Unicode. Les informations décrivant une locale donnée (la langue, le système d'écriture, le type de calendrier, etc.) peuvent être encodées en une chaîne de caractères qui est l'identifiant de la locale. Lorsqu'on appelle la méthode toString() sur une instance de Locale, on obtiendra l'identifiant complet de la locale.

+ +

Exemples

+ +
let maLocale = new Intl.Locale("fr-Latn-FR", {hourCycle: "h24", calendar: "gregory"});
+console.log(maLocale.baseName); // Affiche "fr-Latn-FR"
+console.log(maLocale.toString()); // Affiche "fr-Latn-FR-u-ca-gregory-hc-h24"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.Locale.prototype.toString()Proposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.Locale.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.html b/files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.html deleted file mode 100644 index d912f25f6f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Intl.NumberFormat.prototype.format -slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format -tags: - - Internationalisation - - Intl - - JavaScript - - NumberFormat - - Propriété - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/format ---- -
{{JSRef}}
- -

La méthode Intl.NumberFormat.prototype.format() formate un nombre en fonction des options de locales et de formats définis dans l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}} correspondant.

- -
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-format.html")}}
- -

Syntaxe

- -
numberFormat.format(nombre)
- -

Paramètres

- -
-
nombre
-
Le nombre qu'on souhaite formater.
-
- -

Description

- -

La fonction d'accesseur format permet de formater un nombre donné en une chaîne de caractères selon les options de locale et de format de l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}}.

- -

Exemples

- -

Utiliser format()

- -

On peut utiliser la fonction renvoyée par format pour formater une valeur monétaire selon la locale russe :

- -
var options = {style: "currency", currency: "RUB"};
-var numberFormat = new Intl.NumberFormat("ru-RU", options);
-console.log(numberFormat.format(654321.987));
-// → "654 321,99 руб."
- -

Utiliser format() avec map()

- -

On peut également utiliser la fonction format pour formater les nombres contenus dans un tableau. On notera que la fonction est liée à l'objet NumberFormat dont elle provient, on peut donc directement l'utiliser avec {{jsxref("Array.prototype.map")}}.

- -
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"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.3.2', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int 1.0')}}Définition initiale
{{SpecName('ES Int 2.0', '#sec-11.3.2', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.prototype.format', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.NumberFormat.format")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.md b/files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.md new file mode 100644 index 0000000000..d912f25f6f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/numberformat/format/index.md @@ -0,0 +1,94 @@ +--- +title: Intl.NumberFormat.prototype.format +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format +tags: + - Internationalisation + - Intl + - JavaScript + - NumberFormat + - Propriété + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/format +--- +
{{JSRef}}
+ +

La méthode Intl.NumberFormat.prototype.format() formate un nombre en fonction des options de locales et de formats définis dans l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}} correspondant.

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-format.html")}}
+ +

Syntaxe

+ +
numberFormat.format(nombre)
+ +

Paramètres

+ +
+
nombre
+
Le nombre qu'on souhaite formater.
+
+ +

Description

+ +

La fonction d'accesseur format permet de formater un nombre donné en une chaîne de caractères selon les options de locale et de format de l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}}.

+ +

Exemples

+ +

Utiliser format()

+ +

On peut utiliser la fonction renvoyée par format pour formater une valeur monétaire selon la locale russe :

+ +
var options = {style: "currency", currency: "RUB"};
+var numberFormat = new Intl.NumberFormat("ru-RU", options);
+console.log(numberFormat.format(654321.987));
+// → "654 321,99 руб."
+ +

Utiliser format() avec map()

+ +

On peut également utiliser la fonction format pour formater les nombres contenus dans un tableau. On notera que la fonction est liée à l'objet NumberFormat dont elle provient, on peut donc directement l'utiliser avec {{jsxref("Array.prototype.map")}}.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.3.2', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int 1.0')}}Définition initiale
{{SpecName('ES Int 2.0', '#sec-11.3.2', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.prototype.format', 'Intl.NumberFormat.prototype.format')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.NumberFormat.format")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html b/files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html deleted file mode 100644 index caadb942cb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.html +++ /dev/null @@ -1,148 +0,0 @@ ---- -title: Intl.NumberFormat.prototype.formatToParts() -slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - NumberFormat - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/formatToParts ---- -
{{JSRef}}
- -

La méthode Intl.Numberformat.prototype.formatToParts() permet de produire des fragments de chaînes à partir d'un nombre pour le mettre en forme avec des formateurs NumberTimeFormat.

- -

Syntaxe

- -
Intl.NumberFormat.prototype.formatToParts(nombre)
- -

Paramètres

- -
-
nombre {{optional_inline}}
-
Le nombre qu'on souhaite mettre en forme.
-
- -

Valeur de retour

- -

Un tableau {{jsxref("Array")}} contenant des objets correspondants aux différents fragments du nombres.

- -

Description

- -

La méthode formatToParts() est peut être utilisée lorsqu'on met en forme des chaînes de caractères représentant des valeurs numériques. Cette méthode renvoie un tableau ({{jsxref("Array")}}) d'objets qui sont les différents fragments spécifiques aux locales et qui permettent de construire des chaînes dans un format spécifiques tout en conservant les parties liées à la locale. formatToParts() renvoie une structure analogue à :

- -
[
-  { type: "integer", value: "3" }
-  { type: "group", value: "." }
-  { type: "integer", value: "500" }
-]
- -

Les valeurs possibles pour l'attribut type sont :

- -
-
currency
-
Le suffixe associé à la devise. Ce peut être le symbole "$", "€" ou bien le nom de la devise "Dollar", "Euro" selon la façon dont currencyDisplay  est indiquée.
-
decimal
-
Le séparateur décimal utilisé (".").
-
fraction
-
La partie fractionnaire du nombre.
-
group
-
La chaîne de caractères utilisée pour indiquer un groupe (",").
-
infinity
-
La chaîne de caractères qui représente la valeur {{jsxref("Infinity")}} ("∞").
-
integer
-
La partie entière du nombre.
-
literal
-
Toute chaîne de caractères littérale ou blanc utilisée dans le nombre mis en forme.
-
minusSign
-
La chaîne de caractères utilisée pour le signe moins ("-").
-
nan
-
La chaîne de caractères utilisée pour représenter la valeur {{jsxref("NaN")}} ("NaN").
-
plusSign
-
La chaîne de caractères utilisée pour le signe plus ("+").
-
percentSign
-
La châine de caractères utilisée pour le symbole pourcent ("%").
-
- -

Exemples

- -

NumberFormat produit une chaîne localisée opaque qui ne peut pas être manipulée directement :

- -
var number = 3500;
-
-var formatter = new Intl.NumberFormat('de-DE', {
-  style: 'currency',
-  currency: 'EUR'
-});
-
-formatter.format(number);
-// "3.500,00 €"
-
- -

Toutefois, pour certaines applications, on souhaite adapter la mise en forme de cette chaîne de caractères. La méthode formatToParts permet d'obtenir cette flexibilité tout en conservant les différents fragments produits par NumberFormat :

- -
formatter.formatToParts(number);
-
-// return value:
-[
-  { type: "integer",  value: "3"   }
-  { type: "group",    value: "."   }
-  { type: "integer",  value: "500" }
-  { type: "decimal",  value: ","   }
-  { type: "fraction", value: "00"  }
-  { type: "literal",  value: " "   }
-  { type: "currency", value: "€"   }
-]
-
- -

Maintenant que la chaîne est décomposée, on peut la réassembler d'une façon spécifique. On peut, par exemple utiliser {{jsxref("Array.prototype.map()")}}, une fonction fléchée, une instruction switch, des littéraux de gabarits et {{jsxref("Array.prototype.reduce()")}}.

- -
var numberString = formatter.formatToParts(number).map(({type, value}) => {
-  switch (type) {
-    case 'currency': return `<strong>${value}</strong>`;
-    default : return value;
-  }
-}).reduce((string, part) => string + part);
-
- -

Grâce à cette fonction, on pourra mettre en gras le suffixe associé à la devise :

- -
console.log(numberString);
-// "3.500,00 <strong>€</strong>"
- -

Prothèse d'émulation (polyfill)

- -

Une prothèse pour cette fonctionnalité est disponible dans le dépôt associé à la proposition.

- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.prototype.formatToParts', 'Intl.NumberFormat.prototype.formatToParts')}}{{Spec2('ES Int Draft')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.NumberFormat.formatToParts")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.md b/files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.md new file mode 100644 index 0000000000..caadb942cb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/numberformat/formattoparts/index.md @@ -0,0 +1,148 @@ +--- +title: Intl.NumberFormat.prototype.formatToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - NumberFormat + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/formatToParts +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/formatToParts +--- +
{{JSRef}}
+ +

La méthode Intl.Numberformat.prototype.formatToParts() permet de produire des fragments de chaînes à partir d'un nombre pour le mettre en forme avec des formateurs NumberTimeFormat.

+ +

Syntaxe

+ +
Intl.NumberFormat.prototype.formatToParts(nombre)
+ +

Paramètres

+ +
+
nombre {{optional_inline}}
+
Le nombre qu'on souhaite mettre en forme.
+
+ +

Valeur de retour

+ +

Un tableau {{jsxref("Array")}} contenant des objets correspondants aux différents fragments du nombres.

+ +

Description

+ +

La méthode formatToParts() est peut être utilisée lorsqu'on met en forme des chaînes de caractères représentant des valeurs numériques. Cette méthode renvoie un tableau ({{jsxref("Array")}}) d'objets qui sont les différents fragments spécifiques aux locales et qui permettent de construire des chaînes dans un format spécifiques tout en conservant les parties liées à la locale. formatToParts() renvoie une structure analogue à :

+ +
[
+  { type: "integer", value: "3" }
+  { type: "group", value: "." }
+  { type: "integer", value: "500" }
+]
+ +

Les valeurs possibles pour l'attribut type sont :

+ +
+
currency
+
Le suffixe associé à la devise. Ce peut être le symbole "$", "€" ou bien le nom de la devise "Dollar", "Euro" selon la façon dont currencyDisplay  est indiquée.
+
decimal
+
Le séparateur décimal utilisé (".").
+
fraction
+
La partie fractionnaire du nombre.
+
group
+
La chaîne de caractères utilisée pour indiquer un groupe (",").
+
infinity
+
La chaîne de caractères qui représente la valeur {{jsxref("Infinity")}} ("∞").
+
integer
+
La partie entière du nombre.
+
literal
+
Toute chaîne de caractères littérale ou blanc utilisée dans le nombre mis en forme.
+
minusSign
+
La chaîne de caractères utilisée pour le signe moins ("-").
+
nan
+
La chaîne de caractères utilisée pour représenter la valeur {{jsxref("NaN")}} ("NaN").
+
plusSign
+
La chaîne de caractères utilisée pour le signe plus ("+").
+
percentSign
+
La châine de caractères utilisée pour le symbole pourcent ("%").
+
+ +

Exemples

+ +

NumberFormat produit une chaîne localisée opaque qui ne peut pas être manipulée directement :

+ +
var number = 3500;
+
+var formatter = new Intl.NumberFormat('de-DE', {
+  style: 'currency',
+  currency: 'EUR'
+});
+
+formatter.format(number);
+// "3.500,00 €"
+
+ +

Toutefois, pour certaines applications, on souhaite adapter la mise en forme de cette chaîne de caractères. La méthode formatToParts permet d'obtenir cette flexibilité tout en conservant les différents fragments produits par NumberFormat :

+ +
formatter.formatToParts(number);
+
+// return value:
+[
+  { type: "integer",  value: "3"   }
+  { type: "group",    value: "."   }
+  { type: "integer",  value: "500" }
+  { type: "decimal",  value: ","   }
+  { type: "fraction", value: "00"  }
+  { type: "literal",  value: " "   }
+  { type: "currency", value: "€"   }
+]
+
+ +

Maintenant que la chaîne est décomposée, on peut la réassembler d'une façon spécifique. On peut, par exemple utiliser {{jsxref("Array.prototype.map()")}}, une fonction fléchée, une instruction switch, des littéraux de gabarits et {{jsxref("Array.prototype.reduce()")}}.

+ +
var numberString = formatter.formatToParts(number).map(({type, value}) => {
+  switch (type) {
+    case 'currency': return `<strong>${value}</strong>`;
+    default : return value;
+  }
+}).reduce((string, part) => string + part);
+
+ +

Grâce à cette fonction, on pourra mettre en gras le suffixe associé à la devise :

+ +
console.log(numberString);
+// "3.500,00 <strong>€</strong>"
+ +

Prothèse d'émulation (polyfill)

+ +

Une prothèse pour cette fonctionnalité est disponible dans le dépôt associé à la proposition.

+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.prototype.formatToParts', 'Intl.NumberFormat.prototype.formatToParts')}}{{Spec2('ES Int Draft')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.NumberFormat.formatToParts")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/index.html b/files/fr/web/javascript/reference/global_objects/intl/numberformat/index.html deleted file mode 100644 index 5c8188d5f9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/numberformat/index.html +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: Intl.NumberFormat -slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat -tags: - - Internationalisation - - Intl - - JavaScript - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat ---- -
{{JSRef}}
- -

L'objet Intl.NumberFormat est un constructeur permettant de créer des objets pour formater des nombres en fonction de la locale.

- -
{{EmbedInteractiveExample("pages/js/intl-numberformat.html")}}
- -

Syntaxe

- -
new Intl.NumberFormat([locales[, options]])
-Intl.NumberFormat.call(this[, locales[, options]])
- -

Paramètres

- -
-
locales
-
-

Paramètre optionnel. Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}. Les clefs d'extensions Unicode suivantes sont autorisées :

- -
-
nu
-
Le système numérique à utiliser. Parmi les valeurs possibles, on a : "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
-
-
-
options
-
-

Paramètre optionnel. Un objet avec certaines ou toutes les propriétés suivantes :

- -
-
localeMatcher
-
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Intl","Intl","##Choix_de_la_locale")}}.
-
style
-
Le style de formatage. Les valeurs possibles sont "decimal" pour l'affichage de nombres simple, "currency" pour un affichage en fonction de la devise et "percent" pour afficher des pourcentages. La valeur par défaut est "decimal".
-
currency
-
La devise à utiliser pour le formatage. Les valeurs possibles sont les codes ISO 4217 pour les devises, tels que "USD" pour le dollar américain, "EUR" pour l'euro, ou "CNY" pour le yuan chinois. Voir la page listant les codes actuels pour les devises et les fonds (en anglais). Il n'y a pas de valeur par défaut. Si le style choisi avec l'option style est "currency", la propriété currency doit être définie.
-
currencyDisplay
-
La façon d'afficher la devise dans le format courant. Les valeurs possibles sont "symbol" qui permet d'utiliser un symbole localisé comme '€', "code" qui affichera le code ISO de la devise (voir ci-avant), "name"  affichera un nom localisé pour la devise comme "dollar". La valeur par défaut est "symbol".
-
useGrouping
-
Cette option indique si on doit utiliser des séparateurs de groupes (comme les séparateurs de milliers ou autres comme lakhs et crores). Les valeurs possibles sont true et false. La valeur par défaut true.
-
- -

Les propriétés suivantes peuvent être classées en deux groupes. Dans le premier on aura minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits et dans le second on aura minimumSignificantDigits et maximumSignificantDigits. S'il existe une option définie pour le second groupe, les options du premier groupe seront ignorées.

- -
-
minimumIntegerDigits
-
Le nombre minimal de chiffres à utiliser pour la partie entière. Les valeurs possibles sont comprises entre 1 to 21. La valeur par défaut est 1.
-
minimumFractionDigits
-
Le nombre minimal de chiffres à utiliser pour la partie fractionnaire. Les valeurs possibles sont comprises entre 0 et 20. Pour les formats "decimal" et "percent", la valeur par défaut est 0. La valeur par défaut pour le formatage monétaire ("currency") correspond au nombre de chiffres défini par la liste de codes de devises ISO 4217, si cette valeur n'est pas définie dans cette liste, on aura 2 chiffres.
-
maximumFractionDigits
-
Le nombre maximal de chiffres à utiliser pour représenter la partie fractionnaire. Les valeurs possibles sont comprises entre 0 et 20. Pour le format "decimal", la valeur par défaut est le maximum entre 3 et minimumFractionDigits. Pour le format monétaire ("currency"), la valeur par défaut est le maximum entre  minimumFractionDigits et le nombre de chiffres prévus par la liste ISO 4217 des codes de devises (ou 2 si cette information n'est pas disponible dans cette liste). Pour le format en pourcent, la valeur par défaut est le maximum entre minimumFractionDigits et 0.
-
minimumSignificantDigits
-
Le nombre minimal de chiffres significatifs à utiliser. Les valeurs possibles sont comprises entre 1 et 21. La valeur par défaut est 1.
-
maximumSignificantDigits
-
Le nombre maximal de chiffres significatifs à utiliser. Les valeurs possibles sont comprises entre 1 et 21. La valeur par défaut est minimumSignificantDigits.
-
-
-
- -

Description

- -

Propriétés

- -
-
{{jsxref("NumberFormat.prototype", "Intl.NumberFormat.prototype")}}
-
Permet d'ajouter des propriétés à toutes les instances.
-
- -

Méthodes

- -
-
{{jsxref("NumberFormat.supportedLocalesOf", "Intl.NumberFormat.supportedLocalesOf()")}}
-
Renvoie un tableau des locales supportées parmi les locales données afin d'éviter d'utiliser la locale par défaut de l'environnement.
-
- -

Instances de NumberFormat

- -

Propriétés

- -

Les instances de NumberFormat héritent des propriétés suivantes grâce à leur prototype :

- -
{{page('fr/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype','Properties')}}
- -

Méthods

- -
-

Les instances de NumberFormat héritent des méthodes suivantes grâce à leur prototype :

-{{page('fr/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype','Methods')}}
- -

Exemples

- -

Usage simple

- -

Sans aucune spécification, le résultat sera une chaîne de caractères avec la locale et les options par défaut :

- -
var nombre = 3500;
-
-console.log(new Intl.NumberFormat().format(nombre));
-// → "3 500" pour la locale fr
-
- -

Utiliser locales

- -

Cet exemple illustre les variations possibles des formats numériques localisés. Si vous souhaitez que votre application utilise le format de la locale de l'utilisateur, assurez vous de l'indiquer via l'argument locales (voire avec d'autres locales de secours) :

- -
var nombre = 123456.789;
-
-// L'allemand utilise la virgule comme séparateur décimal
-// et un point pour indiquer les milliers
-console.log(new Intl.NumberFormat("de-DE").format(nombre));
-// → 123.456,789
-
-// Dans la plupart des pays arabophones, on utilise les
-// chiffres arabo-hindîs
-console.log(new Intl.NumberFormat("ar-EG").format(nombre));
-// → ١٢٣٤٥٦٫٧٨٩
-
-// L'indien utilise des séparateurs pour les milliers,
-//les lakhs et les crores
-console.log(new Intl.NumberFormat("en-IN").format(nombre));
-// → 1,23,456.789
-
-// La clé d'extension nu indique une l'utilisation d'un système numérique
-// par exemple le système chinois
-console.log(new Intl.NumberFormat("zh-Hans-CN-u-nu-hanidec").format(nombre));
-// → 一二三,四五六.七八九
-
-// Lorsqu'une locale n'est pas supportée (par exemple le balinais)
-// on peut inclure une locale de secours (ici l'indonésien)
-console.log(new Intl.NumberFormat(["ban", "id"]).format(nombre));
-// → 123.456,789
-
- -

Utiliser options

- -

Les résultats fournis par toLocaleString peuvent être paramétrés grâce à l'argument options :

- -
var nombre = 123456.789;
-
-// on affiche une devise avec le style "currency"
-console.log(new Intl.NumberFormat("de-DE", {style: "currency", currency: "EUR"}).format(nombre));
-// → 123.456,79 €
-
-// Le yen japonais n'a pas de centimes
-console.log(new Intl.NumberFormat("ja-JP", {style: "currency", currency: "JPY"}).format(nombre))
-// → ¥123,457
-
-// On se limite ici à trois chiffres significatifs
-console.log(new Intl.NumberFormat("en-IN", {maximumSignificantDigits: 3}).format(nombre));
-// → 1,23,000
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.1', 'Intl.NumberFormat')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-11.1', 'Intl.NumberFormat')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#numberformat-objects', 'Intl.NumberFormat')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.Intl.NumberFormat")}}

- -

Voir aussi

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl','Voir_aussi')}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/index.md b/files/fr/web/javascript/reference/global_objects/intl/numberformat/index.md new file mode 100644 index 0000000000..5c8188d5f9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/numberformat/index.md @@ -0,0 +1,198 @@ +--- +title: Intl.NumberFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat +tags: + - Internationalisation + - Intl + - JavaScript + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat +--- +
{{JSRef}}
+ +

L'objet Intl.NumberFormat est un constructeur permettant de créer des objets pour formater des nombres en fonction de la locale.

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat.html")}}
+ +

Syntaxe

+ +
new Intl.NumberFormat([locales[, options]])
+Intl.NumberFormat.call(this[, locales[, options]])
+ +

Paramètres

+ +
+
locales
+
+

Paramètre optionnel. Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}. Les clefs d'extensions Unicode suivantes sont autorisées :

+ +
+
nu
+
Le système numérique à utiliser. Parmi les valeurs possibles, on a : "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
+
+
+
options
+
+

Paramètre optionnel. Un objet avec certaines ou toutes les propriétés suivantes :

+ +
+
localeMatcher
+
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Intl","Intl","##Choix_de_la_locale")}}.
+
style
+
Le style de formatage. Les valeurs possibles sont "decimal" pour l'affichage de nombres simple, "currency" pour un affichage en fonction de la devise et "percent" pour afficher des pourcentages. La valeur par défaut est "decimal".
+
currency
+
La devise à utiliser pour le formatage. Les valeurs possibles sont les codes ISO 4217 pour les devises, tels que "USD" pour le dollar américain, "EUR" pour l'euro, ou "CNY" pour le yuan chinois. Voir la page listant les codes actuels pour les devises et les fonds (en anglais). Il n'y a pas de valeur par défaut. Si le style choisi avec l'option style est "currency", la propriété currency doit être définie.
+
currencyDisplay
+
La façon d'afficher la devise dans le format courant. Les valeurs possibles sont "symbol" qui permet d'utiliser un symbole localisé comme '€', "code" qui affichera le code ISO de la devise (voir ci-avant), "name"  affichera un nom localisé pour la devise comme "dollar". La valeur par défaut est "symbol".
+
useGrouping
+
Cette option indique si on doit utiliser des séparateurs de groupes (comme les séparateurs de milliers ou autres comme lakhs et crores). Les valeurs possibles sont true et false. La valeur par défaut true.
+
+ +

Les propriétés suivantes peuvent être classées en deux groupes. Dans le premier on aura minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits et dans le second on aura minimumSignificantDigits et maximumSignificantDigits. S'il existe une option définie pour le second groupe, les options du premier groupe seront ignorées.

+ +
+
minimumIntegerDigits
+
Le nombre minimal de chiffres à utiliser pour la partie entière. Les valeurs possibles sont comprises entre 1 to 21. La valeur par défaut est 1.
+
minimumFractionDigits
+
Le nombre minimal de chiffres à utiliser pour la partie fractionnaire. Les valeurs possibles sont comprises entre 0 et 20. Pour les formats "decimal" et "percent", la valeur par défaut est 0. La valeur par défaut pour le formatage monétaire ("currency") correspond au nombre de chiffres défini par la liste de codes de devises ISO 4217, si cette valeur n'est pas définie dans cette liste, on aura 2 chiffres.
+
maximumFractionDigits
+
Le nombre maximal de chiffres à utiliser pour représenter la partie fractionnaire. Les valeurs possibles sont comprises entre 0 et 20. Pour le format "decimal", la valeur par défaut est le maximum entre 3 et minimumFractionDigits. Pour le format monétaire ("currency"), la valeur par défaut est le maximum entre  minimumFractionDigits et le nombre de chiffres prévus par la liste ISO 4217 des codes de devises (ou 2 si cette information n'est pas disponible dans cette liste). Pour le format en pourcent, la valeur par défaut est le maximum entre minimumFractionDigits et 0.
+
minimumSignificantDigits
+
Le nombre minimal de chiffres significatifs à utiliser. Les valeurs possibles sont comprises entre 1 et 21. La valeur par défaut est 1.
+
maximumSignificantDigits
+
Le nombre maximal de chiffres significatifs à utiliser. Les valeurs possibles sont comprises entre 1 et 21. La valeur par défaut est minimumSignificantDigits.
+
+
+
+ +

Description

+ +

Propriétés

+ +
+
{{jsxref("NumberFormat.prototype", "Intl.NumberFormat.prototype")}}
+
Permet d'ajouter des propriétés à toutes les instances.
+
+ +

Méthodes

+ +
+
{{jsxref("NumberFormat.supportedLocalesOf", "Intl.NumberFormat.supportedLocalesOf()")}}
+
Renvoie un tableau des locales supportées parmi les locales données afin d'éviter d'utiliser la locale par défaut de l'environnement.
+
+ +

Instances de NumberFormat

+ +

Propriétés

+ +

Les instances de NumberFormat héritent des propriétés suivantes grâce à leur prototype :

+ +
{{page('fr/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype','Properties')}}
+ +

Méthods

+ +
+

Les instances de NumberFormat héritent des méthodes suivantes grâce à leur prototype :

+{{page('fr/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype','Methods')}}
+ +

Exemples

+ +

Usage simple

+ +

Sans aucune spécification, le résultat sera une chaîne de caractères avec la locale et les options par défaut :

+ +
var nombre = 3500;
+
+console.log(new Intl.NumberFormat().format(nombre));
+// → "3 500" pour la locale fr
+
+ +

Utiliser locales

+ +

Cet exemple illustre les variations possibles des formats numériques localisés. Si vous souhaitez que votre application utilise le format de la locale de l'utilisateur, assurez vous de l'indiquer via l'argument locales (voire avec d'autres locales de secours) :

+ +
var nombre = 123456.789;
+
+// L'allemand utilise la virgule comme séparateur décimal
+// et un point pour indiquer les milliers
+console.log(new Intl.NumberFormat("de-DE").format(nombre));
+// → 123.456,789
+
+// Dans la plupart des pays arabophones, on utilise les
+// chiffres arabo-hindîs
+console.log(new Intl.NumberFormat("ar-EG").format(nombre));
+// → ١٢٣٤٥٦٫٧٨٩
+
+// L'indien utilise des séparateurs pour les milliers,
+//les lakhs et les crores
+console.log(new Intl.NumberFormat("en-IN").format(nombre));
+// → 1,23,456.789
+
+// La clé d'extension nu indique une l'utilisation d'un système numérique
+// par exemple le système chinois
+console.log(new Intl.NumberFormat("zh-Hans-CN-u-nu-hanidec").format(nombre));
+// → 一二三,四五六.七八九
+
+// Lorsqu'une locale n'est pas supportée (par exemple le balinais)
+// on peut inclure une locale de secours (ici l'indonésien)
+console.log(new Intl.NumberFormat(["ban", "id"]).format(nombre));
+// → 123.456,789
+
+ +

Utiliser options

+ +

Les résultats fournis par toLocaleString peuvent être paramétrés grâce à l'argument options :

+ +
var nombre = 123456.789;
+
+// on affiche une devise avec le style "currency"
+console.log(new Intl.NumberFormat("de-DE", {style: "currency", currency: "EUR"}).format(nombre));
+// → 123.456,79 €
+
+// Le yen japonais n'a pas de centimes
+console.log(new Intl.NumberFormat("ja-JP", {style: "currency", currency: "JPY"}).format(nombre))
+// → ¥123,457
+
+// On se limite ici à trois chiffres significatifs
+console.log(new Intl.NumberFormat("en-IN", {maximumSignificantDigits: 3}).format(nombre));
+// → 1,23,000
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.1', 'Intl.NumberFormat')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-11.1', 'Intl.NumberFormat')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#numberformat-objects', 'Intl.NumberFormat')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("javascript.builtins.Intl.NumberFormat")}}

+ +

Voir aussi

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl','Voir_aussi')}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html b/files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html deleted file mode 100644 index f980e6608a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Intl.NumberFormat.prototype.resolvedOptions() -slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - NumberFormat - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/resolvedOptions ---- -
{{JSRef}}
- -

La méthode Intl.NumberFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés correspondent aux options de locales et de format calculées à l'initialisation de l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}}.

- -
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-resolvedoptions.html")}}
- -

Syntaxe

- -
numberFormat.resolvedOptions()
- -

Valeur de retour

- -

Un objet dont les propriétés correspondent aux options de locale et de format calculées lors de l'initialisation de l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}}.

- -

Description

- -

Cette méthode renvoie un objet composé des propriétés suivantes :

- -
-
locale
-
La balise de langue BCP 47 qui est utilisée. Si des extensions Unicode avaient été rajoutées à la balise BCP 47 demandée, les paires de clés-valeurs qui ont été demandées et qui sont supportées sont inscrites dans locale.
-
numberingSystem
-
La valeur requise via l'extension Unicode "nu" ou celle qui est utilisée par défaut.
-
style, useGrouping
-
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut.
-
currency, currencyDisplay
-
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut. Ces valeurs sont présentes uniquement si style vaut "currency".
-
- -

Un seul des deux groupes suivants est inclus dans les propriétés :

- -
-
minimumIntegerDigits,minimumFractionDigits, maximumFractionDigits
-
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut. Ces propriétés ne sont présentes que si minimumSignificantDigits ou maximumSignificantDigits n'ont pas été fournies à l'argument options.
-
minimumSignificantDigits,maximumSignificantDigits
-
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut. Ces propriétés sont présentes si au moins une d'entre elles a été fournie via l'argument options.
-
- -

Exemples

- -

Utiliser la méthode resolvedOptions()

- -
var de = new Intl.NumberFormat('de-DE');
-var usedOptions = de.resolvedOptions();
-
-usedOptions.locale;                // "de-DE"
-usedOptions.numberingSystem;       // "latn"
-usedOption.style;                  // "decimal"
-usedOptions.minimumIntegerDigits;  // 1
-usedOptions.minimumFractionDigits; // 0
-usedOptions.maximumFractionDigits; // 3
-usedOptions.useGrouping;           // true
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.3.3', 'Intl.NumberFormat.prototype.resolvedOptions')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-11.3.3', 'Intl.NumberFormat.prototype.resolvedOptions')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.prototype.resolvedOptions', 'Intl.NumberFormat.prototype.resolvedOptions')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.NumberFormat.resolvedOptions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.md b/files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.md new file mode 100644 index 0000000000..f980e6608a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.md @@ -0,0 +1,104 @@ +--- +title: Intl.NumberFormat.prototype.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - NumberFormat + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/resolvedOptions +--- +
{{JSRef}}
+ +

La méthode Intl.NumberFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés correspondent aux options de locales et de format calculées à l'initialisation de l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}}.

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-resolvedoptions.html")}}
+ +

Syntaxe

+ +
numberFormat.resolvedOptions()
+ +

Valeur de retour

+ +

Un objet dont les propriétés correspondent aux options de locale et de format calculées lors de l'initialisation de l'objet {{jsxref("NumberFormat", "Intl.NumberFormat")}}.

+ +

Description

+ +

Cette méthode renvoie un objet composé des propriétés suivantes :

+ +
+
locale
+
La balise de langue BCP 47 qui est utilisée. Si des extensions Unicode avaient été rajoutées à la balise BCP 47 demandée, les paires de clés-valeurs qui ont été demandées et qui sont supportées sont inscrites dans locale.
+
numberingSystem
+
La valeur requise via l'extension Unicode "nu" ou celle qui est utilisée par défaut.
+
style, useGrouping
+
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut.
+
currency, currencyDisplay
+
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut. Ces valeurs sont présentes uniquement si style vaut "currency".
+
+ +

Un seul des deux groupes suivants est inclus dans les propriétés :

+ +
+
minimumIntegerDigits,minimumFractionDigits, maximumFractionDigits
+
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut. Ces propriétés ne sont présentes que si minimumSignificantDigits ou maximumSignificantDigits n'ont pas été fournies à l'argument options.
+
minimumSignificantDigits,maximumSignificantDigits
+
Les valeurs fournies pour ces propriétés via l'argument options ou bien les valeurs par défaut. Ces propriétés sont présentes si au moins une d'entre elles a été fournie via l'argument options.
+
+ +

Exemples

+ +

Utiliser la méthode resolvedOptions()

+ +
var de = new Intl.NumberFormat('de-DE');
+var usedOptions = de.resolvedOptions();
+
+usedOptions.locale;                // "de-DE"
+usedOptions.numberingSystem;       // "latn"
+usedOption.style;                  // "decimal"
+usedOptions.minimumIntegerDigits;  // 1
+usedOptions.minimumFractionDigits; // 0
+usedOptions.maximumFractionDigits; // 3
+usedOptions.useGrouping;           // true
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.3.3', 'Intl.NumberFormat.prototype.resolvedOptions')}}{{Spec2('ES Int 1.0')}}Définition initiale.
{{SpecName('ES Int 2.0', '#sec-11.3.3', 'Intl.NumberFormat.prototype.resolvedOptions')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.prototype.resolvedOptions', 'Intl.NumberFormat.prototype.resolvedOptions')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.NumberFormat.resolvedOptions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html b/files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html deleted file mode 100644 index 6e622f3240..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Intl.NumberFormat.supportedLocalesOf() -slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - NumberFormat - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/supportedLocalesOf ---- -
{{JSRef}}
- -

La méthode Intl.NumberFormat.supportedLocalesOf() renvoie un tableau de locales supportées parmi les locales fournies en argument afin d'éviter d'utiliser celle par défaut de l'environnement.

- -
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-supportedlocalesof.html")}}
- -

Syntaxe

- -
Intl.NumberFormat.supportedLocalesOf(locales[, options])
- -

Paramètres

- -
-
locales
-
Une chaîne de caractères qui est une balise BCP 47 ou un tableau composé de telles chaînes. Pour plus d'informations sur la forme générale de l'argument locales, voir la page {{jsxref("Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.
-
options
-
-

Un objet qui peut avoir la propriété suivante :

- -
-
localeMatcher
-
L'algorithme de correspondance des locales à utiliser. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Pour plus d'informations,, voir la page {{jsxref("Intl","Intl","#Choix_de_la_locale")}}.
-
-
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères représentant un sous-ensemble des balises de langues qui sont prises en charge pour la mise en forme des nombres sans qu'il soit nécessaire d'utiliser la locale par défaut de l'environnement d'exécution.

- -

Description

- -

Cette méthode renvoie un tableau de locales supportées parmi les locales fournies en argument afin d'éviter d'utiliser celle par défaut de l'environnement. Les locales renvoyées sont celles considérées comme équivalentes aux locales fournies avec l'algorithme indiqué.

- -

Exemples

- -

Utiliser supportedLocalesOf()

- -

Si on dispose d'un environnement qui supporte les locales indonésienne et allemande mais pas balinaise pour le formatage des dates et des heures, supportedLocalesOf renverra les balises BCP 47 pour l'indonésien et l'allemand (bien que la collation pinyin ne soit pas pertinente pour les nombres ni pour l'indonésien et qu'il soit peu probable qu'une variante indonésienne existe pour l'allemand). Pour l'exemple, on l'utilise l'algorithme "lookup". Si on utilisait "best fit", on pourrait considérer que l'indonésien est adéquat pour la locale balinaise (sachant que la plupart des balinais comprend l'indonésien) et donc également renvoyer la balise balinaise.

- -
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"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.2.2', 'Intl.NumberFormat.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Définition initiale
{{SpecName('ES Int 2.0', '#sec-11.2.2', 'Intl.NumberFormat.supportedLocalesOf')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.supportedLocalesOf', 'Intl.NumberFormat.supportedLocalesOf')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.NumberFormat.supportedLocalesOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.md b/files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.md new file mode 100644 index 0000000000..6e622f3240 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.md @@ -0,0 +1,95 @@ +--- +title: Intl.NumberFormat.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - NumberFormat + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/NumberFormat/supportedLocalesOf +--- +
{{JSRef}}
+ +

La méthode Intl.NumberFormat.supportedLocalesOf() renvoie un tableau de locales supportées parmi les locales fournies en argument afin d'éviter d'utiliser celle par défaut de l'environnement.

+ +
{{EmbedInteractiveExample("pages/js/intl-numberformat-prototype-supportedlocalesof.html")}}
+ +

Syntaxe

+ +
Intl.NumberFormat.supportedLocalesOf(locales[, options])
+ +

Paramètres

+ +
+
locales
+
Une chaîne de caractères qui est une balise BCP 47 ou un tableau composé de telles chaînes. Pour plus d'informations sur la forme générale de l'argument locales, voir la page {{jsxref("Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.
+
options
+
+

Un objet qui peut avoir la propriété suivante :

+ +
+
localeMatcher
+
L'algorithme de correspondance des locales à utiliser. Les valeurs possibles sont "lookup" et "best fit". La valeur par défaut est "best fit". Pour plus d'informations,, voir la page {{jsxref("Intl","Intl","#Choix_de_la_locale")}}.
+
+
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères représentant un sous-ensemble des balises de langues qui sont prises en charge pour la mise en forme des nombres sans qu'il soit nécessaire d'utiliser la locale par défaut de l'environnement d'exécution.

+ +

Description

+ +

Cette méthode renvoie un tableau de locales supportées parmi les locales fournies en argument afin d'éviter d'utiliser celle par défaut de l'environnement. Les locales renvoyées sont celles considérées comme équivalentes aux locales fournies avec l'algorithme indiqué.

+ +

Exemples

+ +

Utiliser supportedLocalesOf()

+ +

Si on dispose d'un environnement qui supporte les locales indonésienne et allemande mais pas balinaise pour le formatage des dates et des heures, supportedLocalesOf renverra les balises BCP 47 pour l'indonésien et l'allemand (bien que la collation pinyin ne soit pas pertinente pour les nombres ni pour l'indonésien et qu'il soit peu probable qu'une variante indonésienne existe pour l'allemand). Pour l'exemple, on l'utilise l'algorithme "lookup". Si on utilisait "best fit", on pourrait considérer que l'indonésien est adéquat pour la locale balinaise (sachant que la plupart des balinais comprend l'indonésien) et donc également renvoyer la balise balinaise.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES Int 1.0', '#sec-11.2.2', 'Intl.NumberFormat.supportedLocalesOf')}}{{Spec2('ES Int 1.0')}}Définition initiale
{{SpecName('ES Int 2.0', '#sec-11.2.2', 'Intl.NumberFormat.supportedLocalesOf')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Intl.NumberFormat.supportedLocalesOf', 'Intl.NumberFormat.supportedLocalesOf')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.NumberFormat.supportedLocalesOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.html b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.html deleted file mode 100644 index 1e106a5079..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Intl.PluralRules -slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules -tags: - - Internationalisation - - Intl - - JavaScript - - PluralRules - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules ---- -
{{JSRef}}
- -

L'objet Intl.PluralRules est un constructeur d'objets qui permettent de mettre en forme des chaînes de caractères en fonction des règles de nombre (pluriel) d'une langue donnée.

- -

Syntaxe

- -
new Intl.PluralRules([locales[, options]])
-
- -

Paramètres

- -
-
locales
-
-

Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.

-
-
options {{optional_inline}}
-
-

Optionnel, un objet possédant tout ou partie des propriétés suivantes :

- -
-
localeMatcher
-
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}
-
type
-
Le type de numérotation à utiliser. Les valeurs possibles sont : -
    -
  • "cardinal" pour les nombres cardinaux (la quantité de telle ou telle chose). Cette valeur est la valeur par défaut.
  • -
  • "ordinal" pour les nombres ordinaux (l'ordre relatif de différentes choses « premier », « deuxième », « troisième »).
  • -
-
-
-
-
- -

Description

- -

Propriétés

- -
-
{{jsxref("PluralRules.prototype", "Intl.PluralRules.prototype")}}
-
Cette propriété permet d'ajouter des propriétés aux objets Intl.PluralRules.
-
- -

Méthodes

- -
-
{{jsxref("PluralRules.supportedLocalesOf", "Intl.PluralRules.supportedLocalesOf()")}}
-
Cette méthode renvoie un tableau contenant les locales prises en charge sans que le moteur ait à utiliser la locale par défaut du système d'exécution.
-
- -

Instances de PluralRules

- -

Propriétés

- -

Les instances de PluralRules héritent des propriétés suivantes de par leur prototype :

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/PluralRules/prototype', 'Propriétés')}}
- -

Méthodes

- -

Les instances de PluralRules héritent des méthodes suivantes de par leur prototype :

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/PluralRules/prototype', 'Méthodes')}}
- -

Exemples

- -

Exemple simple

- -

Sans indiquer de locale, une chaîne formatée dans la locale par défaut et avec les options par défaut est renvoyée. On peut ainsi différencier entre le singulier et le pluriel (par exemple "chien" et "chiens").

- -
var pr = new Intl.PluralRules();
-
-pr.select(0);
-// → 'one' si utilisée avec une locale anglais américain
-
-pr.select(1);
-// → 'one' si utilisée avec une locale anglais américain
-
-pr.select(2);
-// → 'other' si utilisée avec une locale anglais américain
-
- -

Utiliser locales

- -

Dans cet exemple, on voit l'impact de la locale sur les règles de nombre. Afin de respecter la langue de l'utilisateur dans votre application, assurez vous d'indiquer cette langue (et éventuellement une langue de secours) grâce à l'argument locales :

- -
// L'arabe possède plusieurs règles
-// de nombre
-
-new Intl.PluralRules('ar-EG').select(0);
-// → 'zero'
-new Intl.PluralRules('ar-EG').select(1);
-// → 'one'
-new Intl.PluralRules('ar-EG').select(2);
-// → 'two'
-new Intl.PluralRules('ar-EG').select(6);
-// → 'few'
-new Intl.PluralRules('ar-EG').select(18);
-// → 'many'
-
- -

Utiliser options

- -

Les résultats obtenus peuvent être adaptés grâce à l'argument options. Celui-ci possède une propriété appelée type qui peut valoir ordinal. Cela peut être utile afin de déterminer la forme d'un indicateur ordinal (par exemple, "1er", "2e", etc.).

- -
var pr = new Intl.PluralRules('en-US', { type: 'ordinal' });
-
-pr.select(0);
-// → 'other'
-pr.select(1);
-// → 'one'
-pr.select(2);
-// → 'two'
-pr.select(3);
-// → 'few'
-pr.select(4);
-// → 'other'
-pr.select(42);
-// → 'two'
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour le constructeur Intl.PluralRules{{Spec2('ES Int Draft')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.PluralRules")}}

- -

Voir aussi

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}
diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.md b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.md new file mode 100644 index 0000000000..1e106a5079 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/index.md @@ -0,0 +1,157 @@ +--- +title: Intl.PluralRules +slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules +tags: + - Internationalisation + - Intl + - JavaScript + - PluralRules + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules +--- +
{{JSRef}}
+ +

L'objet Intl.PluralRules est un constructeur d'objets qui permettent de mettre en forme des chaînes de caractères en fonction des règles de nombre (pluriel) d'une langue donnée.

+ +

Syntaxe

+ +
new Intl.PluralRules([locales[, options]])
+
+ +

Paramètres

+ +
+
locales
+
+

Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.

+
+
options {{optional_inline}}
+
+

Optionnel, un objet possédant tout ou partie des propriétés suivantes :

+ +
+
localeMatcher
+
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}
+
type
+
Le type de numérotation à utiliser. Les valeurs possibles sont : +
    +
  • "cardinal" pour les nombres cardinaux (la quantité de telle ou telle chose). Cette valeur est la valeur par défaut.
  • +
  • "ordinal" pour les nombres ordinaux (l'ordre relatif de différentes choses « premier », « deuxième », « troisième »).
  • +
+
+
+
+
+ +

Description

+ +

Propriétés

+ +
+
{{jsxref("PluralRules.prototype", "Intl.PluralRules.prototype")}}
+
Cette propriété permet d'ajouter des propriétés aux objets Intl.PluralRules.
+
+ +

Méthodes

+ +
+
{{jsxref("PluralRules.supportedLocalesOf", "Intl.PluralRules.supportedLocalesOf()")}}
+
Cette méthode renvoie un tableau contenant les locales prises en charge sans que le moteur ait à utiliser la locale par défaut du système d'exécution.
+
+ +

Instances de PluralRules

+ +

Propriétés

+ +

Les instances de PluralRules héritent des propriétés suivantes de par leur prototype :

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/PluralRules/prototype', 'Propriétés')}}
+ +

Méthodes

+ +

Les instances de PluralRules héritent des méthodes suivantes de par leur prototype :

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/PluralRules/prototype', 'Méthodes')}}
+ +

Exemples

+ +

Exemple simple

+ +

Sans indiquer de locale, une chaîne formatée dans la locale par défaut et avec les options par défaut est renvoyée. On peut ainsi différencier entre le singulier et le pluriel (par exemple "chien" et "chiens").

+ +
var pr = new Intl.PluralRules();
+
+pr.select(0);
+// → 'one' si utilisée avec une locale anglais américain
+
+pr.select(1);
+// → 'one' si utilisée avec une locale anglais américain
+
+pr.select(2);
+// → 'other' si utilisée avec une locale anglais américain
+
+ +

Utiliser locales

+ +

Dans cet exemple, on voit l'impact de la locale sur les règles de nombre. Afin de respecter la langue de l'utilisateur dans votre application, assurez vous d'indiquer cette langue (et éventuellement une langue de secours) grâce à l'argument locales :

+ +
// L'arabe possède plusieurs règles
+// de nombre
+
+new Intl.PluralRules('ar-EG').select(0);
+// → 'zero'
+new Intl.PluralRules('ar-EG').select(1);
+// → 'one'
+new Intl.PluralRules('ar-EG').select(2);
+// → 'two'
+new Intl.PluralRules('ar-EG').select(6);
+// → 'few'
+new Intl.PluralRules('ar-EG').select(18);
+// → 'many'
+
+ +

Utiliser options

+ +

Les résultats obtenus peuvent être adaptés grâce à l'argument options. Celui-ci possède une propriété appelée type qui peut valoir ordinal. Cela peut être utile afin de déterminer la forme d'un indicateur ordinal (par exemple, "1er", "2e", etc.).

+ +
var pr = new Intl.PluralRules('en-US', { type: 'ordinal' });
+
+pr.select(0);
+// → 'other'
+pr.select(1);
+// → 'one'
+pr.select(2);
+// → 'two'
+pr.select(3);
+// → 'few'
+pr.select(4);
+// → 'other'
+pr.select(42);
+// → 'two'
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour le constructeur Intl.PluralRules{{Spec2('ES Int Draft')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.PluralRules")}}

+ +

Voir aussi

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl', 'Voir_aussi')}}
diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.html b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.html deleted file mode 100644 index 8279bdd641..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Intl.PluralRules.prototype.resolvedOptions() -slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/resolvedOptions -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - PluralRules - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/resolvedOptions -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/resolvedOptions ---- -
{{JSRef}}
- -

La méthode Intl.PluralRules.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent la locale et les options de formatage relatives aux règles de nombre calculées lors de l'initialisation de l'objet {{jsxref("PluralRules")}}.

- -

Syntaxe

- -
pluralRule.resolvedOptions()
- -

Valeur de retour

- -

Un nouvel objet dont les propriétés reflètent la locale et les options de formatage relatives aux règles de nombre calculées lors de l'initialisation de l'objet {{jsxref("PluralRules")}}.

- -

Description

- -

L'objet produit possède les propriétés suivantes :

- -
-
locale
-
La balise de langue BCP 47 pour la locale réellement utilisée. Si une extension Unicode a été demandée dans la balise de langue BCP 47 ayant menée à cette locale, les paires clé/valeur qui ont été demandées et qui sont prises en charge dans cette locale sont incluses dans l'objet locale.
-
pluralCategories
-
Un tableau {{jsxref("Array")}} des règles de nombre utilisée pour la langue donnée.
-
type
-
Le type de règle utilisée (cardinal ou ordinal).
-
- -

Seul l'un de ces deux groupes de propriétés est inclus :

- -
-
minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits
-
Les valeurs fournies pour ces propriétés via l'argument options ou les valeurs par défaut. Ces propriétés sont uniquement présentes si aucunes des propriétés minimumSignificantDigits ou maximumSignificantDigits n'a été fournie dans l'argument options.
-
minimumSignificantDigits, maximumSignificantDigits
-
Les valeurs fournies par ces propriétés via l'argument options ou les valeurs par défaut. Ces propriétés sont uniquement présentes si au moins l'une d'entre elles a été fournie dans l'argument options.
-
- -

Exemples

- -

Utiliser resolvedOptions()

- -
var de = new Intl.PluralRules('de-DE');
-var usedOptions = de.resolvedOptions();
-
-usedOptions.locale;                // "de-DE"
-usedOptions.maximumFractionDigits; // 3
-usedOptions.minimumFractionDigits; // 0
-usedOptions.minimumIntegerDigits;  // 1
-usedOptions.pluralCategories;      // Array [ "one", "other" ]
-usedOptions.type;                  // "cardinal"
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Brouillon pour les règles de nombre avec IntlBrouillonDéfinition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.PluralRules.resolvedOptions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.md b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.md new file mode 100644 index 0000000000..8279bdd641 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/resolvedoptions/index.md @@ -0,0 +1,89 @@ +--- +title: Intl.PluralRules.prototype.resolvedOptions() +slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/resolvedOptions +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - PluralRules + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/resolvedOptions +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/resolvedOptions +--- +
{{JSRef}}
+ +

La méthode Intl.PluralRules.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent la locale et les options de formatage relatives aux règles de nombre calculées lors de l'initialisation de l'objet {{jsxref("PluralRules")}}.

+ +

Syntaxe

+ +
pluralRule.resolvedOptions()
+ +

Valeur de retour

+ +

Un nouvel objet dont les propriétés reflètent la locale et les options de formatage relatives aux règles de nombre calculées lors de l'initialisation de l'objet {{jsxref("PluralRules")}}.

+ +

Description

+ +

L'objet produit possède les propriétés suivantes :

+ +
+
locale
+
La balise de langue BCP 47 pour la locale réellement utilisée. Si une extension Unicode a été demandée dans la balise de langue BCP 47 ayant menée à cette locale, les paires clé/valeur qui ont été demandées et qui sont prises en charge dans cette locale sont incluses dans l'objet locale.
+
pluralCategories
+
Un tableau {{jsxref("Array")}} des règles de nombre utilisée pour la langue donnée.
+
type
+
Le type de règle utilisée (cardinal ou ordinal).
+
+ +

Seul l'un de ces deux groupes de propriétés est inclus :

+ +
+
minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits
+
Les valeurs fournies pour ces propriétés via l'argument options ou les valeurs par défaut. Ces propriétés sont uniquement présentes si aucunes des propriétés minimumSignificantDigits ou maximumSignificantDigits n'a été fournie dans l'argument options.
+
minimumSignificantDigits, maximumSignificantDigits
+
Les valeurs fournies par ces propriétés via l'argument options ou les valeurs par défaut. Ces propriétés sont uniquement présentes si au moins l'une d'entre elles a été fournie dans l'argument options.
+
+ +

Exemples

+ +

Utiliser resolvedOptions()

+ +
var de = new Intl.PluralRules('de-DE');
+var usedOptions = de.resolvedOptions();
+
+usedOptions.locale;                // "de-DE"
+usedOptions.maximumFractionDigits; // 3
+usedOptions.minimumFractionDigits; // 0
+usedOptions.minimumIntegerDigits;  // 1
+usedOptions.pluralCategories;      // Array [ "one", "other" ]
+usedOptions.type;                  // "cardinal"
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Brouillon pour les règles de nombre avec IntlBrouillonDéfinition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.PluralRules.resolvedOptions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.html b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.html deleted file mode 100644 index d8a329b4a8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Intl.PluralRules.select() -slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - PluralRules - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/select ---- -
{{JSRef}}
- -

La méthode Intl.PluralRules.prototype.select renvoie une chaîne de caractères qui indique la règle de nombre utilisée pour le formatage relatif à la locale.

- -

Syntaxe

- -
pluralRule.select(nombre)
- -

Paramètres

- -
-
nombre
-
Le nombre pour lequel on souhaite obtenir la règle de nombre associée.
-
- -

Description

- -

Cette fonction permet de sélectionner une règle de nombre en fonction de la locale et des options de formatage choisies via un objet {{jsxref("PluralRules")}}.

- -

Exemples

- -
 new Intl.PluralRules('ar-EG').select(0);
-// → 'zero'
-
-new Intl.PluralRules('ar-EG').select(1);
-// → 'one'
-
-new Intl.PluralRules('ar-EG').select(2);
-// → 'two'
-
-new Intl.PluralRules('ar-EG').select(6);
-// → 'few'
-
-new Intl.PluralRules('ar-EG').select(18);
-// → 'many'
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Brouillon pour les règles de nombre avec Intl{{Spec2('ES Int Draft')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.PluralRules.select")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.md b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.md new file mode 100644 index 0000000000..d8a329b4a8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/select/index.md @@ -0,0 +1,76 @@ +--- +title: Intl.PluralRules.select() +slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - PluralRules + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/select +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/select +--- +
{{JSRef}}
+ +

La méthode Intl.PluralRules.prototype.select renvoie une chaîne de caractères qui indique la règle de nombre utilisée pour le formatage relatif à la locale.

+ +

Syntaxe

+ +
pluralRule.select(nombre)
+ +

Paramètres

+ +
+
nombre
+
Le nombre pour lequel on souhaite obtenir la règle de nombre associée.
+
+ +

Description

+ +

Cette fonction permet de sélectionner une règle de nombre en fonction de la locale et des options de formatage choisies via un objet {{jsxref("PluralRules")}}.

+ +

Exemples

+ +
 new Intl.PluralRules('ar-EG').select(0);
+// → 'zero'
+
+new Intl.PluralRules('ar-EG').select(1);
+// → 'one'
+
+new Intl.PluralRules('ar-EG').select(2);
+// → 'two'
+
+new Intl.PluralRules('ar-EG').select(6);
+// → 'few'
+
+new Intl.PluralRules('ar-EG').select(18);
+// → 'many'
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Brouillon pour les règles de nombre avec Intl{{Spec2('ES Int Draft')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.PluralRules.select")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html deleted file mode 100644 index 0c20fbcf7e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Intl.PluralRules.supportedLocalesOf() -slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/supportedLocalesOf -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - PluralRules - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/supportedLocalesOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/supportedLocalesOf ---- -
{{JSRef}}
- -

La méthode Intl.PluralRules.supportedLocalesOf() renvoie un tableau contenant les locales prises en charge, parmi celles passées en argument, pour les règles de nombre (sans avoir à utiliser la locale par défaut du système d'exécution).

- -

Syntaxe

- -
Intl.PluralRules.supportedLocalesOf(locales[, options])
- -

Paramètres

- -
-
locales
-
Une chaîne de caractères représentant une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour la forme générale de l'argument locales, se référer à la page {{jsxref("Intl", "Intl", "#Identification_et_choix_de_la_locale", 1)}}.
-
options {{optional_inline}}
-
-

Optionnel. Un objet pouvant contenir la propriété suivante :

- -
-
localeMatcher
-
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}.
-
-
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères représentant le sous-ensemble de balises de langues prises en charge pour le formatage avec les règles de nombre (sans qu'il soit nécssaire d'utiliser la locale par défaut du système d'exploitation).

- -

Description

- -

Cette méthode renvoie un tableau contenant un sous-ensemble des balises de langue fournies dans l'argument locales. Les balises de langue sont celles qui sont prises en charge par l'environnement pour le formatage avec les règles de nombre et pour lesquelles la locale respecte l'algorithme de correspondance indiqué. Les locales de ce tableau évitent d'avoir à utiliser la locale du système d'exécution par défaut.

- -

Exemples

- -

Dans l'hypothèse où on utilise un système prenant en charge l'indonésien, l'allemand mais pas le balinais pour le formatage avec les règles de nombre, supportedLocalesOf renvoie les balises de langue indonésienne et allemande inchangées bien que la collation pinyin ne soit pas pertinente ni utilisée avec l'indonésien (et qu'il est peu probable qu'une variante indonésienne pour l'allemand soit prise en charge). On notera que l'algorithme de correspondance "lookup" est utilisé ici. L'algorithme "best fit" aurait pu déterminer que l'indonésien aurait pu remplacer le balinais car la plupart des personnes parlant le balinais comprend également l'indonésien, la fonction aurait alors pu remplacer la balise de langue balinaise.

- -
var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
-var options = { localeMatcher: 'lookup' };
-console.log(Intl.PluralRules.supportedLocalesOf(locales, options).join(', '));
-// → "id-u-co-pinyin, de-ID"
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Brouillon pour les règles de nombre avec Intl{{Spec2('ES Int Draft')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.PluralRules.supportedLocalesOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.md b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.md new file mode 100644 index 0000000000..0c20fbcf7e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/pluralrules/supportedlocalesof/index.md @@ -0,0 +1,81 @@ +--- +title: Intl.PluralRules.supportedLocalesOf() +slug: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/supportedLocalesOf +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - PluralRules + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/PluralRules/supportedLocalesOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/PluralRules/supportedLocalesOf +--- +
{{JSRef}}
+ +

La méthode Intl.PluralRules.supportedLocalesOf() renvoie un tableau contenant les locales prises en charge, parmi celles passées en argument, pour les règles de nombre (sans avoir à utiliser la locale par défaut du système d'exécution).

+ +

Syntaxe

+ +
Intl.PluralRules.supportedLocalesOf(locales[, options])
+ +

Paramètres

+ +
+
locales
+
Une chaîne de caractères représentant une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour la forme générale de l'argument locales, se référer à la page {{jsxref("Intl", "Intl", "#Identification_et_choix_de_la_locale", 1)}}.
+
options {{optional_inline}}
+
+

Optionnel. Un objet pouvant contenir la propriété suivante :

+ +
+
localeMatcher
+
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}.
+
+
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères représentant le sous-ensemble de balises de langues prises en charge pour le formatage avec les règles de nombre (sans qu'il soit nécssaire d'utiliser la locale par défaut du système d'exploitation).

+ +

Description

+ +

Cette méthode renvoie un tableau contenant un sous-ensemble des balises de langue fournies dans l'argument locales. Les balises de langue sont celles qui sont prises en charge par l'environnement pour le formatage avec les règles de nombre et pour lesquelles la locale respecte l'algorithme de correspondance indiqué. Les locales de ce tableau évitent d'avoir à utiliser la locale du système d'exécution par défaut.

+ +

Exemples

+ +

Dans l'hypothèse où on utilise un système prenant en charge l'indonésien, l'allemand mais pas le balinais pour le formatage avec les règles de nombre, supportedLocalesOf renvoie les balises de langue indonésienne et allemande inchangées bien que la collation pinyin ne soit pas pertinente ni utilisée avec l'indonésien (et qu'il est peu probable qu'une variante indonésienne pour l'allemand soit prise en charge). On notera que l'algorithme de correspondance "lookup" est utilisé ici. L'algorithme "best fit" aurait pu déterminer que l'indonésien aurait pu remplacer le balinais car la plupart des personnes parlant le balinais comprend également l'indonésien, la fonction aurait alors pu remplacer la balise de langue balinaise.

+ +
var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
+var options = { localeMatcher: 'lookup' };
+console.log(Intl.PluralRules.supportedLocalesOf(locales, options).join(', '));
+// → "id-u-co-pinyin, de-ID"
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Brouillon pour les règles de nombre avec Intl{{Spec2('ES Int Draft')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.PluralRules.supportedLocalesOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html deleted file mode 100644 index ad924c3837..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Intl.RelativeTimeFormat.prototype.format() -slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/format ---- -
{{JSRef}}
- -
La méthode Intl.RelativeTimeFormat.prototype.format() permet de formater une valeur avec une unité selon des options de locale et de formatage stockées dans l'objet {{jsxref("RelativeTimeFormat")}}.
- -
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-format.html")}}
- -

Syntaxe

- -
RelativeTimeFormat.format(valeur, unite)
- -

Paramètres

- -
-
valeur
-
Une valeur numérique qu'on souhaite utiliser pour exprimer un temps relatif dans un message internationalisé.
-
unite
-
L'unité à utiliser pour le message internationalisé exprimant le temps relatif. Les valeurs possibles pour cet argument sont "year" (année), "quarter" (trimestre), "month" (mois), "week" (semaine), "day" (jour), "hour" (heure), "minute" (minute), "second" (secondes). Les formes plurielles sont également autorisées.
-
- -

Description

- -

La fonction renvoyée par l'accesseur format permet de formater une valeur et une unité en une chaîne de caractères en prenant en compte la locale et les options de formatage associées à l'objet {{jsxref("RelativeTimeFormat", "Intl.RelativeTimeFormat")}} utilisé.

- -

Exemples

- -

Utilisation simple de format

- -

L'exemple suivant illustre comment créer un outil de formatage pour les valeurs de temps relatifs en anglais.

- -
// On crée un outil de formatage pour les valeurs exprimant
-// les temps relatifs en anglais, avec les valeurs par défaut
-// utilisées explicitement.
-const rtf = new Intl.RelativeTimeFormat("en", {
-    localeMatcher: "best fit", // autre valeur possible : "lookup"
-    numeric: "always", // autre valeur possible : "auto"
-    style: "long", // autres valeurs possibles : "short" ou "narrow"
-});
-
-// Formatage d'une valeur relative négative.
-rtf.format(-1, "day");
-// > "1 day ago"
-
-// Formatage d'une valeur relative positive.
-rtf.format(1, "day");
-// > "in 1 day"
- -

Utiliser l'option auto

- -

Si on passe l'option numeric:auto, c'est la chaîne de caractères yesterday ou tomorrow qui sera produite (en anglais) plutôt que 1 day ago ou in 1 day. Cela permet de n'avoir pas nécessairement une valeur numérique en résultat.

- -
// On crée un formateur en anglais avec l'option
-// numeric: "auto".
-const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
-
-// Formatage d'une valeur relative négative.
-rtf.format(-1, "day");
-// > "yesterday"
-
-// Formatage d'une valeur relative positive.
-rtf.format(1, "day");
-// > "tomorrow"
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.format")}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.md b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.md new file mode 100644 index 0000000000..ad924c3837 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/format/index.md @@ -0,0 +1,97 @@ +--- +title: Intl.RelativeTimeFormat.prototype.format() +slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/format +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/format +--- +
{{JSRef}}
+ +
La méthode Intl.RelativeTimeFormat.prototype.format() permet de formater une valeur avec une unité selon des options de locale et de formatage stockées dans l'objet {{jsxref("RelativeTimeFormat")}}.
+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-format.html")}}
+ +

Syntaxe

+ +
RelativeTimeFormat.format(valeur, unite)
+ +

Paramètres

+ +
+
valeur
+
Une valeur numérique qu'on souhaite utiliser pour exprimer un temps relatif dans un message internationalisé.
+
unite
+
L'unité à utiliser pour le message internationalisé exprimant le temps relatif. Les valeurs possibles pour cet argument sont "year" (année), "quarter" (trimestre), "month" (mois), "week" (semaine), "day" (jour), "hour" (heure), "minute" (minute), "second" (secondes). Les formes plurielles sont également autorisées.
+
+ +

Description

+ +

La fonction renvoyée par l'accesseur format permet de formater une valeur et une unité en une chaîne de caractères en prenant en compte la locale et les options de formatage associées à l'objet {{jsxref("RelativeTimeFormat", "Intl.RelativeTimeFormat")}} utilisé.

+ +

Exemples

+ +

Utilisation simple de format

+ +

L'exemple suivant illustre comment créer un outil de formatage pour les valeurs de temps relatifs en anglais.

+ +
// On crée un outil de formatage pour les valeurs exprimant
+// les temps relatifs en anglais, avec les valeurs par défaut
+// utilisées explicitement.
+const rtf = new Intl.RelativeTimeFormat("en", {
+    localeMatcher: "best fit", // autre valeur possible : "lookup"
+    numeric: "always", // autre valeur possible : "auto"
+    style: "long", // autres valeurs possibles : "short" ou "narrow"
+});
+
+// Formatage d'une valeur relative négative.
+rtf.format(-1, "day");
+// > "1 day ago"
+
+// Formatage d'une valeur relative positive.
+rtf.format(1, "day");
+// > "in 1 day"
+ +

Utiliser l'option auto

+ +

Si on passe l'option numeric:auto, c'est la chaîne de caractères yesterday ou tomorrow qui sera produite (en anglais) plutôt que 1 day ago ou in 1 day. Cela permet de n'avoir pas nécessairement une valeur numérique en résultat.

+ +
// On crée un formateur en anglais avec l'option
+// numeric: "auto".
+const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
+
+// Formatage d'une valeur relative négative.
+rtf.format(-1, "day");
+// > "yesterday"
+
+// Formatage d'une valeur relative positive.
+rtf.format(1, "day");
+// > "tomorrow"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.format")}}

diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html deleted file mode 100644 index c8c141e6e3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Intl.RelativeTimeFormat.prototype.formatToParts() -slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/formatToParts ---- -
{{JSRef}}
- -

La méthode Intl.RelativeTimeFormat.prototype.formatToParts() est une méthode analogue à format() qui renvoie un tableau d'objets contenant les différentes parties représentant le message internationalisé pour le temps relatif.

- -
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-formattoparts.html")}}
- -

Syntaxe

- -
RelativeTimeFormat.formatToParts(valeur, unite)
- -

Paramètres

- -
-
valeur
-
Une valeur numérique qu'on souhaite formater pour un message internationalisé exprimant un temps relatif.
-
unite
-
L'unité à utiliser pour le message internationalisé exprimant le temps relatif. Les valeurs possibles pour cet argument sont "year" (année), "quarter" (trimestre), "month" (mois), "week" (semaine), "day" (jour), "hour" (heure), "minute" (minute), "second" (secondes). Les formes plurielles sont également autorisées.
-
- -

Valeur de retour

- -

Un tableau ({{jsxref("Array")}}) d'objets contenant les fragments composant la chaîne de caractères localisée et mise en forme pour exprimer le temps relatif.

- -

Description

- -
La méthode Intl.RelativeTimeFormat.prototype.formatToParts() est une méthode analogue à la méthode format() mais renvoie un tableau d'objets représentant chacun une partie du message internationalisé. Ces objets ont deux propriétés : type et value. Si un des composants provient de NumberFormat, il aura une propriété unit indiquant l'unité utilisée pour le formatage.
- -

Exemples

- -
const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
-
-// Format relative time using the day unit.
-rtf.formatToParts(-1, "day");
-// > [{ type: "literal", value: "yesterday"}]
-
-rtf.formatToParts(100, "day");
-// > [{ type: "literal", value: "in " },
-      { type: "integer", value: "100", unit: "day" },
-      { type: "literal", value: " days" }]
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationsÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.formatToParts")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.md b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.md new file mode 100644 index 0000000000..c8c141e6e3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/formattoparts/index.md @@ -0,0 +1,80 @@ +--- +title: Intl.RelativeTimeFormat.prototype.formatToParts() +slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/formatToParts +--- +
{{JSRef}}
+ +

La méthode Intl.RelativeTimeFormat.prototype.formatToParts() est une méthode analogue à format() qui renvoie un tableau d'objets contenant les différentes parties représentant le message internationalisé pour le temps relatif.

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-formattoparts.html")}}
+ +

Syntaxe

+ +
RelativeTimeFormat.formatToParts(valeur, unite)
+ +

Paramètres

+ +
+
valeur
+
Une valeur numérique qu'on souhaite formater pour un message internationalisé exprimant un temps relatif.
+
unite
+
L'unité à utiliser pour le message internationalisé exprimant le temps relatif. Les valeurs possibles pour cet argument sont "year" (année), "quarter" (trimestre), "month" (mois), "week" (semaine), "day" (jour), "hour" (heure), "minute" (minute), "second" (secondes). Les formes plurielles sont également autorisées.
+
+ +

Valeur de retour

+ +

Un tableau ({{jsxref("Array")}}) d'objets contenant les fragments composant la chaîne de caractères localisée et mise en forme pour exprimer le temps relatif.

+ +

Description

+ +
La méthode Intl.RelativeTimeFormat.prototype.formatToParts() est une méthode analogue à la méthode format() mais renvoie un tableau d'objets représentant chacun une partie du message internationalisé. Ces objets ont deux propriétés : type et value. Si un des composants provient de NumberFormat, il aura une propriété unit indiquant l'unité utilisée pour le formatage.
+ +

Exemples

+ +
const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
+
+// Format relative time using the day unit.
+rtf.formatToParts(-1, "day");
+// > [{ type: "literal", value: "yesterday"}]
+
+rtf.formatToParts(100, "day");
+// > [{ type: "literal", value: "in " },
+      { type: "integer", value: "100", unit: "day" },
+      { type: "literal", value: " days" }]
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationsÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.formatToParts")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.html b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.html deleted file mode 100644 index 96a0d534dd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.html +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Intl.RelativeTimeFormat -slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat -tags: - - Constructeur - - Internationalisation - - Intl - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat -original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat ---- -
{{JSRef}}
- -

L'objet Intl.RelativeTimeFormat est un constructeur fournissant des objets pour mettre en forme des données temporelles relatives en respectant le format des locales.

- -
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat.html")}}
- -

Syntaxe

- -
new Intl.RelativeTimeFormat([locales[, options]])
- -

Paramètres

- -
-
locales
-
-

Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.

-
-
options {{optional_inline}}
-
-

Optionnel, un objet possédant tout ou partie des propriétés suivantes :

-
-
localeMatcher
-
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}.
-
numeric
-
Le format du message de sortie. Les valeurs possibles sont "always" (par exemple 1 day ago) ou  "auto" (par exemple yesterday). "auto" permet de ne pas toujours avoir de valeurs numériques dans le message produit.
-
style
-
La longueur du message internationalisé. Les valeurs possibles sont : "long" (la valeur par défaut) (par exemple : in 1 month), "short" (par exemple : in 1 mo.) ou  "narrow" (par exemple : in 1 mo.). Le style narrow peut être semblable au style short pour certaines locales.
-
-
-
- -

Description

- -

Propriétés

- -
-
{{jsxref("RelativeTimeFormat.prototype", "Intl.RelativeTimeFormat.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à l'ensemble des instances.
-
- -

Méthodes

- -
-
{{jsxref("RelativeTimeFormat.supportedLocalesOf", "Intl.RelativeTimeFormat.supportedLocalesOf()")}}
-
Cette méthode renvoie un tableau des locales, parmi celles passées en argument, qui sont pris en charge pour le formatage internationalisé des temps relatifs sans qu'il y ait besoin d'utiliser la locale par défaut de l'environnement d'exécution.
-
- -

Les instances de RelativeTimeFormat

- -

Propriétés

- -

Les instances de RelativeTimeFormat héritent des propriétés suivantes grâce à leur prototype :

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl.RelativeTimeFormat/prototype', 'Propriétés')}}

- -

Méthodes

- -

Les instances de RelativeTimeFormat héritent des méthodes suivantes grâce à leur prototype :

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl.RelativeTimeFormat/prototype', 'Méthodes')}}

- -

Exemples

- -

Utiliser format()

- -

L'exemple suivant illustre comment créer un formateur de temps relatif en anglais :

- -
// On crée un formateur en anglais en utilisant explicitement
-// les valeurs par défaut.
-const rtf = new Intl.RelativeTimeFormat("en", {
-    localeMatcher: "best fit", // autre valeur possible : "lookup"
-    numeric: "always", // autre valeur possible : "auto"
-    style: "long", // autre valeur possible : "short" ou "narrow"
-});
-
-// On formate un temps relatif avec une valeur négative (-1).
-rtf.format(-1, "day");
-// > "1 day ago"
-
-// On formate un temps relatif avec une valeur positive (1).
-rtf.format(1, "day");
-// > "in 1 day"
- -

Utiliser l'option auto

- -

Si l'option numeric:auto est passée, on aura la chaîne de caractères yesterday ou tomorrow plutôt que 1 day ago ou in 1 day. De cette façon, on peut ne pas avoir de valeur numérique dans la valeur produite.

- -
// On crée un formateur en anglais avec l'option
-// numeric: "auto".
-const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
-
-// On formate un temps relatif avec une valeur négative (-1).
-rtf.format(-1, "day");
-// > "yesterday"
-
-// On formate un temps relatif avec une valeur positive (1).
-rtf.format(1, "day");
-// > "tomorrow"
-
- -

Utiliser formatToParts()

- -

L'exemple suivant illustre comment créer un formateur de temps relatif qui renvoie les différents fragments pour exprimer le temps relatif internationalisé.

- -
const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
-
-// On crée un temps relatif exprimé en jour.
-rtf.formatToParts(-1, "day");
-// > [{ type: "literal", value: "yesterday"}]
-
-rtf.formatToParts(100, "day");
-// > [{ type: "literal", value: "in " },
-      { type: "integer", value: "100", unit: "day" },
-      { type: "literal", value: " days" }]
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationEtatCommentaires
Proposition pour le constructeur Intl.RelativeTimeFormatProposition de niveau 3
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.RelativeTimeFormat")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.md b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.md new file mode 100644 index 0000000000..96a0d534dd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/index.md @@ -0,0 +1,154 @@ +--- +title: Intl.RelativeTimeFormat +slug: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat +tags: + - Constructeur + - Internationalisation + - Intl + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat +original_slug: Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat +--- +
{{JSRef}}
+ +

L'objet Intl.RelativeTimeFormat est un constructeur fournissant des objets pour mettre en forme des données temporelles relatives en respectant le format des locales.

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat.html")}}
+ +

Syntaxe

+ +
new Intl.RelativeTimeFormat([locales[, options]])
+ +

Paramètres

+ +
+
locales
+
+

Une chaine de caractères avec un identifiant de langue BCP 47, ou un tableau de ce type de chaine de caractères. Pour le format général et l'interprétation de l'argument locales, voir la page {{jsxref("Objets_globaux/Intl","Intl","#L'identification_et_le_choix_de_la_locale")}}.

+
+
options {{optional_inline}}
+
+

Optionnel, un objet possédant tout ou partie des propriétés suivantes :

+
+
localeMatcher
+
L'algorithme de correspondance à utiliser pour la locale. Les valeurs possibles sont "lookup" et "best fit" ; le défaut est "best fit". Pour des informations sur cette option, voir la page {{jsxref("Objets_globaux/Intl","Intl","##Choix_de_la_locale")}}.
+
numeric
+
Le format du message de sortie. Les valeurs possibles sont "always" (par exemple 1 day ago) ou  "auto" (par exemple yesterday). "auto" permet de ne pas toujours avoir de valeurs numériques dans le message produit.
+
style
+
La longueur du message internationalisé. Les valeurs possibles sont : "long" (la valeur par défaut) (par exemple : in 1 month), "short" (par exemple : in 1 mo.) ou  "narrow" (par exemple : in 1 mo.). Le style narrow peut être semblable au style short pour certaines locales.
+
+
+
+ +

Description

+ +

Propriétés

+ +
+
{{jsxref("RelativeTimeFormat.prototype", "Intl.RelativeTimeFormat.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à l'ensemble des instances.
+
+ +

Méthodes

+ +
+
{{jsxref("RelativeTimeFormat.supportedLocalesOf", "Intl.RelativeTimeFormat.supportedLocalesOf()")}}
+
Cette méthode renvoie un tableau des locales, parmi celles passées en argument, qui sont pris en charge pour le formatage internationalisé des temps relatifs sans qu'il y ait besoin d'utiliser la locale par défaut de l'environnement d'exécution.
+
+ +

Les instances de RelativeTimeFormat

+ +

Propriétés

+ +

Les instances de RelativeTimeFormat héritent des propriétés suivantes grâce à leur prototype :

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl.RelativeTimeFormat/prototype', 'Propriétés')}}

+ +

Méthodes

+ +

Les instances de RelativeTimeFormat héritent des méthodes suivantes grâce à leur prototype :

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Intl.RelativeTimeFormat/prototype', 'Méthodes')}}

+ +

Exemples

+ +

Utiliser format()

+ +

L'exemple suivant illustre comment créer un formateur de temps relatif en anglais :

+ +
// On crée un formateur en anglais en utilisant explicitement
+// les valeurs par défaut.
+const rtf = new Intl.RelativeTimeFormat("en", {
+    localeMatcher: "best fit", // autre valeur possible : "lookup"
+    numeric: "always", // autre valeur possible : "auto"
+    style: "long", // autre valeur possible : "short" ou "narrow"
+});
+
+// On formate un temps relatif avec une valeur négative (-1).
+rtf.format(-1, "day");
+// > "1 day ago"
+
+// On formate un temps relatif avec une valeur positive (1).
+rtf.format(1, "day");
+// > "in 1 day"
+ +

Utiliser l'option auto

+ +

Si l'option numeric:auto est passée, on aura la chaîne de caractères yesterday ou tomorrow plutôt que 1 day ago ou in 1 day. De cette façon, on peut ne pas avoir de valeur numérique dans la valeur produite.

+ +
// On crée un formateur en anglais avec l'option
+// numeric: "auto".
+const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
+
+// On formate un temps relatif avec une valeur négative (-1).
+rtf.format(-1, "day");
+// > "yesterday"
+
+// On formate un temps relatif avec une valeur positive (1).
+rtf.format(1, "day");
+// > "tomorrow"
+
+ +

Utiliser formatToParts()

+ +

L'exemple suivant illustre comment créer un formateur de temps relatif qui renvoie les différents fragments pour exprimer le temps relatif internationalisé.

+ +
const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
+
+// On crée un temps relatif exprimé en jour.
+rtf.formatToParts(-1, "day");
+// > [{ type: "literal", value: "yesterday"}]
+
+rtf.formatToParts(100, "day");
+// > [{ type: "literal", value: "in " },
+      { type: "integer", value: "100", unit: "day" },
+      { type: "literal", value: " days" }]
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationEtatCommentaires
Proposition pour le constructeur Intl.RelativeTimeFormatProposition de niveau 3
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.html b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.html deleted file mode 100644 index ed4d45c451..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Intl.RelativeTimeFormat.prototype.resolvedOptions() -slug: >- - Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions -tags: - - Internationalization - - Intl - - JavaScript - - Méthode - - Prototype - - Reference - - i18n -translation_of: >- - Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions -original_slug: >- - Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/resolvedOptions ---- -
{{JSRef}}
- -

La méthode Intl.RelativeTimeFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de format et de locale pour les valeurs temporelles relatives, calculées pendant l'initialisation de l'objet {{jsxref("RelativeTimeFormat")}}.

- -
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-resolvedoptions.html")}}
- -

Syntaxe

- -
relativeTimeFormat.resolvedOptions()
- -

Valeur de retour

- -

Un nouvel objet dont les propriétés reflètent les options de locale et de formatage calculées lors de l'initialisation de l'objet {{jsxref("RelativeTimeFormat")}}.

- -

Description

- -

L'objet renvoyé par cette méthode possèdera les propriétés suivantes :

- -
-
locale
-
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
-
style
-
La longueur du message internationalisé. Les valeurs possibles sont : -
    -
  • "long" : la valeur par défaut, peu concise (par exemple in 1 month)
  • -
  • "short" : une valeur plus courte (par exemple in 1 mo.),
  • -
  • "narrow" : une valeur encore plus courte (pouvant être ambigüe selon les locales) (par exemple in 1 mo.). Les styles narrow et short peuvent être similaires voire identiques pour certaines locales.
  • -
-
-
numeric
-
Le format du message produit. Les valeurs possibles sont : -
    -
  • "always" : la valeur par défaut (par exemple  1 day ago),
  • -
  • "auto" : cette valeur indique qu'il n'est pas nécessaire d'utiliser de valeur numérique dans le message produit (par exemple yesterday).
  • -
-
-
numberingSystem
-
La valeur demandée pour la clé d'extension Unicode "nu" ou la valeur remplie par défaut.
-
- -

Exemples

- -
var de = new Intl.RelativeTimeFormat('de-DE');
-var usedOptions = de.resolvedOptions();
-
-usedOptions.locale;          // "de-DE"
-usedOptions.style;           // "long"
-usedOptions.numeric;         // "always"
-usedOptions.numberingSystem; // "latn"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.resolvedOptions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.md b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.md new file mode 100644 index 0000000000..ed4d45c451 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/resolvedoptions/index.md @@ -0,0 +1,98 @@ +--- +title: Intl.RelativeTimeFormat.prototype.resolvedOptions() +slug: >- + Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions +tags: + - Internationalization + - Intl + - JavaScript + - Méthode + - Prototype + - Reference + - i18n +translation_of: >- + Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/resolvedOptions +original_slug: >- + Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/resolvedOptions +--- +
{{JSRef}}
+ +

La méthode Intl.RelativeTimeFormat.prototype.resolvedOptions() renvoie un nouvel objet dont les propriétés reflètent les options de format et de locale pour les valeurs temporelles relatives, calculées pendant l'initialisation de l'objet {{jsxref("RelativeTimeFormat")}}.

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-resolvedoptions.html")}}
+ +

Syntaxe

+ +
relativeTimeFormat.resolvedOptions()
+ +

Valeur de retour

+ +

Un nouvel objet dont les propriétés reflètent les options de locale et de formatage calculées lors de l'initialisation de l'objet {{jsxref("RelativeTimeFormat")}}.

+ +

Description

+ +

L'objet renvoyé par cette méthode possèdera les propriétés suivantes :

+ +
+
locale
+
La balise de langue BCP 47 qui est réellement utilisée. Si des extensions Unicode étaient fournies avec la balise d'origine et sont supportées pour la locale utilisée, les paires de clés-valeurs seront incluses dans locale.
+
style
+
La longueur du message internationalisé. Les valeurs possibles sont : +
    +
  • "long" : la valeur par défaut, peu concise (par exemple in 1 month)
  • +
  • "short" : une valeur plus courte (par exemple in 1 mo.),
  • +
  • "narrow" : une valeur encore plus courte (pouvant être ambigüe selon les locales) (par exemple in 1 mo.). Les styles narrow et short peuvent être similaires voire identiques pour certaines locales.
  • +
+
+
numeric
+
Le format du message produit. Les valeurs possibles sont : +
    +
  • "always" : la valeur par défaut (par exemple  1 day ago),
  • +
  • "auto" : cette valeur indique qu'il n'est pas nécessaire d'utiliser de valeur numérique dans le message produit (par exemple yesterday).
  • +
+
+
numberingSystem
+
La valeur demandée pour la clé d'extension Unicode "nu" ou la valeur remplie par défaut.
+
+ +

Exemples

+ +
var de = new Intl.RelativeTimeFormat('de-DE');
+var usedOptions = de.resolvedOptions();
+
+usedOptions.locale;          // "de-DE"
+usedOptions.style;           // "long"
+usedOptions.numeric;         // "always"
+usedOptions.numberingSystem; // "latn"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.resolvedOptions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.html b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.html deleted file mode 100644 index e0a6433b75..0000000000 --- a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Intl.RelativeTimeFormat.supportedLocalesOf() -slug: >- - Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/supportedLocalesOf -tags: - - Internationalisation - - Intl - - JavaScript - - Méthode - - Reference -translation_of: >- - Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/supportedLocalesOf -original_slug: >- - Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/supportedLocalesOf ---- -
{{JSRef}}
- -

La méthode Intl.RelativeTimeFormat.supportedLocalesOf() renvoie un tableau contenant l'ensemble des locales, parmi celles fournies en argument, qui sont prises en charge pour le formatage internationalisé du temps relatif, sans avoir à utiliser la locale par défaut de l'environnement d'exécution.

- -
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-supportedlocalesof.html")}}
- -

Syntaxe

- -
Intl.RelativeTimeFormat.supportedLocalesOf(locales[, options])
- -

Paramètres

- -
-
locales
-
Un chaîne de caractères au format d'une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations sur le format de l'argument locales, voir la page {{jsxref("Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
-
options
-
-

Paramètre optionnel, un objet pouvant avoir la propriété suivante :

- -
-
localeMatcher
-
L'algorithme de correspondance entre locales à utiliser. Les valeurs possibles sont "lookup" et "best fit". Pour plus d'informations sur ce sujet, voir la page {{jsxref("Intl", "Intl", "#Choix_de_la_locale")}}.
-
-
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langue qui sont prises en charge pour la mise en forme du temps relatif sans qu'il soit nécessaire d'utiliser la locale par défaut de l'environnement d'exécution.

- -

Description

- -

Cette méthode renvoie un tableau qui est un sous-ensemble de locales. Les balises de langues renvoyées sont celles supportées par l'environnement pour le formatage des temps relatifs. Ces balises sont déterminées en fonction de l'algorithme de correspondances de locale et des locales utilisées. Le tableau résultant fournit les locales qui permettent de ne pas avoir à utiliser la locale par défaut.

- -

Examples

- -

Utiliser supportedLocalesOf()

- -

Si on dispose d'un environnement qui supporte les locales indonésienne et allemande mais pas balinaise pour le formatage des temps relatifs, supportedLocalesOf renverra les balises BCP 47 pour l'indonésien et l'allemand (bien que la collation pinyin ne soit pas pertinente pour les dates ni pour l'indonésien et qu'il soit peu probable qu'une variante indonésienne existe pour l'allemand). Pour l'exemple, on l'utilise l'algorithme "lookup". Si on utilisait "best fit", on pourrait considérer que l'indonésien est adéquat pour la locale balinaise (sachant que la plupart des balinais comprend l'indonésien) et donc également renvoyer la balise balinaise.

- -
var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];var options = { localeMatcher: 'lookup' };console.log(Intl.RelativeTimeFormat.supportedLocalesOf(locales, options).join(', '));// → "id-u-co-pinyin, de-ID"
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.supportedLocalesOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.md b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.md new file mode 100644 index 0000000000..e0a6433b75 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/intl/relativetimeformat/supportedlocalesof/index.md @@ -0,0 +1,85 @@ +--- +title: Intl.RelativeTimeFormat.supportedLocalesOf() +slug: >- + Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/supportedLocalesOf +tags: + - Internationalisation + - Intl + - JavaScript + - Méthode + - Reference +translation_of: >- + Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/supportedLocalesOf +original_slug: >- + Web/JavaScript/Reference/Objets_globaux/Intl/RelativeTimeFormat/supportedLocalesOf +--- +
{{JSRef}}
+ +

La méthode Intl.RelativeTimeFormat.supportedLocalesOf() renvoie un tableau contenant l'ensemble des locales, parmi celles fournies en argument, qui sont prises en charge pour le formatage internationalisé du temps relatif, sans avoir à utiliser la locale par défaut de l'environnement d'exécution.

+ +
{{EmbedInteractiveExample("pages/js/intl-relativetimeformat-prototype-supportedlocalesof.html")}}
+ +

Syntaxe

+ +
Intl.RelativeTimeFormat.supportedLocalesOf(locales[, options])
+ +

Paramètres

+ +
+
locales
+
Un chaîne de caractères au format d'une balise de langue BCP 47 ou bien un tableau de telles chaînes. Pour plus d'informations sur le format de l'argument locales, voir la page {{jsxref("Intl", "Intl", "#L'identification_et_le_choix_de_la_locale")}}.
+
options
+
+

Paramètre optionnel, un objet pouvant avoir la propriété suivante :

+ +
+
localeMatcher
+
L'algorithme de correspondance entre locales à utiliser. Les valeurs possibles sont "lookup" et "best fit". Pour plus d'informations sur ce sujet, voir la page {{jsxref("Intl", "Intl", "#Choix_de_la_locale")}}.
+
+
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères qui représente un sous-ensemble des balises de langue qui sont prises en charge pour la mise en forme du temps relatif sans qu'il soit nécessaire d'utiliser la locale par défaut de l'environnement d'exécution.

+ +

Description

+ +

Cette méthode renvoie un tableau qui est un sous-ensemble de locales. Les balises de langues renvoyées sont celles supportées par l'environnement pour le formatage des temps relatifs. Ces balises sont déterminées en fonction de l'algorithme de correspondances de locale et des locales utilisées. Le tableau résultant fournit les locales qui permettent de ne pas avoir à utiliser la locale par défaut.

+ +

Examples

+ +

Utiliser supportedLocalesOf()

+ +

Si on dispose d'un environnement qui supporte les locales indonésienne et allemande mais pas balinaise pour le formatage des temps relatifs, supportedLocalesOf renverra les balises BCP 47 pour l'indonésien et l'allemand (bien que la collation pinyin ne soit pas pertinente pour les dates ni pour l'indonésien et qu'il soit peu probable qu'une variante indonésienne existe pour l'allemand). Pour l'exemple, on l'utilise l'algorithme "lookup". Si on utilisait "best fit", on pourrait considérer que l'indonésien est adéquat pour la locale balinaise (sachant que la plupart des balinais comprend l'indonésien) et donc également renvoyer la balise balinaise.

+ +
var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];var options = { localeMatcher: 'lookup' };console.log(Intl.RelativeTimeFormat.supportedLocalesOf(locales, options).join(', '));// → "id-u-co-pinyin, de-ID"
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour Intl.RelativeTimeProposition de niveau 3 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Intl.RelativeTimeFormat.supportedLocalesOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/isfinite/index.html b/files/fr/web/javascript/reference/global_objects/isfinite/index.html deleted file mode 100644 index a127177d6e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/isfinite/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: isFinite() -slug: Web/JavaScript/Reference/Global_Objects/isFinite -tags: - - Fonction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/isFinite -original_slug: Web/JavaScript/Reference/Objets_globaux/isFinite ---- -
{{jsSidebar("Objects")}}
- -

La fonction globale isFinite() détermine si la valeur passée en argument est un nombre fini. Si nécessaire, le paramètre est d'abord converti en nombre.

- -
{{EmbedInteractiveExample("pages/js/globalprops-isfinite.html")}}
- -

Syntaxe

- -
isFinite(valeurÀTester)
- -

Paramètres

- -
-
valeurÀTester
-
La valeur dont on souhaite savoir si elle est finie ou non.
-
- -

Valeur de retour

- -

false si la valeur passée en argument vaut {{jsxref("Infinity")}} (en positif ou en négatif),{{jsxref("NaN")}} ou {{jsxref("undefined")}}, true sinon.

- -

Description

- -

isFinite() est une fonction qui n'est rattachée à aucun objet et qui est disponible au plus haut niveau.

- -

Cette fonction peut être utilisée pour déterminer si un nombre est fini ou non. La fonction isFinite() examine le nombre passé en argument : si celui-ci vaut {{jsxref("NaN")}}, {{jsxref("Infinity")}} (pour l'infini) ou {{jsxref("Infinity","-Infinity")}} (pour l'infini négatif), cette fonction renvoie false sinon elle renvoie true.

- -

Exemples

- -
isFinite(Infinity);  // false
-isFinite(NaN);       // false
-isFinite(-Infinity); // false
-
-isFinite(0);         // true
-isFinite(2e64);      // true
-isFinite(910);       // true
-isFinite(null);      // true, ce qui aurait été false
-                     // avec la méthode Number.isFinite(null)
-
-
-isFinite("0");       // true ce qui aurait été false
-                     // avec la méthode Number.isFinite("0")
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.5', 'isFinite')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-isfinite-number', 'isFinite')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-isfinite-number', 'isFinite')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/isfinite/index.md b/files/fr/web/javascript/reference/global_objects/isfinite/index.md new file mode 100644 index 0000000000..a127177d6e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/isfinite/index.md @@ -0,0 +1,98 @@ +--- +title: isFinite() +slug: Web/JavaScript/Reference/Global_Objects/isFinite +tags: + - Fonction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/isFinite +original_slug: Web/JavaScript/Reference/Objets_globaux/isFinite +--- +
{{jsSidebar("Objects")}}
+ +

La fonction globale isFinite() détermine si la valeur passée en argument est un nombre fini. Si nécessaire, le paramètre est d'abord converti en nombre.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-isfinite.html")}}
+ +

Syntaxe

+ +
isFinite(valeurÀTester)
+ +

Paramètres

+ +
+
valeurÀTester
+
La valeur dont on souhaite savoir si elle est finie ou non.
+
+ +

Valeur de retour

+ +

false si la valeur passée en argument vaut {{jsxref("Infinity")}} (en positif ou en négatif),{{jsxref("NaN")}} ou {{jsxref("undefined")}}, true sinon.

+ +

Description

+ +

isFinite() est une fonction qui n'est rattachée à aucun objet et qui est disponible au plus haut niveau.

+ +

Cette fonction peut être utilisée pour déterminer si un nombre est fini ou non. La fonction isFinite() examine le nombre passé en argument : si celui-ci vaut {{jsxref("NaN")}}, {{jsxref("Infinity")}} (pour l'infini) ou {{jsxref("Infinity","-Infinity")}} (pour l'infini négatif), cette fonction renvoie false sinon elle renvoie true.

+ +

Exemples

+ +
isFinite(Infinity);  // false
+isFinite(NaN);       // false
+isFinite(-Infinity); // false
+
+isFinite(0);         // true
+isFinite(2e64);      // true
+isFinite(910);       // true
+isFinite(null);      // true, ce qui aurait été false
+                     // avec la méthode Number.isFinite(null)
+
+
+isFinite("0");       // true ce qui aurait été false
+                     // avec la méthode Number.isFinite("0")
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.5', 'isFinite')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-isfinite-number', 'isFinite')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-isfinite-number', 'isFinite')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/isnan/index.html b/files/fr/web/javascript/reference/global_objects/isnan/index.html deleted file mode 100644 index af6f562a83..0000000000 --- a/files/fr/web/javascript/reference/global_objects/isnan/index.html +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: isNaN() -slug: Web/JavaScript/Reference/Global_Objects/isNaN -tags: - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/isNaN -original_slug: Web/JavaScript/Reference/Objets_globaux/isNaN ---- -
{{jsSidebar("Objects")}}
- -

La fonction isNaN() permet de déterminer si une valeur est {{jsxref("NaN")}}. On notera que cette fonction utilise des règles de conversion différentes de {{jsxref("Number.isNaN()")}}, définie avec ECMAScript 2015 (ES6).

- -
{{EmbedInteractiveExample("pages/js/globalprops-isnan.html")}}
- -

Syntaxe

- -
isNaN(valeurÀTester)
- -

Paramètres

- -
-
valeurÀTester
-
La valeur dont on souhaite déterminer si elle est {{jsxref("NaN")}}.
-
- -

Valeur de retour

- -

true si la valeur fournie vaut {{jsxref("NaN")}}, sinon, la méthode renverra false.

- -

Description

- -

La nécessité d'avoir isNaN()

- -

À la différence des autres valeurs JavaScript, il est impossible d'utiliser les opérateurs d'égalité faible et stricte ({{jsxref("Opérateurs/Opérateurs_de_comparaison","==","#.C3.89galit.C3.A9_simple_(.3D.3D)")}} et {{jsxref("Opérateurs/Opérateurs_de_comparaison","===","#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)")}}) afin de déterminer si une valeur est ou n'est pas réellement {{jsxref("NaN")}}. En effet NaN == NaN et NaN === NaN renvoient false tous les deux. C'est pour cela qu'il est nécessaire d'avoir la fonction isNaN().

- -

Les origines de NaN

- -

La valeur NaN est générée lorsqu'une opération arithmétique résulte en une valeur indéfinie ou non représentable. De telles valeurs ne représentent pas nécessairement des dépassements de condition. NaN peut également être le résultat d'une conversion numérique pour les valeurs qui n'ont pas de valeurs numériques correspondantes (par exemple lorsqu'on souhaite convertir la chaîne "toto" en un nombre).

- -

Par exemple, lorsqu'on divise zéro par zéro, on obtient NaN. En revanche, lorsqu'on divise d'autres nombres par zéro, on n'obtient pas ce résultat.

- -

Comportement étrange de isNaN()

- -

Depuis les premières spécifications pour isNaN(), son comportement sur les arguments non-numériques a toujours été source de confusion. Lorsque l'argument passé à la fonction n'est pas du type Number, la valeur est d'abord convertie en une valeur du type Number. La valeur résultante est ensuite utilisée lors du test afin de déterminer si c'est {{jsxref("NaN")}}. Ainsi pour valeurs non numériques qui sont converties en une valeur non-NaN numérique (notamment la chaîne vide, les valeurs booléennes qui donnent zéro ou un), la fonction renverra false, ce qui pourrait être inattendu (en effet, la chaîne vide n'est pas un nombre). Ici, la confusion provient du fait que « not a number » a un sens particulier pour les valeurs numériques représentées selon IEEE-754. Cette fonction doit plutôt être vue comme la réponse à la question « est-ce que cette valeur, lorsqu'elle est convertie en une valeur numérique, correspond à la valeur IEEE-754 "Not A Number" ? ».

- -

La version ECMAScript ES2015 ajoute la méthode {{jsxref("Number.isNaN()")}}. Number.isNaN(x) permettra de tester de façon plus fiable si x vaut NaN ou non. Si on ne dispose pas de cette méthode, on peut également utiliser l'expression (x != x) afin de tester de façon plus certaine si x vaut NaN ou non (en effet le résultat de cette expression n'aura pas les faux positifs de isNaN). Sous cet angle, isNaN() peut être vu comme :

- -
var isNaN = function(valeur) {
-  return Number.isNaN(Number(valeur));
-};
- -

Ou encore, en utilisant le fait que NaN est la seule valeur différente d'elle-même :

- -
var isNaN = function(valeur) {
-  var n = Number(valeur);
-  return n !== n;
-};
- -

NaN est « empoisonné »

- -

Cette fonction peut être utilisée afin de déterminer si la valeur courante peut faire partie d'une expression arithmétique. En effet, si un des composants d'une expression arithmétique vaut NaN, le résultat de l'expression sera NaN également (on dit alors que NaN « empoisonne » l'expression). La méthode isNaN() permet alors de vérifier, avant de construire une expression, que les valeurs utilisées n'empoisonneront pas l'expression.

- -

On peut par exemple construire une fonction dont on souhaite qu'elle incrémente l'argument et que la valeur qu'elle renvoie ne puisse pas être NaN. Le code de cette fonction pourrait être :

- -
function incrément(x) {
-  if (isNaN(x)){
-    x = 0;
-  }
-  return x + 1;
-}
-
-// En utilisant des notations raccourcies,
-// on pourrait écrire une fonction équivalente
-function incrémentCourt(x) {
-  isNaN(x) ? 1 : x + 1;
-}
-
-incrément("blabla");  // 1
-incrément(1);         // 2
-incrément(NaN);       // 1
-
- -

Exemples

- -
isNaN(NaN);       // true
-isNaN(undefined); // true
-isNaN({});        // true
-
-isNaN(true);      // false
-isNaN(null);      // false
-isNaN(37);        // false
-
-// strings
-isNaN("37");      // false : "37" est converti vers le nombre 37 qui n'est pas NaN
-isNaN("37.37");   // false : "37.37" est converti vers le nombre 37.37 qui n'est pas NaN
-isNaN("37,25");   // true  : la virgule n'est pas considérée comme un séparateur décimal
-isNaN("123ABC");  // true  : "123ABC" converti en 123 par parseInt mais en NaN par Number
-isNaN("");        // false : la chaîne vide est convertie en 0 qui n'est pas NaN
-isNaN(" ");       // false : une chaîne de blancs est convertie en 0 qui n'est pas NaN
-
-// dates
-isNaN(new Date());                // false
-isNaN(new Date().toString());     // true
-
-// Voici le résultat « faux-positif » qui fait que isNaN n'est pas entièrement fiable
-isNaN("blabla")   // true : "blabla" est converti en un nombre
-                  // Si on souhaite convertir cette valeur en nombre, cela échoue
-                  // et on obtient NaN
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.4', 'isNaN')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-isnan-number', 'isNaN')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-isnan-number', 'isNaN')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/isnan/index.md b/files/fr/web/javascript/reference/global_objects/isnan/index.md new file mode 100644 index 0000000000..af6f562a83 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/isnan/index.md @@ -0,0 +1,154 @@ +--- +title: isNaN() +slug: Web/JavaScript/Reference/Global_Objects/isNaN +tags: + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/isNaN +original_slug: Web/JavaScript/Reference/Objets_globaux/isNaN +--- +
{{jsSidebar("Objects")}}
+ +

La fonction isNaN() permet de déterminer si une valeur est {{jsxref("NaN")}}. On notera que cette fonction utilise des règles de conversion différentes de {{jsxref("Number.isNaN()")}}, définie avec ECMAScript 2015 (ES6).

+ +
{{EmbedInteractiveExample("pages/js/globalprops-isnan.html")}}
+ +

Syntaxe

+ +
isNaN(valeurÀTester)
+ +

Paramètres

+ +
+
valeurÀTester
+
La valeur dont on souhaite déterminer si elle est {{jsxref("NaN")}}.
+
+ +

Valeur de retour

+ +

true si la valeur fournie vaut {{jsxref("NaN")}}, sinon, la méthode renverra false.

+ +

Description

+ +

La nécessité d'avoir isNaN()

+ +

À la différence des autres valeurs JavaScript, il est impossible d'utiliser les opérateurs d'égalité faible et stricte ({{jsxref("Opérateurs/Opérateurs_de_comparaison","==","#.C3.89galit.C3.A9_simple_(.3D.3D)")}} et {{jsxref("Opérateurs/Opérateurs_de_comparaison","===","#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)")}}) afin de déterminer si une valeur est ou n'est pas réellement {{jsxref("NaN")}}. En effet NaN == NaN et NaN === NaN renvoient false tous les deux. C'est pour cela qu'il est nécessaire d'avoir la fonction isNaN().

+ +

Les origines de NaN

+ +

La valeur NaN est générée lorsqu'une opération arithmétique résulte en une valeur indéfinie ou non représentable. De telles valeurs ne représentent pas nécessairement des dépassements de condition. NaN peut également être le résultat d'une conversion numérique pour les valeurs qui n'ont pas de valeurs numériques correspondantes (par exemple lorsqu'on souhaite convertir la chaîne "toto" en un nombre).

+ +

Par exemple, lorsqu'on divise zéro par zéro, on obtient NaN. En revanche, lorsqu'on divise d'autres nombres par zéro, on n'obtient pas ce résultat.

+ +

Comportement étrange de isNaN()

+ +

Depuis les premières spécifications pour isNaN(), son comportement sur les arguments non-numériques a toujours été source de confusion. Lorsque l'argument passé à la fonction n'est pas du type Number, la valeur est d'abord convertie en une valeur du type Number. La valeur résultante est ensuite utilisée lors du test afin de déterminer si c'est {{jsxref("NaN")}}. Ainsi pour valeurs non numériques qui sont converties en une valeur non-NaN numérique (notamment la chaîne vide, les valeurs booléennes qui donnent zéro ou un), la fonction renverra false, ce qui pourrait être inattendu (en effet, la chaîne vide n'est pas un nombre). Ici, la confusion provient du fait que « not a number » a un sens particulier pour les valeurs numériques représentées selon IEEE-754. Cette fonction doit plutôt être vue comme la réponse à la question « est-ce que cette valeur, lorsqu'elle est convertie en une valeur numérique, correspond à la valeur IEEE-754 "Not A Number" ? ».

+ +

La version ECMAScript ES2015 ajoute la méthode {{jsxref("Number.isNaN()")}}. Number.isNaN(x) permettra de tester de façon plus fiable si x vaut NaN ou non. Si on ne dispose pas de cette méthode, on peut également utiliser l'expression (x != x) afin de tester de façon plus certaine si x vaut NaN ou non (en effet le résultat de cette expression n'aura pas les faux positifs de isNaN). Sous cet angle, isNaN() peut être vu comme :

+ +
var isNaN = function(valeur) {
+  return Number.isNaN(Number(valeur));
+};
+ +

Ou encore, en utilisant le fait que NaN est la seule valeur différente d'elle-même :

+ +
var isNaN = function(valeur) {
+  var n = Number(valeur);
+  return n !== n;
+};
+ +

NaN est « empoisonné »

+ +

Cette fonction peut être utilisée afin de déterminer si la valeur courante peut faire partie d'une expression arithmétique. En effet, si un des composants d'une expression arithmétique vaut NaN, le résultat de l'expression sera NaN également (on dit alors que NaN « empoisonne » l'expression). La méthode isNaN() permet alors de vérifier, avant de construire une expression, que les valeurs utilisées n'empoisonneront pas l'expression.

+ +

On peut par exemple construire une fonction dont on souhaite qu'elle incrémente l'argument et que la valeur qu'elle renvoie ne puisse pas être NaN. Le code de cette fonction pourrait être :

+ +
function incrément(x) {
+  if (isNaN(x)){
+    x = 0;
+  }
+  return x + 1;
+}
+
+// En utilisant des notations raccourcies,
+// on pourrait écrire une fonction équivalente
+function incrémentCourt(x) {
+  isNaN(x) ? 1 : x + 1;
+}
+
+incrément("blabla");  // 1
+incrément(1);         // 2
+incrément(NaN);       // 1
+
+ +

Exemples

+ +
isNaN(NaN);       // true
+isNaN(undefined); // true
+isNaN({});        // true
+
+isNaN(true);      // false
+isNaN(null);      // false
+isNaN(37);        // false
+
+// strings
+isNaN("37");      // false : "37" est converti vers le nombre 37 qui n'est pas NaN
+isNaN("37.37");   // false : "37.37" est converti vers le nombre 37.37 qui n'est pas NaN
+isNaN("37,25");   // true  : la virgule n'est pas considérée comme un séparateur décimal
+isNaN("123ABC");  // true  : "123ABC" converti en 123 par parseInt mais en NaN par Number
+isNaN("");        // false : la chaîne vide est convertie en 0 qui n'est pas NaN
+isNaN(" ");       // false : une chaîne de blancs est convertie en 0 qui n'est pas NaN
+
+// dates
+isNaN(new Date());                // false
+isNaN(new Date().toString());     // true
+
+// Voici le résultat « faux-positif » qui fait que isNaN n'est pas entièrement fiable
+isNaN("blabla")   // true : "blabla" est converti en un nombre
+                  // Si on souhaite convertir cette valeur en nombre, cela échoue
+                  // et on obtient NaN
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.4', 'isNaN')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-isnan-number', 'isNaN')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-isnan-number', 'isNaN')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/json/index.html b/files/fr/web/javascript/reference/global_objects/json/index.html deleted file mode 100644 index cd592c8638..0000000000 --- a/files/fr/web/javascript/reference/global_objects/json/index.html +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: JSON -slug: Web/JavaScript/Reference/Global_Objects/JSON -tags: - - JSON - - JavaScript - - Object - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/JSON -original_slug: Web/JavaScript/Reference/Objets_globaux/JSON ---- -
{{JSRef}}
- -

L’objet JSON contient des méthodes pour interpréter du JSON (JavaScript Object Notation) (voir également la page du glossaire {{glossary("JSON")}}) et convertir des valeurs en JSON. Il ne peut être appelé ou construit, et, en dehors de ses deux méthodes, n’a pas de fonctionnalité propre.

- -

Différences entres JavaScript et JSON

- -

JSON est une syntaxe pour sérialiser des objets, tableaux, nombres, chaînes de caractères, booléens et valeurs null. Elle est basée sur la syntaxe de JavaScript mais en est distincte : du code JavaScript n’est pas nécessairement du JSON, et du JSON n’est pas nécessairement du JavaScript.

- - - -

Dans l'exemple suivant, on utilise {{jsxref("JSON.parse()")}} afin d'analyser la chaîne JSON et eval afin d'exécuter le code correspondant :

- -
var code = '"\u2028\u2029"';
-JSON.parse(code); // vaut "\u2028\u2029" pour tous les moteurs
-eval(code); // provoque une SyntaxError pour les anciens moteurs
- -

Syntaxe complète

- -
JSON = null
-    ou true ou false
-    ou NombreJSON
-    ou ChaîneJSON
-    ou ObjetJSON
-    ou TableauJSON
-
-NombreJSON = - NombrePositif
-          ou NombrePositif
-NombrePositif = NombreDécimal
-              ou NombreDécimal . Chiffres
-              ou NombreDécimal . Chiffres PartiExposant
-              ou NombreDécimal PartiExposant
-NombreDécimal = 0
-             ou UnÀNeuf Chiffres
-PartiExposant = e Exposant
-            ou E Exposant
-Exposant = Chiffres
-        ou + Chiffres
-        ou - Chiffres
-Chiffres = Chiffre
-      ou Chiffres Chiffre
-Chiffre = 0 à 9
-UnÀNeuf = 1 à 9
-
-ChaîneJSON = ""
-          ou " ChaîneCaractères "
-ChaîneCaractères = ChaîneCaractère
-                ou ChaîneCaractères ChaîneCaractère
-ChaîneCaractère = un caractère
-                  sauf " ou \ ou U+0000 à U+001F
-               ou SéquenceÉchappement
-SéquenceÉchappement = \" ou \/ ou \\ ou \b ou \f ou \n ou \r ou \t
-              ou \u ChifreHexadécimal ChifreHexadécimal ChifreHexadécimal ChifreHexadécimal
-ChifreHexadécimal = 0 à 9
-        ou A à F
-        ou a à f
-
-ObjetJSON = { }
-          ou { Membres }
-Membres = ChaîneJSON : JSON
-       ou Membres , ChaîneJSON : JSON
-
-TableauJSON = [ ]
-         ou [ ÉlémentsTableau ]
-ÉlémentsTableau = JSON
-             ou ÉlémentsTableau , JSON
- -

Des espaces blancs insignifiants peuvent être présents n’importe où sauf dans un JSONNumber (les nombres ne doivent pas contenir d’espaces blancs) ou dans un JSONString (where it is interpreted as the corresponding character in the string, or would cause an error). Les caractères tabulation (U+0009), retour chariot (U+000D), saut de ligne (U+000A), and espace (U+0020) sont les seuls caractères blancs valides.

- -

Méthodes

- -
-
{{jsxref("JSON.parse()", "JSON.parse(texte[, revivificateur])")}}
-
Analysez le texte de la chaîne comme JSON, transformez éventuellement la valeur produite et ses propriétés, et renvoyez la valeur. Toute violation de la syntaxe JSON, y compris celles concernant les différences entre JavaScript et JSON, entraîne l'envoi d'un {{jsxref("SyntaxError")}}. L'option "revivificateur" permet d'interpréter ce que le remplacement a utilisé pour remplacer d'autres types de données.
-
{{jsxref("JSON.stringify()", "JSON.stringify(valeur[, remplacement[, expace]])")}}
-
Retourne une chaîne JSON correspondant à la valeur spécifiée, en incluant éventuellement seulement certaines propriétés ou en remplaçant les valeurs des propriétés d'une manière définie par l'utilisateur. Par défaut, toutes les instances de {{jsxref("undefined")}} sont remplacées par {{jsxref("null")}}, et les autres types de données natives non prises en charge sont censurés. L'option de remplacement permet de spécifier un autre comportement.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}{{Spec2('ES5.1')}}Définition initiale.
{{SpecName('ES6', '#sec-json-object', 'JSON')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-json-object', 'JSON')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/json/index.md b/files/fr/web/javascript/reference/global_objects/json/index.md new file mode 100644 index 0000000000..cd592c8638 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/json/index.md @@ -0,0 +1,150 @@ +--- +title: JSON +slug: Web/JavaScript/Reference/Global_Objects/JSON +tags: + - JSON + - JavaScript + - Object + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/JSON +original_slug: Web/JavaScript/Reference/Objets_globaux/JSON +--- +
{{JSRef}}
+ +

L’objet JSON contient des méthodes pour interpréter du JSON (JavaScript Object Notation) (voir également la page du glossaire {{glossary("JSON")}}) et convertir des valeurs en JSON. Il ne peut être appelé ou construit, et, en dehors de ses deux méthodes, n’a pas de fonctionnalité propre.

+ +

Différences entres JavaScript et JSON

+ +

JSON est une syntaxe pour sérialiser des objets, tableaux, nombres, chaînes de caractères, booléens et valeurs null. Elle est basée sur la syntaxe de JavaScript mais en est distincte : du code JavaScript n’est pas nécessairement du JSON, et du JSON n’est pas nécessairement du JavaScript.

+ + + +

Dans l'exemple suivant, on utilise {{jsxref("JSON.parse()")}} afin d'analyser la chaîne JSON et eval afin d'exécuter le code correspondant :

+ +
var code = '"\u2028\u2029"';
+JSON.parse(code); // vaut "\u2028\u2029" pour tous les moteurs
+eval(code); // provoque une SyntaxError pour les anciens moteurs
+ +

Syntaxe complète

+ +
JSON = null
+    ou true ou false
+    ou NombreJSON
+    ou ChaîneJSON
+    ou ObjetJSON
+    ou TableauJSON
+
+NombreJSON = - NombrePositif
+          ou NombrePositif
+NombrePositif = NombreDécimal
+              ou NombreDécimal . Chiffres
+              ou NombreDécimal . Chiffres PartiExposant
+              ou NombreDécimal PartiExposant
+NombreDécimal = 0
+             ou UnÀNeuf Chiffres
+PartiExposant = e Exposant
+            ou E Exposant
+Exposant = Chiffres
+        ou + Chiffres
+        ou - Chiffres
+Chiffres = Chiffre
+      ou Chiffres Chiffre
+Chiffre = 0 à 9
+UnÀNeuf = 1 à 9
+
+ChaîneJSON = ""
+          ou " ChaîneCaractères "
+ChaîneCaractères = ChaîneCaractère
+                ou ChaîneCaractères ChaîneCaractère
+ChaîneCaractère = un caractère
+                  sauf " ou \ ou U+0000 à U+001F
+               ou SéquenceÉchappement
+SéquenceÉchappement = \" ou \/ ou \\ ou \b ou \f ou \n ou \r ou \t
+              ou \u ChifreHexadécimal ChifreHexadécimal ChifreHexadécimal ChifreHexadécimal
+ChifreHexadécimal = 0 à 9
+        ou A à F
+        ou a à f
+
+ObjetJSON = { }
+          ou { Membres }
+Membres = ChaîneJSON : JSON
+       ou Membres , ChaîneJSON : JSON
+
+TableauJSON = [ ]
+         ou [ ÉlémentsTableau ]
+ÉlémentsTableau = JSON
+             ou ÉlémentsTableau , JSON
+ +

Des espaces blancs insignifiants peuvent être présents n’importe où sauf dans un JSONNumber (les nombres ne doivent pas contenir d’espaces blancs) ou dans un JSONString (where it is interpreted as the corresponding character in the string, or would cause an error). Les caractères tabulation (U+0009), retour chariot (U+000D), saut de ligne (U+000A), and espace (U+0020) sont les seuls caractères blancs valides.

+ +

Méthodes

+ +
+
{{jsxref("JSON.parse()", "JSON.parse(texte[, revivificateur])")}}
+
Analysez le texte de la chaîne comme JSON, transformez éventuellement la valeur produite et ses propriétés, et renvoyez la valeur. Toute violation de la syntaxe JSON, y compris celles concernant les différences entre JavaScript et JSON, entraîne l'envoi d'un {{jsxref("SyntaxError")}}. L'option "revivificateur" permet d'interpréter ce que le remplacement a utilisé pour remplacer d'autres types de données.
+
{{jsxref("JSON.stringify()", "JSON.stringify(valeur[, remplacement[, expace]])")}}
+
Retourne une chaîne JSON correspondant à la valeur spécifiée, en incluant éventuellement seulement certaines propriétés ou en remplaçant les valeurs des propriétés d'une manière définie par l'utilisateur. Par défaut, toutes les instances de {{jsxref("undefined")}} sont remplacées par {{jsxref("null")}}, et les autres types de données natives non prises en charge sont censurés. L'option de remplacement permet de spécifier un autre comportement.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}{{Spec2('ES5.1')}}Définition initiale.
{{SpecName('ES6', '#sec-json-object', 'JSON')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-json-object', 'JSON')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/json/parse/index.html b/files/fr/web/javascript/reference/global_objects/json/parse/index.html deleted file mode 100644 index 071d0c8a92..0000000000 --- a/files/fr/web/javascript/reference/global_objects/json/parse/index.html +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: JSON.parse() -slug: Web/JavaScript/Reference/Global_Objects/JSON/parse -tags: - - ECMAScript 5 - - JSON - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse -original_slug: Web/JavaScript/Reference/Objets_globaux/JSON/parse ---- -
{{JSRef}}
- -

La méthode JSON.parse() analyse une chaîne de caractères JSON et construit la valeur JavaScript ou l'objet décrit par cette chaîne. On peut éventuellement utiliser cette fonction avec un paramètre de modification permettant de traiter l'objet avant qu'il soit renvoyé.

- -
{{EmbedInteractiveExample("pages/js/json-parse.html")}}
- -

Syntaxe

- -
JSON.parse(texte[, reviver])
- -

Paramètres

- -
-
texte
-
La chaine de caractère à analyser comme du JSON. Voir l'objet {{jsxref("JSON")}} pour une description de la syntaxe JSON.
-
reviver
-
Si l'argument est une fonction, effectue une opération de transformation sur la valeur analysée avant de la renvoyer.
-
- -

Valeur de retour

- -

Un objet ({{jsxref("Object")}}) correspondant au texte envoyé.

- -

Exceptions

- -

Lève une exception {{jsxref("SyntaxError")}} si la chaine de caractère à analyser ne contient pas du JSON valide.

- -

Exemples

- -

Utiliser JSON.parse()

- -
try {
-  JSON.parse('{}');              // {}
-  JSON.parse('true');            // true
-  JSON.parse('"toto"');          // "toto"
-  JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
-  JSON.parse('null');            // null
-} catch (e) {
-  console.error("Parsing error:", e);
-}
-
- -

Utiliser le paramètre reviver

- -

Si un reviver est spécifié, la valeur obtenue par l'analyse est transformée avant d'être renvoyée. Plus précisément, la valeur calculée, et toutes les propriétés (commençant avec les propriétés les plus imbriquées), sont passées individuellement au reviver, qui est appelé avec : l'objet contenant la propriété en cours de traitement, le nom de la propriété en chaine de caractères et la valeur de la propriété. Si la fonction reviver retourne {{jsxref("undefined")}} (ou ne retourne aucune valeur, par exemple si l'exécution s'arrête à la fin de la fonction), la propriété est supprimée de l'objet. Autrement la propriété est redéfinie avec la valeur retournée.

- -

Si le reviver ne transforme que certaines valeurs et pas d'autres, assurez-vous que les valeurs inchangées soient renvoyées telles quelles. En effet, si elles ne sont pas renvoyées, elles seront supprimés sur l'objet obtenu !

- -
JSON.parse('{"p": 5}', (key, value) => {
-  if (typeof value === 'number') {
-    return value * 2;  // renvoie value * 2 pour les nombres
-  }
-  return value;        // pour le reste, la valeur est inchangée
-});
-
-// { p: 10 }
-
-JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', (key, value) => {
-    console.log(key);            // on affiche le nom de la propriété dans la console
-    return value;                // et on renvoie la valeur inchangée.
-});
-
-// 1
-// 2
-// 4
-// 6
-// 5
-// 3
-// ""
- -

JSON.parse() n'accepte pas les virgules en fin de tableau

- -
// les deux instructions qui suivent lèveront une SyntaxError
-JSON.parse('[1, 2, 3, 4, ]');
-JSON.parse('{ "toto" : 1, }');
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.12.2', 'JSON.parse')}}{{Spec2('ES5.1')}}Définition initiale.
- Implementée avec JavaScript 1.7.
{{SpecName('ES6', '#sec-json.parse', 'JSON.parse')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-json.parse', 'JSON.parse')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.JSON.parse")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/json/parse/index.md b/files/fr/web/javascript/reference/global_objects/json/parse/index.md new file mode 100644 index 0000000000..071d0c8a92 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/json/parse/index.md @@ -0,0 +1,128 @@ +--- +title: JSON.parse() +slug: Web/JavaScript/Reference/Global_Objects/JSON/parse +tags: + - ECMAScript 5 + - JSON + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse +original_slug: Web/JavaScript/Reference/Objets_globaux/JSON/parse +--- +
{{JSRef}}
+ +

La méthode JSON.parse() analyse une chaîne de caractères JSON et construit la valeur JavaScript ou l'objet décrit par cette chaîne. On peut éventuellement utiliser cette fonction avec un paramètre de modification permettant de traiter l'objet avant qu'il soit renvoyé.

+ +
{{EmbedInteractiveExample("pages/js/json-parse.html")}}
+ +

Syntaxe

+ +
JSON.parse(texte[, reviver])
+ +

Paramètres

+ +
+
texte
+
La chaine de caractère à analyser comme du JSON. Voir l'objet {{jsxref("JSON")}} pour une description de la syntaxe JSON.
+
reviver
+
Si l'argument est une fonction, effectue une opération de transformation sur la valeur analysée avant de la renvoyer.
+
+ +

Valeur de retour

+ +

Un objet ({{jsxref("Object")}}) correspondant au texte envoyé.

+ +

Exceptions

+ +

Lève une exception {{jsxref("SyntaxError")}} si la chaine de caractère à analyser ne contient pas du JSON valide.

+ +

Exemples

+ +

Utiliser JSON.parse()

+ +
try {
+  JSON.parse('{}');              // {}
+  JSON.parse('true');            // true
+  JSON.parse('"toto"');          // "toto"
+  JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
+  JSON.parse('null');            // null
+} catch (e) {
+  console.error("Parsing error:", e);
+}
+
+ +

Utiliser le paramètre reviver

+ +

Si un reviver est spécifié, la valeur obtenue par l'analyse est transformée avant d'être renvoyée. Plus précisément, la valeur calculée, et toutes les propriétés (commençant avec les propriétés les plus imbriquées), sont passées individuellement au reviver, qui est appelé avec : l'objet contenant la propriété en cours de traitement, le nom de la propriété en chaine de caractères et la valeur de la propriété. Si la fonction reviver retourne {{jsxref("undefined")}} (ou ne retourne aucune valeur, par exemple si l'exécution s'arrête à la fin de la fonction), la propriété est supprimée de l'objet. Autrement la propriété est redéfinie avec la valeur retournée.

+ +

Si le reviver ne transforme que certaines valeurs et pas d'autres, assurez-vous que les valeurs inchangées soient renvoyées telles quelles. En effet, si elles ne sont pas renvoyées, elles seront supprimés sur l'objet obtenu !

+ +
JSON.parse('{"p": 5}', (key, value) => {
+  if (typeof value === 'number') {
+    return value * 2;  // renvoie value * 2 pour les nombres
+  }
+  return value;        // pour le reste, la valeur est inchangée
+});
+
+// { p: 10 }
+
+JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', (key, value) => {
+    console.log(key);            // on affiche le nom de la propriété dans la console
+    return value;                // et on renvoie la valeur inchangée.
+});
+
+// 1
+// 2
+// 4
+// 6
+// 5
+// 3
+// ""
+ +

JSON.parse() n'accepte pas les virgules en fin de tableau

+ +
// les deux instructions qui suivent lèveront une SyntaxError
+JSON.parse('[1, 2, 3, 4, ]');
+JSON.parse('{ "toto" : 1, }');
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.12.2', 'JSON.parse')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implementée avec JavaScript 1.7.
{{SpecName('ES6', '#sec-json.parse', 'JSON.parse')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-json.parse', 'JSON.parse')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.JSON.parse")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/json/stringify/index.html b/files/fr/web/javascript/reference/global_objects/json/stringify/index.html deleted file mode 100644 index be5bb15eac..0000000000 --- a/files/fr/web/javascript/reference/global_objects/json/stringify/index.html +++ /dev/null @@ -1,367 +0,0 @@ ---- -title: JSON.stringify() -slug: Web/JavaScript/Reference/Global_Objects/JSON/stringify -tags: - - JSON - - JavaScript - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/JSON/stringify -original_slug: Web/JavaScript/Reference/Objets_globaux/JSON/stringify ---- -
{{JSRef}}
- -

La méthode JSON.stringify() convertit une valeur JavaScript en chaîne JSON. Optionnellement, elle peut remplacer des valeurs ou spécifier les propriétés à inclure si un tableau de propriétés a été fourni.

- -
{{EmbedInteractiveExample("pages/js/json-stringify.html")}}
- -

Syntaxe

- -
JSON.stringify( valeur[, remplaçant [, espace]])
- -

Paramètres

- -
-
valeur
-
La valeur à convertir en chaîne JSON.
-
remplaçant {{optional_inline}}
-
-

Une fonction qui modifie le processus de transformation ou un tableau de chaînes de caractères et de nombres qui sont utilisés comme liste blanche pour sélectionner/filtrer les propriétés de l'objet à inclure dans la chaîne JSON. Si cette valeur est {{jsxref("null")}} ou n'est pas fournie, toutes les propriétés de l'objet seront inclues dans la chaîne résultante.

-
-
espace {{optional_inline}}
-
Un objet {{jsxref("String")}} ou {{jsxref("Number")}} qui est utilisé pour insérer des blancs dans la chaîne JSON produite afin de faciliter la lisibilité.
-
- - - -

Valeur de retour

- -

Une chaîne de caractères JSON qui représente la valeur indiquée.

- -

Exceptions

- - - -

Description

- -

La fonction JSON.stringify() convertit un objet en JSON :

- - - -
JSON.stringify({});                        // '{}'
-JSON.stringify(true);                      // 'true'
-JSON.stringify("toto");                    // '"toto"'
-JSON.stringify([1, "false", false]);       // '[1,"false",false]'
-JSON.stringify([NaN, null, Infinity]);   // '[null,null,null]'
-JSON.stringify({ x: 5 });                  // '{"x":5}'
-
-JSON.stringify(new Date(2006, 0, 2, 15, 4, 5));
-// '"2006-01-02T23:04:05.000Z"'
-
-// Exemples
-JSON.stringify({x: 5, y: 6});
-// '{"x":5,"y":6}'
-JSON.stringify([new Number(3), new String("false"), new Boolean(false)]);
-// '[3,"false",false]'
-
-// Les tableaux avec des propriétés ne sont pas énumérables
-// et n'ont pas de sens selon JSON
-let a = ["toto", "truc"];
-a["bidule"] = "youpi"; // a:[ 0: "toto", 1: "truc", bidule: "youpi"]
-JSON.stringify(a);
-// '["toto","truc"]'
-
-// Symboles
-JSON.stringify({x: undefined, y: Object, z: Symbol("")});
-// '{}'
-JSON.stringify({[Symbol("toto")]: "toto"});
-// '{}'
-JSON.stringify({[Symbol.for("toto")]: "toto"}, [Symbol.for("toto")]);
-// '{}'
-JSON.stringify({[Symbol.for("toto")]: "toto"}, function (k, v) {
-  if (typeof k === "symbol"){
-    return "a symbol";
-  }
-});
-// '{}'
-JSON.stringify({ x: [10, undefined, function(){}, Symbol('')] });
-// '{"x":[10,null,null,null]}'
-
-// Structures de données classiques
-JSON.stringify([new Set([1]), new Map([[1, 2]]), new WeakSet([{a: 1}]), new WeakMap([[{a: 1}, 2]])]);
-// '[{},{},{},{}]'
-
-// TypedArray
-JSON.stringify([new Int8Array([1]), new Int16Array([1]), new Int32Array([1])]);
-// '[{"0":1},{"0":1},{"0":1}]'
-JSON.stringify([new Uint8Array([1]), new Uint8ClampedArray([1]), new Uint16Array([1]), new Uint32Array([1])]);
-// '[{"0":1},{"0":1},{"0":1},{"0":1}]'
-JSON.stringify([new Float32Array([1]), new Float64Array([1])]);
-// '[{"0":1},{"0":1}]'
-
-// toJSON()
-JSON.stringify({ x: 5, y: 6, toJSON(){ return this.x + this.y; } });
-// '11'
-
-// Symbols:
-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 'a symbol';
-  }
-});
-// undefined
-
-// Propriétés non énumérables
-JSON.stringify(Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );
-// '{"y":"y"}'
-
-// Échec avec BigInt
-JSON.stringify({x: 2n});
-// TypeError: BigInt value can't be serialized in JSON
-
- -

L'argument remplaçant

- -

L'argument remplaçant est une fonction ou un tableau. Si c'est une fonction, elle prend deux paramètres : une clé et la valeur qui est traitée pour être convertie en chaîne. L'objet dans lequel la clé a été trouvée sera fourni comme paramètre this pour la fonction. Cette fonction est d'abord appelée avec une chaîne vide comme clé représentant l'objet à transformer puis elle est appelée sur chaque propriété de l'objet ou du tableau à transformer en chaîne. Cette fonction renvoie la valeur à ajouter à la chaîne JSON :

- - - -

Note : la fonction remplaçant ne peut pas être utilisée pour retirer des valeurs d'un tableau. Si on renvoie undefined ou une fonction, ce sera la valeur null qui sera utilisée.

- -

Note : Si on souhaite que la fonction remplaçant distingue un objet dont une propriété a un clé qui est « réellement » une chaîne vide, il faudra avoir un compteur pour le nombre d'itération. Si le compteur indique que la première itération est passée, alors il s'agit bien d'un clé avec une chaîne vide.

- -

Exemple avec une fonction

- -
function remplaçant(clé, valeur) {
-  if (typeof valeur === "string") {
-    return undefined;
-  }
-  return valeur;
-}
-
-var toto = {fondation: "Mozilla", modèle: "boîte", semaine: 45, transport: "bus", mois: 7};
-console.log(JSON.stringify(toto, remplaçant)); // {"semaine":45, "mois":7}
-
- -

Exemple avec un tableau

- -

Si remplaçant est un tableau, les valeurs du tableau indiquent les propriétés de l'objet à inclure dans la chaîne JSON.

- -
JSON.stringify(toto, ['semaine', 'mois']);
-// '{"semaine":45,"mois":7}', on ne garde que "semaines" et "mois"
-
- -

L'argument espace

- -

L'argument espace est utilisé pour contrôler les espacements utilisés dans la chaîne finale.

- - - -
JSON.stringify({ a: 2 }, null, ' ');
-// '{
-//  "a": 2
-// }'
-
- -

Dans l'exemple suivant on utilise la tabulation pour rendre lisible le résultat :

- -
JSON.stringify({ uno: 1, dos: 2 }, null, '\t');
-// renverra
-// '{
-//     "uno": 1,
-//     "dos": 2
-// }'
-
- -

La fonction toJSON()

- -

Pour personnaliser la valeur d'un objet lors de sa conversion en JSON, on peut surcharger la méthode toJSON() : la valeur retournée par cette méthode toJSON() sera alors utilisée. JSON.stringify() invoquera la méthode toJSON() de l'objet avec un paramètre :

- - - -

Ainsi :

- -
var obj = {
-  data: 'data',
-  toJSON(clef){
-    if(clef) {
-      return `Un objet imbriqué sous la clef '${clef}'`;
-    } else {
-      return this;
-    }
-  }
-};
-
-JSON.stringify(obj);
-// '{"data":"data"}'
-
-JSON.stringify({ obj })
-// '{"obj":"Un objet imbriqué sous la clef 'obj'"}'
-
-JSON.stringify([ obj ])
-// '["Un objet imbriqué sous la clef '0'"]'
-
- -

Le problème des références circulaires

- -

Le format JSON ne prend pas en charge les références (bien qu'un brouillon IETF existe) et une exception {{jsxref("TypeError")}} sera levée si on tente d'encoder un objet possédant des références circulaires.

- -
const circularReference = {};
-circularReference.myself = circularReference;
-
-// Sérialiser un objet avec des références circulaires déclenche une "TypeError: cyclic object value"
-JSON.stringify(circularReference);
-
- -

Pour sérialiser les références circulaires, on peut utiliser une bibliothèque (cycle.js par exemple) ou implémenter sa propre solution (qui consistera à trouver et à remplacer le cycle par des valeurs sérialisables).

- -

Gestion des terminateurs de ligne

- -

Par le passé, JSON n'était pas un sous-ensemble strict de JavaScript. En effet, en JSON, deux terminateurs de ligne (le caractère de séparation de ligne U+2028 LINE SEPARATOR et le caractère de séparation de paragraphe U+2029 PARAGRAPH SEPARATOR) n'avaient pas besoin d'être échappés dans des données JSON alors qu'ils devaient l'être en JavaScript. Cela a désormais évolué et les deux points de code peuvent apparaître tant en JSON qu'en JavaScript.

- -

Ainsi, si on souhaite avoir une compatibilité avec les anciens moteurs JavaScript, on pourra évaluer ou utiliser les données JSON avec JSONP et la fonction utilitaire suivante :

- -
function jsFriendlyJSONStringify (s) {
-    return JSON.stringify(s).
-        replace(/\u2028/g, '\\u2028').
-        replace(/\u2029/g, '\\u2029');
-}
-
-var s = {
-    a: String.fromCharCode(0x2028),
-    b: String.fromCharCode(0x2029)
-};
-
-// dans Firefox, console.log enlève les échappements
-// des caractères Unicode, on utilise donc alert :(
-alert(jsFriendlyJSONStringify(s)); // {"a":"\u2028","b":"\u2029"}
- -
-

Note : Les propriétés des objets qui ne sont pas des tableaux ne sont pas transformées en chaînes de caractères selon un ordre particulier. Aussi, l'ordre des données en JSON ne saurait constituer une information utile.

-
- -
var a = JSON.stringify({toto: "truc", bidule: "machin"});
-// '{"toto":"truc","bidule":"machin"}'
-var b = JSON.stringify({bidule: "machin", toto: "truc"});
-// '{"bidule":"machin","toto":"truc"}'
-console.log(a !== b); // true
-
- -

Utiliser JSON.stringify avec localStorage

- -

Dans le cas où on souhaite enregistrer un objet créé par l'utilisateur afin de le restorer plus tard (y compris après que le navigateur ait été fermé), on peut utiliser JSON.stringify.

- -
-

Attention : Les fonctions n'ont pas de correspondances en JSON, il ne sera donc pas possible de les enregistrer de cette façon. En revanche, elles peuvent être affichées si elles ont été converties en texte avec la fonction de remplacement. De même, certains objets comme les dates seront transformées en chaîne de caractères après l'utilisation de JSON.parse().

-
- -
// On crée un objet pour l'exemple
-var session = {
-    'screens' : [],
-    'state' : true
-};
-session.screens.push({"name":"screenA", "width":450, "height":250});
-session.screens.push({"name":"screenB", "width":650, "height":350});
-session.screens.push({"name":"screenC", "width":750, "height":120});
-session.screens.push({"name":"screenD", "width":250, "height":60});
-session.screens.push({"name":"screenE", "width":390, "height":120});
-session.screens.push({"name":"screenF", "width":1240, "height":650});
-
-// On convertit l'objet en une chaîne JSON
-// et on enregistre cette valeur avec le nom 'session'
-localStorage.setItem('session', JSON.stringify(session));
-
-// Ici, on reconvertit la chaîne en un objet
-// JSON.stringify and saved in localStorage in JSON object again
-var sessionRestaurée = JSON.parse(localStorage.getItem('session'));
-
-// La variable sessionRestaurée contient désormais l'objet précédent
-// qui avait été sauvegardé dans localStorage
-console.log(sessionRestaurée);
-
- -

Chaînes bien formées et JSON.stringify()

- -

Les moteurs, qui implémentent la spécification sur JSON.stringify() bien formé, transformeront en chaîne de caractères les éléments isolés de paires surrogates via des séquences d'échappement Unicode plutôt que d'utiliser leurs valeurs littérales. Avant cette modification de spécification, JSON.stringify() n'aurait pas encodé les éléments surrogates isolés et les chaînes produites n'étaient pas valides selon UTF-8 ou UTF-16 :

- -
JSON.stringify("\uD800"); // '"�"'
- -

Avec cette modification, les séquences d'échappement produites permettent d'avoir un contenu UTF-16 ou UTF-8 lisible :

- -
JSON.stringify("\uD800"); // '"\\ud800"'
- -

Cette modification est rétrocompatible pour toutes les opérations où le résultat de JSON.stringify() est passé à des API comme JSON.parse() qui acceptent du texte JSON valide. En effet, ces API traiteront les séquences d'échappement de surrogates isolés comme les caractères correspondants. Seul le cas où le code interprète directement le résultat de JSON.stringify() doit être adapté afin de gérer les deux encodages possibles pour ces cas.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.12.3', 'JSON.stringify')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.7.
{{SpecName('ES6', '#sec-json.stringify', 'JSON.stringify')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-json.stringify', 'JSON.stringify')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.JSON.stringify")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/json/stringify/index.md b/files/fr/web/javascript/reference/global_objects/json/stringify/index.md new file mode 100644 index 0000000000..be5bb15eac --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/json/stringify/index.md @@ -0,0 +1,367 @@ +--- +title: JSON.stringify() +slug: Web/JavaScript/Reference/Global_Objects/JSON/stringify +tags: + - JSON + - JavaScript + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/JSON/stringify +original_slug: Web/JavaScript/Reference/Objets_globaux/JSON/stringify +--- +
{{JSRef}}
+ +

La méthode JSON.stringify() convertit une valeur JavaScript en chaîne JSON. Optionnellement, elle peut remplacer des valeurs ou spécifier les propriétés à inclure si un tableau de propriétés a été fourni.

+ +
{{EmbedInteractiveExample("pages/js/json-stringify.html")}}
+ +

Syntaxe

+ +
JSON.stringify( valeur[, remplaçant [, espace]])
+ +

Paramètres

+ +
+
valeur
+
La valeur à convertir en chaîne JSON.
+
remplaçant {{optional_inline}}
+
+

Une fonction qui modifie le processus de transformation ou un tableau de chaînes de caractères et de nombres qui sont utilisés comme liste blanche pour sélectionner/filtrer les propriétés de l'objet à inclure dans la chaîne JSON. Si cette valeur est {{jsxref("null")}} ou n'est pas fournie, toutes les propriétés de l'objet seront inclues dans la chaîne résultante.

+
+
espace {{optional_inline}}
+
Un objet {{jsxref("String")}} ou {{jsxref("Number")}} qui est utilisé pour insérer des blancs dans la chaîne JSON produite afin de faciliter la lisibilité.
+
+ + + +

Valeur de retour

+ +

Une chaîne de caractères JSON qui représente la valeur indiquée.

+ +

Exceptions

+ + + +

Description

+ +

La fonction JSON.stringify() convertit un objet en JSON :

+ + + +
JSON.stringify({});                        // '{}'
+JSON.stringify(true);                      // 'true'
+JSON.stringify("toto");                    // '"toto"'
+JSON.stringify([1, "false", false]);       // '[1,"false",false]'
+JSON.stringify([NaN, null, Infinity]);   // '[null,null,null]'
+JSON.stringify({ x: 5 });                  // '{"x":5}'
+
+JSON.stringify(new Date(2006, 0, 2, 15, 4, 5));
+// '"2006-01-02T23:04:05.000Z"'
+
+// Exemples
+JSON.stringify({x: 5, y: 6});
+// '{"x":5,"y":6}'
+JSON.stringify([new Number(3), new String("false"), new Boolean(false)]);
+// '[3,"false",false]'
+
+// Les tableaux avec des propriétés ne sont pas énumérables
+// et n'ont pas de sens selon JSON
+let a = ["toto", "truc"];
+a["bidule"] = "youpi"; // a:[ 0: "toto", 1: "truc", bidule: "youpi"]
+JSON.stringify(a);
+// '["toto","truc"]'
+
+// Symboles
+JSON.stringify({x: undefined, y: Object, z: Symbol("")});
+// '{}'
+JSON.stringify({[Symbol("toto")]: "toto"});
+// '{}'
+JSON.stringify({[Symbol.for("toto")]: "toto"}, [Symbol.for("toto")]);
+// '{}'
+JSON.stringify({[Symbol.for("toto")]: "toto"}, function (k, v) {
+  if (typeof k === "symbol"){
+    return "a symbol";
+  }
+});
+// '{}'
+JSON.stringify({ x: [10, undefined, function(){}, Symbol('')] });
+// '{"x":[10,null,null,null]}'
+
+// Structures de données classiques
+JSON.stringify([new Set([1]), new Map([[1, 2]]), new WeakSet([{a: 1}]), new WeakMap([[{a: 1}, 2]])]);
+// '[{},{},{},{}]'
+
+// TypedArray
+JSON.stringify([new Int8Array([1]), new Int16Array([1]), new Int32Array([1])]);
+// '[{"0":1},{"0":1},{"0":1}]'
+JSON.stringify([new Uint8Array([1]), new Uint8ClampedArray([1]), new Uint16Array([1]), new Uint32Array([1])]);
+// '[{"0":1},{"0":1},{"0":1},{"0":1}]'
+JSON.stringify([new Float32Array([1]), new Float64Array([1])]);
+// '[{"0":1},{"0":1}]'
+
+// toJSON()
+JSON.stringify({ x: 5, y: 6, toJSON(){ return this.x + this.y; } });
+// '11'
+
+// Symbols:
+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 'a symbol';
+  }
+});
+// undefined
+
+// Propriétés non énumérables
+JSON.stringify(Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );
+// '{"y":"y"}'
+
+// Échec avec BigInt
+JSON.stringify({x: 2n});
+// TypeError: BigInt value can't be serialized in JSON
+
+ +

L'argument remplaçant

+ +

L'argument remplaçant est une fonction ou un tableau. Si c'est une fonction, elle prend deux paramètres : une clé et la valeur qui est traitée pour être convertie en chaîne. L'objet dans lequel la clé a été trouvée sera fourni comme paramètre this pour la fonction. Cette fonction est d'abord appelée avec une chaîne vide comme clé représentant l'objet à transformer puis elle est appelée sur chaque propriété de l'objet ou du tableau à transformer en chaîne. Cette fonction renvoie la valeur à ajouter à la chaîne JSON :

+ + + +

Note : la fonction remplaçant ne peut pas être utilisée pour retirer des valeurs d'un tableau. Si on renvoie undefined ou une fonction, ce sera la valeur null qui sera utilisée.

+ +

Note : Si on souhaite que la fonction remplaçant distingue un objet dont une propriété a un clé qui est « réellement » une chaîne vide, il faudra avoir un compteur pour le nombre d'itération. Si le compteur indique que la première itération est passée, alors il s'agit bien d'un clé avec une chaîne vide.

+ +

Exemple avec une fonction

+ +
function remplaçant(clé, valeur) {
+  if (typeof valeur === "string") {
+    return undefined;
+  }
+  return valeur;
+}
+
+var toto = {fondation: "Mozilla", modèle: "boîte", semaine: 45, transport: "bus", mois: 7};
+console.log(JSON.stringify(toto, remplaçant)); // {"semaine":45, "mois":7}
+
+ +

Exemple avec un tableau

+ +

Si remplaçant est un tableau, les valeurs du tableau indiquent les propriétés de l'objet à inclure dans la chaîne JSON.

+ +
JSON.stringify(toto, ['semaine', 'mois']);
+// '{"semaine":45,"mois":7}', on ne garde que "semaines" et "mois"
+
+ +

L'argument espace

+ +

L'argument espace est utilisé pour contrôler les espacements utilisés dans la chaîne finale.

+ + + +
JSON.stringify({ a: 2 }, null, ' ');
+// '{
+//  "a": 2
+// }'
+
+ +

Dans l'exemple suivant on utilise la tabulation pour rendre lisible le résultat :

+ +
JSON.stringify({ uno: 1, dos: 2 }, null, '\t');
+// renverra
+// '{
+//     "uno": 1,
+//     "dos": 2
+// }'
+
+ +

La fonction toJSON()

+ +

Pour personnaliser la valeur d'un objet lors de sa conversion en JSON, on peut surcharger la méthode toJSON() : la valeur retournée par cette méthode toJSON() sera alors utilisée. JSON.stringify() invoquera la méthode toJSON() de l'objet avec un paramètre :

+ + + +

Ainsi :

+ +
var obj = {
+  data: 'data',
+  toJSON(clef){
+    if(clef) {
+      return `Un objet imbriqué sous la clef '${clef}'`;
+    } else {
+      return this;
+    }
+  }
+};
+
+JSON.stringify(obj);
+// '{"data":"data"}'
+
+JSON.stringify({ obj })
+// '{"obj":"Un objet imbriqué sous la clef 'obj'"}'
+
+JSON.stringify([ obj ])
+// '["Un objet imbriqué sous la clef '0'"]'
+
+ +

Le problème des références circulaires

+ +

Le format JSON ne prend pas en charge les références (bien qu'un brouillon IETF existe) et une exception {{jsxref("TypeError")}} sera levée si on tente d'encoder un objet possédant des références circulaires.

+ +
const circularReference = {};
+circularReference.myself = circularReference;
+
+// Sérialiser un objet avec des références circulaires déclenche une "TypeError: cyclic object value"
+JSON.stringify(circularReference);
+
+ +

Pour sérialiser les références circulaires, on peut utiliser une bibliothèque (cycle.js par exemple) ou implémenter sa propre solution (qui consistera à trouver et à remplacer le cycle par des valeurs sérialisables).

+ +

Gestion des terminateurs de ligne

+ +

Par le passé, JSON n'était pas un sous-ensemble strict de JavaScript. En effet, en JSON, deux terminateurs de ligne (le caractère de séparation de ligne U+2028 LINE SEPARATOR et le caractère de séparation de paragraphe U+2029 PARAGRAPH SEPARATOR) n'avaient pas besoin d'être échappés dans des données JSON alors qu'ils devaient l'être en JavaScript. Cela a désormais évolué et les deux points de code peuvent apparaître tant en JSON qu'en JavaScript.

+ +

Ainsi, si on souhaite avoir une compatibilité avec les anciens moteurs JavaScript, on pourra évaluer ou utiliser les données JSON avec JSONP et la fonction utilitaire suivante :

+ +
function jsFriendlyJSONStringify (s) {
+    return JSON.stringify(s).
+        replace(/\u2028/g, '\\u2028').
+        replace(/\u2029/g, '\\u2029');
+}
+
+var s = {
+    a: String.fromCharCode(0x2028),
+    b: String.fromCharCode(0x2029)
+};
+
+// dans Firefox, console.log enlève les échappements
+// des caractères Unicode, on utilise donc alert :(
+alert(jsFriendlyJSONStringify(s)); // {"a":"\u2028","b":"\u2029"}
+ +
+

Note : Les propriétés des objets qui ne sont pas des tableaux ne sont pas transformées en chaînes de caractères selon un ordre particulier. Aussi, l'ordre des données en JSON ne saurait constituer une information utile.

+
+ +
var a = JSON.stringify({toto: "truc", bidule: "machin"});
+// '{"toto":"truc","bidule":"machin"}'
+var b = JSON.stringify({bidule: "machin", toto: "truc"});
+// '{"bidule":"machin","toto":"truc"}'
+console.log(a !== b); // true
+
+ +

Utiliser JSON.stringify avec localStorage

+ +

Dans le cas où on souhaite enregistrer un objet créé par l'utilisateur afin de le restorer plus tard (y compris après que le navigateur ait été fermé), on peut utiliser JSON.stringify.

+ +
+

Attention : Les fonctions n'ont pas de correspondances en JSON, il ne sera donc pas possible de les enregistrer de cette façon. En revanche, elles peuvent être affichées si elles ont été converties en texte avec la fonction de remplacement. De même, certains objets comme les dates seront transformées en chaîne de caractères après l'utilisation de JSON.parse().

+
+ +
// On crée un objet pour l'exemple
+var session = {
+    'screens' : [],
+    'state' : true
+};
+session.screens.push({"name":"screenA", "width":450, "height":250});
+session.screens.push({"name":"screenB", "width":650, "height":350});
+session.screens.push({"name":"screenC", "width":750, "height":120});
+session.screens.push({"name":"screenD", "width":250, "height":60});
+session.screens.push({"name":"screenE", "width":390, "height":120});
+session.screens.push({"name":"screenF", "width":1240, "height":650});
+
+// On convertit l'objet en une chaîne JSON
+// et on enregistre cette valeur avec le nom 'session'
+localStorage.setItem('session', JSON.stringify(session));
+
+// Ici, on reconvertit la chaîne en un objet
+// JSON.stringify and saved in localStorage in JSON object again
+var sessionRestaurée = JSON.parse(localStorage.getItem('session'));
+
+// La variable sessionRestaurée contient désormais l'objet précédent
+// qui avait été sauvegardé dans localStorage
+console.log(sessionRestaurée);
+
+ +

Chaînes bien formées et JSON.stringify()

+ +

Les moteurs, qui implémentent la spécification sur JSON.stringify() bien formé, transformeront en chaîne de caractères les éléments isolés de paires surrogates via des séquences d'échappement Unicode plutôt que d'utiliser leurs valeurs littérales. Avant cette modification de spécification, JSON.stringify() n'aurait pas encodé les éléments surrogates isolés et les chaînes produites n'étaient pas valides selon UTF-8 ou UTF-16 :

+ +
JSON.stringify("\uD800"); // '"�"'
+ +

Avec cette modification, les séquences d'échappement produites permettent d'avoir un contenu UTF-16 ou UTF-8 lisible :

+ +
JSON.stringify("\uD800"); // '"\\ud800"'
+ +

Cette modification est rétrocompatible pour toutes les opérations où le résultat de JSON.stringify() est passé à des API comme JSON.parse() qui acceptent du texte JSON valide. En effet, ces API traiteront les séquences d'échappement de surrogates isolés comme les caractères correspondants. Seul le cas où le code interprète directement le résultat de JSON.stringify() doit être adapté afin de gérer les deux encodages possibles pour ces cas.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.12.3', 'JSON.stringify')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.7.
{{SpecName('ES6', '#sec-json.stringify', 'JSON.stringify')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-json.stringify', 'JSON.stringify')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.JSON.stringify")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/@@iterator/index.html b/files/fr/web/javascript/reference/global_objects/map/@@iterator/index.html deleted file mode 100644 index 72bc8d1d13..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/@@iterator/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Map.prototype[@@iterator]() -slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@iterator -original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator ---- -
{{JSRef}}
- -

La valeur initiale de la propriété @@iterator est la même fonction que la valeur initiale de la propriété {{jsxref("Map.prototype.entries()", "entries")}}.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-@@iterator.html")}}
- -

Syntaxe

- -
maMap[Symbol.iterator]
- -

Valeur de retour

- -

La fonction d'itération (le symbole @@iterator) de l'objet, par défaut, c'est la fonction {{jsxref("Map.prototype.entries()","entries()")}}.

- -

Exemples

- -

Utiliser [@@iterator]()

- -
var maMap = new Map();
-maMap.set("0", "toto");
-maMap.set(1, "truc");
-maMap.set({}, "bidule");
-
-var mapIter = myMap[Symbol.iterator]();
-
-console.log(mapIter.next().value); // ["0", "toto"]
-console.log(mapIter.next().value); // [1, "truc"]
-console.log(mapIter.next().value); // [Object, "bidule"]
-
- -

Utiliser [@@iterator]() avec for..of

- -
var maMap = new Map();
-maMap.set("0", "toto");
-maMap.set(1, "truc");
-maMap.set({}, "bidule");
-
-for (var v of maMap) {
-  console.log(v);
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype-@@iterator', 'Map.prototype[@@iterator]()')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-map.prototype-@@iterator', 'Map.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.@@iterator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/@@iterator/index.md b/files/fr/web/javascript/reference/global_objects/map/@@iterator/index.md new file mode 100644 index 0000000000..72bc8d1d13 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/@@iterator/index.md @@ -0,0 +1,89 @@ +--- +title: Map.prototype[@@iterator]() +slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +--- +
{{JSRef}}
+ +

La valeur initiale de la propriété @@iterator est la même fonction que la valeur initiale de la propriété {{jsxref("Map.prototype.entries()", "entries")}}.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-@@iterator.html")}}
+ +

Syntaxe

+ +
maMap[Symbol.iterator]
+ +

Valeur de retour

+ +

La fonction d'itération (le symbole @@iterator) de l'objet, par défaut, c'est la fonction {{jsxref("Map.prototype.entries()","entries()")}}.

+ +

Exemples

+ +

Utiliser [@@iterator]()

+ +
var maMap = new Map();
+maMap.set("0", "toto");
+maMap.set(1, "truc");
+maMap.set({}, "bidule");
+
+var mapIter = myMap[Symbol.iterator]();
+
+console.log(mapIter.next().value); // ["0", "toto"]
+console.log(mapIter.next().value); // [1, "truc"]
+console.log(mapIter.next().value); // [Object, "bidule"]
+
+ +

Utiliser [@@iterator]() avec for..of

+ +
var maMap = new Map();
+maMap.set("0", "toto");
+maMap.set(1, "truc");
+maMap.set({}, "bidule");
+
+for (var v of maMap) {
+  console.log(v);
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype-@@iterator', 'Map.prototype[@@iterator]()')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-map.prototype-@@iterator', 'Map.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.@@iterator")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/@@species/index.html b/files/fr/web/javascript/reference/global_objects/map/@@species/index.html deleted file mode 100644 index dddc3795f8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/@@species/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: get Map[@@species] -slug: Web/JavaScript/Reference/Global_Objects/Map/@@species -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@species -original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@species ---- -
{{JSRef}}
- -

Map[@@species] renvoie le constructeur Map.

- -

Syntaxe

- -
Map[Symbol.species]
-
- -

Description

- -

L'accesseur species renvoie le constructeur par défaut pour les objets Map. Les constructeurs des sous-classes peuvent surcharger ce constructeur afin de modifier ce qui est fait lors de la construction de l'objet et son affectation

- -

Exemples

- -

La propriété species renvoie la fonction correspondant au constructeur par défaut. Pour les objets Map, ce sera le constructeur Map :

- -
Map[Symbol.species]; // function Map()
- -

Pour des objets dérivés (par exemple un dictionnaire MaMap que vous auriez construit), la propriété species correspondra au constructeur MaMap. Si vous souhaitez surcharger cela pour renvoyer le constructeur parent Map, vous pourrez utiliser :

- -
class MaMap extends Map {
-  // On surcharge le symbole species de MaMap
-  // avec le constructeur Map parent
-  static get [Symbol.species]() { return Map; }
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES2015', '#sec-get-map-@@species', 'get Map [ @@species ]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-map-@@species', 'get Map [ @@species ]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.@@species")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/@@species/index.md b/files/fr/web/javascript/reference/global_objects/map/@@species/index.md new file mode 100644 index 0000000000..dddc3795f8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/@@species/index.md @@ -0,0 +1,71 @@ +--- +title: get Map[@@species] +slug: Web/JavaScript/Reference/Global_Objects/Map/@@species +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@species +original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@species +--- +
{{JSRef}}
+ +

Map[@@species] renvoie le constructeur Map.

+ +

Syntaxe

+ +
Map[Symbol.species]
+
+ +

Description

+ +

L'accesseur species renvoie le constructeur par défaut pour les objets Map. Les constructeurs des sous-classes peuvent surcharger ce constructeur afin de modifier ce qui est fait lors de la construction de l'objet et son affectation

+ +

Exemples

+ +

La propriété species renvoie la fonction correspondant au constructeur par défaut. Pour les objets Map, ce sera le constructeur Map :

+ +
Map[Symbol.species]; // function Map()
+ +

Pour des objets dérivés (par exemple un dictionnaire MaMap que vous auriez construit), la propriété species correspondra au constructeur MaMap. Si vous souhaitez surcharger cela pour renvoyer le constructeur parent Map, vous pourrez utiliser :

+ +
class MaMap extends Map {
+  // On surcharge le symbole species de MaMap
+  // avec le constructeur Map parent
+  static get [Symbol.species]() { return Map; }
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES2015', '#sec-get-map-@@species', 'get Map [ @@species ]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-map-@@species', 'get Map [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.@@species")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.html b/files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.html deleted file mode 100644 index 251a4c46eb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Map.prototype[@@toStringTag]() -slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag -original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag ---- -
{{JSRef}}
- -

La propriété Map[@@toStringTag] vaut "Map" initialement.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-@@tostringtag.html")}}
- -
{{js_property_attributes(0,0,1)}}
- -

Syntaxe

- -
Map[Symbol.toStringTag]
- -

Exemple

- -
Object.prototype.toString.call(new Map()) // "[object Map]"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype-@@tostringtag', 'Map.prototype[@@toStringTag]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype-@@tostringtag', 'Map.prototype[@@toStringTag]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.@@toStringTag")}}

diff --git a/files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.md b/files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.md new file mode 100644 index 0000000000..251a4c46eb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/@@tostringtag/index.md @@ -0,0 +1,54 @@ +--- +title: Map.prototype[@@toStringTag]() +slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +--- +
{{JSRef}}
+ +

La propriété Map[@@toStringTag] vaut "Map" initialement.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-@@tostringtag.html")}}
+ +
{{js_property_attributes(0,0,1)}}
+ +

Syntaxe

+ +
Map[Symbol.toStringTag]
+ +

Exemple

+ +
Object.prototype.toString.call(new Map()) // "[object Map]"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype-@@tostringtag', 'Map.prototype[@@toStringTag]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype-@@tostringtag', 'Map.prototype[@@toStringTag]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.@@toStringTag")}}

diff --git a/files/fr/web/javascript/reference/global_objects/map/clear/index.html b/files/fr/web/javascript/reference/global_objects/map/clear/index.html deleted file mode 100644 index 5c0dbc8661..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/clear/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Map.prototype.clear() -slug: Web/JavaScript/Reference/Global_Objects/Map/clear -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/clear -original_slug: Web/JavaScript/Reference/Global_Objects/Map/clear ---- -
{{JSRef}}
- -

La méthode clear() supprime tous les éléments d'un objet Map.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-clear.html")}}
- -

Syntaxe

- -
maMap.clear();
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Exemple

- -

Utiliser la méthode clear()

- -
var maMap = new Map();
-maMap.set("truc", "bidule");
-maMap.set(1, "toto");
-
-maMap.size;        // 2
-maMap.has("truc"); // true
-
-maMap.clear();
-
-maMap.size;        // 0
-maMap.has("truc")  // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.clear', 'Map.prototype.clear')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.clear', 'Map.prototype.clear')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.clear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/clear/index.md b/files/fr/web/javascript/reference/global_objects/map/clear/index.md new file mode 100644 index 0000000000..5c0dbc8661 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/clear/index.md @@ -0,0 +1,75 @@ +--- +title: Map.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/Map/clear +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/clear +original_slug: Web/JavaScript/Reference/Global_Objects/Map/clear +--- +
{{JSRef}}
+ +

La méthode clear() supprime tous les éléments d'un objet Map.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-clear.html")}}
+ +

Syntaxe

+ +
maMap.clear();
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Exemple

+ +

Utiliser la méthode clear()

+ +
var maMap = new Map();
+maMap.set("truc", "bidule");
+maMap.set(1, "toto");
+
+maMap.size;        // 2
+maMap.has("truc"); // true
+
+maMap.clear();
+
+maMap.size;        // 0
+maMap.has("truc")  // false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.clear', 'Map.prototype.clear')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.clear', 'Map.prototype.clear')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.clear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/delete/index.html b/files/fr/web/javascript/reference/global_objects/map/delete/index.html deleted file mode 100644 index 3705d6bacc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/delete/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Map.prototype.delete() -slug: Web/JavaScript/Reference/Global_Objects/Map/delete -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/delete -original_slug: Web/JavaScript/Reference/Global_Objects/Map/delete ---- -
{{JSRef}}
- -

La méthode delete() permet de retirer un élément donné d'un objet Map grâce à sa clé.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-delete.html")}}
- -

Syntaxe

- -
maMap.delete(clé);
- -

Paramètres

- -
-
clé
-
Ce paramètre obligatoire correspond à la clé de l'élément qu'on souhaite retirer de l'objet Map.
-
- -

Valeur de retour

- -

Un booléen. La méthode renvoie true si un élément de l'objet Map a bien été retiré ou false si l'élément n'existe pas.

- -

Exemples

- -
var maMap = new Map();
-maMap.set("truc", "toto");
-
-maMap.delete("truc"); // Renvoie true. La suppression est OK.
-maMap.has("truc");    // Renvoie false. "truc" n'est plus présent.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.delete', 'Map.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.delete', 'Map.prototype.delete')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.delete")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/delete/index.md b/files/fr/web/javascript/reference/global_objects/map/delete/index.md new file mode 100644 index 0000000000..3705d6bacc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/delete/index.md @@ -0,0 +1,74 @@ +--- +title: Map.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/Map/delete +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/delete +original_slug: Web/JavaScript/Reference/Global_Objects/Map/delete +--- +
{{JSRef}}
+ +

La méthode delete() permet de retirer un élément donné d'un objet Map grâce à sa clé.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-delete.html")}}
+ +

Syntaxe

+ +
maMap.delete(clé);
+ +

Paramètres

+ +
+
clé
+
Ce paramètre obligatoire correspond à la clé de l'élément qu'on souhaite retirer de l'objet Map.
+
+ +

Valeur de retour

+ +

Un booléen. La méthode renvoie true si un élément de l'objet Map a bien été retiré ou false si l'élément n'existe pas.

+ +

Exemples

+ +
var maMap = new Map();
+maMap.set("truc", "toto");
+
+maMap.delete("truc"); // Renvoie true. La suppression est OK.
+maMap.has("truc");    // Renvoie false. "truc" n'est plus présent.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.delete', 'Map.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.delete', 'Map.prototype.delete')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.delete")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/entries/index.html b/files/fr/web/javascript/reference/global_objects/map/entries/index.html deleted file mode 100644 index 3deaed0bd3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/entries/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Map.prototype.entries() -slug: Web/JavaScript/Reference/Global_Objects/Map/entries -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/entries -original_slug: Web/JavaScript/Reference/Global_Objects/Map/entries ---- -
{{JSRef}}
- -

La méthode entries() renvoie un objet Iterator qui contient les paires [clé, valeur] pour chaque élément de l'objet Map, dans leur ordre d'insertion.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-entries.html")}}
- -

Syntaxe

- -
maMap.entries()
- -

Valeur de retour

- -

Un nouvel objet Iterator {{jsxref("Map")}}.

- -

Exemple

- -

Utiliser entries()

- -
var maMap = new Map();
-maMap.set("0", "toto");
-maMap.set(1, "truc");
-maMap.set({}, "bidule");
-
-var mapIter = maMap.entries();
-
-console.log(mapIter.next().value); // ["0", "toto"]
-console.log(mapIter.next().value); // [1, "truc"]
-console.log(mapIter.next().value); // [Object, "bidule"]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.entries', 'Map.prototype.entries')}}{{Spec2('ES2015')}}Défintion initiale.
{{SpecName('ESDraft', '#sec-map.prototype.entries', 'Map.prototype.entries')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.entries")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/entries/index.md b/files/fr/web/javascript/reference/global_objects/map/entries/index.md new file mode 100644 index 0000000000..3deaed0bd3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/entries/index.md @@ -0,0 +1,78 @@ +--- +title: Map.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Map/entries +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/entries +original_slug: Web/JavaScript/Reference/Global_Objects/Map/entries +--- +
{{JSRef}}
+ +

La méthode entries() renvoie un objet Iterator qui contient les paires [clé, valeur] pour chaque élément de l'objet Map, dans leur ordre d'insertion.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-entries.html")}}
+ +

Syntaxe

+ +
maMap.entries()
+ +

Valeur de retour

+ +

Un nouvel objet Iterator {{jsxref("Map")}}.

+ +

Exemple

+ +

Utiliser entries()

+ +
var maMap = new Map();
+maMap.set("0", "toto");
+maMap.set(1, "truc");
+maMap.set({}, "bidule");
+
+var mapIter = maMap.entries();
+
+console.log(mapIter.next().value); // ["0", "toto"]
+console.log(mapIter.next().value); // [1, "truc"]
+console.log(mapIter.next().value); // [Object, "bidule"]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.entries', 'Map.prototype.entries')}}{{Spec2('ES2015')}}Défintion initiale.
{{SpecName('ESDraft', '#sec-map.prototype.entries', 'Map.prototype.entries')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.entries")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/foreach/index.html b/files/fr/web/javascript/reference/global_objects/map/foreach/index.html deleted file mode 100644 index 4d2fbfdd70..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/foreach/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Map.prototype.forEach() -slug: Web/JavaScript/Reference/Global_Objects/Map/forEach -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach -original_slug: Web/JavaScript/Reference/Global_Objects/Map/forEach ---- -
{{JSRef}}
- -

La méthode forEach() exécute une fonction donnée sur chaque élément clé-valeur de l'objet Map dans l'ordre d'insertion.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-foreach.html")}}
- -

Syntaxe

- -
maMap.forEach(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction à exécuter pour chaque élément.
-
thisArg
-
La valeur à utiliser comme contexte this lors de l'exécution de callback.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}

- -

Description

- -

La méthode forEach exécute la fonction callback donnée sur chacune des clés qui existe. Elle n'est pas appelée pour les clés qui ont été supprimées. En revanche, elle est appelée pour les valeurs qui sont présentes mais qui sont égales à undefined.

- -

callback est appelé avec trois arguments :

- - - -

Si un argument thisArg est fourni à la méthode forEach, il sera passé au callback quand il sera appelé et celui-ci l'utilisera comme valeur this. Dans les autres cas, la valeur undefined sera utilisée comme contexte this. La valeur this observée par la fonction callback est déterminée selon les règles appliquées à l'opérateur this.

- -

Chacune des valeurs sera traitée une fois sauf si celle-ci a été supprimée puis réajoutée avant la fin de forEach. callback n'est pas appelé pour les valeurs qui sont supprimés avant le passage de la fonction. Les valeurs qui sont ajoutées avant que forEach ait parcouru l'ensemble seront traitées.

- -

forEach exécute la fonction callback une fois pour chaque élément de l'objet Map : il ne renvoie pas de valeur.

- -

Exemples

- -

Le fragment de code suivant enregistre une ligne pour chaque élément d'un objet Map :

- -
function logMapElements(valeur, clé, map) {
-    console.log(`map.get('${clé}') = ${value}`);
-}
-
-
-new Map([["toto", 3], ["truc", {}], ["bidule", undefined]]).forEach(logMapElements);
-// affichera dans la console :
-// "map.get('toto') = 3"
-// "map.get('truc') = [object Object]"
-// "map.get('bidule') = undefined"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.forEach")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/foreach/index.md b/files/fr/web/javascript/reference/global_objects/map/foreach/index.md new file mode 100644 index 0000000000..4d2fbfdd70 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/foreach/index.md @@ -0,0 +1,102 @@ +--- +title: Map.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/Map/forEach +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach +original_slug: Web/JavaScript/Reference/Global_Objects/Map/forEach +--- +
{{JSRef}}
+ +

La méthode forEach() exécute une fonction donnée sur chaque élément clé-valeur de l'objet Map dans l'ordre d'insertion.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-foreach.html")}}
+ +

Syntaxe

+ +
maMap.forEach(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction à exécuter pour chaque élément.
+
thisArg
+
La valeur à utiliser comme contexte this lors de l'exécution de callback.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}

+ +

Description

+ +

La méthode forEach exécute la fonction callback donnée sur chacune des clés qui existe. Elle n'est pas appelée pour les clés qui ont été supprimées. En revanche, elle est appelée pour les valeurs qui sont présentes mais qui sont égales à undefined.

+ +

callback est appelé avec trois arguments :

+ + + +

Si un argument thisArg est fourni à la méthode forEach, il sera passé au callback quand il sera appelé et celui-ci l'utilisera comme valeur this. Dans les autres cas, la valeur undefined sera utilisée comme contexte this. La valeur this observée par la fonction callback est déterminée selon les règles appliquées à l'opérateur this.

+ +

Chacune des valeurs sera traitée une fois sauf si celle-ci a été supprimée puis réajoutée avant la fin de forEach. callback n'est pas appelé pour les valeurs qui sont supprimés avant le passage de la fonction. Les valeurs qui sont ajoutées avant que forEach ait parcouru l'ensemble seront traitées.

+ +

forEach exécute la fonction callback une fois pour chaque élément de l'objet Map : il ne renvoie pas de valeur.

+ +

Exemples

+ +

Le fragment de code suivant enregistre une ligne pour chaque élément d'un objet Map :

+ +
function logMapElements(valeur, clé, map) {
+    console.log(`map.get('${clé}') = ${value}`);
+}
+
+
+new Map([["toto", 3], ["truc", {}], ["bidule", undefined]]).forEach(logMapElements);
+// affichera dans la console :
+// "map.get('toto') = 3"
+// "map.get('truc') = [object Object]"
+// "map.get('bidule') = undefined"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.forEach")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/get/index.html b/files/fr/web/javascript/reference/global_objects/map/get/index.html deleted file mode 100644 index bf2e8cba01..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/get/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Map.prototype.get() -slug: Web/JavaScript/Reference/Global_Objects/Map/get -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/get -original_slug: Web/JavaScript/Reference/Global_Objects/Map/get ---- -
{{JSRef}}
- -

La méthode get() renvoie un élément précisé d'un objet Map. Si la valeur associée à la clé fournie est un objet, alors on obtient une référence à cet objet et tous changements apporté à cet objet sera aussi visible à l'intérieur de l'objet Map.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-get.html")}}
- -

Syntaxe

- -
maMap.get(clé)
- -

Paramètres

- -
-
clé
-
La clé de l'élément à renvoyer depuis l'objet Map.
-
- -

Valeur de retour

- -

L'élément associée à la clé donnée ou {{jsxref("undefined")}} si la clé ne fait pas partie de l'objet Map.

- -

Exemples

- -
var maMap = new Map();
-maMap.set("truc", "toto");
-
-maMap.get("truc");     // Renvoie "toto".
-maMap.get("machin");   // Renvoie undefined.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.get', 'Map.prototype.get')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.get', 'Map.prototype.get')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.get")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/get/index.md b/files/fr/web/javascript/reference/global_objects/map/get/index.md new file mode 100644 index 0000000000..bf2e8cba01 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/get/index.md @@ -0,0 +1,76 @@ +--- +title: Map.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/Map/get +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/get +original_slug: Web/JavaScript/Reference/Global_Objects/Map/get +--- +
{{JSRef}}
+ +

La méthode get() renvoie un élément précisé d'un objet Map. Si la valeur associée à la clé fournie est un objet, alors on obtient une référence à cet objet et tous changements apporté à cet objet sera aussi visible à l'intérieur de l'objet Map.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-get.html")}}
+ +

Syntaxe

+ +
maMap.get(clé)
+ +

Paramètres

+ +
+
clé
+
La clé de l'élément à renvoyer depuis l'objet Map.
+
+ +

Valeur de retour

+ +

L'élément associée à la clé donnée ou {{jsxref("undefined")}} si la clé ne fait pas partie de l'objet Map.

+ +

Exemples

+ +
var maMap = new Map();
+maMap.set("truc", "toto");
+
+maMap.get("truc");     // Renvoie "toto".
+maMap.get("machin");   // Renvoie undefined.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.get', 'Map.prototype.get')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.get', 'Map.prototype.get')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.get")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/has/index.html b/files/fr/web/javascript/reference/global_objects/map/has/index.html deleted file mode 100644 index ce26d66e47..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/has/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Map.prototype.has() -slug: Web/JavaScript/Reference/Global_Objects/Map/has -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/has -original_slug: Web/JavaScript/Reference/Global_Objects/Map/has ---- -
{{JSRef}}
- -

La méthode has() renvoie un booléen permettant de déterminer si l'objet Map en question contient la clé donnée.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-has.html")}}
- -

Syntaxe

- -
maMap.has(clé);
- -

Paramètres

- -
-
clé
-
Ce paramètre obligatoire correspond à la clé dont on veut savoir si elle appartient à l'objet Map.
-
- -

Valeur de retour

- -

Cette méthode renvoie un booléen : true si un élément avec cette clé existe au sein de l'objet Map et false sinon.

- -

Exemples

- -
var maMap = new Map();
-maMap.set("truc", "toto");
-
-maMap.has("truc");  // renvoie true
-maMap.has("machin");// renvoie false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.has', 'Map.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.has', 'Map.prototype.has')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.has")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/has/index.md b/files/fr/web/javascript/reference/global_objects/map/has/index.md new file mode 100644 index 0000000000..ce26d66e47 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/has/index.md @@ -0,0 +1,76 @@ +--- +title: Map.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/Map/has +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/has +original_slug: Web/JavaScript/Reference/Global_Objects/Map/has +--- +
{{JSRef}}
+ +

La méthode has() renvoie un booléen permettant de déterminer si l'objet Map en question contient la clé donnée.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-has.html")}}
+ +

Syntaxe

+ +
maMap.has(clé);
+ +

Paramètres

+ +
+
clé
+
Ce paramètre obligatoire correspond à la clé dont on veut savoir si elle appartient à l'objet Map.
+
+ +

Valeur de retour

+ +

Cette méthode renvoie un booléen : true si un élément avec cette clé existe au sein de l'objet Map et false sinon.

+ +

Exemples

+ +
var maMap = new Map();
+maMap.set("truc", "toto");
+
+maMap.has("truc");  // renvoie true
+maMap.has("machin");// renvoie false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.has', 'Map.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.has', 'Map.prototype.has')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.has")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/index.html b/files/fr/web/javascript/reference/global_objects/map/index.html deleted file mode 100644 index 7e49822844..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/index.html +++ /dev/null @@ -1,276 +0,0 @@ ---- -title: Map -slug: Web/JavaScript/Reference/Global_Objects/Map -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map -original_slug: Web/JavaScript/Reference/Global_Objects/Map ---- -
{{JSRef}}
- -

L'objet Map représente un dictionnaire, autrement dit une carte de clés/valeurs. N'importe quelle valeur valable en JavaScript (que ce soit les objets ou les valeurs de types primitifs) peut être utilisée comme clé ou comme valeur.

- -

L'ordre d'insertion des clés est mémorisé dans l'objet et les boucles sur les Map parcourent les clés dans cet ordre.

- -

Syntaxe

- -
new Map([iterable])
- -

Paramètres

- -
-
itérable
-
Un tableau ({{jsxref("Array")}}) ou tout autre objet itérable dont les éléments sont des paires clé/valeur (par exemple un tableau de la forme [[1 , "toto"],[2, "truc"]]). Chaque paire clé/valeur sera ajoutée au nouvel objet Map. {{jsxref("null")}} est traité comme {{jsxref("undefined")}}.
-
- -

Description

- -

Un objet Map permet de retrouver ses éléments dans leur ordre d'insertion. Par exemple, une boucle {{jsxref("Instructions/for...of","for...of")}} renverra un tableau de [clé, valeur] pour chaque itération.

- -

On notera qu'un objet Map contenant des objets ne sera parcouru que dans l'ordre d'insertion de ces objets. Avec ES2015, l'ordre d'itération est fixé pour les objets. Toutefois, pour les versions antérieures d'ECMAScript, cet ordre n'est pas garanti.

- -

Égalité des clés

- -

L'égalité des clés est testée avec l'algorithme basé sur l'égalité de valeurs :

- - - -

Dans les versions précédentes des brouillons ECMAScript 2015 (ES6) -0 et +0 étaient considérés différents (bien que -0 === +0), ceci a été changé dans les versions ultérieures et a été adapté avec Gecko 29 {{geckoRelease("29")}} ({{bug("952870")}}) et une version nocturne de Chrome.

- -

Comparaison entre objets et maps

- -

Les {{jsxref("Object", "objets","",1)}} sont similaires aux Maps, chacun manipulant des clés associées à des valeurs, récupérant ces valeurs, supprimant des clés... Il n'y avait auparavant pas d'alternatives natives et c'est pourquoi, historiquement, les objets JavaScript ont été utilisés comme des Maps. Malgré tout, il y a des différences importantes entre Objects et Maps qui permettent de distinguer une utilisation des objets Map plus efficace :

- - - -

Propriétés

- -
-
Map.length
-
La valeur de la propriété length est 0.
- Attention, pour compter le nombre d'élément contenu dans une Map, on utilisera plutôt {{jsxref("Map.prototype.size")}}.
-
{{jsxref("Map.@@species", "get Map[@@species]")}}
-
La fonction constructeur utilisée pour créer des objets dérivées.
-
{{jsxref("Map.prototype")}}
-
Représente le prototype du constructeur Map. Permet l'addition de propriétés à tous les objets Map.
-
- -

Instances de Map

- -

Toutes les instances de Map héritent de {{jsxref("Map.prototype")}}.

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Map/prototype','Propriétés')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Map/prototype','Méthodes')}}

- -

Exemples

- -

Utiliser un objet Map

- -
const myMap = new Map();
-
-const objectKey = {},
-    functionKey = function () {},
-    stringKey = "une chaîne";
-
-// définir les valeurs
-myMap.set(stringKey, "valeur associée à 'une chaîne'");
-myMap.set(objectKey, "valeur associée à objectKey");
-myMap.set(functionKey, "valeur associée à functionKey");
-
-myMap.size; // 3
-
-// récupérer les valeurs
-myMap.get(stringKey);     // "valeur associée à 'une chaîne'"
-myMap.get(objectKey);      // "valeur associée à objetClé"
-myMap.get(functionKey);   // "valeur associée à fonctionClé"
-
-myMap.get("une chaîne");  // "valeur associée à 'une chaîne'"
-                          // car chaineClé === 'une chaîne'
-myMap.get({});            // indéfini car objetClé !== {}
-myMap.get(function() {}); // indéfini car fonctionClé !== function () {}
-
- -

Utiliser NaN comme clé

- -

{{jsxref("NaN")}} peut être utilisé comme une clé. Bien que NaN ne soit pas strictement égal à lui-même (NaN !== NaN est vérifié), on peut bâtir l'exemple suivant car on ne peut pas distinguer deux valeurs NaN :

- -
const myMap = new Map();
-myMap.set(NaN, "not a number");
-
-myMap.get(NaN); // "not a number"
-
-const otherNaN = Number("toto");
-myMap.get(otherNaN); // "not a number"
-
- -

Parcourir des objets Maps avec for..of

- -

Il est possible de parcourir les objets Map grâce à des boucles for..of :

- -
const myMap = new Map();
-myMap.set(0, "zéro");
-myMap.set(1, "un");
-for (const [key, value] of myMap) {
-  console.log(`${key} = ${value}`);
-}
-// On aura 2 lignes : la première avec "0 = zéro"
-// la seconde avec "1 = un"
-
-for (const key of myMap.keys()) {
-  console.log(key);
-}
-// On aura 2 lignes : la première avec "0"
-// et la seconde avec "1"
-
-for (const value of myMap.values()) {
-  console.log(valeur);
-}
-// On aura 2 lignes : la première avec "zéro"
-// et la seconde avec "un"
-
-for (const [key, value] of myMap.entries()) {
-  console.log(`${key} = ${value}`);
-}
-// On aura 2 lignes : la première avec "0 = zéro"
-// la seconde avec "1 = un"
-
-myMap.forEach(function(value, key) {
-  console.log(`${key} = ${value}`);
-});
-// On aura 2 lignes : la première avec "0 = zéro"
-// la seconde avec "1 = un"
-
- -

Relation avec les objets Array

- -
const keyValuePair = [["clé1", "valeur1"], ["clé2", "valeur2"]];
-
-// On utilise le constructeur Map
-// pour transformer un tableau de clés/valeurs
-// en un objet map
-const myMap = new Map(keyValuePair);
-
-myMap.get("clé1"); // renvoie "valeur1"
-
-// On utilise la fonction Array.from pour transformer
-// une map en un tableau de clés/valeurs
-console.log(Array.from(myMap)); // affichera la même chose que tableauCléValeur
-
-// On peut aussi l'utiliser pour n'extraire que les clés
-// ou les valeurs et créer le tableau associé
-console.log(Array.from(myMap.keys())); // affichera ["clé1", "clé2"]
- -

Cloner et fusionner des objets Map

- -

Il est possible de cloner des Map comme on clone des tableaux :

- -
const original = new Map([
-  [1, 'un']
-]);
-
-const clone = new Map(original);
-
-console.log(clone.get(1)); // un
-console.log(original === clone); // false. Utile pour une comparaison superficielle
- -

Attention, la donnée contenue dans la Map n'est pas clonée.

- -

Il est également possible de fusionner deux Map en conservant le critère d'unicité sur les clés :

- -
const first = new Map([
-  [1, 'un'],
-  [2, 'deux'],
-  [3, 'trois'],
-]);
-
-const second = new Map([
-  [1, 'uno'],
-  [2, 'dos']
-]);
-
-// On fusionne les deux maps. C'est la "dernière" version
-// de la clé qui l'emporte.
-// L'opérateur de décomposition nous permet principalement ici
-// de convertir une map en un tableau
-const fusion = new Map([...first, ...second]);
-
-console.log(fusion.get(1)); // uno
-console.log(fusion.get(2)); // dos
-console.log(fusion.get(3)); // trois
- -

Il est également possible de fusionner des objets Map avec des objets Array :

- -
const first = new Map([
-  [1, 'un'],
-  [2, 'deux'],
-  [3, 'trois'],
-]);
-
-const second = new Map([
-  [1, 'uno'],
-  [2, 'dos']
-]);
-
-// On peut fusionner des Maps avec un tableau
-// Là encore c'est le dernier exemplaire de la clé qui l'emporte
-const fusion = new Map([...first, ...second, [1, 'eins']]);
-
-console.log(fusion.get(1)); // eins
-console.log(fusion.get(2)); // dos
-console.log(fusion.get(3)); // trois
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map-objects', 'Map')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map-objects', 'Map')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/index.md b/files/fr/web/javascript/reference/global_objects/map/index.md new file mode 100644 index 0000000000..7e49822844 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/index.md @@ -0,0 +1,276 @@ +--- +title: Map +slug: Web/JavaScript/Reference/Global_Objects/Map +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map +original_slug: Web/JavaScript/Reference/Global_Objects/Map +--- +
{{JSRef}}
+ +

L'objet Map représente un dictionnaire, autrement dit une carte de clés/valeurs. N'importe quelle valeur valable en JavaScript (que ce soit les objets ou les valeurs de types primitifs) peut être utilisée comme clé ou comme valeur.

+ +

L'ordre d'insertion des clés est mémorisé dans l'objet et les boucles sur les Map parcourent les clés dans cet ordre.

+ +

Syntaxe

+ +
new Map([iterable])
+ +

Paramètres

+ +
+
itérable
+
Un tableau ({{jsxref("Array")}}) ou tout autre objet itérable dont les éléments sont des paires clé/valeur (par exemple un tableau de la forme [[1 , "toto"],[2, "truc"]]). Chaque paire clé/valeur sera ajoutée au nouvel objet Map. {{jsxref("null")}} est traité comme {{jsxref("undefined")}}.
+
+ +

Description

+ +

Un objet Map permet de retrouver ses éléments dans leur ordre d'insertion. Par exemple, une boucle {{jsxref("Instructions/for...of","for...of")}} renverra un tableau de [clé, valeur] pour chaque itération.

+ +

On notera qu'un objet Map contenant des objets ne sera parcouru que dans l'ordre d'insertion de ces objets. Avec ES2015, l'ordre d'itération est fixé pour les objets. Toutefois, pour les versions antérieures d'ECMAScript, cet ordre n'est pas garanti.

+ +

Égalité des clés

+ +

L'égalité des clés est testée avec l'algorithme basé sur l'égalité de valeurs :

+ + + +

Dans les versions précédentes des brouillons ECMAScript 2015 (ES6) -0 et +0 étaient considérés différents (bien que -0 === +0), ceci a été changé dans les versions ultérieures et a été adapté avec Gecko 29 {{geckoRelease("29")}} ({{bug("952870")}}) et une version nocturne de Chrome.

+ +

Comparaison entre objets et maps

+ +

Les {{jsxref("Object", "objets","",1)}} sont similaires aux Maps, chacun manipulant des clés associées à des valeurs, récupérant ces valeurs, supprimant des clés... Il n'y avait auparavant pas d'alternatives natives et c'est pourquoi, historiquement, les objets JavaScript ont été utilisés comme des Maps. Malgré tout, il y a des différences importantes entre Objects et Maps qui permettent de distinguer une utilisation des objets Map plus efficace :

+ + + +

Propriétés

+ +
+
Map.length
+
La valeur de la propriété length est 0.
+ Attention, pour compter le nombre d'élément contenu dans une Map, on utilisera plutôt {{jsxref("Map.prototype.size")}}.
+
{{jsxref("Map.@@species", "get Map[@@species]")}}
+
La fonction constructeur utilisée pour créer des objets dérivées.
+
{{jsxref("Map.prototype")}}
+
Représente le prototype du constructeur Map. Permet l'addition de propriétés à tous les objets Map.
+
+ +

Instances de Map

+ +

Toutes les instances de Map héritent de {{jsxref("Map.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Map/prototype','Propriétés')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Map/prototype','Méthodes')}}

+ +

Exemples

+ +

Utiliser un objet Map

+ +
const myMap = new Map();
+
+const objectKey = {},
+    functionKey = function () {},
+    stringKey = "une chaîne";
+
+// définir les valeurs
+myMap.set(stringKey, "valeur associée à 'une chaîne'");
+myMap.set(objectKey, "valeur associée à objectKey");
+myMap.set(functionKey, "valeur associée à functionKey");
+
+myMap.size; // 3
+
+// récupérer les valeurs
+myMap.get(stringKey);     // "valeur associée à 'une chaîne'"
+myMap.get(objectKey);      // "valeur associée à objetClé"
+myMap.get(functionKey);   // "valeur associée à fonctionClé"
+
+myMap.get("une chaîne");  // "valeur associée à 'une chaîne'"
+                          // car chaineClé === 'une chaîne'
+myMap.get({});            // indéfini car objetClé !== {}
+myMap.get(function() {}); // indéfini car fonctionClé !== function () {}
+
+ +

Utiliser NaN comme clé

+ +

{{jsxref("NaN")}} peut être utilisé comme une clé. Bien que NaN ne soit pas strictement égal à lui-même (NaN !== NaN est vérifié), on peut bâtir l'exemple suivant car on ne peut pas distinguer deux valeurs NaN :

+ +
const myMap = new Map();
+myMap.set(NaN, "not a number");
+
+myMap.get(NaN); // "not a number"
+
+const otherNaN = Number("toto");
+myMap.get(otherNaN); // "not a number"
+
+ +

Parcourir des objets Maps avec for..of

+ +

Il est possible de parcourir les objets Map grâce à des boucles for..of :

+ +
const myMap = new Map();
+myMap.set(0, "zéro");
+myMap.set(1, "un");
+for (const [key, value] of myMap) {
+  console.log(`${key} = ${value}`);
+}
+// On aura 2 lignes : la première avec "0 = zéro"
+// la seconde avec "1 = un"
+
+for (const key of myMap.keys()) {
+  console.log(key);
+}
+// On aura 2 lignes : la première avec "0"
+// et la seconde avec "1"
+
+for (const value of myMap.values()) {
+  console.log(valeur);
+}
+// On aura 2 lignes : la première avec "zéro"
+// et la seconde avec "un"
+
+for (const [key, value] of myMap.entries()) {
+  console.log(`${key} = ${value}`);
+}
+// On aura 2 lignes : la première avec "0 = zéro"
+// la seconde avec "1 = un"
+
+myMap.forEach(function(value, key) {
+  console.log(`${key} = ${value}`);
+});
+// On aura 2 lignes : la première avec "0 = zéro"
+// la seconde avec "1 = un"
+
+ +

Relation avec les objets Array

+ +
const keyValuePair = [["clé1", "valeur1"], ["clé2", "valeur2"]];
+
+// On utilise le constructeur Map
+// pour transformer un tableau de clés/valeurs
+// en un objet map
+const myMap = new Map(keyValuePair);
+
+myMap.get("clé1"); // renvoie "valeur1"
+
+// On utilise la fonction Array.from pour transformer
+// une map en un tableau de clés/valeurs
+console.log(Array.from(myMap)); // affichera la même chose que tableauCléValeur
+
+// On peut aussi l'utiliser pour n'extraire que les clés
+// ou les valeurs et créer le tableau associé
+console.log(Array.from(myMap.keys())); // affichera ["clé1", "clé2"]
+ +

Cloner et fusionner des objets Map

+ +

Il est possible de cloner des Map comme on clone des tableaux :

+ +
const original = new Map([
+  [1, 'un']
+]);
+
+const clone = new Map(original);
+
+console.log(clone.get(1)); // un
+console.log(original === clone); // false. Utile pour une comparaison superficielle
+ +

Attention, la donnée contenue dans la Map n'est pas clonée.

+ +

Il est également possible de fusionner deux Map en conservant le critère d'unicité sur les clés :

+ +
const first = new Map([
+  [1, 'un'],
+  [2, 'deux'],
+  [3, 'trois'],
+]);
+
+const second = new Map([
+  [1, 'uno'],
+  [2, 'dos']
+]);
+
+// On fusionne les deux maps. C'est la "dernière" version
+// de la clé qui l'emporte.
+// L'opérateur de décomposition nous permet principalement ici
+// de convertir une map en un tableau
+const fusion = new Map([...first, ...second]);
+
+console.log(fusion.get(1)); // uno
+console.log(fusion.get(2)); // dos
+console.log(fusion.get(3)); // trois
+ +

Il est également possible de fusionner des objets Map avec des objets Array :

+ +
const first = new Map([
+  [1, 'un'],
+  [2, 'deux'],
+  [3, 'trois'],
+]);
+
+const second = new Map([
+  [1, 'uno'],
+  [2, 'dos']
+]);
+
+// On peut fusionner des Maps avec un tableau
+// Là encore c'est le dernier exemplaire de la clé qui l'emporte
+const fusion = new Map([...first, ...second, [1, 'eins']]);
+
+console.log(fusion.get(1)); // eins
+console.log(fusion.get(2)); // dos
+console.log(fusion.get(3)); // trois
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map-objects', 'Map')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map-objects', 'Map')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/keys/index.html b/files/fr/web/javascript/reference/global_objects/map/keys/index.html deleted file mode 100644 index 423cf8d7dd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/keys/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Map.prototype.keys() -slug: Web/JavaScript/Reference/Global_Objects/Map/keys -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Map - - Méthode - - Prototype -translation_of: Web/JavaScript/Reference/Global_Objects/Map/keys -original_slug: Web/JavaScript/Reference/Global_Objects/Map/keys ---- -
{{JSRef}}
- -

La méthode keys() renvoie un objet Iterator qui contient les clés de chaque élément de l'objet Map, dans leur ordre d'insertion.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-keys.html")}}
- -

Syntaxe

- -
maMap.keys()
- -

Valeur de retour

- -

Un nouvel objet Iterator {{jsxref("Map")}}.

- -

Exemples

- -

Utiliser keys()

- -
var maMap = new Map();
-maMap.set("0", "toto");
-maMap.set(1, "truc");
-maMap.set({}, "bidule");
-
-var mapIter = maMap.keys();
-
-console.log(mapIter.next().value); // "0"
-console.log(mapIter.next().value); // 1
-console.log(mapIter.next().value); // Object
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.keys', 'Map.prototype.keys')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.keys', 'Map.prototype.keys')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.keys")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/keys/index.md b/files/fr/web/javascript/reference/global_objects/map/keys/index.md new file mode 100644 index 0000000000..423cf8d7dd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/keys/index.md @@ -0,0 +1,75 @@ +--- +title: Map.prototype.keys() +slug: Web/JavaScript/Reference/Global_Objects/Map/keys +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Méthode + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Map/keys +original_slug: Web/JavaScript/Reference/Global_Objects/Map/keys +--- +
{{JSRef}}
+ +

La méthode keys() renvoie un objet Iterator qui contient les clés de chaque élément de l'objet Map, dans leur ordre d'insertion.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-keys.html")}}
+ +

Syntaxe

+ +
maMap.keys()
+ +

Valeur de retour

+ +

Un nouvel objet Iterator {{jsxref("Map")}}.

+ +

Exemples

+ +

Utiliser keys()

+ +
var maMap = new Map();
+maMap.set("0", "toto");
+maMap.set(1, "truc");
+maMap.set({}, "bidule");
+
+var mapIter = maMap.keys();
+
+console.log(mapIter.next().value); // "0"
+console.log(mapIter.next().value); // 1
+console.log(mapIter.next().value); // Object
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.keys', 'Map.prototype.keys')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.keys', 'Map.prototype.keys')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.keys")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/set/index.html b/files/fr/web/javascript/reference/global_objects/map/set/index.html deleted file mode 100644 index b0e695aed3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/set/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Map.prototype.set() -slug: Web/JavaScript/Reference/Global_Objects/Map/set -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/set -original_slug: Web/JavaScript/Reference/Global_Objects/Map/set ---- -
{{JSRef}}
- -

La méthode set() ajoute un nouvel élément avec une clé et une valeur données à un objet Map.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-set.html")}}
- -

Syntaxe

- -
maMap.set(clé, valeur);
- -

Paramètres

- -
-
clé
-
Ce paramètre représente la clé de l'élément à ajouter à l'objet Map.
-
valeur
-
Ce paramètre représente la valeur de l'élément à ajouter à l'objet Map.
-
- -

Valeur de retour

- -

L'objet Map courant (auquel l'élément a été ajouté).

- -

Exemples

- -

Utiliser la méthode set()

- -
var maMap = new Map();
-
-// On ajoute de nouveaux éléments à l'objet map
-maMap.set("truc", "toto");
-maMap.set(1, "bidule");
-
-// On met à jour un élément
-maMap.set("truc", "fuuu");
-
- -

Utiliser la méthode set() avec un enchaînement

- -

La méthode set() renvoie le même objet Map et on peut donc la « chaîner » pour des opérations successives :

- -
// On ajoute de nouveaux éléments
-// en enchaînant les appels à set()
-maMap.set('truc', 'toto')
-     .set(1, 'tototruc')
-     .set(2, 'bidule');
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.set', 'Map.prototype.set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.set', 'Map.prototype.set')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.set")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/set/index.md b/files/fr/web/javascript/reference/global_objects/map/set/index.md new file mode 100644 index 0000000000..b0e695aed3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/set/index.md @@ -0,0 +1,93 @@ +--- +title: Map.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/Map/set +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/set +original_slug: Web/JavaScript/Reference/Global_Objects/Map/set +--- +
{{JSRef}}
+ +

La méthode set() ajoute un nouvel élément avec une clé et une valeur données à un objet Map.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-set.html")}}
+ +

Syntaxe

+ +
maMap.set(clé, valeur);
+ +

Paramètres

+ +
+
clé
+
Ce paramètre représente la clé de l'élément à ajouter à l'objet Map.
+
valeur
+
Ce paramètre représente la valeur de l'élément à ajouter à l'objet Map.
+
+ +

Valeur de retour

+ +

L'objet Map courant (auquel l'élément a été ajouté).

+ +

Exemples

+ +

Utiliser la méthode set()

+ +
var maMap = new Map();
+
+// On ajoute de nouveaux éléments à l'objet map
+maMap.set("truc", "toto");
+maMap.set(1, "bidule");
+
+// On met à jour un élément
+maMap.set("truc", "fuuu");
+
+ +

Utiliser la méthode set() avec un enchaînement

+ +

La méthode set() renvoie le même objet Map et on peut donc la « chaîner » pour des opérations successives :

+ +
// On ajoute de nouveaux éléments
+// en enchaînant les appels à set()
+maMap.set('truc', 'toto')
+     .set(1, 'tototruc')
+     .set(2, 'bidule');
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.set', 'Map.prototype.set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.set', 'Map.prototype.set')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.set")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/size/index.html b/files/fr/web/javascript/reference/global_objects/map/size/index.html deleted file mode 100644 index 0473610825..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/size/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Map.prototype.size -slug: Web/JavaScript/Reference/Global_Objects/Map/size -tags: - - ECMAScript 2015 - - JavaScript - - Map - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/size -original_slug: Web/JavaScript/Reference/Global_Objects/Map/size ---- -
{{JSRef}}
- -

L'accesseur size est une propriété renvoyant le nombre d'éléments d'un objet {{jsxref("Map")}}.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-size.html")}}
- -

Description

- -

La valeur de size est un entier représentant le nombre d'entrées d'un objet Map. Le mutateur correspond à cette propriété est {{jsxref("undefined")}}, on ne peut pas donc pas modifier cette propriété.

- -

Exemple

- -

Utiliser size

- -
var maMap = new Map();
-maMap.set("a", "alpha");
-maMap.set("b", "beta");
-maMap.set("g", "gamma");
-
-maMap.size // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-map.prototype.size', 'Map.prototype.size')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-map.prototype.size', 'Map.prototype.size')}}{{Spec2('ESDraft')}} 
- -

Compatibliité des navigateurs

- -

{{Compat("javascript.builtins.Map.size")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/size/index.md b/files/fr/web/javascript/reference/global_objects/map/size/index.md new file mode 100644 index 0000000000..0473610825 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/size/index.md @@ -0,0 +1,65 @@ +--- +title: Map.prototype.size +slug: Web/JavaScript/Reference/Global_Objects/Map/size +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/size +original_slug: Web/JavaScript/Reference/Global_Objects/Map/size +--- +
{{JSRef}}
+ +

L'accesseur size est une propriété renvoyant le nombre d'éléments d'un objet {{jsxref("Map")}}.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-size.html")}}
+ +

Description

+ +

La valeur de size est un entier représentant le nombre d'entrées d'un objet Map. Le mutateur correspond à cette propriété est {{jsxref("undefined")}}, on ne peut pas donc pas modifier cette propriété.

+ +

Exemple

+ +

Utiliser size

+ +
var maMap = new Map();
+maMap.set("a", "alpha");
+maMap.set("b", "beta");
+maMap.set("g", "gamma");
+
+maMap.size // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-map.prototype.size', 'Map.prototype.size')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-map.prototype.size', 'Map.prototype.size')}}{{Spec2('ESDraft')}} 
+ +

Compatibliité des navigateurs

+ +

{{Compat("javascript.builtins.Map.size")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/map/values/index.html b/files/fr/web/javascript/reference/global_objects/map/values/index.html deleted file mode 100644 index 8071caa2d0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/map/values/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Map.prototype.values() -slug: Web/JavaScript/Reference/Global_Objects/Map/values -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Map - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Map/values -original_slug: Web/JavaScript/Reference/Global_Objects/Map/values ---- -
{{JSRef}}
- -

La méthode values() renvoie un objet Iterator qui contient les valeurs de chacun des éléments contenu dans l'objet Map donné, dans leur ordre d'insertion.

- -
{{EmbedInteractiveExample("pages/js/map-prototype-values.html")}}
- -

Syntaxe

- -
maMap.values()
- -

Valeur de retour

- -

Un nouvel objet Iterator {{jsxref("Map")}}.

- -

Exemple

- -

Utiliser values()

- -
var maMap = new Map();
-maMap.set("0", "toto");
-maMap.set(1, "truc");
-maMap.set({}, "licorne");
-
-var mapIter = maMap.values();
-
-console.log(mapIter.next().value); // "toto"
-console.log(mapIter.next().value); // "truc"
-console.log(mapIter.next().value); // "licorne"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.values', 'Map.prototype.values')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.values', 'Map.prototype.values')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Map.values")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/map/values/index.md b/files/fr/web/javascript/reference/global_objects/map/values/index.md new file mode 100644 index 0000000000..8071caa2d0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/map/values/index.md @@ -0,0 +1,75 @@ +--- +title: Map.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Map/values +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/values +original_slug: Web/JavaScript/Reference/Global_Objects/Map/values +--- +
{{JSRef}}
+ +

La méthode values() renvoie un objet Iterator qui contient les valeurs de chacun des éléments contenu dans l'objet Map donné, dans leur ordre d'insertion.

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-values.html")}}
+ +

Syntaxe

+ +
maMap.values()
+ +

Valeur de retour

+ +

Un nouvel objet Iterator {{jsxref("Map")}}.

+ +

Exemple

+ +

Utiliser values()

+ +
var maMap = new Map();
+maMap.set("0", "toto");
+maMap.set(1, "truc");
+maMap.set({}, "licorne");
+
+var mapIter = maMap.values();
+
+console.log(mapIter.next().value); // "toto"
+console.log(mapIter.next().value); // "truc"
+console.log(mapIter.next().value); // "licorne"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-map.prototype.values', 'Map.prototype.values')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-map.prototype.values', 'Map.prototype.values')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Map.values")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/abs/index.html b/files/fr/web/javascript/reference/global_objects/math/abs/index.html deleted file mode 100644 index c632d426db..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/abs/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Math.abs() -slug: Web/JavaScript/Reference/Global_Objects/Math/abs -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/abs -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/abs ---- -
{{JSRef}}
- -

La fonction Math.abs() retourne la valeur absolue d'un nombre, c'est-à-dire

- -

Math.abs(x)=|x|={xsix0-xsix<0{\mathtt{\operatorname{Math.abs}(x)}} = {|x|} = \begin{cases} x & \text{si} \quad x \geq 0 \\ -x & \text{si} \quad x < 0 \end{cases}

- -
{{EmbedInteractiveExample("pages/js/math-abs.html")}}
- -

Syntaxe

- -
Math.abs(x);
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur absolue

- -

La valeur absolue du nombre passé en argument.

- -

Description

- -

abs est une méthode statique de l'objet Math et doit toujours être utilisée avec la syntaxe Math.abs().

- -

Exemples

- -

Utiliser Math.abs()

- -

Si la méthode est utilisée avec une chaîne de caractères non numérique, avec un tableau à plus d'un élément, sans paramètre ou avec {{jsxref("undefined")}}, la valeur retournée sera {{jsxref("NaN")}}. Si elle est utilisée avec {{jsxref("null")}}, la fonction renverra 0.

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

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.1', 'Math.abs')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.abs', 'Math.abs')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.abs', 'Math.abs')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.abs")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/abs/index.md b/files/fr/web/javascript/reference/global_objects/math/abs/index.md new file mode 100644 index 0000000000..c632d426db --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/abs/index.md @@ -0,0 +1,100 @@ +--- +title: Math.abs() +slug: Web/JavaScript/Reference/Global_Objects/Math/abs +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/abs +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/abs +--- +
{{JSRef}}
+ +

La fonction Math.abs() retourne la valeur absolue d'un nombre, c'est-à-dire

+ +

Math.abs(x)=|x|={xsix0-xsix<0{\mathtt{\operatorname{Math.abs}(x)}} = {|x|} = \begin{cases} x & \text{si} \quad x \geq 0 \\ -x & \text{si} \quad x < 0 \end{cases}

+ +
{{EmbedInteractiveExample("pages/js/math-abs.html")}}
+ +

Syntaxe

+ +
Math.abs(x);
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur absolue

+ +

La valeur absolue du nombre passé en argument.

+ +

Description

+ +

abs est une méthode statique de l'objet Math et doit toujours être utilisée avec la syntaxe Math.abs().

+ +

Exemples

+ +

Utiliser Math.abs()

+ +

Si la méthode est utilisée avec une chaîne de caractères non numérique, avec un tableau à plus d'un élément, sans paramètre ou avec {{jsxref("undefined")}}, la valeur retournée sera {{jsxref("NaN")}}. Si elle est utilisée avec {{jsxref("null")}}, la fonction renverra 0.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.1', 'Math.abs')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.abs', 'Math.abs')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.abs', 'Math.abs')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.abs")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/acos/index.html b/files/fr/web/javascript/reference/global_objects/math/acos/index.html deleted file mode 100644 index 3a2f6fa132..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/acos/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Math.acos() -slug: Web/JavaScript/Reference/Global_Objects/Math/acos -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/acos -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/acos ---- -
{{JSRef}}
- -

La fonction Math.acos() renvoie l'arc cosinus d'une valeur exprimée en radians. Cela est défini par :

- -

x[-1;1],Math.acos(x)=arccos(x)= le seul  y[0;π]tel quecos(y)=x\forall x \in [{-1};1],\;\mathtt{\operatorname{Math.acos}(x)} = \arccos(x) = \text{ the unique } \; y \in [0; \pi] \, \text{such that} \; \cos(y) = x

- -
{{EmbedInteractiveExample("pages/js/math-acos.html")}}
- -

Syntaxe

- -
Math.acos(x) 
- -

Paramètres

- -
-
x
-
Un nombre (représentant un angle exprimé en radians).
-
- -

Valeur de retour

- -

L'arc cosinus du nombre passé en argument si celui est compris entre -1 et 1. La méthode renvoie {{jsxref("NaN")}} sinon.

- -

Description

- -

La méthode acos renvoie une valeur numérique comprise entre 0 et Pi pour x compris entre -1 et 1. Si la valeur de x est hors de cet intervalle, la méthode renverra {{jsxref("NaN")}}.

- -

acos est une méhode statique de Math et doit toujours être utilisée avec la syntaxe Math.acos(), elle ne doit pas être appelée depuis un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.acos()

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

Pour les valeurs (strictement) inférieures à -1 ou supérieures à 1, Math.acos renvoie NaN.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.2', 'Math.acos')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.acos', 'Math.acos')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.acos', 'Math.acos')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.acos")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/acos/index.md b/files/fr/web/javascript/reference/global_objects/math/acos/index.md new file mode 100644 index 0000000000..3a2f6fa132 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/acos/index.md @@ -0,0 +1,100 @@ +--- +title: Math.acos() +slug: Web/JavaScript/Reference/Global_Objects/Math/acos +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/acos +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/acos +--- +
{{JSRef}}
+ +

La fonction Math.acos() renvoie l'arc cosinus d'une valeur exprimée en radians. Cela est défini par :

+ +

x[-1;1],Math.acos(x)=arccos(x)= le seul  y[0;π]tel quecos(y)=x\forall x \in [{-1};1],\;\mathtt{\operatorname{Math.acos}(x)} = \arccos(x) = \text{ the unique } \; y \in [0; \pi] \, \text{such that} \; \cos(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-acos.html")}}
+ +

Syntaxe

+ +
Math.acos(x) 
+ +

Paramètres

+ +
+
x
+
Un nombre (représentant un angle exprimé en radians).
+
+ +

Valeur de retour

+ +

L'arc cosinus du nombre passé en argument si celui est compris entre -1 et 1. La méthode renvoie {{jsxref("NaN")}} sinon.

+ +

Description

+ +

La méthode acos renvoie une valeur numérique comprise entre 0 et Pi pour x compris entre -1 et 1. Si la valeur de x est hors de cet intervalle, la méthode renverra {{jsxref("NaN")}}.

+ +

acos est une méhode statique de Math et doit toujours être utilisée avec la syntaxe Math.acos(), elle ne doit pas être appelée depuis un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.acos()

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

Pour les valeurs (strictement) inférieures à -1 ou supérieures à 1, Math.acos renvoie NaN.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.2', 'Math.acos')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.acos', 'Math.acos')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.acos', 'Math.acos')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.acos")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/acosh/index.html b/files/fr/web/javascript/reference/global_objects/math/acosh/index.html deleted file mode 100644 index 26a4b11b80..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/acosh/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Math.acosh() -slug: Web/JavaScript/Reference/Global_Objects/Math/acosh -tags: - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/acosh -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/acosh ---- -
{{JSRef}}
- -

La fonction Math.acosh() renvoie l'arc cosinus hyperbolique d'un nombre.Elle est définie par :

- -

x1,Math.acosh(x)=arcosh(x)= l'unique y0tel quecosh(y)=x\forall x \geq 1, \mathtt{\operatorname{Math.acosh}(x)} = \operatorname{arcosh}(x) = \text{ the unique } \; y \geq 0 \; \text{such that} \; \cosh(y) = x

- -
{{EmbedInteractiveExample("pages/js/math-acosh.html")}}
- -

Syntaxe

- -
Math.acosh(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

L'arc cosinus hyperbolique du nombre en argument. Si le nombre est inférieur à 1, la valeur renvoyée sera {{jsxref("NaN")}}.

- -

Description

- -

acosh étant une méthode statique de Math, il faut l'utiliser avec Math.acosh(), plutôt qu'en faisant appel à une méthode d'un autre objet créé (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.acosh()

- -
Math.acosh(-1);  // NaN
-Math.acosh(0);   // NaN
-Math.acosh(0.5); // NaN
-Math.acosh(1);   // 0
-Math.acosh(2);   // 1.3169578969248166
- -

Pour les valeurs strictement inférieures à 1 Math.acosh renvoie {{jsxref("NaN")}}.

- -

Prothèse d'émulation (polyfill)

- -

Pour tout x1x \geq 1, arcosh(x)=ln(x+x2-1)\operatorname {arcosh} (x) = \ln \left(x + \sqrt{x^{2} - 1} \right), on peut donc émuler cette fonction avec le code suivant :

- -
function acosh(x) {
-  return Math.log(x + Math.sqrt(x * x - 1));
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.acosh', 'Math.acosh')}}{{Spec2('ES6')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.acosh', 'Math.acosh')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.acosh")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/acosh/index.md b/files/fr/web/javascript/reference/global_objects/math/acosh/index.md new file mode 100644 index 0000000000..26a4b11b80 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/acosh/index.md @@ -0,0 +1,97 @@ +--- +title: Math.acosh() +slug: Web/JavaScript/Reference/Global_Objects/Math/acosh +tags: + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/acosh +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/acosh +--- +
{{JSRef}}
+ +

La fonction Math.acosh() renvoie l'arc cosinus hyperbolique d'un nombre.Elle est définie par :

+ +

x1,Math.acosh(x)=arcosh(x)= l'unique y0tel quecosh(y)=x\forall x \geq 1, \mathtt{\operatorname{Math.acosh}(x)} = \operatorname{arcosh}(x) = \text{ the unique } \; y \geq 0 \; \text{such that} \; \cosh(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-acosh.html")}}
+ +

Syntaxe

+ +
Math.acosh(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

L'arc cosinus hyperbolique du nombre en argument. Si le nombre est inférieur à 1, la valeur renvoyée sera {{jsxref("NaN")}}.

+ +

Description

+ +

acosh étant une méthode statique de Math, il faut l'utiliser avec Math.acosh(), plutôt qu'en faisant appel à une méthode d'un autre objet créé (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.acosh()

+ +
Math.acosh(-1);  // NaN
+Math.acosh(0);   // NaN
+Math.acosh(0.5); // NaN
+Math.acosh(1);   // 0
+Math.acosh(2);   // 1.3169578969248166
+ +

Pour les valeurs strictement inférieures à 1 Math.acosh renvoie {{jsxref("NaN")}}.

+ +

Prothèse d'émulation (polyfill)

+ +

Pour tout x1x \geq 1, arcosh(x)=ln(x+x2-1)\operatorname {arcosh} (x) = \ln \left(x + \sqrt{x^{2} - 1} \right), on peut donc émuler cette fonction avec le code suivant :

+ +
function acosh(x) {
+  return Math.log(x + Math.sqrt(x * x - 1));
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.acosh', 'Math.acosh')}}{{Spec2('ES6')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.acosh', 'Math.acosh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.acosh")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/asin/index.html b/files/fr/web/javascript/reference/global_objects/math/asin/index.html deleted file mode 100644 index b094e1bdce..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/asin/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Math.asin() -slug: Web/JavaScript/Reference/Global_Objects/Math/asin -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/asin -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/asin ---- -
{{JSRef}}
- -

La fonction Math.asin() renvoie l'arc sinus d'un nombre (en radians). Elle est définie par :

- -

x[-1;1],Math.asin(x)=arcsin(x)= le seul y[-π2;π2]tel quesin(y)=x\forall x \in [{-1};1],\;\mathtt{\operatorname{Math.asin}(x)} = \arcsin(x) = \text{ the unique } \; y \in \left[-\frac{\pi}{2}; \frac{\pi}{2}\right] \, \text{such that} \; \sin(y) = x

- -
{{EmbedInteractiveExample("pages/js/math-asin.html")}}
- -

Syntaxe

- -
Math.asin(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

L'arc sinus du nombre passé en argument (exprimé en radians). Si ce nombre n'est pas compris entre -1 et 1, la valeur renvoyée sera {{jsxref("NaN")}}.

- -

Description

- -

La méthode Math.asin() renvoie une valeur numérique comprise entre -π2-\frac{\pi}{2} et π2\frac{\pi}{2} pour x compris entre -1 et 1. Si x est hors de cet intervalle, la méthode renverra {{jsxref("NaN")}}.

- -

Math.asin() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.asin(), elle ne doit pas être appelée à partir d'un autre objet créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.asin()

- -
Math.asin(-2);  // NaN
-Math.asin(-1);  // -1.570796326794897 (-pi/2)
-Math.asin(0);   // 0
-Math.asin(0.5); // 0.5235987755982989
-Math.asin(1);   // 1.570796326794897 (pi/2)
-Math.asin(2);   // NaN
- -

Pour les valeurs (strictement) inférieures à -1 ou supérieures à 1, Math.asin() renvoie {{jsxref("NaN")}}.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.3', 'Math.asin')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.asin', 'Math.asin')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.asin', 'Math.asin')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Math.asin")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/asin/index.md b/files/fr/web/javascript/reference/global_objects/math/asin/index.md new file mode 100644 index 0000000000..b094e1bdce --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/asin/index.md @@ -0,0 +1,99 @@ +--- +title: Math.asin() +slug: Web/JavaScript/Reference/Global_Objects/Math/asin +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/asin +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/asin +--- +
{{JSRef}}
+ +

La fonction Math.asin() renvoie l'arc sinus d'un nombre (en radians). Elle est définie par :

+ +

x[-1;1],Math.asin(x)=arcsin(x)= le seul y[-π2;π2]tel quesin(y)=x\forall x \in [{-1};1],\;\mathtt{\operatorname{Math.asin}(x)} = \arcsin(x) = \text{ the unique } \; y \in \left[-\frac{\pi}{2}; \frac{\pi}{2}\right] \, \text{such that} \; \sin(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-asin.html")}}
+ +

Syntaxe

+ +
Math.asin(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

L'arc sinus du nombre passé en argument (exprimé en radians). Si ce nombre n'est pas compris entre -1 et 1, la valeur renvoyée sera {{jsxref("NaN")}}.

+ +

Description

+ +

La méthode Math.asin() renvoie une valeur numérique comprise entre -π2-\frac{\pi}{2} et π2\frac{\pi}{2} pour x compris entre -1 et 1. Si x est hors de cet intervalle, la méthode renverra {{jsxref("NaN")}}.

+ +

Math.asin() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.asin(), elle ne doit pas être appelée à partir d'un autre objet créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.asin()

+ +
Math.asin(-2);  // NaN
+Math.asin(-1);  // -1.570796326794897 (-pi/2)
+Math.asin(0);   // 0
+Math.asin(0.5); // 0.5235987755982989
+Math.asin(1);   // 1.570796326794897 (pi/2)
+Math.asin(2);   // NaN
+ +

Pour les valeurs (strictement) inférieures à -1 ou supérieures à 1, Math.asin() renvoie {{jsxref("NaN")}}.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.3', 'Math.asin')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.asin', 'Math.asin')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.asin', 'Math.asin')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Math.asin")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/asinh/index.html b/files/fr/web/javascript/reference/global_objects/math/asinh/index.html deleted file mode 100644 index e831b9abcb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/asinh/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Math.asinh() -slug: Web/JavaScript/Reference/Global_Objects/Math/asinh -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/asinh -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/asinh ---- -
{{JSRef}}
- -

La fonction Math.asinh() renvoie l'arc sinus hyperbolique d'un nombre :

- -

Math.asinh(x)=arsinh(x)= le seul ytel quesinh(y)=x\mathtt{\operatorname{Math.asinh}(x)} = \operatorname{arsinh}(x) = \text{ the unique } \; y \; \text{such that} \; \sinh(y) = x

- -
{{EmbedInteractiveExample("pages/js/math-asinh.html")}}
- -

Syntaxe

- -
Math.asinh(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

L'arc sinus hyperbolique du nombre passé en argument.

- -

Description

- -

asinh() étant une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.asinh() et ne doit pas être appelée depuis un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.asinh()

- -
Math.asinh = Math.asinh || function(x) {
-  if (x === -Infinity) {
-    return x;
-  } else {
-    return Math.log(x + Math.sqrt(x * x + 1));
-  }
-};
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.asinh', 'Math.asinh')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.asinh', 'Math.asinh')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.asinh")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/asinh/index.md b/files/fr/web/javascript/reference/global_objects/math/asinh/index.md new file mode 100644 index 0000000000..e831b9abcb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/asinh/index.md @@ -0,0 +1,88 @@ +--- +title: Math.asinh() +slug: Web/JavaScript/Reference/Global_Objects/Math/asinh +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/asinh +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/asinh +--- +
{{JSRef}}
+ +

La fonction Math.asinh() renvoie l'arc sinus hyperbolique d'un nombre :

+ +

Math.asinh(x)=arsinh(x)= le seul ytel quesinh(y)=x\mathtt{\operatorname{Math.asinh}(x)} = \operatorname{arsinh}(x) = \text{ the unique } \; y \; \text{such that} \; \sinh(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-asinh.html")}}
+ +

Syntaxe

+ +
Math.asinh(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

L'arc sinus hyperbolique du nombre passé en argument.

+ +

Description

+ +

asinh() étant une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.asinh() et ne doit pas être appelée depuis un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.asinh()

+ +
Math.asinh = Math.asinh || function(x) {
+  if (x === -Infinity) {
+    return x;
+  } else {
+    return Math.log(x + Math.sqrt(x * x + 1));
+  }
+};
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.asinh', 'Math.asinh')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.asinh', 'Math.asinh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.asinh")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/atan/index.html b/files/fr/web/javascript/reference/global_objects/math/atan/index.html deleted file mode 100644 index 3c6754866d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/atan/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Math.atan() -slug: Web/JavaScript/Reference/Global_Objects/Math/atan -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/atan ---- -
{{JSRef}}
- -

La fonction Math.atan() renvoie l'arc tangente d'un nombre exprimée en radians. Elle est définie par :

- -

Math.atan(x)=arctan(x)=le seuly[-π2;π2]tel quetan(y)=x\mathtt{\operatorname{Math.atan}(x)} = \arctan(x) = \text{ the unique } \; y \in \left[-\frac{\pi}{2}; \frac{\pi}{2}\right] \, \text{such that} \; \tan(y) = x

- -
{{EmbedInteractiveExample("pages/js/math-atan.html")}}
- -

Syntaxe

- -
Math.atan(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

L'arc tangente du nombre passé en argument (exprimé en radians).

- -

Description

- -

La méthode Math.atan() renvoie une valeur numérique comprise entre -π2-\frac{\pi}{2} et π2\frac{\pi}{2}.

- -

atan() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.atan(), elle ne doit pas être utilisée comme une méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.atan()

- -
Math.atan(1);  // 0.7853981633974483
-Math.atan(0);  // 0
-Math.atan(-0); // -0
-
-Math.atan(Infinity); // 1.5707963267948966
-Math.atan(-Infinity); // -1.5707963267948966
-
-// L'angle formé entre la droite [(0,0);(x,y)] et l'axe des abscisses
-// dans un système de coordonnées cartésienne
-Math.atan(y / x);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.4', 'Math.atan')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.atan', 'Math.atan')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.atan', 'Math.atan')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -
{{Compat("javascript.builtins.Math.atan")}}
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/atan/index.md b/files/fr/web/javascript/reference/global_objects/math/atan/index.md new file mode 100644 index 0000000000..3c6754866d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/atan/index.md @@ -0,0 +1,102 @@ +--- +title: Math.atan() +slug: Web/JavaScript/Reference/Global_Objects/Math/atan +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/atan +--- +
{{JSRef}}
+ +

La fonction Math.atan() renvoie l'arc tangente d'un nombre exprimée en radians. Elle est définie par :

+ +

Math.atan(x)=arctan(x)=le seuly[-π2;π2]tel quetan(y)=x\mathtt{\operatorname{Math.atan}(x)} = \arctan(x) = \text{ the unique } \; y \in \left[-\frac{\pi}{2}; \frac{\pi}{2}\right] \, \text{such that} \; \tan(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-atan.html")}}
+ +

Syntaxe

+ +
Math.atan(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

L'arc tangente du nombre passé en argument (exprimé en radians).

+ +

Description

+ +

La méthode Math.atan() renvoie une valeur numérique comprise entre -π2-\frac{\pi}{2} et π2\frac{\pi}{2}.

+ +

atan() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.atan(), elle ne doit pas être utilisée comme une méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.atan()

+ +
Math.atan(1);  // 0.7853981633974483
+Math.atan(0);  // 0
+Math.atan(-0); // -0
+
+Math.atan(Infinity); // 1.5707963267948966
+Math.atan(-Infinity); // -1.5707963267948966
+
+// L'angle formé entre la droite [(0,0);(x,y)] et l'axe des abscisses
+// dans un système de coordonnées cartésienne
+Math.atan(y / x);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.4', 'Math.atan')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.atan', 'Math.atan')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.atan', 'Math.atan')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +
{{Compat("javascript.builtins.Math.atan")}}
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/atan2/index.html b/files/fr/web/javascript/reference/global_objects/math/atan2/index.html deleted file mode 100644 index 24923087e3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/atan2/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Math.atan2() -slug: Web/JavaScript/Reference/Global_Objects/Math/atan2 -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan2 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/atan2 ---- -
{{JSRef}}
- -

La fonction Math.atan2() renvoie l'arc tangente du quotient de ses arguments.

- -
{{EmbedInteractiveExample("pages/js/math-atan2.html")}}
- -

Syntaxe

- -
Math.atan2(y, x) 
- -

Paramètres

- -
-
x
-
La coordonnée en abscisse du point.
-
y
-
La coordonnée en ordonnée du point.
-
- -

Valeur de retour

- -

L'arc tangente du quotient formé par les deux arguments, c'est-à-dire l'angle, exprimé en radians entre l'axe des abscisses et la droite passant par l'origin (0,0) et le point de coordonnées (x,y).

- -

Description

- -

La méthode Math.atan2() renvoie une valeur numérique comprise entre -Pi et Pi qui représente l'angle theta d'un point de coordonnées (x,y). Cela correspond à l'angle (dans le sens trigonométrique) entre l'axe des abscisses et le point de coordonnées (x,y). Attention, le premier argument de la fonction est l'ordonnée (y) et le second est l'abscisse (x).

- -

Graphique explicitant l'angle donné par un point de coordonnées X/Y

- -

Math.atan2() utilise deux arguments x et y, alors que la méthode Math.atan() utilise le ratio de deux nombres comme un seul argument.

- -

atan2() est une méthode statique de l'objet Math, elle doit toujours être utilisée avec la syntaxe Math.atan2(), elle ne doit pas être utilisée comme la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.atan2()

- -
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 pour x > 0.
-Math.atan2( ±0, x );                // ±0 pour x > 0.
-Math.atan2( -y, ±0 );               // -PI/2 pour y > 0.
-Math.atan2( y, ±0 );                // PI/2 pour y > 0.
-Math.atan2( ±y, -Infinity );        // ±PI pour y qui est un nombre fini > 0.
-Math.atan2( ±y, +Infinity );        // ±0 pour y qui est un nombre fini > 0.
-Math.atan2( ±Infinity, x );         // ±PI/2 pour x qui est un nombre fini.
-Math.atan2( ±Infinity, -Infinity ); // ±3*PI/4.
-Math.atan2( ±Infinity, +Infinity ); // ±PI/4.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.5', 'Math.atan2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.atan2', 'Math.atan2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.atan2', 'Math.atan2')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.atan2")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/atan2/index.md b/files/fr/web/javascript/reference/global_objects/math/atan2/index.md new file mode 100644 index 0000000000..24923087e3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/atan2/index.md @@ -0,0 +1,110 @@ +--- +title: Math.atan2() +slug: Web/JavaScript/Reference/Global_Objects/Math/atan2 +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan2 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/atan2 +--- +
{{JSRef}}
+ +

La fonction Math.atan2() renvoie l'arc tangente du quotient de ses arguments.

+ +
{{EmbedInteractiveExample("pages/js/math-atan2.html")}}
+ +

Syntaxe

+ +
Math.atan2(y, x) 
+ +

Paramètres

+ +
+
x
+
La coordonnée en abscisse du point.
+
y
+
La coordonnée en ordonnée du point.
+
+ +

Valeur de retour

+ +

L'arc tangente du quotient formé par les deux arguments, c'est-à-dire l'angle, exprimé en radians entre l'axe des abscisses et la droite passant par l'origin (0,0) et le point de coordonnées (x,y).

+ +

Description

+ +

La méthode Math.atan2() renvoie une valeur numérique comprise entre -Pi et Pi qui représente l'angle theta d'un point de coordonnées (x,y). Cela correspond à l'angle (dans le sens trigonométrique) entre l'axe des abscisses et le point de coordonnées (x,y). Attention, le premier argument de la fonction est l'ordonnée (y) et le second est l'abscisse (x).

+ +

Graphique explicitant l'angle donné par un point de coordonnées X/Y

+ +

Math.atan2() utilise deux arguments x et y, alors que la méthode Math.atan() utilise le ratio de deux nombres comme un seul argument.

+ +

atan2() est une méthode statique de l'objet Math, elle doit toujours être utilisée avec la syntaxe Math.atan2(), elle ne doit pas être utilisée comme la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.atan2()

+ +
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 pour x > 0.
+Math.atan2( ±0, x );                // ±0 pour x > 0.
+Math.atan2( -y, ±0 );               // -PI/2 pour y > 0.
+Math.atan2( y, ±0 );                // PI/2 pour y > 0.
+Math.atan2( ±y, -Infinity );        // ±PI pour y qui est un nombre fini > 0.
+Math.atan2( ±y, +Infinity );        // ±0 pour y qui est un nombre fini > 0.
+Math.atan2( ±Infinity, x );         // ±PI/2 pour x qui est un nombre fini.
+Math.atan2( ±Infinity, -Infinity ); // ±3*PI/4.
+Math.atan2( ±Infinity, +Infinity ); // ±PI/4.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.5', 'Math.atan2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.atan2', 'Math.atan2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.atan2', 'Math.atan2')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.atan2")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/atanh/index.html b/files/fr/web/javascript/reference/global_objects/math/atanh/index.html deleted file mode 100644 index f159f35630..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/atanh/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Math.atanh() -slug: Web/JavaScript/Reference/Global_Objects/Math/atanh -tags: - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/atanh -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/atanh ---- -
{{JSRef}}
- -

La fonction Math.atanh() renvoie l'arc tangente hyperbolique d'un nombre :

- -

x(-1,1),Math.atanh(x)=arctanh(x)= le seul y  tel quetanh(y)=x\forall x \in \left( -1, 1 \right), \mathtt{\operatorname{Math.atanh}(x)} = \operatorname{arctanh}(x) = \text{ the unique } \; y \; \text{such that} \; \tanh(y) = x

- -
{{EmbedInteractiveExample("pages/js/math-atanh.html")}}
- -

Syntaxe

- -
Math.atanh(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

L'arc tangente hyperbolique du nombre passé en argument.

- -

Description

- -

atanh() est une méthode statique de Math, il faut utiliser la syntaxe Math.atanh(), et non pas une méthode d'un objet Math créé sur mesure (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.atanh()

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

Pour les valeurs strictement inférieures à -1 ou strictement supérieures à 1, {{jsxref("NaN")}} sera renvoyé.

- -

Prothèse d'émulation (polyfill)

- -

Pour |x|<1\left|x\right| < 1, on a la formule suivante : artanh(x)=12ln(1+x1-x)\operatorname {artanh} (x) = \frac{1}{2}\ln \left( \frac{1 + x}{1 - x} \right)et on peut donc émuler la fonction avec :

- -
Math.atanh = Math.atanh || function(x) {
-  return Math.log((1+x)/(1-x)) / 2;
-};
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-math.atanh', 'Math.atanh')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.atanh', 'Math.atanh')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.atanh")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/atanh/index.md b/files/fr/web/javascript/reference/global_objects/math/atanh/index.md new file mode 100644 index 0000000000..f159f35630 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/atanh/index.md @@ -0,0 +1,99 @@ +--- +title: Math.atanh() +slug: Web/JavaScript/Reference/Global_Objects/Math/atanh +tags: + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/atanh +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/atanh +--- +
{{JSRef}}
+ +

La fonction Math.atanh() renvoie l'arc tangente hyperbolique d'un nombre :

+ +

x(-1,1),Math.atanh(x)=arctanh(x)= le seul y  tel quetanh(y)=x\forall x \in \left( -1, 1 \right), \mathtt{\operatorname{Math.atanh}(x)} = \operatorname{arctanh}(x) = \text{ the unique } \; y \; \text{such that} \; \tanh(y) = x

+ +
{{EmbedInteractiveExample("pages/js/math-atanh.html")}}
+ +

Syntaxe

+ +
Math.atanh(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

L'arc tangente hyperbolique du nombre passé en argument.

+ +

Description

+ +

atanh() est une méthode statique de Math, il faut utiliser la syntaxe Math.atanh(), et non pas une méthode d'un objet Math créé sur mesure (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.atanh()

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

Pour les valeurs strictement inférieures à -1 ou strictement supérieures à 1, {{jsxref("NaN")}} sera renvoyé.

+ +

Prothèse d'émulation (polyfill)

+ +

Pour |x|<1\left|x\right| < 1, on a la formule suivante : artanh(x)=12ln(1+x1-x)\operatorname {artanh} (x) = \frac{1}{2}\ln \left( \frac{1 + x}{1 - x} \right)et on peut donc émuler la fonction avec :

+ +
Math.atanh = Math.atanh || function(x) {
+  return Math.log((1+x)/(1-x)) / 2;
+};
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-math.atanh', 'Math.atanh')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.atanh', 'Math.atanh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.atanh")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/cbrt/index.html b/files/fr/web/javascript/reference/global_objects/math/cbrt/index.html deleted file mode 100644 index fb9daa3cc0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/cbrt/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Math.cbrt() -slug: Web/JavaScript/Reference/Global_Objects/Math/cbrt -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/cbrt -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/cbrt ---- -
{{JSRef}}
- -

La fonction Math.cbrt() renvoie la racine cubique (le nom anglais étant cubic root) d'un nombre :

- -

Math.cbrt(x)=x3=le seulytel quey3=x\mathtt{Math.cbrt(x)} = \sqrt[3]{x} = \text{the unique} \; y \; \text{such that} \; y^3 = x

- -
{{EmbedInteractiveExample("pages/js/math-cbrt.html")}}
- -

Syntaxe

- -
Math.cbrt(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

La racine cubique du nombre passé en argument.

- -

Description

- -

cbrt() étant une méthode statique de Math, il faut utiliser Math.cbrt(), et non pas la méthode d'un autre objet créé (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.cbrt()

- -
Math.cbrt(NaN); // NaN
-Math.cbrt(-1); // -1
-Math.cbrt(-0); // -0
-Math.cbrt(-Infinity); // -Infinity
-Math.cbrt(0); // 0
-Math.cbrt(1); // 1
-Math.cbrt(Infinity); // Infinity
-Math.cbrt(null); // 0
-Math.cbrt(2);  // 1.2599210498948732
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.cbrt', 'Math.cbrt')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.cbrt', 'Math.cbrt')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.cbrt")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/cbrt/index.md b/files/fr/web/javascript/reference/global_objects/math/cbrt/index.md new file mode 100644 index 0000000000..fb9daa3cc0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/cbrt/index.md @@ -0,0 +1,88 @@ +--- +title: Math.cbrt() +slug: Web/JavaScript/Reference/Global_Objects/Math/cbrt +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cbrt +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/cbrt +--- +
{{JSRef}}
+ +

La fonction Math.cbrt() renvoie la racine cubique (le nom anglais étant cubic root) d'un nombre :

+ +

Math.cbrt(x)=x3=le seulytel quey3=x\mathtt{Math.cbrt(x)} = \sqrt[3]{x} = \text{the unique} \; y \; \text{such that} \; y^3 = x

+ +
{{EmbedInteractiveExample("pages/js/math-cbrt.html")}}
+ +

Syntaxe

+ +
Math.cbrt(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

La racine cubique du nombre passé en argument.

+ +

Description

+ +

cbrt() étant une méthode statique de Math, il faut utiliser Math.cbrt(), et non pas la méthode d'un autre objet créé (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.cbrt()

+ +
Math.cbrt(NaN); // NaN
+Math.cbrt(-1); // -1
+Math.cbrt(-0); // -0
+Math.cbrt(-Infinity); // -Infinity
+Math.cbrt(0); // 0
+Math.cbrt(1); // 1
+Math.cbrt(Infinity); // Infinity
+Math.cbrt(null); // 0
+Math.cbrt(2);  // 1.2599210498948732
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.cbrt', 'Math.cbrt')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.cbrt', 'Math.cbrt')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.cbrt")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/ceil/index.html b/files/fr/web/javascript/reference/global_objects/math/ceil/index.html deleted file mode 100644 index 93e8919368..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/ceil/index.html +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Math.ceil() -slug: Web/JavaScript/Reference/Global_Objects/Math/ceil -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/ceil -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/ceil ---- -
{{JSRef}}
- -

La fonction Math.ceil() retourne le plus petit entier supérieur ou égal au nombre donné.

- -
{{EmbedInteractiveExample("pages/js/math-ceil.html")}}
- -

Syntaxe

- -
Math.ceil(x) 
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Le plus petit entier qui est supérieur ou égal au nombre donné.

- -

Description

- -

ceil() est une méthode statique de Math. Elle doit être utilisée avec la syntaxe Math.ceil(), plutôt que comme une méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -
-

Note : Math.ceil(null) renverra 0 et pas {{jsxref("NaN")}}.

-
- -

Exemples

- -

Utiliser Math.ceil()

- -

Voici un exemple d'utilisation de Math.ceil().

- -
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
-Math.ceil(null);   // 0
- -

Arrondi décimal

- -
// Fermeture
-(function(){
-
-	/**
-	 * Fonction pour arrondir un nombre.
-	 *
-	 * @param	{String}	type	Le type d'arrondi.
-	 * @param	{Number}	value	Le nombre à arrondir.
-	 * @param	{Integer}	exp		L'exposant (le logarithme en base 10 de la base pour l'arrondi).
-	 * @returns	{Number}			La valeur arrondie.
-	 */
-	function decimalAdjust(type, value, exp) {
-		// Si l'exposant vaut undefined ou zero...
-		if (typeof exp === 'undefined' || +exp === 0) {
-			return Math[type](value);
-		}
-		value = +value;
-		exp = +exp;
-		// Si value n'est pas un nombre
-        // ou si l'exposant n'est pas entier
-		if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
-			return NaN;
-		}
-		// Décalage
-		value = value.toString().split('e');
-		value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
-		// Re "calage"
-		value = value.toString().split('e');
-		return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
-	}
-
-	// Arrondi décimal
-	if (!Math.round10) {
-		Math.round10 = function(value, exp) {
-			return decimalAdjust('round', value, exp);
-		};
-	}
-	// Arrondi décimal inférieur
-	if (!Math.floor10) {
-		Math.floor10 = function(value, exp) {
-			return decimalAdjust('floor', value, exp);
-		};
-	}
-	// Arrondi décimal supérieur
-	if (!Math.ceil10) {
-		Math.ceil10 = function(value, exp) {
-			return decimalAdjust('ceil', value, exp);
-		};
-	}
-
-})();
-
-// Arrondi décimal
-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
-// Arrondi décimal inférieur
-Math.floor10(55.59, -1); // 55.5
-Math.floor10(59, 1); // 50
-Math.floor10(-55.51, -1); // -55.6
-Math.floor10(-51, 1); // -60
-// Arrondi décimal supérieur
-Math.ceil10(55.51, -1); // 55.6
-Math.ceil10(51, 1); // 60
-Math.ceil10(-55.59, -1); // -55.5
-Math.ceil10(-59, 1); // -50
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.6', 'Math.ceil')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.ceil', 'Math.ceil')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.ceil', 'Math.ceil')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.ceil")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/ceil/index.md b/files/fr/web/javascript/reference/global_objects/math/ceil/index.md new file mode 100644 index 0000000000..93e8919368 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/ceil/index.md @@ -0,0 +1,174 @@ +--- +title: Math.ceil() +slug: Web/JavaScript/Reference/Global_Objects/Math/ceil +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/ceil +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/ceil +--- +
{{JSRef}}
+ +

La fonction Math.ceil() retourne le plus petit entier supérieur ou égal au nombre donné.

+ +
{{EmbedInteractiveExample("pages/js/math-ceil.html")}}
+ +

Syntaxe

+ +
Math.ceil(x) 
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Le plus petit entier qui est supérieur ou égal au nombre donné.

+ +

Description

+ +

ceil() est une méthode statique de Math. Elle doit être utilisée avec la syntaxe Math.ceil(), plutôt que comme une méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +
+

Note : Math.ceil(null) renverra 0 et pas {{jsxref("NaN")}}.

+
+ +

Exemples

+ +

Utiliser Math.ceil()

+ +

Voici un exemple d'utilisation de Math.ceil().

+ +
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
+Math.ceil(null);   // 0
+ +

Arrondi décimal

+ +
// Fermeture
+(function(){
+
+	/**
+	 * Fonction pour arrondir un nombre.
+	 *
+	 * @param	{String}	type	Le type d'arrondi.
+	 * @param	{Number}	value	Le nombre à arrondir.
+	 * @param	{Integer}	exp		L'exposant (le logarithme en base 10 de la base pour l'arrondi).
+	 * @returns	{Number}			La valeur arrondie.
+	 */
+	function decimalAdjust(type, value, exp) {
+		// Si l'exposant vaut undefined ou zero...
+		if (typeof exp === 'undefined' || +exp === 0) {
+			return Math[type](value);
+		}
+		value = +value;
+		exp = +exp;
+		// Si value n'est pas un nombre
+        // ou si l'exposant n'est pas entier
+		if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
+			return NaN;
+		}
+		// Décalage
+		value = value.toString().split('e');
+		value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
+		// Re "calage"
+		value = value.toString().split('e');
+		return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
+	}
+
+	// Arrondi décimal
+	if (!Math.round10) {
+		Math.round10 = function(value, exp) {
+			return decimalAdjust('round', value, exp);
+		};
+	}
+	// Arrondi décimal inférieur
+	if (!Math.floor10) {
+		Math.floor10 = function(value, exp) {
+			return decimalAdjust('floor', value, exp);
+		};
+	}
+	// Arrondi décimal supérieur
+	if (!Math.ceil10) {
+		Math.ceil10 = function(value, exp) {
+			return decimalAdjust('ceil', value, exp);
+		};
+	}
+
+})();
+
+// Arrondi décimal
+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
+// Arrondi décimal inférieur
+Math.floor10(55.59, -1); // 55.5
+Math.floor10(59, 1); // 50
+Math.floor10(-55.51, -1); // -55.6
+Math.floor10(-51, 1); // -60
+// Arrondi décimal supérieur
+Math.ceil10(55.51, -1); // 55.6
+Math.ceil10(51, 1); // 60
+Math.ceil10(-55.59, -1); // -55.5
+Math.ceil10(-59, 1); // -50
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.6', 'Math.ceil')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.ceil', 'Math.ceil')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.ceil', 'Math.ceil')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.ceil")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/clz32/index.html b/files/fr/web/javascript/reference/global_objects/math/clz32/index.html deleted file mode 100644 index c3298823a6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/clz32/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Math.clz32() -slug: Web/JavaScript/Reference/Global_Objects/Math/clz32 -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/clz32 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/clz32 ---- -
{{JSRef}}
- -

La fonction Math.clz32() renvoie le nombre de zéros de tête dans la représentation binaire sur 32 bits d'un nombre.

- -
{{EmbedInteractiveExample("pages/js/math-clz32.html")}}
- -

Syntaxe

- -
Math.clz32(x)
-
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur retournée

- -

Le nombre de bits à zéro en tête de la représentation binaire sur 32 bits du nombre donné.

- -

Description

- -

"clz32" est un raccourci pour CountLeadingZeroes32 (en français, « compter les zéros de tête »).

- -

Si x n'est pas un nombre, il sera d'abord converti en nombre puis converti en un entier non signé sur 32 bits.

- -

Si l'entier non signé sur 32 bits résultant vaut 0, la fonction renverra 32, car tous les bits valent 0.

- -

Cette fonction est particulièrement utile aux systèmes qui compilent du code JavaScript, comme Emscripten.

- -

Exemples

- -
Math.clz32(1)                // 31
-Math.clz32(1000)             // 22
-Math.clz32()                 // 32
-
-var liste = [NaN, Infinity, -Infinity, 0, -0, null, undefined, 'machin', {}, []];
-liste.every(n => Math.clz32(n) == 32); // true
-
-Math.clz32(true)             // 31
-Math.clz32(3.5)              // 30
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaire
{{SpecName('ES2015', '#sec-math.clz32', 'Math.clz32')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.clz32', 'Math.clz32')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.clz32")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/clz32/index.md b/files/fr/web/javascript/reference/global_objects/math/clz32/index.md new file mode 100644 index 0000000000..c3298823a6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/clz32/index.md @@ -0,0 +1,92 @@ +--- +title: Math.clz32() +slug: Web/JavaScript/Reference/Global_Objects/Math/clz32 +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/clz32 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/clz32 +--- +
{{JSRef}}
+ +

La fonction Math.clz32() renvoie le nombre de zéros de tête dans la représentation binaire sur 32 bits d'un nombre.

+ +
{{EmbedInteractiveExample("pages/js/math-clz32.html")}}
+ +

Syntaxe

+ +
Math.clz32(x)
+
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur retournée

+ +

Le nombre de bits à zéro en tête de la représentation binaire sur 32 bits du nombre donné.

+ +

Description

+ +

"clz32" est un raccourci pour CountLeadingZeroes32 (en français, « compter les zéros de tête »).

+ +

Si x n'est pas un nombre, il sera d'abord converti en nombre puis converti en un entier non signé sur 32 bits.

+ +

Si l'entier non signé sur 32 bits résultant vaut 0, la fonction renverra 32, car tous les bits valent 0.

+ +

Cette fonction est particulièrement utile aux systèmes qui compilent du code JavaScript, comme Emscripten.

+ +

Exemples

+ +
Math.clz32(1)                // 31
+Math.clz32(1000)             // 22
+Math.clz32()                 // 32
+
+var liste = [NaN, Infinity, -Infinity, 0, -0, null, undefined, 'machin', {}, []];
+liste.every(n => Math.clz32(n) == 32); // true
+
+Math.clz32(true)             // 31
+Math.clz32(3.5)              // 30
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaire
{{SpecName('ES2015', '#sec-math.clz32', 'Math.clz32')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.clz32', 'Math.clz32')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.clz32")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/cos/index.html b/files/fr/web/javascript/reference/global_objects/math/cos/index.html deleted file mode 100644 index 2015708e27..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/cos/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Math.cos() -slug: Web/JavaScript/Reference/Global_Objects/Math/cos -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/cos -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/cos ---- -
{{JSRef}}
- -

La fonction Math.cos() retourne le cosinus d'un angle dont la valeur est exprimée en radians.

- -
{{EmbedInteractiveExample("pages/js/math-cos.html")}}
- -

Syntaxe

- -
Math.cos(x)
- -

Paramètres

- -
-
x
-
Une valeur numérique (exprimée en radians).
-
- -

Valeur de retour

- -

Le cosinus de l'angle fourni en argument (exprimé en radians).

- -

Description

- -

La méthode Math.cos() renvoie une valeur numérique comprise entre -1 et 1. Cela représente la valeur du cosinus de l'angle correspondant à cette valeur.

- -

cos est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.cos(), ne pas utiliser une méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.cos()

- -
Math.cos(0);           // 1
-Math.cos(1);           // 0.5403023058681398
-
-Math.cos(Math.PI);     // -1
-Math.cos(2 * Math.PI); // 1
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.7', 'Math.cos')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.cos', 'Math.cos')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.cos', 'Math.cos')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.cos")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/cos/index.md b/files/fr/web/javascript/reference/global_objects/math/cos/index.md new file mode 100644 index 0000000000..2015708e27 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/cos/index.md @@ -0,0 +1,95 @@ +--- +title: Math.cos() +slug: Web/JavaScript/Reference/Global_Objects/Math/cos +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cos +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/cos +--- +
{{JSRef}}
+ +

La fonction Math.cos() retourne le cosinus d'un angle dont la valeur est exprimée en radians.

+ +
{{EmbedInteractiveExample("pages/js/math-cos.html")}}
+ +

Syntaxe

+ +
Math.cos(x)
+ +

Paramètres

+ +
+
x
+
Une valeur numérique (exprimée en radians).
+
+ +

Valeur de retour

+ +

Le cosinus de l'angle fourni en argument (exprimé en radians).

+ +

Description

+ +

La méthode Math.cos() renvoie une valeur numérique comprise entre -1 et 1. Cela représente la valeur du cosinus de l'angle correspondant à cette valeur.

+ +

cos est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.cos(), ne pas utiliser une méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.cos()

+ +
Math.cos(0);           // 1
+Math.cos(1);           // 0.5403023058681398
+
+Math.cos(Math.PI);     // -1
+Math.cos(2 * Math.PI); // 1
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.7', 'Math.cos')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.cos', 'Math.cos')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.cos', 'Math.cos')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.cos")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/cosh/index.html b/files/fr/web/javascript/reference/global_objects/math/cosh/index.html deleted file mode 100644 index 76c7d9fe17..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/cosh/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Math.cosh() -slug: Web/JavaScript/Reference/Global_Objects/Math/cosh -tags: - - ECMAScript6 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/cosh -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/cosh ---- -
{{JSRef}}
- -

La fonction Math.cosh() renvoie le cosinus hyperbolique d'un nombre, défini par :

- -

Math.cosh(x)=ex+e-x2\mathtt{\operatorname{Math.cosh(x)}} = \frac{e^x + e^{-x}}{2}

- -
{{EmbedInteractiveExample("pages/js/math-cosh.html")}}
- - - -

(Voir la page sur {{jsxref("Objets_globaux/Math/E","e","",1)}})

- -

Syntaxe

- -
Math.cosh(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Le cosinus hyperbolique du nombre passé en argument.

- -

Description

- -

cosh() étant une méthode statique de Math, il faut utiliser Math.cosh() et non pas la méthode d'un objet Math créé sur mesure (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.cosh()

- -
Math.cosh(0);  // 1
-Math.cosh(1);  // 1.5430806348152437
-Math.cosh(-1); // 1.5430806348152437
-
- -

Prothèse d'émulation (polyfill)

- -

Cette fonction peut être émulée grâce à la fonction {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

- -
Math.cosh = Math.cosh || function(x) {
-    return (Math.exp(x) + Math.exp(-x)) / 2;
-}
- -

On peut également utiliser un unique appel à {{jsxref("Objets_globaux/Math/exp", "exp()")}} :

- -
Math.cosh = Math.cosh || function(x) {
-    var y = Math.exp(x);
-    return (y + 1 / y) / 2;
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.cosh', 'Math.cosh')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.cosh', 'Math.cosh')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.cosh")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/cosh/index.md b/files/fr/web/javascript/reference/global_objects/math/cosh/index.md new file mode 100644 index 0000000000..76c7d9fe17 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/cosh/index.md @@ -0,0 +1,103 @@ +--- +title: Math.cosh() +slug: Web/JavaScript/Reference/Global_Objects/Math/cosh +tags: + - ECMAScript6 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/cosh +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/cosh +--- +
{{JSRef}}
+ +

La fonction Math.cosh() renvoie le cosinus hyperbolique d'un nombre, défini par :

+ +

Math.cosh(x)=ex+e-x2\mathtt{\operatorname{Math.cosh(x)}} = \frac{e^x + e^{-x}}{2}

+ +
{{EmbedInteractiveExample("pages/js/math-cosh.html")}}
+ + + +

(Voir la page sur {{jsxref("Objets_globaux/Math/E","e","",1)}})

+ +

Syntaxe

+ +
Math.cosh(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Le cosinus hyperbolique du nombre passé en argument.

+ +

Description

+ +

cosh() étant une méthode statique de Math, il faut utiliser Math.cosh() et non pas la méthode d'un objet Math créé sur mesure (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.cosh()

+ +
Math.cosh(0);  // 1
+Math.cosh(1);  // 1.5430806348152437
+Math.cosh(-1); // 1.5430806348152437
+
+ +

Prothèse d'émulation (polyfill)

+ +

Cette fonction peut être émulée grâce à la fonction {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

+ +
Math.cosh = Math.cosh || function(x) {
+    return (Math.exp(x) + Math.exp(-x)) / 2;
+}
+ +

On peut également utiliser un unique appel à {{jsxref("Objets_globaux/Math/exp", "exp()")}} :

+ +
Math.cosh = Math.cosh || function(x) {
+    var y = Math.exp(x);
+    return (y + 1 / y) / 2;
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.cosh', 'Math.cosh')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.cosh', 'Math.cosh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.cosh")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/e/index.html b/files/fr/web/javascript/reference/global_objects/math/e/index.html deleted file mode 100644 index f4df99a2cb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/e/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Math.E -slug: Web/JavaScript/Reference/Global_Objects/Math/E -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/E -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/E ---- -
{{JSRef}}
- -

La propriété Math.E représente la base du logarithme naturel, e, et vaut environ 2.718.

- -

Math.E=e2.718\mathtt{\mi{Math.E}} = e \approx 2.718

- -
{{EmbedInteractiveExample("pages/js/math-e.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

E étant une propriété statique de Math, il doit toujours être utilisé avec la syntaxe Math.E, et non pas être appelé comme propriété d'un autre objet Math qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.E

- -

La fonction suivante renvoie la valeur de e :

- -
function getNapier() {
-   return Math.E;
-}
-
-getNapier(); // 2.718281828459045
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.1', 'Math.E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.e', 'Math.E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.e', 'Math.E')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.E")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/e/index.md b/files/fr/web/javascript/reference/global_objects/math/e/index.md new file mode 100644 index 0000000000..f4df99a2cb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/e/index.md @@ -0,0 +1,82 @@ +--- +title: Math.E +slug: Web/JavaScript/Reference/Global_Objects/Math/E +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/E +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/E +--- +
{{JSRef}}
+ +

La propriété Math.E représente la base du logarithme naturel, e, et vaut environ 2.718.

+ +

Math.E=e2.718\mathtt{\mi{Math.E}} = e \approx 2.718

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

Description

+ +

E étant une propriété statique de Math, il doit toujours être utilisé avec la syntaxe Math.E, et non pas être appelé comme propriété d'un autre objet Math qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.E

+ +

La fonction suivante renvoie la valeur de e :

+ +
function getNapier() {
+   return Math.E;
+}
+
+getNapier(); // 2.718281828459045
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.1', 'Math.E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.e', 'Math.E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.e', 'Math.E')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.E")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/exp/index.html b/files/fr/web/javascript/reference/global_objects/math/exp/index.html deleted file mode 100644 index 29ac4ef407..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/exp/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Math.exp() -slug: Web/JavaScript/Reference/Global_Objects/Math/exp -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/exp -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/exp ---- -
{{JSRef}}
- -

La fonction Math.exp() renvoie l'exponentielle d'un nombre (donnée par e^x, où x est la valeur passée en argument et e la valeur du {{jsxref("Objets_globaux/Math/E","nombre d'Euler (parfois appelé constante de Napier)","",1)}}.

- -
{{EmbedInteractiveExample("pages/js/math-exp.html")}}
- -

Syntaxe

- -
Math.exp(x)
- -

Paramètres

- -
-
x
-
-

Un nombre.

-
-
- -

Valeur de retour

- -

L'exponentielle du nombre passé en argument (e^x).

- -

Description

- -

exp() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.exp(), elle ne doit pas être utilisée avec un objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.exp()

- -
Math.exp(-1); // 0.36787944117144233
-Math.exp(0);  // 1
-Math.exp(1);  // 2.718281828459045
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.8', 'Math.exp')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.exp', 'Math.exp')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.exp', 'Math.exp')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.exp")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/exp/index.md b/files/fr/web/javascript/reference/global_objects/math/exp/index.md new file mode 100644 index 0000000000..29ac4ef407 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/exp/index.md @@ -0,0 +1,93 @@ +--- +title: Math.exp() +slug: Web/JavaScript/Reference/Global_Objects/Math/exp +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/exp +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/exp +--- +
{{JSRef}}
+ +

La fonction Math.exp() renvoie l'exponentielle d'un nombre (donnée par e^x, où x est la valeur passée en argument et e la valeur du {{jsxref("Objets_globaux/Math/E","nombre d'Euler (parfois appelé constante de Napier)","",1)}}.

+ +
{{EmbedInteractiveExample("pages/js/math-exp.html")}}
+ +

Syntaxe

+ +
Math.exp(x)
+ +

Paramètres

+ +
+
x
+
+

Un nombre.

+
+
+ +

Valeur de retour

+ +

L'exponentielle du nombre passé en argument (e^x).

+ +

Description

+ +

exp() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.exp(), elle ne doit pas être utilisée avec un objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.exp()

+ +
Math.exp(-1); // 0.36787944117144233
+Math.exp(0);  // 1
+Math.exp(1);  // 2.718281828459045
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.8', 'Math.exp')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.exp', 'Math.exp')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.exp', 'Math.exp')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.exp")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/expm1/index.html b/files/fr/web/javascript/reference/global_objects/math/expm1/index.html deleted file mode 100644 index 372880a5df..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/expm1/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Math.expm1() -slug: Web/JavaScript/Reference/Global_Objects/Math/expm1 -tags: - - ECMAScript6 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/expm1 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/expm1 ---- -
{{JSRef}}
- -

La fonction Math.expm1() renvoie e^x - 1, avec x l'argument donné et {{jsxref("Objets_globaux/Math/E","e")}} la base du logarithme nepérien.

- -
{{EmbedInteractiveExample("pages/js/math-expm1.html")}}
- -

Syntaxe

- -
Math.expm1(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Un nombre qui représente e^x- 1x est la valeur passée en argument et e^x l'exponentielle du nombre.

- -

Description

- -

expm1() étant une méthode statique de Math, il faut utiliser Math.expm1()et non pas la méthode d'un autre objet qui aurait été créé sur mesure (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.expm1()

- -
Math.expm1(-1); // -0.6321205588285577
-Math.expm1(0);  // 0
-Math.expm1(1);  // 1.718281828459045
- -

Prothèse d'émulation (polyfill)

- -

Cette fonction peut être émulée en utilisant la fonction {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

- -
Math.expm1 = Math.expm1 || function(x) {
-    return Math.exp(x) - 1;
-};
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.expm1', 'Math.expm1')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.expm1', 'Math.expm1')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.expm1")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/expm1/index.md b/files/fr/web/javascript/reference/global_objects/math/expm1/index.md new file mode 100644 index 0000000000..372880a5df --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/expm1/index.md @@ -0,0 +1,91 @@ +--- +title: Math.expm1() +slug: Web/JavaScript/Reference/Global_Objects/Math/expm1 +tags: + - ECMAScript6 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/expm1 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/expm1 +--- +
{{JSRef}}
+ +

La fonction Math.expm1() renvoie e^x - 1, avec x l'argument donné et {{jsxref("Objets_globaux/Math/E","e")}} la base du logarithme nepérien.

+ +
{{EmbedInteractiveExample("pages/js/math-expm1.html")}}
+ +

Syntaxe

+ +
Math.expm1(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Un nombre qui représente e^x- 1x est la valeur passée en argument et e^x l'exponentielle du nombre.

+ +

Description

+ +

expm1() étant une méthode statique de Math, il faut utiliser Math.expm1()et non pas la méthode d'un autre objet qui aurait été créé sur mesure (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.expm1()

+ +
Math.expm1(-1); // -0.6321205588285577
+Math.expm1(0);  // 0
+Math.expm1(1);  // 1.718281828459045
+ +

Prothèse d'émulation (polyfill)

+ +

Cette fonction peut être émulée en utilisant la fonction {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

+ +
Math.expm1 = Math.expm1 || function(x) {
+    return Math.exp(x) - 1;
+};
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.expm1', 'Math.expm1')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.expm1', 'Math.expm1')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.expm1")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/floor/index.html b/files/fr/web/javascript/reference/global_objects/math/floor/index.html deleted file mode 100644 index 4b9a6e5422..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/floor/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Math.floor() -slug: Web/JavaScript/Reference/Global_Objects/Math/floor -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/floor -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/floor ---- -
{{JSRef}}
- -

La fonction Math.floor(x) renvoie le plus grand entier qui est inférieur ou égal à un nombre x.

- -
{{EmbedInteractiveExample("pages/js/math-floor.html")}}
- -

Syntaxe

- -
Math.floor(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Un nombre qui représente le plus grand entier inférieur ou égal à la valeur passée en argument.

- -

Description

- -

floor() est une méthode statique de l'objet Math, elle doit toujours être utilisée avec la syntaxe  Math.floor(), elle ne doit pas être utilisée avec un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -
-

Note : Math.floor(null) renvoie 0 et pas {{jsxref("NaN")}}.

-
- -

Exemples

- -

Utiliser Math.floor

- -
Math.floor( 45.95); //  45
-Math.floor( 45.05); //  45
-Math.floor(  4   ); //   4
-Math.floor(-45.05); // -46
-Math.floor(-45.95); // -46
-Math.floor(null);   // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.9', 'Math.floor')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.floor', 'Math.floor')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.floor', 'Math.floor')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.floor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/floor/index.md b/files/fr/web/javascript/reference/global_objects/math/floor/index.md new file mode 100644 index 0000000000..4b9a6e5422 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/floor/index.md @@ -0,0 +1,97 @@ +--- +title: Math.floor() +slug: Web/JavaScript/Reference/Global_Objects/Math/floor +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/floor +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/floor +--- +
{{JSRef}}
+ +

La fonction Math.floor(x) renvoie le plus grand entier qui est inférieur ou égal à un nombre x.

+ +
{{EmbedInteractiveExample("pages/js/math-floor.html")}}
+ +

Syntaxe

+ +
Math.floor(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Un nombre qui représente le plus grand entier inférieur ou égal à la valeur passée en argument.

+ +

Description

+ +

floor() est une méthode statique de l'objet Math, elle doit toujours être utilisée avec la syntaxe  Math.floor(), elle ne doit pas être utilisée avec un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +
+

Note : Math.floor(null) renvoie 0 et pas {{jsxref("NaN")}}.

+
+ +

Exemples

+ +

Utiliser Math.floor

+ +
Math.floor( 45.95); //  45
+Math.floor( 45.05); //  45
+Math.floor(  4   ); //   4
+Math.floor(-45.05); // -46
+Math.floor(-45.95); // -46
+Math.floor(null);   // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.9', 'Math.floor')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.floor', 'Math.floor')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.floor', 'Math.floor')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.floor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/fround/index.html b/files/fr/web/javascript/reference/global_objects/math/fround/index.html deleted file mode 100644 index 6b5ec47735..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/fround/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Math.fround() -slug: Web/JavaScript/Reference/Global_Objects/Math/fround -tags: - - ECMAScript6 - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/fround -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/fround ---- -
{{JSRef}}
- -

La fonction Math.fround() renvoie le nombre flottant à précision simple sur 32 bits qui est le plus proche du nombre fourni.

- -
{{EmbedInteractiveExample("pages/js/math-fround.html")}}
- -

Syntaxe

- -
Math.fround(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Le nombre flottant à précision simple sur 32 bits qui est le plus proche de la valeur fournie en argument.

- -

Description

- -

Un moteur JavaScript utilise des nombres flottant à précision simple sur 64 bits. Cela permet d'obtenir une précision fine. Toutefois, lorsqu'on manipule des valeurs représentées sur 32 bits (par exemple des valeurs extraites d'un {{jsxref("Float32Array")}}) et qu'on souhaite comparer celles-ci avec des valeurs sur 32 bits, on peut obtenir des inégalités alors que les valeurs semblent identiques.

- -

Pour résoudre ce problème, on peut utiliser Math.fround() afin de transformer un nombre représenté sur 64 bits en un nombre représenté sur 32 bits. Pour le moteur JavaScript, la valeur sera toujours représentée sur 64 bits mais elle aura été « arrondie » à partir du 23e bit de la mantisse. Si le nombre passé en argument se situe en dehors de l'intervalle représentable sur 32 bits, la méthode renverra {{jsxref("Infinity")}} ou -Infinity.

- -

fround étant une méthode statique de Math, il faut utiliser Math.fround() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.fround()

- -
Math.fround(0);     // 0
-Math.fround(1);     // 1
-
-// 1.337 ne peut pas être représenté correctement
-// sur 32 bits
-Math.fround(1.337); // 1.3370000123977661
-
-Math.fround(1.5);   // 1.5
-Math.fround(NaN);   // NaN
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.fround', 'Math.fround')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.fround', 'Math.fround')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.fround")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/fround/index.md b/files/fr/web/javascript/reference/global_objects/math/fround/index.md new file mode 100644 index 0000000000..6b5ec47735 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/fround/index.md @@ -0,0 +1,86 @@ +--- +title: Math.fround() +slug: Web/JavaScript/Reference/Global_Objects/Math/fround +tags: + - ECMAScript6 + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/fround +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/fround +--- +
{{JSRef}}
+ +

La fonction Math.fround() renvoie le nombre flottant à précision simple sur 32 bits qui est le plus proche du nombre fourni.

+ +
{{EmbedInteractiveExample("pages/js/math-fround.html")}}
+ +

Syntaxe

+ +
Math.fround(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Le nombre flottant à précision simple sur 32 bits qui est le plus proche de la valeur fournie en argument.

+ +

Description

+ +

Un moteur JavaScript utilise des nombres flottant à précision simple sur 64 bits. Cela permet d'obtenir une précision fine. Toutefois, lorsqu'on manipule des valeurs représentées sur 32 bits (par exemple des valeurs extraites d'un {{jsxref("Float32Array")}}) et qu'on souhaite comparer celles-ci avec des valeurs sur 32 bits, on peut obtenir des inégalités alors que les valeurs semblent identiques.

+ +

Pour résoudre ce problème, on peut utiliser Math.fround() afin de transformer un nombre représenté sur 64 bits en un nombre représenté sur 32 bits. Pour le moteur JavaScript, la valeur sera toujours représentée sur 64 bits mais elle aura été « arrondie » à partir du 23e bit de la mantisse. Si le nombre passé en argument se situe en dehors de l'intervalle représentable sur 32 bits, la méthode renverra {{jsxref("Infinity")}} ou -Infinity.

+ +

fround étant une méthode statique de Math, il faut utiliser Math.fround() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.fround()

+ +
Math.fround(0);     // 0
+Math.fround(1);     // 1
+
+// 1.337 ne peut pas être représenté correctement
+// sur 32 bits
+Math.fround(1.337); // 1.3370000123977661
+
+Math.fround(1.5);   // 1.5
+Math.fround(NaN);   // NaN
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.fround', 'Math.fround')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.fround', 'Math.fround')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.fround")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/hypot/index.html b/files/fr/web/javascript/reference/global_objects/math/hypot/index.html deleted file mode 100644 index bba9aaebe8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/hypot/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Math.hypot() -slug: Web/JavaScript/Reference/Global_Objects/Math/hypot -tags: - - ECMAScript6 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/hypot -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/hypot ---- -
{{JSRef}}
- -

La fonction Math.hypot() renvoie la racine carrée de la somme des carrés de ses arguments. On peut également la définir avec la formule suivante :

- -

Math.hypot(v1,v2,,vn)=i=1nvi2=v12+v22++vn2\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}

- -
{{EmbedInteractiveExample("pages/js/math-hypot.html")}}
- -

Syntaxe

- -
Math.hypot([valeur1[,valeur2, ...]]) 
- -

Paramètres

- -
-
valeur1, valeur2, ...
-
Des nombres.
-
- -

Valeur de retour

- -

La racine carrée de la somme des carrés des arguments. S'il existe un des arguments qui ne peut pas être converti en un nombre, c'est la valeur {{jsxref("NaN")}} qui sera renvoyée.

- -

Description

- -

hypot() étant une méthode statique de Math, il faut utiliser Math.hypot()et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Si aucun argument n'est donné, le résultat sera +0.Si, parmi les arguments, au moins un ne peut pas être converti en un nombre, le résultat sera {{jsxref("NaN")}}.Si cette fonction est utilisée avec un argument : Math.hypot(x) sera équivalente à Math.abs(x).

- -

Cette fonction permet entre autres de gérer certains cas où, pour les grands nombres, l'utilisation de {{jsxref("Math.sqrt()")}} aurait renvoyé {{jsxref("Infinity")}} à cause des calculs intermédiaires.

- -

Exemples

- -

Utiliser Math.hypot()

- -
Math.hypot(3, 4)        // 5
-Math.hypot(3, 4, 5)     // 7.0710678118654755
-Math.hypot()            // 0
-Math.hypot(NaN)         // NaN
-Math.hypot(3, 4, "toto") // NaN, +"toto" => NaN
-Math.hypot(3, 4, "5")   // 7.0710678118654755, +"5" => 5
-Math.hypot(-3)          // 3, the same as Math.abs(-3)
-
- -

Prothèse d'émulation (polyfill)

- -

Si elle n'est pas disponible, cette fonction peut être émulée de la façon suivante :

- -
Math.hypot =  Math.hypot || function() {
-    var y = 0;
-    var length = arguments.length;
-
-    for (var i = 0; i < length; i++) {
-      if(arguments[i] === Infinity || arguments[i] === -Infinity) {
-        return Infinity;
-      }
-      y += arguments[i] * arguments[i];
-    }
-    return Math.sqrt(y);
-};
-
- -

Voici une seconde version qui évite les dépassements :

- -
Math.hypot = function (x, y) {
-  // https://bugzilla.mozilla.org/show_bug.cgi?id=896264#c28
-  var max = 0;
-  var s = 0;
-  for (var i = 0; i < arguments.length; i += 1) {
-    var arg = Math.abs(Number(arguments[i]));
-    if (arg > max) {
-      s *= (max / arg) * (max / arg);
-      max = arg;
-    }
-    s += arg === 0 && max === 0 ? 0 : (arg / max) * (arg / max);
-  }
-  return max === 1 / 0 ? 1 / 0 : max * Math.sqrt(s);
-};
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.hypot', 'Math.hypot')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.hypot', 'Math.hypot')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.hypot")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/hypot/index.md b/files/fr/web/javascript/reference/global_objects/math/hypot/index.md new file mode 100644 index 0000000000..bba9aaebe8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/hypot/index.md @@ -0,0 +1,126 @@ +--- +title: Math.hypot() +slug: Web/JavaScript/Reference/Global_Objects/Math/hypot +tags: + - ECMAScript6 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/hypot +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/hypot +--- +
{{JSRef}}
+ +

La fonction Math.hypot() renvoie la racine carrée de la somme des carrés de ses arguments. On peut également la définir avec la formule suivante :

+ +

Math.hypot(v1,v2,,vn)=i=1nvi2=v12+v22++vn2\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}

+ +
{{EmbedInteractiveExample("pages/js/math-hypot.html")}}
+ +

Syntaxe

+ +
Math.hypot([valeur1[,valeur2, ...]]) 
+ +

Paramètres

+ +
+
valeur1, valeur2, ...
+
Des nombres.
+
+ +

Valeur de retour

+ +

La racine carrée de la somme des carrés des arguments. S'il existe un des arguments qui ne peut pas être converti en un nombre, c'est la valeur {{jsxref("NaN")}} qui sera renvoyée.

+ +

Description

+ +

hypot() étant une méthode statique de Math, il faut utiliser Math.hypot()et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Si aucun argument n'est donné, le résultat sera +0.Si, parmi les arguments, au moins un ne peut pas être converti en un nombre, le résultat sera {{jsxref("NaN")}}.Si cette fonction est utilisée avec un argument : Math.hypot(x) sera équivalente à Math.abs(x).

+ +

Cette fonction permet entre autres de gérer certains cas où, pour les grands nombres, l'utilisation de {{jsxref("Math.sqrt()")}} aurait renvoyé {{jsxref("Infinity")}} à cause des calculs intermédiaires.

+ +

Exemples

+ +

Utiliser Math.hypot()

+ +
Math.hypot(3, 4)        // 5
+Math.hypot(3, 4, 5)     // 7.0710678118654755
+Math.hypot()            // 0
+Math.hypot(NaN)         // NaN
+Math.hypot(3, 4, "toto") // NaN, +"toto" => NaN
+Math.hypot(3, 4, "5")   // 7.0710678118654755, +"5" => 5
+Math.hypot(-3)          // 3, the same as Math.abs(-3)
+
+ +

Prothèse d'émulation (polyfill)

+ +

Si elle n'est pas disponible, cette fonction peut être émulée de la façon suivante :

+ +
Math.hypot =  Math.hypot || function() {
+    var y = 0;
+    var length = arguments.length;
+
+    for (var i = 0; i < length; i++) {
+      if(arguments[i] === Infinity || arguments[i] === -Infinity) {
+        return Infinity;
+      }
+      y += arguments[i] * arguments[i];
+    }
+    return Math.sqrt(y);
+};
+
+ +

Voici une seconde version qui évite les dépassements :

+ +
Math.hypot = function (x, y) {
+  // https://bugzilla.mozilla.org/show_bug.cgi?id=896264#c28
+  var max = 0;
+  var s = 0;
+  for (var i = 0; i < arguments.length; i += 1) {
+    var arg = Math.abs(Number(arguments[i]));
+    if (arg > max) {
+      s *= (max / arg) * (max / arg);
+      max = arg;
+    }
+    s += arg === 0 && max === 0 ? 0 : (arg / max) * (arg / max);
+  }
+  return max === 1 / 0 ? 1 / 0 : max * Math.sqrt(s);
+};
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.hypot', 'Math.hypot')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.hypot', 'Math.hypot')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.hypot")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/imul/index.html b/files/fr/web/javascript/reference/global_objects/math/imul/index.html deleted file mode 100644 index bdfb591384..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/imul/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Math.imul() -slug: Web/JavaScript/Reference/Global_Objects/Math/imul -tags: - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/imul ---- -
{{JSRef}}
- -

La fonction Math.imul() renvoie le résultat de la multiplication de deux nombres, calculée avec la représentation sur 32 bits de ces nombres, à la façon du langage C.

- -
{{EmbedInteractiveExample("pages/js/math-imul.html")}}
- -

Syntaxe

- -
Math.imul(a, b)
- -

Paramètres

- -
-
a
-
Le premier nombre.
-
b
-
Le second nombre.
-
- -

Valeur de retour

- -

Le résultat de la multiplication sur 32 bits des valeurs passées en argument (comme en C).

- -

Description

- -

Math.imul() permet d'effectuer une multiplication rapide pour des entiers sur 32 bits avec une sémantique proche du langage C. Cela est utile pour des aspects de performance, notamment pour des projets comme Emscripten. imul() étant une méthode statique de Math, il faut utiliser Math.imul() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Attention à l'utilisation de nombres flottants avec Math.imul() car cela implique une opération de conversion des flottants vers les entiers pour la multiplication puis une opération de conversion du résultat en flottant. Dans la pratique, Math.imul() est notamment pertinent pour asm.js.

- -

Exemples

- -

Utiliser Math.imul()

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

Prothèse d'émulation (polyfill)

- -

Si elle n'est pas disponible, cette fonction peut être émulée de la façon suivante :

- -
Math.imul = Math.imul || function(a, b) {
-  var ah  = (a >>> 16) & 0xffff;
-  var al = a & 0xffff;
-  var bh  = (b >>> 16) & 0xffff;
-  var bl = b & 0xffff;
-  // Le décalage par 0 rétablit le signe de la partie haute
-  // le |0 final convertit la valeur non-signée en une valeur signée
-  return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
-};
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.imul', 'Math.imul')}}{{Spec2('ES6')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.imul', 'Math.imul')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.imul")}}

diff --git a/files/fr/web/javascript/reference/global_objects/math/imul/index.md b/files/fr/web/javascript/reference/global_objects/math/imul/index.md new file mode 100644 index 0000000000..bdfb591384 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/imul/index.md @@ -0,0 +1,90 @@ +--- +title: Math.imul() +slug: Web/JavaScript/Reference/Global_Objects/Math/imul +tags: + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/imul +--- +
{{JSRef}}
+ +

La fonction Math.imul() renvoie le résultat de la multiplication de deux nombres, calculée avec la représentation sur 32 bits de ces nombres, à la façon du langage C.

+ +
{{EmbedInteractiveExample("pages/js/math-imul.html")}}
+ +

Syntaxe

+ +
Math.imul(a, b)
+ +

Paramètres

+ +
+
a
+
Le premier nombre.
+
b
+
Le second nombre.
+
+ +

Valeur de retour

+ +

Le résultat de la multiplication sur 32 bits des valeurs passées en argument (comme en C).

+ +

Description

+ +

Math.imul() permet d'effectuer une multiplication rapide pour des entiers sur 32 bits avec une sémantique proche du langage C. Cela est utile pour des aspects de performance, notamment pour des projets comme Emscripten. imul() étant une méthode statique de Math, il faut utiliser Math.imul() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Attention à l'utilisation de nombres flottants avec Math.imul() car cela implique une opération de conversion des flottants vers les entiers pour la multiplication puis une opération de conversion du résultat en flottant. Dans la pratique, Math.imul() est notamment pertinent pour asm.js.

+ +

Exemples

+ +

Utiliser Math.imul()

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

Prothèse d'émulation (polyfill)

+ +

Si elle n'est pas disponible, cette fonction peut être émulée de la façon suivante :

+ +
Math.imul = Math.imul || function(a, b) {
+  var ah  = (a >>> 16) & 0xffff;
+  var al = a & 0xffff;
+  var bh  = (b >>> 16) & 0xffff;
+  var bl = b & 0xffff;
+  // Le décalage par 0 rétablit le signe de la partie haute
+  // le |0 final convertit la valeur non-signée en une valeur signée
+  return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
+};
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.imul', 'Math.imul')}}{{Spec2('ES6')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.imul', 'Math.imul')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.imul")}}

diff --git a/files/fr/web/javascript/reference/global_objects/math/index.html b/files/fr/web/javascript/reference/global_objects/math/index.html deleted file mode 100644 index 86ab1bee47..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/index.html +++ /dev/null @@ -1,170 +0,0 @@ ---- -title: Math -slug: Web/JavaScript/Reference/Global_Objects/Math -tags: - - JavaScript - - Math - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math -original_slug: Web/JavaScript/Reference/Objets_globaux/Math ---- -
{{JSRef}}
- -

L'objet Math est un objet natif dont les méthodes et propriétés permettent l'utilisation de constantes et fonctions mathématiques. Cet objet n'est pas une fonction.

- -
-

Attention : Math fonctionne avec le type {{jsxref("Number")}}. Il ne fonctionne pas avec les grands entiers/{{jsxref("BigInt")}}.

-
- -

Description

- -

Contrairement aux autres objets globaux, Math n'est pas un constructeur. Toutes les propriétés et les méthodes de Math sont statiques (pour éventuellement étendre cette API, ce qui est fortement déconseillé, on n'utilisera donc pas Math.prototype).

- -

Pour accéder à la constante PI, on utilise Math.PI.
- Pour accéder à la fonction sinus, on utilise Math.sin(x)x est l'argument de cette méthode.

- -

Les constantes sont définies avec la précision des nombres réels en JavaScript.

- -

Propriétés

- -
-
{{jsxref("Math.E")}}
-
Nombre d'Euler, la base des logarithmes naturels, environ 2,718.
-
{{jsxref("Math.LN2")}}
-
Logarithme naturel de 2, environ 0,693.
-
{{jsxref("Math.LN10")}}
-
Logarithme naturel de 10, environ 2,302.
-
{{jsxref("Math.LOG2E")}}
-
Logarithme de base 2 de E, environ 1,442.
-
{{jsxref("Math.LOG10E")}}
-
Logarithme de base 10 de E, environ 0,434.
-
{{jsxref("Math.PI")}}
-
Quotient de la circonférence d'un cercle par son diamètre, environ 3,14159.
-
{{jsxref("Math.SQRT1_2")}}
-
Racine carrée de 1/2 ; équivalent de 1 sur la racine carrée de 2, environ 0,707.
-
{{jsxref("Math.SQRT2")}}
-
Racine carrée de 2, environ 1,414.
-
- -

Méthodes

- -

Note : Les fonctions trigonométriques (sin(), cos(), tan(), asin(), acos(), atan(), atan2()) acceptent ou retournent des angles en radians. Pour convertir des degrés en radians, multipliez la valeur en degrés par (Math.PI / 180). Pour passer des radians en degrés, divisez la valeur en radians par (Math.PI / 180).

- -

Note : La précision des fonctions mathématiques dépend notamment de l'implémentation. Cela signifie que différents navigateurs peuvent fournir des résultats différents. On peut même avoir un même moteur JavaScript qui, sur des architectures et/ou des systèmes d'exploitation différents, fournit des résultats différents.

- -
-
{{jsxref("Objets_globaux/Math/abs", "Math.abs(x)")}}
-
Retourne la valeur absolue d'un nombre.
-
{{jsxref("Objets_globaux/Math/acos", "Math.acos(x)")}}
-
Retourne l'arc cosinus d'un nombre.
-
{{jsxref("Objets_globaux/Math/acosh", "Math.acosh(x)")}}
-
Retourne l'arc cosinus hyperbolique d'un nombre.
-
{{jsxref("Objets_globaux/Math/asin", "Math.asin(x)")}}
-
Retourne l'arc sinus d'un nombre.
-
{{jsxref("Objets_globaux/Math/asinh", "Math.asinh(x)")}}
-
Retourne l'arc sinus hyperbolique d'un nombre.
-
{{jsxref("Objets_globaux/Math/atan", "Math.atan(x)")}}
-
Retourne l'arc tangente d'un nombre.
-
{{jsxref("Objets_globaux/Math/atanh", "Math.atanh(x)")}}
-
Retourne l'arc tangente hyperbolique d'un nombre
-
{{jsxref("Objets_globaux/Math/atan2", "Math.atan2(y, x)")}}
-
Retourne l'arc tangente du quotient de ses arguments.
-
{{jsxref("Objets_globaux/Math/cbrt", "Math.cbrt(x)")}}
-
Renvoie la racine cubique d'un nombre.
-
{{jsxref("Objets_globaux/Math/ceil", "Math.ceil(x)")}}
-
Retourne le plus petit entier supérieur ou égal à la valeur passée en paramètre.
-
{{jsxref("Objets_globaux/Math/clz32", "Math.clz32(x)")}}
-
Renvoie le nombre de zéros qui préfixent un entier sur 32 bits.
-
{{jsxref("Objets_globaux/Math/cos", "Math.cos(x)")}}
-
Retourne le cosinus d'un nombre.
-
{{jsxref("Objets_globaux/Math/cosh", "Math.cosh(x)")}}
-
Renvoie le cosinus hyperbolique d'un nombre.
-
{{jsxref("Objets_globaux/Math/exp", "Math.exp(x)")}}
-
Renvoie l'exponentielle d'un nombre (soit E^nombre) avec E la constante d'Euler (2,718...).
-
{{jsxref("Objets_globaux/Math/expm1", "Math.expm1(x)")}}
-
Renvoie le résultat de 1 moins l'exponentielle d'un nombre.
-
{{jsxref("Objets_globaux/Math/floor", "Math.floor(x)")}}
-
Retourne le plus grand entier inférieur ou égal à la valeur passée en paramètre.
-
{{jsxref("Objets_globaux/Math/fround", "Math.fround(x)")}}
-
Renvoie le nombre flottant exprimé sur 32 bits le plus proche de l'argument.
-
{{jsxref("Objets_globaux/Math/hypot", "Math.hypot([x[,y[,…]]])")}}
-
Retourne la racine carré de la somme des carrés des arguments.
-
{{jsxref("Objets_globaux/Math/imul", "Math.imul(x, y)")}}
-
Retourne le résultat de la multiplication d'entiers sur 32 bits.
-
{{jsxref("Objets_globaux/Math/log", "Math.log(x)")}}
-
Retourne le logarithme naturel (loge) d'un nombre.
-
{{jsxref("Objets_globaux/Math/log1p", "Math.log1p(x)")}}
-
Retourne le logarithme naturel de 1 + un nombre.
-
{{jsxref("Objets_globaux/Math/log10", "Math.log10(x)")}}
-
Retourne le logarithme en base 10 d'un nombre.
-
{{jsxref("Objets_globaux/Math/log2", "Math.log2(x)")}}
-
Retourne le logarithme en base 2 d'un nombre.
-
{{jsxref("Objets_globaux/Math/max", "Math.max([x[,y[,…]]])")}}
-
Retourne la plus grande valeur d'une liste de nombres.
-
{{jsxref("Objets_globaux/Math/min", "Math.min([x[,y[,…]]])")}}
-
Retourne la plus petite valeur d'une liste de nombres.
-
{{jsxref("Objets_globaux/Math/pow", "Math.pow(x,y)")}}
-
Retourne le calcul de x à la puissance y (x correspond à la base et y à l'exposant).
-
{{jsxref("Objets_globaux/Math/random", "Math.random()")}}
-
Retourne un nombre pseudo-aléatoire compris entre 0 (inclus) et 1 (exclu).
-
{{jsxref("Objets_globaux/Math/round", "Math.round(x)")}}
-
Retourne l'arrondi d'un nombre.
-
{{jsxref("Objets_globaux/Math/sign", "Math.sign(x)")}}
-
Retourne le signe d'un nombre, indiquant s'il est positif, négatif ou égal à zéro.
-
{{jsxref("Objets_globaux/Math/sin", "Math.sin(x)")}}
-
Retourne le sinus d'un nombre.
-
{{jsxref("Objets_globaux/Math/sinh", "Math.sinh(x)")}}
-
Retourne le sinus hyperbolique d'un nombre.
-
{{jsxref("Objets_globaux/Math/sqrt", "Math.sqrt(x)")}}
-
Retourne la racine carrée d'un nombre.
-
{{jsxref("Objets_globaux/Math/tan", "Math.tan(x)")}}
-
Retourne la tangente d'un nombre.
-
{{jsxref("Objets_globaux/Math/tanh", "Math.tanh(x)")}}
-
Retourne la tangente hyperbolique d'un nombre
-
Math.toSource() {{Non-standard_inline}}
-
Renvoie la chaîne de caractères "Math".
-
{{jsxref("Objets_globaux/Math/trunc", "Math.trunc(x)")}}
-
Retourne la partie entière d'un nombre (la partie décimale est retirée).
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1
{{SpecName('ES5.1', '#sec-15.8', 'Math')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math-object', 'Math')}}{{Spec2('ES6')}}Nouvelles méthodes ajoutées : {{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()")}} et {{jsxref("Math.clz32()", "clz32()")}}.
{{SpecName('ESDraft', '#sec-math-object', 'Math')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/index.md b/files/fr/web/javascript/reference/global_objects/math/index.md new file mode 100644 index 0000000000..86ab1bee47 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/index.md @@ -0,0 +1,170 @@ +--- +title: Math +slug: Web/JavaScript/Reference/Global_Objects/Math +tags: + - JavaScript + - Math + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math +original_slug: Web/JavaScript/Reference/Objets_globaux/Math +--- +
{{JSRef}}
+ +

L'objet Math est un objet natif dont les méthodes et propriétés permettent l'utilisation de constantes et fonctions mathématiques. Cet objet n'est pas une fonction.

+ +
+

Attention : Math fonctionne avec le type {{jsxref("Number")}}. Il ne fonctionne pas avec les grands entiers/{{jsxref("BigInt")}}.

+
+ +

Description

+ +

Contrairement aux autres objets globaux, Math n'est pas un constructeur. Toutes les propriétés et les méthodes de Math sont statiques (pour éventuellement étendre cette API, ce qui est fortement déconseillé, on n'utilisera donc pas Math.prototype).

+ +

Pour accéder à la constante PI, on utilise Math.PI.
+ Pour accéder à la fonction sinus, on utilise Math.sin(x)x est l'argument de cette méthode.

+ +

Les constantes sont définies avec la précision des nombres réels en JavaScript.

+ +

Propriétés

+ +
+
{{jsxref("Math.E")}}
+
Nombre d'Euler, la base des logarithmes naturels, environ 2,718.
+
{{jsxref("Math.LN2")}}
+
Logarithme naturel de 2, environ 0,693.
+
{{jsxref("Math.LN10")}}
+
Logarithme naturel de 10, environ 2,302.
+
{{jsxref("Math.LOG2E")}}
+
Logarithme de base 2 de E, environ 1,442.
+
{{jsxref("Math.LOG10E")}}
+
Logarithme de base 10 de E, environ 0,434.
+
{{jsxref("Math.PI")}}
+
Quotient de la circonférence d'un cercle par son diamètre, environ 3,14159.
+
{{jsxref("Math.SQRT1_2")}}
+
Racine carrée de 1/2 ; équivalent de 1 sur la racine carrée de 2, environ 0,707.
+
{{jsxref("Math.SQRT2")}}
+
Racine carrée de 2, environ 1,414.
+
+ +

Méthodes

+ +

Note : Les fonctions trigonométriques (sin(), cos(), tan(), asin(), acos(), atan(), atan2()) acceptent ou retournent des angles en radians. Pour convertir des degrés en radians, multipliez la valeur en degrés par (Math.PI / 180). Pour passer des radians en degrés, divisez la valeur en radians par (Math.PI / 180).

+ +

Note : La précision des fonctions mathématiques dépend notamment de l'implémentation. Cela signifie que différents navigateurs peuvent fournir des résultats différents. On peut même avoir un même moteur JavaScript qui, sur des architectures et/ou des systèmes d'exploitation différents, fournit des résultats différents.

+ +
+
{{jsxref("Objets_globaux/Math/abs", "Math.abs(x)")}}
+
Retourne la valeur absolue d'un nombre.
+
{{jsxref("Objets_globaux/Math/acos", "Math.acos(x)")}}
+
Retourne l'arc cosinus d'un nombre.
+
{{jsxref("Objets_globaux/Math/acosh", "Math.acosh(x)")}}
+
Retourne l'arc cosinus hyperbolique d'un nombre.
+
{{jsxref("Objets_globaux/Math/asin", "Math.asin(x)")}}
+
Retourne l'arc sinus d'un nombre.
+
{{jsxref("Objets_globaux/Math/asinh", "Math.asinh(x)")}}
+
Retourne l'arc sinus hyperbolique d'un nombre.
+
{{jsxref("Objets_globaux/Math/atan", "Math.atan(x)")}}
+
Retourne l'arc tangente d'un nombre.
+
{{jsxref("Objets_globaux/Math/atanh", "Math.atanh(x)")}}
+
Retourne l'arc tangente hyperbolique d'un nombre
+
{{jsxref("Objets_globaux/Math/atan2", "Math.atan2(y, x)")}}
+
Retourne l'arc tangente du quotient de ses arguments.
+
{{jsxref("Objets_globaux/Math/cbrt", "Math.cbrt(x)")}}
+
Renvoie la racine cubique d'un nombre.
+
{{jsxref("Objets_globaux/Math/ceil", "Math.ceil(x)")}}
+
Retourne le plus petit entier supérieur ou égal à la valeur passée en paramètre.
+
{{jsxref("Objets_globaux/Math/clz32", "Math.clz32(x)")}}
+
Renvoie le nombre de zéros qui préfixent un entier sur 32 bits.
+
{{jsxref("Objets_globaux/Math/cos", "Math.cos(x)")}}
+
Retourne le cosinus d'un nombre.
+
{{jsxref("Objets_globaux/Math/cosh", "Math.cosh(x)")}}
+
Renvoie le cosinus hyperbolique d'un nombre.
+
{{jsxref("Objets_globaux/Math/exp", "Math.exp(x)")}}
+
Renvoie l'exponentielle d'un nombre (soit E^nombre) avec E la constante d'Euler (2,718...).
+
{{jsxref("Objets_globaux/Math/expm1", "Math.expm1(x)")}}
+
Renvoie le résultat de 1 moins l'exponentielle d'un nombre.
+
{{jsxref("Objets_globaux/Math/floor", "Math.floor(x)")}}
+
Retourne le plus grand entier inférieur ou égal à la valeur passée en paramètre.
+
{{jsxref("Objets_globaux/Math/fround", "Math.fround(x)")}}
+
Renvoie le nombre flottant exprimé sur 32 bits le plus proche de l'argument.
+
{{jsxref("Objets_globaux/Math/hypot", "Math.hypot([x[,y[,…]]])")}}
+
Retourne la racine carré de la somme des carrés des arguments.
+
{{jsxref("Objets_globaux/Math/imul", "Math.imul(x, y)")}}
+
Retourne le résultat de la multiplication d'entiers sur 32 bits.
+
{{jsxref("Objets_globaux/Math/log", "Math.log(x)")}}
+
Retourne le logarithme naturel (loge) d'un nombre.
+
{{jsxref("Objets_globaux/Math/log1p", "Math.log1p(x)")}}
+
Retourne le logarithme naturel de 1 + un nombre.
+
{{jsxref("Objets_globaux/Math/log10", "Math.log10(x)")}}
+
Retourne le logarithme en base 10 d'un nombre.
+
{{jsxref("Objets_globaux/Math/log2", "Math.log2(x)")}}
+
Retourne le logarithme en base 2 d'un nombre.
+
{{jsxref("Objets_globaux/Math/max", "Math.max([x[,y[,…]]])")}}
+
Retourne la plus grande valeur d'une liste de nombres.
+
{{jsxref("Objets_globaux/Math/min", "Math.min([x[,y[,…]]])")}}
+
Retourne la plus petite valeur d'une liste de nombres.
+
{{jsxref("Objets_globaux/Math/pow", "Math.pow(x,y)")}}
+
Retourne le calcul de x à la puissance y (x correspond à la base et y à l'exposant).
+
{{jsxref("Objets_globaux/Math/random", "Math.random()")}}
+
Retourne un nombre pseudo-aléatoire compris entre 0 (inclus) et 1 (exclu).
+
{{jsxref("Objets_globaux/Math/round", "Math.round(x)")}}
+
Retourne l'arrondi d'un nombre.
+
{{jsxref("Objets_globaux/Math/sign", "Math.sign(x)")}}
+
Retourne le signe d'un nombre, indiquant s'il est positif, négatif ou égal à zéro.
+
{{jsxref("Objets_globaux/Math/sin", "Math.sin(x)")}}
+
Retourne le sinus d'un nombre.
+
{{jsxref("Objets_globaux/Math/sinh", "Math.sinh(x)")}}
+
Retourne le sinus hyperbolique d'un nombre.
+
{{jsxref("Objets_globaux/Math/sqrt", "Math.sqrt(x)")}}
+
Retourne la racine carrée d'un nombre.
+
{{jsxref("Objets_globaux/Math/tan", "Math.tan(x)")}}
+
Retourne la tangente d'un nombre.
+
{{jsxref("Objets_globaux/Math/tanh", "Math.tanh(x)")}}
+
Retourne la tangente hyperbolique d'un nombre
+
Math.toSource() {{Non-standard_inline}}
+
Renvoie la chaîne de caractères "Math".
+
{{jsxref("Objets_globaux/Math/trunc", "Math.trunc(x)")}}
+
Retourne la partie entière d'un nombre (la partie décimale est retirée).
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1
{{SpecName('ES5.1', '#sec-15.8', 'Math')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math-object', 'Math')}}{{Spec2('ES6')}}Nouvelles méthodes ajoutées : {{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()")}} et {{jsxref("Math.clz32()", "clz32()")}}.
{{SpecName('ESDraft', '#sec-math-object', 'Math')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/ln10/index.html b/files/fr/web/javascript/reference/global_objects/math/ln10/index.html deleted file mode 100644 index f3818a3665..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/ln10/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Math.LN10 -slug: Web/JavaScript/Reference/Global_Objects/Math/LN10 -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN10 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LN10 ---- -
{{JSRef}}
- -

La propriété Math.LN10 représente la valeur du logarithme naturel de 10, environ 2.302 :

- -

Math.LN10=ln(10)2.302\mathtt{\mi{Math.LN10}} = \ln(10) \approx 2.302

- -
{{EmbedInteractiveExample("pages/js/math-ln10.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

LN10 est une propriété statique de Math, elle doit toujours être utilisée avec la syntaxe Math.LN10, et ne pas être appelée comme propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.LN10

- -

La fonction suivante renvoie le logarithme naturel de 10 :

- -
function getNatLog10() {
-   return Math.LN10;
-}
-
-getNatLog10(); // 2.302585092994046
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.2', 'Math.LN10')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.ln10', 'Math.LN10')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.ln10', 'Math.LN10')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.LN10")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/ln10/index.md b/files/fr/web/javascript/reference/global_objects/math/ln10/index.md new file mode 100644 index 0000000000..f3818a3665 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/ln10/index.md @@ -0,0 +1,82 @@ +--- +title: Math.LN10 +slug: Web/JavaScript/Reference/Global_Objects/Math/LN10 +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN10 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LN10 +--- +
{{JSRef}}
+ +

La propriété Math.LN10 représente la valeur du logarithme naturel de 10, environ 2.302 :

+ +

Math.LN10=ln(10)2.302\mathtt{\mi{Math.LN10}} = \ln(10) \approx 2.302

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

Description

+ +

LN10 est une propriété statique de Math, elle doit toujours être utilisée avec la syntaxe Math.LN10, et ne pas être appelée comme propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.LN10

+ +

La fonction suivante renvoie le logarithme naturel de 10 :

+ +
function getNatLog10() {
+   return Math.LN10;
+}
+
+getNatLog10(); // 2.302585092994046
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.2', 'Math.LN10')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.ln10', 'Math.LN10')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.ln10', 'Math.LN10')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.LN10")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/ln2/index.html b/files/fr/web/javascript/reference/global_objects/math/ln2/index.html deleted file mode 100644 index 0a7fc56029..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/ln2/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Math.LN2 -slug: Web/JavaScript/Reference/Global_Objects/Math/LN2 -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN2 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LN2 ---- -
{{JSRef}}
- -

La propriété Math.LN2 représente le logarithme naturel de 2, environ 0.693:

- -

Math.LN2=ln(2)0.693\mathtt{\mi{Math.LN2}} = \ln(2) \approx 0.693

- -
{{EmbedInteractiveExample("pages/js/math-ln2.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

LN2 est une propriété statique de l'objet Math, il doit toujours être utilisé avec la syntaxe Math.LN2, et non pas être utilisé comme la propriété d'un objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.LN2

- -

La fonction suivante renvoie le logarithme en base 2 d'un nombre en utilisant la valeur de Math.LN2 :

- -
function getLog2(x) {
-  return Math.log(x) / Math.LN2;
-}
-
-getLog2(256); // 8
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.3', 'Math.LN2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.ln2', 'Math.LN2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.ln2', 'Math.LN2')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.LN2")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/ln2/index.md b/files/fr/web/javascript/reference/global_objects/math/ln2/index.md new file mode 100644 index 0000000000..0a7fc56029 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/ln2/index.md @@ -0,0 +1,82 @@ +--- +title: Math.LN2 +slug: Web/JavaScript/Reference/Global_Objects/Math/LN2 +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN2 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LN2 +--- +
{{JSRef}}
+ +

La propriété Math.LN2 représente le logarithme naturel de 2, environ 0.693:

+ +

Math.LN2=ln(2)0.693\mathtt{\mi{Math.LN2}} = \ln(2) \approx 0.693

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

Description

+ +

LN2 est une propriété statique de l'objet Math, il doit toujours être utilisé avec la syntaxe Math.LN2, et non pas être utilisé comme la propriété d'un objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.LN2

+ +

La fonction suivante renvoie le logarithme en base 2 d'un nombre en utilisant la valeur de Math.LN2 :

+ +
function getLog2(x) {
+  return Math.log(x) / Math.LN2;
+}
+
+getLog2(256); // 8
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.3', 'Math.LN2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.ln2', 'Math.LN2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.ln2', 'Math.LN2')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.LN2")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/log/index.html b/files/fr/web/javascript/reference/global_objects/math/log/index.html deleted file mode 100644 index 25d7a48e8b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/log/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Math.log() -slug: Web/JavaScript/Reference/Global_Objects/Math/log -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/log -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log ---- -
{{JSRef}}
- -

La fonction Math.log() renvoie le logarithme naturel (aussi appelé logarithme népérien) d'un nombre, défini par :

- -

x>0,Math.log(x)=ln(x)=le seul ytel queey=x\forall x > 0, \mathtt{\operatorname{Math.log}(x)} = \ln(x) = \text{the unique} \; y \; \text{such that} \; e^y = x

- -
{{EmbedInteractiveExample("pages/js/math-log.html")}}
- -

Syntaxe

- -
Math.log(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Le logarithme naturelle de la valeur passée en argument. Si cette valeur est négative, c'est {{jsxref("NaN")}} qui est renvoyé.

- -

Description

- -

Si la valeur de l'argument est négative, la valeur renvoyée sera {{jsxref("NaN")}}. Si la valeur de l'argument est 0, la valeur de retour sera {{jsxref("Number.NEGATIVE_INFINITY", "-Infinity")}}.

- -

log() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.log(), elle ne doit pas être utilisée à partir d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Si on veut utiliser les constantes données par les logarithmes naturels de 2 ou 10, on pourra utiliser les constantes {{jsxref("Math.LN2")}} ou {{jsxref("Math.LN10")}}. De même pour les logarithmes en base 2 ou en base 10, on pourra utiliser {{jsxref("Math.log2()")}} or {{jsxref("Math.log10()")}}.

- -

Exemples

- -

Utiliser Math.log()

- -
Math.log(-1); // NaN, valeur en dehors de l'intervalle de définition
-Math.log(0);  // -Infinity
-Math.log(1);  // 0
-Math.log(10); // 2.302585092994046
- -

Utiliser Math.log pour construire un logarithme sur une autre base

- -

La fonction suivante renvoie le logarithme de y en base x (c'est-à-dire logx y):

- -
function getBaseLog(x, y) {
-    return Math.log(y) / Math.log(x);
-}
- -

Si on exécute getBaseLog(10, 1000), on obtiendra 2.9999999999999996 en raison de l'arrondi du à la représentation en nombre flottant (le résultat exact étant 3).

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.10', 'Math.log')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.log', 'Math.log')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.log', 'Math.log')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.log")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/log/index.md b/files/fr/web/javascript/reference/global_objects/math/log/index.md new file mode 100644 index 0000000000..25d7a48e8b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/log/index.md @@ -0,0 +1,104 @@ +--- +title: Math.log() +slug: Web/JavaScript/Reference/Global_Objects/Math/log +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log +--- +
{{JSRef}}
+ +

La fonction Math.log() renvoie le logarithme naturel (aussi appelé logarithme népérien) d'un nombre, défini par :

+ +

x>0,Math.log(x)=ln(x)=le seul ytel queey=x\forall x > 0, \mathtt{\operatorname{Math.log}(x)} = \ln(x) = \text{the unique} \; y \; \text{such that} \; e^y = x

+ +
{{EmbedInteractiveExample("pages/js/math-log.html")}}
+ +

Syntaxe

+ +
Math.log(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Le logarithme naturelle de la valeur passée en argument. Si cette valeur est négative, c'est {{jsxref("NaN")}} qui est renvoyé.

+ +

Description

+ +

Si la valeur de l'argument est négative, la valeur renvoyée sera {{jsxref("NaN")}}. Si la valeur de l'argument est 0, la valeur de retour sera {{jsxref("Number.NEGATIVE_INFINITY", "-Infinity")}}.

+ +

log() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.log(), elle ne doit pas être utilisée à partir d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Si on veut utiliser les constantes données par les logarithmes naturels de 2 ou 10, on pourra utiliser les constantes {{jsxref("Math.LN2")}} ou {{jsxref("Math.LN10")}}. De même pour les logarithmes en base 2 ou en base 10, on pourra utiliser {{jsxref("Math.log2()")}} or {{jsxref("Math.log10()")}}.

+ +

Exemples

+ +

Utiliser Math.log()

+ +
Math.log(-1); // NaN, valeur en dehors de l'intervalle de définition
+Math.log(0);  // -Infinity
+Math.log(1);  // 0
+Math.log(10); // 2.302585092994046
+ +

Utiliser Math.log pour construire un logarithme sur une autre base

+ +

La fonction suivante renvoie le logarithme de y en base x (c'est-à-dire logx y):

+ +
function getBaseLog(x, y) {
+    return Math.log(y) / Math.log(x);
+}
+ +

Si on exécute getBaseLog(10, 1000), on obtiendra 2.9999999999999996 en raison de l'arrondi du à la représentation en nombre flottant (le résultat exact étant 3).

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.10', 'Math.log')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.log', 'Math.log')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.log', 'Math.log')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.log")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/log10/index.html b/files/fr/web/javascript/reference/global_objects/math/log10/index.html deleted file mode 100644 index d0e65dca47..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/log10/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Math.log10() -slug: Web/JavaScript/Reference/Global_Objects/Math/log10 -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/log10 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log10 ---- -
{{JSRef}}
- -

La fonction Math.log10() renvoie le logarithme en base 10 d'un nombre, donné par la formule :

- -

x>0,Math.log10(x)=log10(x)=l'unique  ytel que10y=x\forall x > 0, \mathtt{\operatorname{Math.log10}(x)} = \log_10(x) = \text{the unique} \; y \; \text{such that} \; 10^y = x

- -
{{EmbedInteractiveExample("pages/js/math-log10.html")}}
- -

Syntaxe

- -
Math.log10(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Le logarithme en base 10 du nombre passé en argument. Si cette valeur est négative, c'est {{jsxref("NaN")}} qui sera renvoyé.

- -

Description

- -

Si la valeur de l'argument est strictement inférieure à 0, la valeur renvoyée à {{jsxref("NaN")}}.

- -

log10() étant une méthode statique de Math, il faut utiliser Math.log10()et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Cette fonction est équivalente à la fonction donnée par Math.log(x) / Math.log(10).

- -

Exemple

- -

Utiliser Math.log10()

- -
Math.log10(2);      // 0.3010299956639812
-Math.log10(1);      // 0
-Math.log10(0);      // -Infinity
-Math.log10(-2);     // NaN
-Math.log10(100000); // 5
-
- -

Prothèse d'émulation (polyfill)

- -

Il est possible d'avoir un résultat approximatif avec la fonction suivante :

- -
Math.log10 = Math.log10 || function(x) {
-  return Math.log(x) * Math.LOG10E;
-};
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.log10', 'Math.log10')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.log10', 'Math.log10')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.log10")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/log10/index.md b/files/fr/web/javascript/reference/global_objects/math/log10/index.md new file mode 100644 index 0000000000..d0e65dca47 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/log10/index.md @@ -0,0 +1,97 @@ +--- +title: Math.log10() +slug: Web/JavaScript/Reference/Global_Objects/Math/log10 +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log10 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log10 +--- +
{{JSRef}}
+ +

La fonction Math.log10() renvoie le logarithme en base 10 d'un nombre, donné par la formule :

+ +

x>0,Math.log10(x)=log10(x)=l'unique  ytel que10y=x\forall x > 0, \mathtt{\operatorname{Math.log10}(x)} = \log_10(x) = \text{the unique} \; y \; \text{such that} \; 10^y = x

+ +
{{EmbedInteractiveExample("pages/js/math-log10.html")}}
+ +

Syntaxe

+ +
Math.log10(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Le logarithme en base 10 du nombre passé en argument. Si cette valeur est négative, c'est {{jsxref("NaN")}} qui sera renvoyé.

+ +

Description

+ +

Si la valeur de l'argument est strictement inférieure à 0, la valeur renvoyée à {{jsxref("NaN")}}.

+ +

log10() étant une méthode statique de Math, il faut utiliser Math.log10()et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Cette fonction est équivalente à la fonction donnée par Math.log(x) / Math.log(10).

+ +

Exemple

+ +

Utiliser Math.log10()

+ +
Math.log10(2);      // 0.3010299956639812
+Math.log10(1);      // 0
+Math.log10(0);      // -Infinity
+Math.log10(-2);     // NaN
+Math.log10(100000); // 5
+
+ +

Prothèse d'émulation (polyfill)

+ +

Il est possible d'avoir un résultat approximatif avec la fonction suivante :

+ +
Math.log10 = Math.log10 || function(x) {
+  return Math.log(x) * Math.LOG10E;
+};
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.log10', 'Math.log10')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.log10', 'Math.log10')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.log10")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/log10e/index.html b/files/fr/web/javascript/reference/global_objects/math/log10e/index.html deleted file mode 100644 index 175018cc26..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/log10e/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Math.LOG10E -slug: Web/JavaScript/Reference/Global_Objects/Math/LOG10E -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG10E -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LOG10E ---- -
{{JSRef}}
- -

La propriété Math.LOG10E fournit la valeur du logarithme en base 10 de e, environ 0.434 :

- -

Math.LOG10E=log10(e)0.434\mathtt{\mi{Math.LOG10E}} = \log_10(e) \approx 0.434

- -
{{EmbedInteractiveExample("pages/js/math-log10e.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

LOG10E étant une propriété statique de Math, elle doit toujours être utilisée avec la syntaxe Math.LOG10E et ne pas être appelée comme propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.LOG10E

- -

La fonction suivante renvoie le logarithme en base 10 de e :

- -
function getLog10e() {
-   return Math.LOG10E;
-}
-
-getLog10e(); // 0.4342944819032518
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.5', 'Math.LOG10E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.log10e', 'Math.LOG10E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.log10e', 'Math.LOG10E')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.LOG10E")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/log10e/index.md b/files/fr/web/javascript/reference/global_objects/math/log10e/index.md new file mode 100644 index 0000000000..175018cc26 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/log10e/index.md @@ -0,0 +1,82 @@ +--- +title: Math.LOG10E +slug: Web/JavaScript/Reference/Global_Objects/Math/LOG10E +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG10E +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LOG10E +--- +
{{JSRef}}
+ +

La propriété Math.LOG10E fournit la valeur du logarithme en base 10 de e, environ 0.434 :

+ +

Math.LOG10E=log10(e)0.434\mathtt{\mi{Math.LOG10E}} = \log_10(e) \approx 0.434

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

Description

+ +

LOG10E étant une propriété statique de Math, elle doit toujours être utilisée avec la syntaxe Math.LOG10E et ne pas être appelée comme propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.LOG10E

+ +

La fonction suivante renvoie le logarithme en base 10 de e :

+ +
function getLog10e() {
+   return Math.LOG10E;
+}
+
+getLog10e(); // 0.4342944819032518
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.5', 'Math.LOG10E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.log10e', 'Math.LOG10E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.log10e', 'Math.LOG10E')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.LOG10E")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/log1p/index.html b/files/fr/web/javascript/reference/global_objects/math/log1p/index.html deleted file mode 100644 index 04913b856c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/log1p/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Math.log1p() -slug: Web/JavaScript/Reference/Global_Objects/Math/log1p -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/log1p -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log1p ---- -
{{JSRef}}
- -

La fonction Math.log1p() renvoie le logarithme népérien (en base {{jsxref("Math/E","e")}}) d'un nombre +1, donné par la formule :

- -

x>-1,Math.log1p(x)=ln(1+x)\forall x > -1, \mathtt{\operatorname{Math.log1p}(x)} = \ln(1 + x)

- -
{{EmbedInteractiveExample("pages/js/math-log1p.html")}}
- -

Syntaxe

- -
Math.log1p(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

La valeur du logarithme naturel de 1 plus l'argument (log(1 + x)). Si l'argument est inférieur à -1, {{jsxref("NaN")}} est renvoyée.

- -

Description

- -

Si x est strictement inférieur à -1, la valeur renvoyée est {{jsxref("NaN")}}.

- -

log1p étant une méthode statique de Math, il faut utiliser Math.log1p() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.log1p()

- -
Math.log1p(1);  // 0.6931471805599453
-Math.log1p(0);  // 0
-Math.log1p(-1); // -Infinity
-Math.log1p(-2); // NaN
-
- -

Prothèse d'émulation (polyfill)

- -

Si cette fonction n'est pas disponible, elle peut être définie grâce au code suivant :

- -
Math.log1p = Math.log1p || function(x) {
-  return Math.log(1 + x);
-};
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.log1p', 'Math.log1p')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.log1p', 'Math.log1p')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.log1p")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/log1p/index.md b/files/fr/web/javascript/reference/global_objects/math/log1p/index.md new file mode 100644 index 0000000000..04913b856c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/log1p/index.md @@ -0,0 +1,96 @@ +--- +title: Math.log1p() +slug: Web/JavaScript/Reference/Global_Objects/Math/log1p +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log1p +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log1p +--- +
{{JSRef}}
+ +

La fonction Math.log1p() renvoie le logarithme népérien (en base {{jsxref("Math/E","e")}}) d'un nombre +1, donné par la formule :

+ +

x>-1,Math.log1p(x)=ln(1+x)\forall x > -1, \mathtt{\operatorname{Math.log1p}(x)} = \ln(1 + x)

+ +
{{EmbedInteractiveExample("pages/js/math-log1p.html")}}
+ +

Syntaxe

+ +
Math.log1p(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

La valeur du logarithme naturel de 1 plus l'argument (log(1 + x)). Si l'argument est inférieur à -1, {{jsxref("NaN")}} est renvoyée.

+ +

Description

+ +

Si x est strictement inférieur à -1, la valeur renvoyée est {{jsxref("NaN")}}.

+ +

log1p étant une méthode statique de Math, il faut utiliser Math.log1p() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.log1p()

+ +
Math.log1p(1);  // 0.6931471805599453
+Math.log1p(0);  // 0
+Math.log1p(-1); // -Infinity
+Math.log1p(-2); // NaN
+
+ +

Prothèse d'émulation (polyfill)

+ +

Si cette fonction n'est pas disponible, elle peut être définie grâce au code suivant :

+ +
Math.log1p = Math.log1p || function(x) {
+  return Math.log(1 + x);
+};
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.log1p', 'Math.log1p')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.log1p', 'Math.log1p')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.log1p")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/log2/index.html b/files/fr/web/javascript/reference/global_objects/math/log2/index.html deleted file mode 100644 index c1700ae5c1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/log2/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Math.log2() -slug: Web/JavaScript/Reference/Global_Objects/Math/log2 -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/log2 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log2 ---- -
{{JSRef}}
- -

La fonction Math.log2() renvoie le logarithme en base 2 d'un nombre :

- -

x>0,Math.log2(x)=log2(x)=l'unique ytel que2y=x\forall x > 0, \mathtt{\operatorname{Math.log2}(x)} = \log_2(x) = \text{the unique} \; y \; \text{such that} \; 2^y = x

- -
{{EmbedInteractiveExample("pages/js/math-log2.html")}}
- -

Syntaxe

- -
Math.log2(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Le logarithme en base 2 du nombre passé en argument. Si ce nombre est négatif, c'est {{jsxref("NaN")}} qui sera renvoyé.

- -

Description

- -

Si x est strictement inférieur à 0, la valeur renvoyée sera {{jsxref("NaN")}}.

- -

log2() étant une méthode statique de Math, il faut utiliser Math.log2() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Si on souhaite utiliser des constantes, on pourra employer {{jsxref("Math.LOG2E")}} ou {{jsxref("Math.LN2")}}.

- -

Exemples

- -

Utiliser Math.log2()

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.log2', 'Math.log2')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.log2', 'Math.log2')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.log2")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/log2/index.md b/files/fr/web/javascript/reference/global_objects/math/log2/index.md new file mode 100644 index 0000000000..c1700ae5c1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/log2/index.md @@ -0,0 +1,89 @@ +--- +title: Math.log2() +slug: Web/JavaScript/Reference/Global_Objects/Math/log2 +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/log2 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/log2 +--- +
{{JSRef}}
+ +

La fonction Math.log2() renvoie le logarithme en base 2 d'un nombre :

+ +

x>0,Math.log2(x)=log2(x)=l'unique ytel que2y=x\forall x > 0, \mathtt{\operatorname{Math.log2}(x)} = \log_2(x) = \text{the unique} \; y \; \text{such that} \; 2^y = x

+ +
{{EmbedInteractiveExample("pages/js/math-log2.html")}}
+ +

Syntaxe

+ +
Math.log2(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Le logarithme en base 2 du nombre passé en argument. Si ce nombre est négatif, c'est {{jsxref("NaN")}} qui sera renvoyé.

+ +

Description

+ +

Si x est strictement inférieur à 0, la valeur renvoyée sera {{jsxref("NaN")}}.

+ +

log2() étant une méthode statique de Math, il faut utiliser Math.log2() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur). Si on souhaite utiliser des constantes, on pourra employer {{jsxref("Math.LOG2E")}} ou {{jsxref("Math.LN2")}}.

+ +

Exemples

+ +

Utiliser Math.log2()

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.log2', 'Math.log2')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.log2', 'Math.log2')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.log2")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/log2e/index.html b/files/fr/web/javascript/reference/global_objects/math/log2e/index.html deleted file mode 100644 index ef33a48cf1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/log2e/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Math.LOG2E -slug: Web/JavaScript/Reference/Global_Objects/Math/LOG2E -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG2E -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LOG2E ---- -
{{JSRef}}
- -

La propriété Math.LOG2E représente la valeur du logarithme en base 2 de e, environ 1.442 :

- -

Math.LOG2E=log2(e)1.442\mathtt{\mi{Math.LOG2E}} = \log_2(e) \approx 1.442

- -
{{EmbedInteractiveExample("pages/js/math-log2e.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

LOG2E est une propriété statique de l'objet Math et doit toujours être utilisé avec la syntaxe Math.LOG2E plutôt que comme la propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.LOG2E

- -

La fonction suivante renvoie la valeur du logarithme en base 2 de e :

- -
function getLog2e() {
-   return Math.LOG2E;
-}
-
-getLog2e(); // 1.4426950408889634
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.4', 'Math.LOG2E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.log2e', 'Math.LOG2E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.log2e', 'Math.LOG2E')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.LOG2E")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/log2e/index.md b/files/fr/web/javascript/reference/global_objects/math/log2e/index.md new file mode 100644 index 0000000000..ef33a48cf1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/log2e/index.md @@ -0,0 +1,82 @@ +--- +title: Math.LOG2E +slug: Web/JavaScript/Reference/Global_Objects/Math/LOG2E +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG2E +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/LOG2E +--- +
{{JSRef}}
+ +

La propriété Math.LOG2E représente la valeur du logarithme en base 2 de e, environ 1.442 :

+ +

Math.LOG2E=log2(e)1.442\mathtt{\mi{Math.LOG2E}} = \log_2(e) \approx 1.442

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

Description

+ +

LOG2E est une propriété statique de l'objet Math et doit toujours être utilisé avec la syntaxe Math.LOG2E plutôt que comme la propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.LOG2E

+ +

La fonction suivante renvoie la valeur du logarithme en base 2 de e :

+ +
function getLog2e() {
+   return Math.LOG2E;
+}
+
+getLog2e(); // 1.4426950408889634
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.4', 'Math.LOG2E')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.log2e', 'Math.LOG2E')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.log2e', 'Math.LOG2E')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.LOG2E")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/max/index.html b/files/fr/web/javascript/reference/global_objects/math/max/index.html deleted file mode 100644 index 78e3810bca..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/max/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Math.max() -slug: Web/JavaScript/Reference/Global_Objects/Math/max -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/max -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/max ---- -
{{JSRef}}
- -

La fonction Math.max() renvoie le plus grand nombre d'une série de 0 ou plusieurs nombres.

- -
{{EmbedInteractiveExample("pages/js/math-max.html")}}
- -

Syntaxe

- -
Math.max([valeur1[,valeur2, ...]]) 
- -

Paramètres

- -
-
valeur1, valeur2, ...
-
Des nombres.
-
- -

Valeur de retour

- -

Le plus grand des nombres passés en arguments. S'il existe un des arguments qui ne peut pas être converti en nombre, c'est {{jsxref("NaN")}} qui sera renvoyé.

- -

Description

- -

max() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.max(), elle ne doit pas être appelée comme la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Si aucun argument n'est fourni, le résultat sera -{{jsxref("Infinity")}}.

- -

Si au moins un des arguments ne peut pas être converti en un nombre, le résultat sera {{jsxref("NaN")}}.

- -

Exemple

- -

Utiliser Math.max()

- -
Math.max(10, 20);   //  20
-Math.max(-10, -20); // -10
-Math.max(-10, 20);  //  20
-
- -

Obtenir l'élément maximum d'un tableau

- -

La méthode {{jsxref("Array.prototype.reduce()")}} peut être utilisée pour déterminer la valeur maximale d'un tableau de nombre en comparant les valeurs qui se suivent :

- -
var arr = [1, 2, 3];
-var max = arr.reduce(function(a,b) {
-  return Math.max(a, b);
-});
- -

On peut également utiliser {{jsxref("Function.prototype.apply()")}} afin de trouver le maximum parmi un tableau de nombres. getMaxTableau([1,2,3]) sera équivalent à Math.max(1, 2, 3), mais getMaxTableau pourra être utilisé sur des tableaux de n'importe quelle taille.

- -
function getMaxTableau(tableauNumérique) {
-    return Math.max.apply(null, tableauNumérique);
-}
- -

Avec le nouvel {{jsxref("Opérateurs/Affecter_par_décomposition","opérateur de décomposition","","1")}}, on pourra également utiliser cette syntaxe, plus concise et plus simple :

- -
var arr = [1, 2, 3];
-var max = Math.max(...arr);
- -

Attention avec la décomposition et apply() qui pourront échouer s'il y a trop d'éléments dans le tableau (car ceux-ci seront passés en arguments). Pour plus d'informations, consulter Utiliser apply() et les fonctions natives. La méthode proposée avec reduce() n'a pas cette contrainte.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.11', 'Math.max')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.max', 'Math.max')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.max', 'Math.max')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.max")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/max/index.md b/files/fr/web/javascript/reference/global_objects/math/max/index.md new file mode 100644 index 0000000000..78e3810bca --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/max/index.md @@ -0,0 +1,112 @@ +--- +title: Math.max() +slug: Web/JavaScript/Reference/Global_Objects/Math/max +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/max +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/max +--- +
{{JSRef}}
+ +

La fonction Math.max() renvoie le plus grand nombre d'une série de 0 ou plusieurs nombres.

+ +
{{EmbedInteractiveExample("pages/js/math-max.html")}}
+ +

Syntaxe

+ +
Math.max([valeur1[,valeur2, ...]]) 
+ +

Paramètres

+ +
+
valeur1, valeur2, ...
+
Des nombres.
+
+ +

Valeur de retour

+ +

Le plus grand des nombres passés en arguments. S'il existe un des arguments qui ne peut pas être converti en nombre, c'est {{jsxref("NaN")}} qui sera renvoyé.

+ +

Description

+ +

max() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.max(), elle ne doit pas être appelée comme la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Si aucun argument n'est fourni, le résultat sera -{{jsxref("Infinity")}}.

+ +

Si au moins un des arguments ne peut pas être converti en un nombre, le résultat sera {{jsxref("NaN")}}.

+ +

Exemple

+ +

Utiliser Math.max()

+ +
Math.max(10, 20);   //  20
+Math.max(-10, -20); // -10
+Math.max(-10, 20);  //  20
+
+ +

Obtenir l'élément maximum d'un tableau

+ +

La méthode {{jsxref("Array.prototype.reduce()")}} peut être utilisée pour déterminer la valeur maximale d'un tableau de nombre en comparant les valeurs qui se suivent :

+ +
var arr = [1, 2, 3];
+var max = arr.reduce(function(a,b) {
+  return Math.max(a, b);
+});
+ +

On peut également utiliser {{jsxref("Function.prototype.apply()")}} afin de trouver le maximum parmi un tableau de nombres. getMaxTableau([1,2,3]) sera équivalent à Math.max(1, 2, 3), mais getMaxTableau pourra être utilisé sur des tableaux de n'importe quelle taille.

+ +
function getMaxTableau(tableauNumérique) {
+    return Math.max.apply(null, tableauNumérique);
+}
+ +

Avec le nouvel {{jsxref("Opérateurs/Affecter_par_décomposition","opérateur de décomposition","","1")}}, on pourra également utiliser cette syntaxe, plus concise et plus simple :

+ +
var arr = [1, 2, 3];
+var max = Math.max(...arr);
+ +

Attention avec la décomposition et apply() qui pourront échouer s'il y a trop d'éléments dans le tableau (car ceux-ci seront passés en arguments). Pour plus d'informations, consulter Utiliser apply() et les fonctions natives. La méthode proposée avec reduce() n'a pas cette contrainte.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.11', 'Math.max')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.max', 'Math.max')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.max', 'Math.max')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.max")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/min/index.html b/files/fr/web/javascript/reference/global_objects/math/min/index.html deleted file mode 100644 index 39cd2d8567..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/min/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Math.min() -slug: Web/JavaScript/Reference/Global_Objects/Math/min -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/min -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/min ---- -
{{JSRef}}
- -

La fonction Math.min() renvoie le plus petit nombre d'une série de 0 ou plusieurs nombres ou bien {{jsxref("NaN")}} si au moins un des arguments fourni n'est pas un nombre ou ne peut pas être converti en nombre.

- -
{{EmbedInteractiveExample("pages/js/math-min.html")}}
- -

Syntaxe

- -
Math.min([valeur1[,valeur2, ...]]) 
- -

Paramètres

- -
-
valeur1, valeur2, ...
-
Des nombres.
-
- -

Valeur de retour

- -

Le plus petit des nombres passés en arguments. S'il existe un argument qui ne peut pas être converti en nombre, c'est {{jsxref("NaN")}} qui sera renvoyé. Le résultat sera {{jsxref("Infinity")}} si aucun paramètre n'est fourni.

- -

Description

- -

min() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.min() et ne doit pas être utilisée comme la méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

- -

Si aucun argument n'est fourni, le résultat renvoyé par la fonction sera {{jsxref("Infinity")}}.

- -

Si au moins un des arguments ne peut pas être converti en un nombre, le résultat sera {{jsxref("NaN")}}.

- -

Exemples

- -

Utiliser Math.min()

- -

Dans cet exemple, on trouve le minimum de x et y et on affecte cette valeur à z :

- -
var x = 10, y = -20;
-var z = Math.min(x, y);
-
- -

Ramener une valeur dans un intervalle (clipping) avec Math.min()

- -

Math.min() est souvent utilisée afin de ramener une certaine valeur dans un intervalle donné. Par exemple :

- -
var x = f(toto);
-
-if (x > limite) {
-  x = limite;
-}
-
- -

peut s'écrire

- -
var x = Math.min(f(toto), limite);
- -
{{jsxref("Math.max()")}} peut être utilisée de façon semblable pour ramener une valeur vers un minimum d'un intervalle donné.
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.12', 'Math.min')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.min', 'Math.min')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.min', 'Math.min')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.min")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/min/index.md b/files/fr/web/javascript/reference/global_objects/math/min/index.md new file mode 100644 index 0000000000..39cd2d8567 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/min/index.md @@ -0,0 +1,108 @@ +--- +title: Math.min() +slug: Web/JavaScript/Reference/Global_Objects/Math/min +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/min +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/min +--- +
{{JSRef}}
+ +

La fonction Math.min() renvoie le plus petit nombre d'une série de 0 ou plusieurs nombres ou bien {{jsxref("NaN")}} si au moins un des arguments fourni n'est pas un nombre ou ne peut pas être converti en nombre.

+ +
{{EmbedInteractiveExample("pages/js/math-min.html")}}
+ +

Syntaxe

+ +
Math.min([valeur1[,valeur2, ...]]) 
+ +

Paramètres

+ +
+
valeur1, valeur2, ...
+
Des nombres.
+
+ +

Valeur de retour

+ +

Le plus petit des nombres passés en arguments. S'il existe un argument qui ne peut pas être converti en nombre, c'est {{jsxref("NaN")}} qui sera renvoyé. Le résultat sera {{jsxref("Infinity")}} si aucun paramètre n'est fourni.

+ +

Description

+ +

min() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.min() et ne doit pas être utilisée comme la méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Si aucun argument n'est fourni, le résultat renvoyé par la fonction sera {{jsxref("Infinity")}}.

+ +

Si au moins un des arguments ne peut pas être converti en un nombre, le résultat sera {{jsxref("NaN")}}.

+ +

Exemples

+ +

Utiliser Math.min()

+ +

Dans cet exemple, on trouve le minimum de x et y et on affecte cette valeur à z :

+ +
var x = 10, y = -20;
+var z = Math.min(x, y);
+
+ +

Ramener une valeur dans un intervalle (clipping) avec Math.min()

+ +

Math.min() est souvent utilisée afin de ramener une certaine valeur dans un intervalle donné. Par exemple :

+ +
var x = f(toto);
+
+if (x > limite) {
+  x = limite;
+}
+
+ +

peut s'écrire

+ +
var x = Math.min(f(toto), limite);
+ +
{{jsxref("Math.max()")}} peut être utilisée de façon semblable pour ramener une valeur vers un minimum d'un intervalle donné.
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.12', 'Math.min')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.min', 'Math.min')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.min', 'Math.min')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.min")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/pi/index.html b/files/fr/web/javascript/reference/global_objects/math/pi/index.html deleted file mode 100644 index d9aa0848db..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/pi/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Math.PI -slug: Web/JavaScript/Reference/Global_Objects/Math/PI -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/PI -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/PI ---- -
{{JSRef}}
- -

La propriété Math.PI représente le ratio entre le périmètre d'un cercle et son diamètre. Elle vaut environ 3.14159:

- -

Math.PI=π3.14159\mathtt{\mi{Math.PI}} = \pi \approx 3.14159

- -
{{EmbedInteractiveExample("pages/js/math-pi.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

PI est une propriété statique de l'objet Math et doit toujours être utilisée avec la syntaxe Math.PI plutôt que d'être appelée comme la propriété d'un autre objet qui aurait été crée (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.PI

- -

La fonction suivante utilise Math.PI afin de calculer le périmètre d'un cercle à partir du rayon passé en argument.

- -
function calculPérimètre(rayon) {
-  return 2 * Math.PI * rayon;
-}
-
-calculPérimètre(1);  // 6.283185307179586
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.6', 'Math.PI')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.pi', 'Math.PI')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.pi', 'Math.PI')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.PI")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/pi/index.md b/files/fr/web/javascript/reference/global_objects/math/pi/index.md new file mode 100644 index 0000000000..d9aa0848db --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/pi/index.md @@ -0,0 +1,80 @@ +--- +title: Math.PI +slug: Web/JavaScript/Reference/Global_Objects/Math/PI +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/PI +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/PI +--- +
{{JSRef}}
+ +

La propriété Math.PI représente le ratio entre le périmètre d'un cercle et son diamètre. Elle vaut environ 3.14159:

+ +

Math.PI=π3.14159\mathtt{\mi{Math.PI}} = \pi \approx 3.14159

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

Description

+ +

PI est une propriété statique de l'objet Math et doit toujours être utilisée avec la syntaxe Math.PI plutôt que d'être appelée comme la propriété d'un autre objet qui aurait été crée (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.PI

+ +

La fonction suivante utilise Math.PI afin de calculer le périmètre d'un cercle à partir du rayon passé en argument.

+ +
function calculPérimètre(rayon) {
+  return 2 * Math.PI * rayon;
+}
+
+calculPérimètre(1);  // 6.283185307179586
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.6', 'Math.PI')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.pi', 'Math.PI')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.pi', 'Math.PI')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.PI")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/pow/index.html b/files/fr/web/javascript/reference/global_objects/math/pow/index.html deleted file mode 100644 index b12f348e80..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/pow/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Math.pow() -slug: Web/JavaScript/Reference/Global_Objects/Math/pow -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/pow -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/pow ---- -
{{JSRef}}
- -

La fonction Math.pow() renvoie un nombre à une certaine puissance, c'est-à-dire base^exposant.

- -
{{EmbedInteractiveExample("pages/js/math-pow.html")}}
- -

Syntaxe

- -
Math.pow(base, exposant);
- -

Paramètres

- -
-
base
-
Le nombre correspondant à la base.
-
exponent
-
L'exposant auquel on élève le paramètre précédent.
-
- -

Valeur de retour

- -

Un nombre qui représente un nombre (premier argument) élevé à une puissance donné (second argument).

- -

Description

- -

pow() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.pow(), elle ne doit pas être utilisée comme une méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemple

- -

Utiliser Math.pow()

- -
// Utilisation simple
-Math.pow(7, 2); // 49
-
-// Exposants négatifs
-Math.pow(7, -2); // 0.02040816326530612 (1/49)
-
-// Exposants fractionnaires
-Math.pow(2, 1/2); // 1.4142135623730951 (racine carrée de 2)
-
-// Cas aux limites
-Math.pow(-7, 0.5); // NaN
-// (les nombres négatifs n'ont pas de racine carrée)
-Math.pow(-7, 1/3); // NaN
-// Nombre négatif avec une base décimale
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.13', 'Math.pow')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.pow', 'Math.pow')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.pow', 'Math.pow')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.pow")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/pow/index.md b/files/fr/web/javascript/reference/global_objects/math/pow/index.md new file mode 100644 index 0000000000..b12f348e80 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/pow/index.md @@ -0,0 +1,103 @@ +--- +title: Math.pow() +slug: Web/JavaScript/Reference/Global_Objects/Math/pow +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/pow +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/pow +--- +
{{JSRef}}
+ +

La fonction Math.pow() renvoie un nombre à une certaine puissance, c'est-à-dire base^exposant.

+ +
{{EmbedInteractiveExample("pages/js/math-pow.html")}}
+ +

Syntaxe

+ +
Math.pow(base, exposant);
+ +

Paramètres

+ +
+
base
+
Le nombre correspondant à la base.
+
exponent
+
L'exposant auquel on élève le paramètre précédent.
+
+ +

Valeur de retour

+ +

Un nombre qui représente un nombre (premier argument) élevé à une puissance donné (second argument).

+ +

Description

+ +

pow() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.pow(), elle ne doit pas être utilisée comme une méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemple

+ +

Utiliser Math.pow()

+ +
// Utilisation simple
+Math.pow(7, 2); // 49
+
+// Exposants négatifs
+Math.pow(7, -2); // 0.02040816326530612 (1/49)
+
+// Exposants fractionnaires
+Math.pow(2, 1/2); // 1.4142135623730951 (racine carrée de 2)
+
+// Cas aux limites
+Math.pow(-7, 0.5); // NaN
+// (les nombres négatifs n'ont pas de racine carrée)
+Math.pow(-7, 1/3); // NaN
+// Nombre négatif avec une base décimale
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.13', 'Math.pow')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.pow', 'Math.pow')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.pow', 'Math.pow')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.pow")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/random/index.html b/files/fr/web/javascript/reference/global_objects/math/random/index.html deleted file mode 100644 index c5b3df93df..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/random/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Math.random() -slug: Web/JavaScript/Reference/Global_Objects/Math/random -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/random -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/random ---- -
{{JSRef}}
- -

La fonction Math.random() renvoie un nombre flottant pseudo-aléatoire compris dans l'intervalle [0, 1[ (ce qui signifie que 0 est compris dans l'intervalle mais que 1 en est exclu) selon une distribution approximativement uniforme sur cet intervalle. Ce nombre peut ensuite être multiplié afin de couvrir un autre intervalle. La graine (seed) du générateur est choisie par l'algorithme et ne peut pas être choisie ou réinitialisée par l'utilisateur.

- -
{{EmbedInteractiveExample("pages/js/math-random.html")}}
- -
-

Note : Math.random() ne fournit pas de nombres aléatoires propres à une cryptographie sécurisée. Les résultats de cette méthode ne doivent pas être utilisées dans des applications liées à la sécurité. À la place, on préfèrera utiliser l'API Web Crypto et plus précisément la méthode {{domxref("RandomSource.getRandomValues()", "window.crypto.getRandomValues()")}}.

-
- -

Syntaxe

- -
Math.random()
- -

Valeur de retour

- -

Un nombre flottant pseudo-aléatoire, généré entre 0 (inclus) et 1 (exclu)

- -

Exemples

- -

En JavaScript, les nombres sont représentés comme des nombres flottants selon la norme IEEE 754 et les arrondis sont pris aux plus près. Aussi, les intervalles revendiqués par les fonctions ci-après (en dehors de Math.random()) ne sont pas théoriquement et précisément exacts. Si on utilise des bornes supérieures très grande (2^53 ou plus), il est alors possible, dans de très rares cas, d'obtenir la borne supérieure comme résultat alors que celle-ci devrait être exclue de l'intervalle.

- -

Obtenir un nombre aléatoire entre 0 et 1

- -
// On renvoie un nombre aléatoire entre 0 (inclus) et 1 (exclus)
-function getRandom() {
-  return Math.random();
-}
- -

Obtenir un nombre aléatoire dans un intervalle

- -
// On renvoie un nombre aléatoire entre une valeur min (incluse)
-// et une valeur max (exclue)
-function getRandomArbitrary(min, max) {
-  return Math.random() * (max - min) + min;
-}
- -

Obtenir un entier aléatoire dans un intervalle ouvert à droite

- -
// On renvoie un entier aléatoire entre une valeur min (incluse)
-// et une valeur max (exclue).
-// Attention : si on utilisait Math.round(), on aurait une distribution
-// non uniforme !
-function getRandomInt(min, max) {
-  min = Math.ceil(min);
-  max = Math.floor(max);
-  return Math.floor(Math.random() * (max - min)) + min;
-}
-
- -
-

Attention : Utiliser Math.round() entraînerait une distribution non-uniforme et réduirait le caractère aléatoire de la méthode.

-
- -

Obtenir un entier aléatoire dans un intervalle fermé

- -
// On renvoie un entier aléatoire entre une valeur min (incluse)
-// et une valeur max (incluse).
-// Attention : si on utilisait Math.round(), on aurait une distribution
-// non uniforme !
-function getRandomIntInclusive(min, max) {
-  min = Math.ceil(min);
-  max = Math.floor(max);
-  return Math.floor(Math.random() * (max - min +1)) + min;
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0 (UNIX) et 1.1 (toutes plateformes).
{{SpecName('ES5.1', '#sec-15.8.2.14', 'Math.random')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.random', 'Math.random')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.random', 'Math.random')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.random")}}

diff --git a/files/fr/web/javascript/reference/global_objects/math/random/index.md b/files/fr/web/javascript/reference/global_objects/math/random/index.md new file mode 100644 index 0000000000..c5b3df93df --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/random/index.md @@ -0,0 +1,113 @@ +--- +title: Math.random() +slug: Web/JavaScript/Reference/Global_Objects/Math/random +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/random +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/random +--- +
{{JSRef}}
+ +

La fonction Math.random() renvoie un nombre flottant pseudo-aléatoire compris dans l'intervalle [0, 1[ (ce qui signifie que 0 est compris dans l'intervalle mais que 1 en est exclu) selon une distribution approximativement uniforme sur cet intervalle. Ce nombre peut ensuite être multiplié afin de couvrir un autre intervalle. La graine (seed) du générateur est choisie par l'algorithme et ne peut pas être choisie ou réinitialisée par l'utilisateur.

+ +
{{EmbedInteractiveExample("pages/js/math-random.html")}}
+ +
+

Note : Math.random() ne fournit pas de nombres aléatoires propres à une cryptographie sécurisée. Les résultats de cette méthode ne doivent pas être utilisées dans des applications liées à la sécurité. À la place, on préfèrera utiliser l'API Web Crypto et plus précisément la méthode {{domxref("RandomSource.getRandomValues()", "window.crypto.getRandomValues()")}}.

+
+ +

Syntaxe

+ +
Math.random()
+ +

Valeur de retour

+ +

Un nombre flottant pseudo-aléatoire, généré entre 0 (inclus) et 1 (exclu)

+ +

Exemples

+ +

En JavaScript, les nombres sont représentés comme des nombres flottants selon la norme IEEE 754 et les arrondis sont pris aux plus près. Aussi, les intervalles revendiqués par les fonctions ci-après (en dehors de Math.random()) ne sont pas théoriquement et précisément exacts. Si on utilise des bornes supérieures très grande (2^53 ou plus), il est alors possible, dans de très rares cas, d'obtenir la borne supérieure comme résultat alors que celle-ci devrait être exclue de l'intervalle.

+ +

Obtenir un nombre aléatoire entre 0 et 1

+ +
// On renvoie un nombre aléatoire entre 0 (inclus) et 1 (exclus)
+function getRandom() {
+  return Math.random();
+}
+ +

Obtenir un nombre aléatoire dans un intervalle

+ +
// On renvoie un nombre aléatoire entre une valeur min (incluse)
+// et une valeur max (exclue)
+function getRandomArbitrary(min, max) {
+  return Math.random() * (max - min) + min;
+}
+ +

Obtenir un entier aléatoire dans un intervalle ouvert à droite

+ +
// On renvoie un entier aléatoire entre une valeur min (incluse)
+// et une valeur max (exclue).
+// Attention : si on utilisait Math.round(), on aurait une distribution
+// non uniforme !
+function getRandomInt(min, max) {
+  min = Math.ceil(min);
+  max = Math.floor(max);
+  return Math.floor(Math.random() * (max - min)) + min;
+}
+
+ +
+

Attention : Utiliser Math.round() entraînerait une distribution non-uniforme et réduirait le caractère aléatoire de la méthode.

+
+ +

Obtenir un entier aléatoire dans un intervalle fermé

+ +
// On renvoie un entier aléatoire entre une valeur min (incluse)
+// et une valeur max (incluse).
+// Attention : si on utilisait Math.round(), on aurait une distribution
+// non uniforme !
+function getRandomIntInclusive(min, max) {
+  min = Math.ceil(min);
+  max = Math.floor(max);
+  return Math.floor(Math.random() * (max - min +1)) + min;
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0 (UNIX) et 1.1 (toutes plateformes).
{{SpecName('ES5.1', '#sec-15.8.2.14', 'Math.random')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.random', 'Math.random')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.random', 'Math.random')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.random")}}

diff --git a/files/fr/web/javascript/reference/global_objects/math/round/index.html b/files/fr/web/javascript/reference/global_objects/math/round/index.html deleted file mode 100644 index fb671af237..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/round/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Math.round() -slug: Web/JavaScript/Reference/Global_Objects/Math/round -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/round -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/round ---- -
{{JSRef}}
- -

La fonction Math.round() retourne la valeur d'un nombre arrondi à l'entier le plus proche.

- -
{{EmbedInteractiveExample("pages/js/math-round.html")}}
- -

Syntaxe

- -
Math.round(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

La valeur de l'entier le plus proche du nombre passé en argument.

- -

Description

- -

Si la partie décimale du nombre est plus grande que 0.5, l'argument est arrondi à l'entier le plus proche dont la valeur absolue est plus grande. Si elle est plus petite que 0.5, l'argument est arrondi à l'entier le plus proche dont la valeur absolue est plus petite. Si la partie décimale du nombre vaut exactement 0.5, l'argument est arrondi à l'entier le plus proche en direction de l'infini positif (attention, pour la plupart des langages de programmation, c'est le nombre avec la plus grande valeur absolue qui est renvoyé ; on a donc une différence de comportement pour les nombres négatifs dont la partie décimale vaut exactement 0.5).

- -

round() étant une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.round(), elle ne doit pas être utilisée comme une méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -
Math.round(20.49); //  20
-Math.round(20.5);  //  21
-Math.round(42);    //  42
-Math.round(-20.5); // -20
-Math.round(-20.51);// -21
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.15', 'Math.round')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.round', 'Math.round')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.round', 'Math.round')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.round")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/round/index.md b/files/fr/web/javascript/reference/global_objects/math/round/index.md new file mode 100644 index 0000000000..fb671af237 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/round/index.md @@ -0,0 +1,94 @@ +--- +title: Math.round() +slug: Web/JavaScript/Reference/Global_Objects/Math/round +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/round +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/round +--- +
{{JSRef}}
+ +

La fonction Math.round() retourne la valeur d'un nombre arrondi à l'entier le plus proche.

+ +
{{EmbedInteractiveExample("pages/js/math-round.html")}}
+ +

Syntaxe

+ +
Math.round(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

La valeur de l'entier le plus proche du nombre passé en argument.

+ +

Description

+ +

Si la partie décimale du nombre est plus grande que 0.5, l'argument est arrondi à l'entier le plus proche dont la valeur absolue est plus grande. Si elle est plus petite que 0.5, l'argument est arrondi à l'entier le plus proche dont la valeur absolue est plus petite. Si la partie décimale du nombre vaut exactement 0.5, l'argument est arrondi à l'entier le plus proche en direction de l'infini positif (attention, pour la plupart des langages de programmation, c'est le nombre avec la plus grande valeur absolue qui est renvoyé ; on a donc une différence de comportement pour les nombres négatifs dont la partie décimale vaut exactement 0.5).

+ +

round() étant une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.round(), elle ne doit pas être utilisée comme une méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +
Math.round(20.49); //  20
+Math.round(20.5);  //  21
+Math.round(42);    //  42
+Math.round(-20.5); // -20
+Math.round(-20.51);// -21
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.15', 'Math.round')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-math.round', 'Math.round')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-math.round', 'Math.round')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.round")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/sign/index.html b/files/fr/web/javascript/reference/global_objects/math/sign/index.html deleted file mode 100644 index c27e808527..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/sign/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Math.sign() -slug: Web/JavaScript/Reference/Global_Objects/Math/sign -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/sign -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sign ---- -
{{JSRef}}
- -

La fonction Math.sign() renvoie le signe d'un nombre et permet de savoir si un nombre est positif, négatif ou nul.

- -
{{EmbedInteractiveExample("pages/js/math-sign.html")}}
- -

Syntaxe

- -
Math.sign(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Un nombre qui représente le signe de l'argument. Si l'argument est un nombre positif, négatif, un zéro positif ou un zéro négatif, la fonction renverra respectivement 1, -1, 0, -0. Sinon, ce sera {{jsxref("NaN")}} qui sera renvoyé.

- -

Description

- -

sign() étant une méthode statique de Math, il faut utiliser Math.sign() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Cette fonction peut renvoyer 5 valeurs : 1, -1, 0, -0, NaN, qui indiquent respectivement que x est un nombre positif, un nombre négatif, zéro, la limite négative de zéro, et n'est pas un nombre pour {{jsxref("NaN")}}.

- -

L'argument passé à cette fonction sera implicitement converti au type number.

- -

Exemples

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.sign', 'Math.sign')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.sign', 'Math.sign')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.sign")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/sign/index.md b/files/fr/web/javascript/reference/global_objects/math/sign/index.md new file mode 100644 index 0000000000..c27e808527 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/sign/index.md @@ -0,0 +1,89 @@ +--- +title: Math.sign() +slug: Web/JavaScript/Reference/Global_Objects/Math/sign +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sign +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sign +--- +
{{JSRef}}
+ +

La fonction Math.sign() renvoie le signe d'un nombre et permet de savoir si un nombre est positif, négatif ou nul.

+ +
{{EmbedInteractiveExample("pages/js/math-sign.html")}}
+ +

Syntaxe

+ +
Math.sign(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Un nombre qui représente le signe de l'argument. Si l'argument est un nombre positif, négatif, un zéro positif ou un zéro négatif, la fonction renverra respectivement 1, -1, 0, -0. Sinon, ce sera {{jsxref("NaN")}} qui sera renvoyé.

+ +

Description

+ +

sign() étant une méthode statique de Math, il faut utiliser Math.sign() et non pas la méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Cette fonction peut renvoyer 5 valeurs : 1, -1, 0, -0, NaN, qui indiquent respectivement que x est un nombre positif, un nombre négatif, zéro, la limite négative de zéro, et n'est pas un nombre pour {{jsxref("NaN")}}.

+ +

L'argument passé à cette fonction sera implicitement converti au type number.

+ +

Exemples

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-math.sign', 'Math.sign')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.sign', 'Math.sign')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.sign")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/sin/index.html b/files/fr/web/javascript/reference/global_objects/math/sin/index.html deleted file mode 100644 index 3f3ea2afe8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/sin/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Math.sin() -slug: Web/JavaScript/Reference/Global_Objects/Math/sin -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/sin -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sin ---- -
{{JSRef}}
- -

La fonction Math.sin() renvoie le sinus d'un nombre.

- -
{{EmbedInteractiveExample("pages/js/math-sin.html")}}
- -

Syntaxe

- -
Math.sin(x)
- -

Paramètres

- -
-
x
-
Un nombre (qui exprime un angle en radians).
-
- -

Valeur de retour

- -

Le sinus de la valeur passée en argument (qui correspond à un angle en radians).

- -

Description

- -

La méthode sin() renvoie une valeur numérique comprise (au sens large) entre 1 et -1 et qui représente le sinus d'un angle donné en radians.

- -

sin() est une méthode statique de Math, elle doit être utilisée avec la syntaxe Math.sin(), elle ne doit pas être utilisée comme une méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -
Math.sin(0);           // 0
-Math.sin(1);           // 0.8414709848078965
-
-Math.sin(Math.PI / 2); // 1
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.16', 'Math.sin')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sin', 'Math.sin')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sin', 'Math.sin')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.sin")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/sin/index.md b/files/fr/web/javascript/reference/global_objects/math/sin/index.md new file mode 100644 index 0000000000..3f3ea2afe8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/sin/index.md @@ -0,0 +1,91 @@ +--- +title: Math.sin() +slug: Web/JavaScript/Reference/Global_Objects/Math/sin +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sin +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sin +--- +
{{JSRef}}
+ +

La fonction Math.sin() renvoie le sinus d'un nombre.

+ +
{{EmbedInteractiveExample("pages/js/math-sin.html")}}
+ +

Syntaxe

+ +
Math.sin(x)
+ +

Paramètres

+ +
+
x
+
Un nombre (qui exprime un angle en radians).
+
+ +

Valeur de retour

+ +

Le sinus de la valeur passée en argument (qui correspond à un angle en radians).

+ +

Description

+ +

La méthode sin() renvoie une valeur numérique comprise (au sens large) entre 1 et -1 et qui représente le sinus d'un angle donné en radians.

+ +

sin() est une méthode statique de Math, elle doit être utilisée avec la syntaxe Math.sin(), elle ne doit pas être utilisée comme une méthode d'un objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +
Math.sin(0);           // 0
+Math.sin(1);           // 0.8414709848078965
+
+Math.sin(Math.PI / 2); // 1
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.16', 'Math.sin')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sin', 'Math.sin')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sin', 'Math.sin')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.sin")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/sinh/index.html b/files/fr/web/javascript/reference/global_objects/math/sinh/index.html deleted file mode 100644 index 4edf3a2ad5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/sinh/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Math.sinh() -slug: Web/JavaScript/Reference/Global_Objects/Math/sinh -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/sinh -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sinh ---- -
{{JSRef}}
- -

La fonction Math.sinh() renvoie le sinus hyperbolique d'un nombre, dont la formule, utilisant la constante {{jsxref("Math.E","e")}}, est :

- -

Math.sinh(x)=ex-e-x2\mathtt{\operatorname{Math.sinh(x)}} = \frac{e^x - e^{-x}}{2}

- -
{{EmbedInteractiveExample("pages/js/math-sinh.html")}}
- -

Syntaxe

- -
Math.sinh(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

Le sinus hyperbolique de la valeur passée en argument.

- -

Description

- -

sinh() est une méthode statique de Math, il faut utiliser la syntaxe Math.sinh(). Cette méthode ne doit pas être appelée depuis un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -
Math.sinh(0) // 0
-Math.sinh(1) // 1.1752011936438014
- -

Prothèse d'émulation (polyfill)

- -

Si cette fonction n'est pas disponible, elle peut être émulée en utilisant la fonction {{jsxref("Math.exp()")}} :

- -
Math.sinh = Math.sinh || function(x){
-    return (Math.exp(x) - Math.exp(-x)) / 2;
-};
- -

ou encore, si on n'utilise qu'une fois {{jsxref("Math.exp()")}}, avec :

- -
Math.sinh = Math.sinh || function(x){
-    var y = Math.exp(x);
-    return (y - 1/y) / 2;
-};
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.sinh', 'Math.sinh')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.sinh', 'Math.sinh')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.sinh")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/sinh/index.md b/files/fr/web/javascript/reference/global_objects/math/sinh/index.md new file mode 100644 index 0000000000..4edf3a2ad5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/sinh/index.md @@ -0,0 +1,95 @@ +--- +title: Math.sinh() +slug: Web/JavaScript/Reference/Global_Objects/Math/sinh +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sinh +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sinh +--- +
{{JSRef}}
+ +

La fonction Math.sinh() renvoie le sinus hyperbolique d'un nombre, dont la formule, utilisant la constante {{jsxref("Math.E","e")}}, est :

+ +

Math.sinh(x)=ex-e-x2\mathtt{\operatorname{Math.sinh(x)}} = \frac{e^x - e^{-x}}{2}

+ +
{{EmbedInteractiveExample("pages/js/math-sinh.html")}}
+ +

Syntaxe

+ +
Math.sinh(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

Le sinus hyperbolique de la valeur passée en argument.

+ +

Description

+ +

sinh() est une méthode statique de Math, il faut utiliser la syntaxe Math.sinh(). Cette méthode ne doit pas être appelée depuis un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +
Math.sinh(0) // 0
+Math.sinh(1) // 1.1752011936438014
+ +

Prothèse d'émulation (polyfill)

+ +

Si cette fonction n'est pas disponible, elle peut être émulée en utilisant la fonction {{jsxref("Math.exp()")}} :

+ +
Math.sinh = Math.sinh || function(x){
+    return (Math.exp(x) - Math.exp(-x)) / 2;
+};
+ +

ou encore, si on n'utilise qu'une fois {{jsxref("Math.exp()")}}, avec :

+ +
Math.sinh = Math.sinh || function(x){
+    var y = Math.exp(x);
+    return (y - 1/y) / 2;
+};
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.sinh', 'Math.sinh')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-math.sinh', 'Math.sinh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.sinh")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/sqrt/index.html b/files/fr/web/javascript/reference/global_objects/math/sqrt/index.html deleted file mode 100644 index 6b309e4d01..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/sqrt/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Math.sqrt() -slug: Web/JavaScript/Reference/Global_Objects/Math/sqrt -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/sqrt -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sqrt ---- -
{{JSRef}}
- -

La fonction Math.sqrt() renvoie la racine carrée d'un nombre. Cette fonction est définie par :

- -

x0,Math.sqrt(x)=x=l'uniquey0tel quey2=x\forall x \geq 0, \mathtt{Math.sqrt(x)} = \sqrt{x} = \text{the unique} \; y \geq 0 \; \text{such that} \; y^2 = x

- -
{{EmbedInteractiveExample("pages/js/math-sqrt.html")}}
- -

Syntaxe

- -
Math.sqrt(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

La racine carrée du nombre passé en argument. Si le nombre fourni est négatif, c'est {{jsxref("NaN")}} qui sera renvoyé.

- -

Description

- -

Si la valeur de x est négative, sqrt renverra {{jsxref("NaN")}}.

- -

sqrt() est une méthode statique de Math, elle doit être utilisée avec la syntaxe Math.sqrt(), elle ne doit pas être appelée comme méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

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

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.17', 'Math.sqrt')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt', 'Math.sqrt')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt', 'Math.sqrt')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.sqrt")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/sqrt/index.md b/files/fr/web/javascript/reference/global_objects/math/sqrt/index.md new file mode 100644 index 0000000000..6b309e4d01 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/sqrt/index.md @@ -0,0 +1,94 @@ +--- +title: Math.sqrt() +slug: Web/JavaScript/Reference/Global_Objects/Math/sqrt +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/sqrt +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/sqrt +--- +
{{JSRef}}
+ +

La fonction Math.sqrt() renvoie la racine carrée d'un nombre. Cette fonction est définie par :

+ +

x0,Math.sqrt(x)=x=l'uniquey0tel quey2=x\forall x \geq 0, \mathtt{Math.sqrt(x)} = \sqrt{x} = \text{the unique} \; y \geq 0 \; \text{such that} \; y^2 = x

+ +
{{EmbedInteractiveExample("pages/js/math-sqrt.html")}}
+ +

Syntaxe

+ +
Math.sqrt(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

La racine carrée du nombre passé en argument. Si le nombre fourni est négatif, c'est {{jsxref("NaN")}} qui sera renvoyé.

+ +

Description

+ +

Si la valeur de x est négative, sqrt renverra {{jsxref("NaN")}}.

+ +

sqrt() est une méthode statique de Math, elle doit être utilisée avec la syntaxe Math.sqrt(), elle ne doit pas être appelée comme méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.17', 'Math.sqrt')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt', 'Math.sqrt')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt', 'Math.sqrt')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.sqrt")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.html b/files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.html deleted file mode 100644 index 7a1037786c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Math.SQRT1_2 -slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/SQRT1_2 ---- -
{{JSRef}}
- -

La propriété Math.SQRT1_2 représente la racine carrée d'1/2 et vaut environ 0.707 :

- -

Math.SQRT1_2=12=120.707\mathtt{\mi{Math.SQRT1_2}} = \sqrt{\frac{1}{2}} = \frac{1}{\sqrt{2}} \approx 0.707

- -
{{EmbedInteractiveExample("pages/js/math-sqrt1_2.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

SQRT1_2 est une propriété statique de Math et doit toujours être utilisée avec la syntaxe Math.SQRT1_2. Elle ne doit pas être obtenue à partir d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

La fonction suivante renvoie la valeur de cette constante :

- -
function getRoot1_2() {
-   return Math.SQRT1_2;
-}
-
-getRoot1_2(); // 0.7071067811865476
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.7', 'Math.SQRT1_2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.SQRT1_2")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.md b/files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.md new file mode 100644 index 0000000000..7a1037786c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/sqrt1_2/index.md @@ -0,0 +1,79 @@ +--- +title: Math.SQRT1_2 +slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/SQRT1_2 +--- +
{{JSRef}}
+ +

La propriété Math.SQRT1_2 représente la racine carrée d'1/2 et vaut environ 0.707 :

+ +

Math.SQRT1_2=12=120.707\mathtt{\mi{Math.SQRT1_2}} = \sqrt{\frac{1}{2}} = \frac{1}{\sqrt{2}} \approx 0.707

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

Description

+ +

SQRT1_2 est une propriété statique de Math et doit toujours être utilisée avec la syntaxe Math.SQRT1_2. Elle ne doit pas être obtenue à partir d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

La fonction suivante renvoie la valeur de cette constante :

+ +
function getRoot1_2() {
+   return Math.SQRT1_2;
+}
+
+getRoot1_2(); // 0.7071067811865476
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.7', 'Math.SQRT1_2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.SQRT1_2")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/sqrt2/index.html b/files/fr/web/javascript/reference/global_objects/math/sqrt2/index.html deleted file mode 100644 index 964c355404..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/sqrt2/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Math.SQRT2 -slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT2 -tags: - - JavaScript - - Math - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT2 -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/SQRT2 ---- -
{{JSRef}}
- -

La propriété Math.SQRT2 représente la racine carrée de 2 et vaut environ 1.414 :

- -

Math.SQRT2=21.414\mathtt{\mi{Math.SQRT2}} = \sqrt{2} \approx 1.414

- -
{{EmbedInteractiveExample("pages/js/math-sqrt2.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

SQRT2 est une propriété statique de Math et doit toujours être utilisée avec la syntaxe Math.SQRT2, elle ne doit pas être appelée comme propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

La fonction suivante renvoie la valeur de la racine carrée de 2 :

- -
function getRoot2() {
-   return Math.SQRT2;
-}
-
-getRoot2(); // 1.4142135623730951
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.8', 'Math.SQRT2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt2', 'Math.SQRT2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt2', 'Math.SQRT2')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.SQRT2")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/sqrt2/index.md b/files/fr/web/javascript/reference/global_objects/math/sqrt2/index.md new file mode 100644 index 0000000000..964c355404 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/sqrt2/index.md @@ -0,0 +1,79 @@ +--- +title: Math.SQRT2 +slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT2 +tags: + - JavaScript + - Math + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT2 +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/SQRT2 +--- +
{{JSRef}}
+ +

La propriété Math.SQRT2 représente la racine carrée de 2 et vaut environ 1.414 :

+ +

Math.SQRT2=21.414\mathtt{\mi{Math.SQRT2}} = \sqrt{2} \approx 1.414

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

Description

+ +

SQRT2 est une propriété statique de Math et doit toujours être utilisée avec la syntaxe Math.SQRT2, elle ne doit pas être appelée comme propriété d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

La fonction suivante renvoie la valeur de la racine carrée de 2 :

+ +
function getRoot2() {
+   return Math.SQRT2;
+}
+
+getRoot2(); // 1.4142135623730951
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.1.8', 'Math.SQRT2')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.sqrt2', 'Math.SQRT2')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.sqrt2', 'Math.SQRT2')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.SQRT2")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/tan/index.html b/files/fr/web/javascript/reference/global_objects/math/tan/index.html deleted file mode 100644 index 17d938acab..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/tan/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Math.tan() -slug: Web/JavaScript/Reference/Global_Objects/Math/tan -tags: - - JavaScript - - Math - - Méthode - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Math/tan -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/tan ---- -
{{JSRef}}
- -

La fonction Math.tan() renvoie la tangente d'un nombre exprimant un angle en radians.

- -
{{EmbedInteractiveExample("pages/js/math-tan.html")}}
- -

Syntaxe

- -
Math.tan(x)
- -

Paramètres

- -
-
x
-
Un nombre qui représente un angle en radians.
-
- -

Valeur de retour

- -

La tangente de l'angle fourni en argument (exprimé en radians).

- -

Description

- -

La méthode Math.tan() renvoie une valeur numérique qui représente la tangente d'un angle.

- -

tan() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.tan(), elle ne doit pas être utilisée comme méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.tan()

- -
Math.tan(1); // 1.5574077246549023
- -

Math.tan() considère un argument exprimé en radians. Cependant, on peut vouloir travailler avec des valeurs en degrés. Pour cela, on pourra utiliser la fonction suivante qui calcule la tangente après avoir converti l'argument en radians :

- -
function getTanDeg(deg) {
-   var rad = deg * Math.PI/180;
-   return Math.tan(rad);
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.18', 'Math.tan')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.tan', 'Math.tan')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.tan', 'Math.tan')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.tan")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/tan/index.md b/files/fr/web/javascript/reference/global_objects/math/tan/index.md new file mode 100644 index 0000000000..17d938acab --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/tan/index.md @@ -0,0 +1,98 @@ +--- +title: Math.tan() +slug: Web/JavaScript/Reference/Global_Objects/Math/tan +tags: + - JavaScript + - Math + - Méthode + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Math/tan +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/tan +--- +
{{JSRef}}
+ +

La fonction Math.tan() renvoie la tangente d'un nombre exprimant un angle en radians.

+ +
{{EmbedInteractiveExample("pages/js/math-tan.html")}}
+ +

Syntaxe

+ +
Math.tan(x)
+ +

Paramètres

+ +
+
x
+
Un nombre qui représente un angle en radians.
+
+ +

Valeur de retour

+ +

La tangente de l'angle fourni en argument (exprimé en radians).

+ +

Description

+ +

La méthode Math.tan() renvoie une valeur numérique qui représente la tangente d'un angle.

+ +

tan() est une méthode statique de Math et doit toujours être utilisée avec la syntaxe Math.tan(), elle ne doit pas être utilisée comme méthode d'un autre objet qui aurait été créé (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.tan()

+ +
Math.tan(1); // 1.5574077246549023
+ +

Math.tan() considère un argument exprimé en radians. Cependant, on peut vouloir travailler avec des valeurs en degrés. Pour cela, on pourra utiliser la fonction suivante qui calcule la tangente après avoir converti l'argument en radians :

+ +
function getTanDeg(deg) {
+   var rad = deg * Math.PI/180;
+   return Math.tan(rad);
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.8.2.18', 'Math.tan')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-math.tan', 'Math.tan')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-math.tan', 'Math.tan')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.tan")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/tanh/index.html b/files/fr/web/javascript/reference/global_objects/math/tanh/index.html deleted file mode 100644 index be6fc10fd0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/tanh/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Math.tanh() -slug: Web/JavaScript/Reference/Global_Objects/Math/tanh -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/tanh -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/tanh ---- -
{{JSRef}}
- -

La fonction Math.tanh() renvoie la tangente hyperbolique d'un nombre définie par :

- -

tanhx=sinhxcoshx=ex-e-xex+e-x=e2x-1e2x+1\tanh x = \frac{\sinh x}{\cosh x} = \frac {e^x - e^{-x}} {e^x + e^{-x}} = \frac{e^{2x} - 1}{e^{2x}+1}

- -
{{EmbedInteractiveExample("pages/js/math-tanh.html")}}
- -

Syntaxe

- -
Math.tanh(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

La tangente hyperbolique du nombre fourni en argument.

- -

Description

- -

tanh() est une méthode statique de l'objet Math, elle doit toujours être utilisée avec la syntaxe Math.tanh(), elle ne doit pas être utilisée comme une méthode d'un objet Math qui aurait été instancié (Math n'est pas une constructeur).

- -

Exemples

- -

Utiliser Math.tanh()

- -
Math.tanh(0);        // 0
-Math.tanh(Infinity); // 1
-Math.tanh(1);        // 0.7615941559557649
- -

Prothèse d'émulation (polyfill)

- -

Cette méthode peut être émulée grâce à la fonction {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

- -
Math.tanh = Math.tanh || function(x){
-  var a = Math.exp(+x), b = Math.exp(-x);
-  return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (a + b);
-}
- -

et si on souhaite n'utiliser qu'un seul appel à {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

- -
Math.tanhx = Math.tanhx || 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);
-  }
-};
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.tanh', 'Math.tanh')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.tanh', 'Math.tanh')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.tanh")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/tanh/index.md b/files/fr/web/javascript/reference/global_objects/math/tanh/index.md new file mode 100644 index 0000000000..be6fc10fd0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/tanh/index.md @@ -0,0 +1,105 @@ +--- +title: Math.tanh() +slug: Web/JavaScript/Reference/Global_Objects/Math/tanh +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/tanh +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/tanh +--- +
{{JSRef}}
+ +

La fonction Math.tanh() renvoie la tangente hyperbolique d'un nombre définie par :

+ +

tanhx=sinhxcoshx=ex-e-xex+e-x=e2x-1e2x+1\tanh x = \frac{\sinh x}{\cosh x} = \frac {e^x - e^{-x}} {e^x + e^{-x}} = \frac{e^{2x} - 1}{e^{2x}+1}

+ +
{{EmbedInteractiveExample("pages/js/math-tanh.html")}}
+ +

Syntaxe

+ +
Math.tanh(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

La tangente hyperbolique du nombre fourni en argument.

+ +

Description

+ +

tanh() est une méthode statique de l'objet Math, elle doit toujours être utilisée avec la syntaxe Math.tanh(), elle ne doit pas être utilisée comme une méthode d'un objet Math qui aurait été instancié (Math n'est pas une constructeur).

+ +

Exemples

+ +

Utiliser Math.tanh()

+ +
Math.tanh(0);        // 0
+Math.tanh(Infinity); // 1
+Math.tanh(1);        // 0.7615941559557649
+ +

Prothèse d'émulation (polyfill)

+ +

Cette méthode peut être émulée grâce à la fonction {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

+ +
Math.tanh = Math.tanh || function(x){
+  var a = Math.exp(+x), b = Math.exp(-x);
+  return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (a + b);
+}
+ +

et si on souhaite n'utiliser qu'un seul appel à {{jsxref("Objets_globaux/Math/exp", "Math.exp()")}} :

+ +
Math.tanhx = Math.tanhx || 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);
+  }
+};
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-math.tanh', 'Math.tanh')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-math.tanh', 'Math.tanh')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.tanh")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/math/trunc/index.html b/files/fr/web/javascript/reference/global_objects/math/trunc/index.html deleted file mode 100644 index c78b0cb6ec..0000000000 --- a/files/fr/web/javascript/reference/global_objects/math/trunc/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Math.trunc() -slug: Web/JavaScript/Reference/Global_Objects/Math/trunc -tags: - - ECMAScript 2015 - - JavaScript - - Math - - Méthode - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Math/trunc -original_slug: Web/JavaScript/Reference/Objets_globaux/Math/trunc ---- -
{{JSRef}}
- -

La fonction Math.trunc() retourne la troncature entière d'un nombre en retirant sa partie décimale.

- -

Math.trunc(x)={xsix0xsix<0\mathtt{\operatorname{Math.trunc}(x)} = \begin{cases} \left\lfloor x \right\rfloor & \text{if} & x \geq 0 \\ \left\lceil x \right\rceil & \text{if} &x < 0 \end{cases}

- -
{{EmbedInteractiveExample("pages/js/math-trunc.html")}}
- -

Syntaxe

- -
Math.trunc(x)
- -

Paramètres

- -
-
x
-
Un nombre.
-
- -

Valeur de retour

- -

La partie entière du nombre passé en argument.

- -

Description

- -

Contrairement aux autres méthodes {{jsxref("Math.floor()")}}, {{jsxref("Math.ceil()")}} et {{jsxref("Math.round()")}}, Math.trunc() fonctionne de façon très simple : la partie décimale du nombre est retirée et on conserve la partie entière (que le nombre soit positif ou négatif).
-
- Ainsi, si l'argument est un nombre positif, Math.trunc() sera équivalent à Math.floor(), sinon Math.trunc() sera équivalent à Math.ceil().

- -

On notera que l'argument passé à la méthode est converti en nombre de façon implicite.

- -

trunc() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.trunc(), elle ne doit pas être utilisée comme la méthode d'un objet qui aurait été instancié (Math n'est pas un constructeur).

- -

Exemples

- -

Utiliser Math.trunc()

- -
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("toto");  // NaN
-Math.trunc();        // NaN
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaire
{{SpecName('ES2015', '#sec-math.trunc', 'Math.trunc')}}{{Spec2('ES2015')}}Première définition.
{{SpecName('ESDraft', '#sec-math.trunc', 'Math.trunc')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Math.trunc")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/math/trunc/index.md b/files/fr/web/javascript/reference/global_objects/math/trunc/index.md new file mode 100644 index 0000000000..c78b0cb6ec --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/math/trunc/index.md @@ -0,0 +1,94 @@ +--- +title: Math.trunc() +slug: Web/JavaScript/Reference/Global_Objects/Math/trunc +tags: + - ECMAScript 2015 + - JavaScript + - Math + - Méthode + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Math/trunc +original_slug: Web/JavaScript/Reference/Objets_globaux/Math/trunc +--- +
{{JSRef}}
+ +

La fonction Math.trunc() retourne la troncature entière d'un nombre en retirant sa partie décimale.

+ +

Math.trunc(x)={xsix0xsix<0\mathtt{\operatorname{Math.trunc}(x)} = \begin{cases} \left\lfloor x \right\rfloor & \text{if} & x \geq 0 \\ \left\lceil x \right\rceil & \text{if} &x < 0 \end{cases}

+ +
{{EmbedInteractiveExample("pages/js/math-trunc.html")}}
+ +

Syntaxe

+ +
Math.trunc(x)
+ +

Paramètres

+ +
+
x
+
Un nombre.
+
+ +

Valeur de retour

+ +

La partie entière du nombre passé en argument.

+ +

Description

+ +

Contrairement aux autres méthodes {{jsxref("Math.floor()")}}, {{jsxref("Math.ceil()")}} et {{jsxref("Math.round()")}}, Math.trunc() fonctionne de façon très simple : la partie décimale du nombre est retirée et on conserve la partie entière (que le nombre soit positif ou négatif).
+
+ Ainsi, si l'argument est un nombre positif, Math.trunc() sera équivalent à Math.floor(), sinon Math.trunc() sera équivalent à Math.ceil().

+ +

On notera que l'argument passé à la méthode est converti en nombre de façon implicite.

+ +

trunc() est une méthode statique de Math, elle doit toujours être utilisée avec la syntaxe Math.trunc(), elle ne doit pas être utilisée comme la méthode d'un objet qui aurait été instancié (Math n'est pas un constructeur).

+ +

Exemples

+ +

Utiliser Math.trunc()

+ +
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("toto");  // NaN
+Math.trunc();        // NaN
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaire
{{SpecName('ES2015', '#sec-math.trunc', 'Math.trunc')}}{{Spec2('ES2015')}}Première définition.
{{SpecName('ESDraft', '#sec-math.trunc', 'Math.trunc')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Math.trunc")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/nan/index.html b/files/fr/web/javascript/reference/global_objects/nan/index.html deleted file mode 100644 index b2fa6e4105..0000000000 --- a/files/fr/web/javascript/reference/global_objects/nan/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: NaN -slug: Web/JavaScript/Reference/Global_Objects/NaN -tags: - - JavaScript - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/NaN -original_slug: Web/JavaScript/Reference/Objets_globaux/NaN ---- -
{{jsSidebar("Objects")}}
- -

La propriété globale NaN est une valeur utilisée pour représenter une quantité qui n'est pas un nombre (Not a Number en anglais).

- -

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

- -
{{EmbedInteractiveExample("pages/js/globalprops-nan.html")}}
- -

Syntaxe

- -
NaN
- -

Description

- -

NaN est une propriété de l'objet global, c'est-à-dire qu'elle est accessible globalement.

- -

La valeur initiale de NaN est Number.NaN. Dans les navigateurs modernes, NaN est une propriété non-configurable et non-écrivable. Si ce n'est pas le cas, il faut éviter de la modifier et de l'écraser.

- -

Il est rare d'utiliser expressément NaN dans un programme. On récupère généralement NaN comme le résultat d'une fonction mathématique qui échoue (Math.sqrt(-1)) où quand une fonction qui tente d'interpréter un nombre échoue (parseInt("blabla")).

- -

Tester NaN

- -

Les opérateurs d'égalité (== et ===) ne peuvent pas être utilisé pour tester une valeur par rapport à NaN. Il faut utiliser {{jsxref("Number.isNaN()")}} ou {{jsxref("isNaN", "isNaN()")}} à la place.

- -
NaN === NaN;        // false
-Number.NaN === NaN; // false
-isNaN(NaN);         // true
-isNaN(Number.NaN);  // true
-
- -

La différence entre isNaN() et Number.isNaN() est la façon dont les valeurs sont, ou non, converties en nombre avant de vérifier si la valeur est NaN : isNaN() convertira l'argument en nombre avant de vérifier alors que Number.isNaN() ne renverra true que si l'opérande vaut NaN.

- -
isNaN('coucou monde');        // renvoie true
-Number.isNaN('coucou monde'); // renvoie false
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3
{{SpecName('ES5.1', '#sec-15.1.1.1', 'NaN')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/nan/index.md b/files/fr/web/javascript/reference/global_objects/nan/index.md new file mode 100644 index 0000000000..b2fa6e4105 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/nan/index.md @@ -0,0 +1,89 @@ +--- +title: NaN +slug: Web/JavaScript/Reference/Global_Objects/NaN +tags: + - JavaScript + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/NaN +original_slug: Web/JavaScript/Reference/Objets_globaux/NaN +--- +
{{jsSidebar("Objects")}}
+ +

La propriété globale NaN est une valeur utilisée pour représenter une quantité qui n'est pas un nombre (Not a Number en anglais).

+ +

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

+ +
{{EmbedInteractiveExample("pages/js/globalprops-nan.html")}}
+ +

Syntaxe

+ +
NaN
+ +

Description

+ +

NaN est une propriété de l'objet global, c'est-à-dire qu'elle est accessible globalement.

+ +

La valeur initiale de NaN est Number.NaN. Dans les navigateurs modernes, NaN est une propriété non-configurable et non-écrivable. Si ce n'est pas le cas, il faut éviter de la modifier et de l'écraser.

+ +

Il est rare d'utiliser expressément NaN dans un programme. On récupère généralement NaN comme le résultat d'une fonction mathématique qui échoue (Math.sqrt(-1)) où quand une fonction qui tente d'interpréter un nombre échoue (parseInt("blabla")).

+ +

Tester NaN

+ +

Les opérateurs d'égalité (== et ===) ne peuvent pas être utilisé pour tester une valeur par rapport à NaN. Il faut utiliser {{jsxref("Number.isNaN()")}} ou {{jsxref("isNaN", "isNaN()")}} à la place.

+ +
NaN === NaN;        // false
+Number.NaN === NaN; // false
+isNaN(NaN);         // true
+isNaN(Number.NaN);  // true
+
+ +

La différence entre isNaN() et Number.isNaN() est la façon dont les valeurs sont, ou non, converties en nombre avant de vérifier si la valeur est NaN : isNaN() convertira l'argument en nombre avant de vérifier alors que Number.isNaN() ne renverra true que si l'opérande vaut NaN.

+ +
isNaN('coucou monde');        // renvoie true
+Number.isNaN('coucou monde'); // renvoie false
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3
{{SpecName('ES5.1', '#sec-15.1.1.1', 'NaN')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/null/index.html b/files/fr/web/javascript/reference/global_objects/null/index.html deleted file mode 100644 index fb9a228f19..0000000000 --- a/files/fr/web/javascript/reference/global_objects/null/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: 'null' -slug: Web/JavaScript/Reference/Global_Objects/null -tags: - - JavaScript - - Littéral - - Primitive - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/null -original_slug: Web/JavaScript/Reference/Objets_globaux/null ---- -
{{jsSidebar("Objects")}}
- -

La valeur null est un littéral JavaScript représentant la nullité au sens où aucune valeur pour l'objet n'est présente. C'est une des valeurs primitives de JavaScript.

- -
{{EmbedInteractiveExample("pages/js/globalprops-null.html")}}
- -

Syntaxe

- -
null
- -

Description

- -

La valeur null est un littéral (et non pas une propriété de l'objet global telle que {{jsxref("undefined")}}). Dans certaines API, null est souvent utilisé en valeur de retour lorsqu'un objet est attendu mais qu'aucun objet ne convient. Lors de tests d'égalité avec null ou undefined, il faut faire attention aux différences entre les opérateurs d'égalité faible (==) et stricte (===) (on aura une conversion de type avec le premier).

- -
// toto n'existe pas, n'a pas été défini et n'a jamais été initialisé
-toto;
-"ReferenceError: toto is not defined"
-
-// toto existe mais n'a ni type ni valeur
-var toto = null;
-console.log(toto); // null
- -

Différence entre null et undefined

- -
typeof null;           // "object" (pas null pour des raisons historiques)
-typeof undefined;      // "undefined"
-null === undefined;    // false
-null  == undefined;    // true
-null === null;         // true
-null  == null;         // true
-!null;                 // true
-isNaN(1 + null);       // false
-isNaN(1 + undefined);  // true
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-4.3.11', 'null value')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-null-value', 'null value')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-null-value', 'null value')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/null/index.md b/files/fr/web/javascript/reference/global_objects/null/index.md new file mode 100644 index 0000000000..fb9a228f19 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/null/index.md @@ -0,0 +1,88 @@ +--- +title: 'null' +slug: Web/JavaScript/Reference/Global_Objects/null +tags: + - JavaScript + - Littéral + - Primitive + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/null +original_slug: Web/JavaScript/Reference/Objets_globaux/null +--- +
{{jsSidebar("Objects")}}
+ +

La valeur null est un littéral JavaScript représentant la nullité au sens où aucune valeur pour l'objet n'est présente. C'est une des valeurs primitives de JavaScript.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-null.html")}}
+ +

Syntaxe

+ +
null
+ +

Description

+ +

La valeur null est un littéral (et non pas une propriété de l'objet global telle que {{jsxref("undefined")}}). Dans certaines API, null est souvent utilisé en valeur de retour lorsqu'un objet est attendu mais qu'aucun objet ne convient. Lors de tests d'égalité avec null ou undefined, il faut faire attention aux différences entre les opérateurs d'égalité faible (==) et stricte (===) (on aura une conversion de type avec le premier).

+ +
// toto n'existe pas, n'a pas été défini et n'a jamais été initialisé
+toto;
+"ReferenceError: toto is not defined"
+
+// toto existe mais n'a ni type ni valeur
+var toto = null;
+console.log(toto); // null
+ +

Différence entre null et undefined

+ +
typeof null;           // "object" (pas null pour des raisons historiques)
+typeof undefined;      // "undefined"
+null === undefined;    // false
+null  == undefined;    // true
+null === null;         // true
+null  == null;         // true
+!null;                 // true
+isNaN(1 + null);       // false
+isNaN(1 + undefined);  // true
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-4.3.11', 'null value')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-null-value', 'null value')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-null-value', 'null value')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/epsilon/index.html b/files/fr/web/javascript/reference/global_objects/number/epsilon/index.html deleted file mode 100644 index 88138770c9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/epsilon/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Number.EPSILON -slug: Web/JavaScript/Reference/Global_Objects/Number/EPSILON -tags: - - ECMAScript 2015 - - JavaScript - - Number - - Propriété - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Number/EPSILON -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/EPSILON ---- -
{{JSRef}}
- -

La propriété Number.EPSILON représente la différence entre le chiffre 1 (un) et la plus petite valeur supérieure à 1 qui peut être représentée par un nombre en JavaScript.

- -

Il n'est pas nécessaire de créer un objet {{jsxref("Number")}} pour accéder à cette propriété statique, elle est accessible avec Number.EPSILON.

- -
{{EmbedInteractiveExample("pages/js/number-epsilon.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

La propriété EPSILON vaut environ 2.2204460492503130808472633361816E-16 (ce qui correspond à 2^-52).

- -

Exemple

- -

Tester une égalité mathématique avec un seuil de précision

- -
x = 0.2;
-y = 0.3;
-equal = (Math.abs(x - y) < Number.EPSILON);
- -

Prothèse d'émulation (polyfill)

- -
if (Number.EPSILON === undefined) {
-  Number.EPSILON  =  Math.pow(2, -52);
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.epsilon', 'Number.EPSILON')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.epsilon', 'Number.EPSILON')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.EPSILON")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/epsilon/index.md b/files/fr/web/javascript/reference/global_objects/number/epsilon/index.md new file mode 100644 index 0000000000..88138770c9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/epsilon/index.md @@ -0,0 +1,75 @@ +--- +title: Number.EPSILON +slug: Web/JavaScript/Reference/Global_Objects/Number/EPSILON +tags: + - ECMAScript 2015 + - JavaScript + - Number + - Propriété + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Number/EPSILON +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/EPSILON +--- +
{{JSRef}}
+ +

La propriété Number.EPSILON représente la différence entre le chiffre 1 (un) et la plus petite valeur supérieure à 1 qui peut être représentée par un nombre en JavaScript.

+ +

Il n'est pas nécessaire de créer un objet {{jsxref("Number")}} pour accéder à cette propriété statique, elle est accessible avec Number.EPSILON.

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

Description

+ +

La propriété EPSILON vaut environ 2.2204460492503130808472633361816E-16 (ce qui correspond à 2^-52).

+ +

Exemple

+ +

Tester une égalité mathématique avec un seuil de précision

+ +
x = 0.2;
+y = 0.3;
+equal = (Math.abs(x - y) < Number.EPSILON);
+ +

Prothèse d'émulation (polyfill)

+ +
if (Number.EPSILON === undefined) {
+  Number.EPSILON  =  Math.pow(2, -52);
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.epsilon', 'Number.EPSILON')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.epsilon', 'Number.EPSILON')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.EPSILON")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/index.html b/files/fr/web/javascript/reference/global_objects/number/index.html deleted file mode 100644 index bc4c146cca..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/index.html +++ /dev/null @@ -1,202 +0,0 @@ ---- -title: Number -slug: Web/JavaScript/Reference/Global_Objects/Number -tags: - - JavaScript - - Number - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number -original_slug: Web/JavaScript/Reference/Objets_globaux/Number ---- -
{{JSRef}}
- -

L'objet Number est une enveloppe objet (wrapper) autour du type primitif numérique. Autrement dit, il est utilisé pour manipuler les nombres comme des objets. Pour créer un objet Number, on utilise le constructeur Number().

- -

Le type JavaScript Number utilise une représentation binaire à précision double sur 64 bits telle que décrite par le standard IEEE 754. Les implémentations plus récentes offrent un nouveau type : {{jsxref("BigInt")}} qui permet de représenter des entiers avec une précision arbitraire.

- -

Syntaxe

- -
new Number(valeur);
-var a = new Number('123'); // a === 123 donnera false
-var b = Number('123'); // b === 123 donnera true
-a instanceof Number; // donnera true
-b instanceof Number; // donnera false
- -

Paramètres

- -
-
valeur
-
La valeur numérique pour l'objet qu'on souhaite créer.
-
- -

Description

- -

L'objet Number est principalement utilisé dans les cas de figure suivants :

- - - -

Propriétés

- -
-
{{jsxref("Number.EPSILON")}}
-
Le plus petit intervalle entre deux valeurs qu'il est possible de représenter en JavaScript.
-
{{jsxref("Number.MAX_SAFE_INTEGER")}}
-
La valeur entière maximale qu'on peut représenter en JavaScript (2^53 - 1).
-
{{jsxref("Number.MAX_VALUE")}}
-
La valeur numérique maximale qu'on peut représenter en JavaScript.
-
{{jsxref("Number.MIN_SAFE_INTEGER")}}
-
La valeur entière minimale qu'on peut représenter en JavaScript (-(2^53 - 1)).
-
{{jsxref("Number.MIN_VALUE")}}
-
La plus petite valeur qu'on peut représenter en JavaScript, c'est-à-dire le plus petit nombre positif (le nombre le plus près de zéro qui n'est pas égal à zéro et qu'on peut représenter en JavaScript).
-
{{jsxref("Number.NaN")}}
-
Une valeur spéciale pour représenter les valeurs non-numériques (NaN correspond à « not a number » en anglais, qui signifie « n'est pas un nombre »).
-
{{jsxref("Number.NEGATIVE_INFINITY")}}
-
Une valeur spéciale pour représenter l'infini négatif.
-
{{jsxref("Number.POSITIVE_INFINITY")}}
-
Une valeur spéciale pour représenter l'infini (positif).
-
{{jsxref("Number.prototype")}}
-
Cet objet permet d'ajouter des propriétés aux instances de Number.
-
- -

Méthodes

- -
-
{{jsxref("Number.isNaN()")}}
-
Cette méthode permet de déterminer si la valeur passée en argument vaut NaN.
-
{{jsxref("Number.isFinite()")}}
-
Cette méthode permet de déterminer si la valeur numérique passée en argument est un nombre fini.
-
{{jsxref("Number.isInteger()")}}
-
Cette méthode permet de déterminer si la valeur passée en argument est un entier.
-
{{jsxref("Number.isSafeInteger()")}}
-
Cette méthode permet de déterminer si la valeur passée en argument peut correctement être représentée comme un entier en JavaScript (savoir si elle est comprise entre -(2^53 - 1) et 2^53 - 1).
-
{{jsxref("Number.toInteger()")}} {{obsolete_inline}}
-
Cette méthode est utilisée afin d'évaluer et de convertir la valeur passée en argument en entier (ou en l'{{jsxref("Infinity", "infini","",1)}}). Cette méthode a été supprimée.
-
{{jsxref("Number.parseFloat()", "Number.parseFloat(string)")}}
-
Cette méthode correspond à la méthode {{jsxref("parseFloat", "parseFloat()")}} de l'objet global.
-
{{jsxref("Number.parseInt()", "Number.parseInt(string, [radix])")}}
-
Cette méthode correspond à la méthode {{jsxref("parseInt", "parseInt()")}} de l'objet global.
-
- -

Les instances de Number

- -

Toutes les instances de Number héritent de {{jsxref("Number.prototype")}}. Il est possible de modifier le prototype du constructeur Number pour affecter toutes les instances de Number.

- -

Méthodes

- -
-
-
{{jsxref("Number.prototype.toExponential()" ,"Number.prototype.toExponential(fractionDigits)")}}
-
Retourne une chaîne représentant le nombre en notation exponentielle.
-
{{jsxref("Number.prototype.toFixed()", "Number.prototype.toFixed(digits)")}}
-
Retourne une chaîne représentant le nombre avec la notation virgule fixe.
-
{{jsxref("Number.prototype.toLocaleString()", "Number.prototype.toLocaleString([locales [, options]])")}}
-
Retourne une chaîne avec une représentation sensible à la langue de ce nombre. Surcharge la méthode {{jsxref("Object.prototype.toLocaleString()")}}.
-
{{jsxref("Number.prototype.toPrecision()", "Number.prototype.toPrecision(precision)")}}
-
Retourne une chaîne représentant le nombre avec une précision donnée en notation virgule fixe ou exponentielle.
-
{{jsxref("Number.prototype.toString()", "Number.prototype.toString([radix])")}}
-
Retourne une chaîne représentant le nombre dans une base numérique (radix) donnée. Surcharge la méthode {{jsxref("Object.prototype.toString()")}}.
-
{{jsxref("Number.prototype.valueOf()")}}
-
Retourne la valeur primitive de l'objet spécifié. Surcharge la méthode {{jsxref("Object.prototype.valueOf()")}}.
-
-
- -

Exemples

- -

Utiliser l'objet Number pour affecter des valeurs numériques à des variables

- -

Dans l'exemple suivant, on utilise les propriétés de l'objet Number pour affecter des valeurs à des variables numériques :

- -
var plusGrandNombre = Number.MAX_VALUE;
-var plusPetitNombre = Number.MIN_VALUE;
-var infini = Number.POSITIVE_INFINITY;
-var infiniNégatif = Number.NEGATIVE_INFINITY;
-var nonNumérique = Number.NaN;
-
- -

Intervalle entier pour Number

- -

Dans l'exemple suivant, on illustre les valeurs numériques maximales et minimales (exclues) qu'on peut représenter avec un nombre en JavaScript (pour plus de détails, voir le chapitre 6.1.6 du standard ECMAScript) :

- -
var biggestInt = 9007199254740992; //Number.MAX_SAFE_INTEGER+1 (2^53-1)
-var smallestInt = -9007199254740992; //Number.MIN_SAFE_INTEGER-1 -(2^53-1)
-
- -

Lorsqu'on analyse et convertit des données JSON, les valeurs en dehors de cet intervalle peuvent entraîner des erreurs ou des corruptions de valeurs lors de leurs conversions. Selon les objets qu'on souhaite représenter, on peut utiliser {{jsxref("String")}} dans certains cas pour représenter certaines valeurs.

- -

Utiliser Number pour convertir un objet Date

- -

Dans l'exemple suivant, on convertit un objet {{jsxref("Date")}} en une valeur numérique grâce à la fonction Number :

- -
var d = new Date('December 17, 1995 03:24:00');
-console.log(Number(d));
-
- -

Ceci affichera "819167040000".

- -

Convertir une chaîne représentant une valeur numérique en un nombre

- -
Number("123");       // 123
-Number("12.3");      // 12.3
-Number("12.00");     // 12
-Number("123e-1");    // 12.3
-Number("");          // 0
-Number("0x11");      // 17
-Number("0b11");      // 3
-Number("0o11");      // 9
-Number("toto");      // NaN
-Number("100a");      // NaN
-Number("-Infinity";) // -Infinity
-
- -
-

Note : On pourra également convertir null en 0 grâce à Number : Number(null) donnera 0.

-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7', 'Number')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-number-objects', 'Number')}}{{Spec2('ES6')}}Ajout des méthodes et propriétés suivantes : ({{jsxref("Number.EPSILON", "EPSILON")}}, {{jsxref("Number.isFinite", "isFinite")}}, {{jsxref("Number.isInteger", "isInteger")}}, {{jsxref("Number.isNaN", "isNaN")}}, {{jsxref("Number.parseFloat", "parseFloat")}}, {{jsxref("Number.parseInt", "parseInt")}})
{{SpecName('ESDraft', '#sec-number-objects', 'Number')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/index.md b/files/fr/web/javascript/reference/global_objects/number/index.md new file mode 100644 index 0000000000..bc4c146cca --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/index.md @@ -0,0 +1,202 @@ +--- +title: Number +slug: Web/JavaScript/Reference/Global_Objects/Number +tags: + - JavaScript + - Number + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number +original_slug: Web/JavaScript/Reference/Objets_globaux/Number +--- +
{{JSRef}}
+ +

L'objet Number est une enveloppe objet (wrapper) autour du type primitif numérique. Autrement dit, il est utilisé pour manipuler les nombres comme des objets. Pour créer un objet Number, on utilise le constructeur Number().

+ +

Le type JavaScript Number utilise une représentation binaire à précision double sur 64 bits telle que décrite par le standard IEEE 754. Les implémentations plus récentes offrent un nouveau type : {{jsxref("BigInt")}} qui permet de représenter des entiers avec une précision arbitraire.

+ +

Syntaxe

+ +
new Number(valeur);
+var a = new Number('123'); // a === 123 donnera false
+var b = Number('123'); // b === 123 donnera true
+a instanceof Number; // donnera true
+b instanceof Number; // donnera false
+ +

Paramètres

+ +
+
valeur
+
La valeur numérique pour l'objet qu'on souhaite créer.
+
+ +

Description

+ +

L'objet Number est principalement utilisé dans les cas de figure suivants :

+ + + +

Propriétés

+ +
+
{{jsxref("Number.EPSILON")}}
+
Le plus petit intervalle entre deux valeurs qu'il est possible de représenter en JavaScript.
+
{{jsxref("Number.MAX_SAFE_INTEGER")}}
+
La valeur entière maximale qu'on peut représenter en JavaScript (2^53 - 1).
+
{{jsxref("Number.MAX_VALUE")}}
+
La valeur numérique maximale qu'on peut représenter en JavaScript.
+
{{jsxref("Number.MIN_SAFE_INTEGER")}}
+
La valeur entière minimale qu'on peut représenter en JavaScript (-(2^53 - 1)).
+
{{jsxref("Number.MIN_VALUE")}}
+
La plus petite valeur qu'on peut représenter en JavaScript, c'est-à-dire le plus petit nombre positif (le nombre le plus près de zéro qui n'est pas égal à zéro et qu'on peut représenter en JavaScript).
+
{{jsxref("Number.NaN")}}
+
Une valeur spéciale pour représenter les valeurs non-numériques (NaN correspond à « not a number » en anglais, qui signifie « n'est pas un nombre »).
+
{{jsxref("Number.NEGATIVE_INFINITY")}}
+
Une valeur spéciale pour représenter l'infini négatif.
+
{{jsxref("Number.POSITIVE_INFINITY")}}
+
Une valeur spéciale pour représenter l'infini (positif).
+
{{jsxref("Number.prototype")}}
+
Cet objet permet d'ajouter des propriétés aux instances de Number.
+
+ +

Méthodes

+ +
+
{{jsxref("Number.isNaN()")}}
+
Cette méthode permet de déterminer si la valeur passée en argument vaut NaN.
+
{{jsxref("Number.isFinite()")}}
+
Cette méthode permet de déterminer si la valeur numérique passée en argument est un nombre fini.
+
{{jsxref("Number.isInteger()")}}
+
Cette méthode permet de déterminer si la valeur passée en argument est un entier.
+
{{jsxref("Number.isSafeInteger()")}}
+
Cette méthode permet de déterminer si la valeur passée en argument peut correctement être représentée comme un entier en JavaScript (savoir si elle est comprise entre -(2^53 - 1) et 2^53 - 1).
+
{{jsxref("Number.toInteger()")}} {{obsolete_inline}}
+
Cette méthode est utilisée afin d'évaluer et de convertir la valeur passée en argument en entier (ou en l'{{jsxref("Infinity", "infini","",1)}}). Cette méthode a été supprimée.
+
{{jsxref("Number.parseFloat()", "Number.parseFloat(string)")}}
+
Cette méthode correspond à la méthode {{jsxref("parseFloat", "parseFloat()")}} de l'objet global.
+
{{jsxref("Number.parseInt()", "Number.parseInt(string, [radix])")}}
+
Cette méthode correspond à la méthode {{jsxref("parseInt", "parseInt()")}} de l'objet global.
+
+ +

Les instances de Number

+ +

Toutes les instances de Number héritent de {{jsxref("Number.prototype")}}. Il est possible de modifier le prototype du constructeur Number pour affecter toutes les instances de Number.

+ +

Méthodes

+ +
+
+
{{jsxref("Number.prototype.toExponential()" ,"Number.prototype.toExponential(fractionDigits)")}}
+
Retourne une chaîne représentant le nombre en notation exponentielle.
+
{{jsxref("Number.prototype.toFixed()", "Number.prototype.toFixed(digits)")}}
+
Retourne une chaîne représentant le nombre avec la notation virgule fixe.
+
{{jsxref("Number.prototype.toLocaleString()", "Number.prototype.toLocaleString([locales [, options]])")}}
+
Retourne une chaîne avec une représentation sensible à la langue de ce nombre. Surcharge la méthode {{jsxref("Object.prototype.toLocaleString()")}}.
+
{{jsxref("Number.prototype.toPrecision()", "Number.prototype.toPrecision(precision)")}}
+
Retourne une chaîne représentant le nombre avec une précision donnée en notation virgule fixe ou exponentielle.
+
{{jsxref("Number.prototype.toString()", "Number.prototype.toString([radix])")}}
+
Retourne une chaîne représentant le nombre dans une base numérique (radix) donnée. Surcharge la méthode {{jsxref("Object.prototype.toString()")}}.
+
{{jsxref("Number.prototype.valueOf()")}}
+
Retourne la valeur primitive de l'objet spécifié. Surcharge la méthode {{jsxref("Object.prototype.valueOf()")}}.
+
+
+ +

Exemples

+ +

Utiliser l'objet Number pour affecter des valeurs numériques à des variables

+ +

Dans l'exemple suivant, on utilise les propriétés de l'objet Number pour affecter des valeurs à des variables numériques :

+ +
var plusGrandNombre = Number.MAX_VALUE;
+var plusPetitNombre = Number.MIN_VALUE;
+var infini = Number.POSITIVE_INFINITY;
+var infiniNégatif = Number.NEGATIVE_INFINITY;
+var nonNumérique = Number.NaN;
+
+ +

Intervalle entier pour Number

+ +

Dans l'exemple suivant, on illustre les valeurs numériques maximales et minimales (exclues) qu'on peut représenter avec un nombre en JavaScript (pour plus de détails, voir le chapitre 6.1.6 du standard ECMAScript) :

+ +
var biggestInt = 9007199254740992; //Number.MAX_SAFE_INTEGER+1 (2^53-1)
+var smallestInt = -9007199254740992; //Number.MIN_SAFE_INTEGER-1 -(2^53-1)
+
+ +

Lorsqu'on analyse et convertit des données JSON, les valeurs en dehors de cet intervalle peuvent entraîner des erreurs ou des corruptions de valeurs lors de leurs conversions. Selon les objets qu'on souhaite représenter, on peut utiliser {{jsxref("String")}} dans certains cas pour représenter certaines valeurs.

+ +

Utiliser Number pour convertir un objet Date

+ +

Dans l'exemple suivant, on convertit un objet {{jsxref("Date")}} en une valeur numérique grâce à la fonction Number :

+ +
var d = new Date('December 17, 1995 03:24:00');
+console.log(Number(d));
+
+ +

Ceci affichera "819167040000".

+ +

Convertir une chaîne représentant une valeur numérique en un nombre

+ +
Number("123");       // 123
+Number("12.3");      // 12.3
+Number("12.00");     // 12
+Number("123e-1");    // 12.3
+Number("");          // 0
+Number("0x11");      // 17
+Number("0b11");      // 3
+Number("0o11");      // 9
+Number("toto");      // NaN
+Number("100a");      // NaN
+Number("-Infinity";) // -Infinity
+
+ +
+

Note : On pourra également convertir null en 0 grâce à Number : Number(null) donnera 0.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7', 'Number')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-number-objects', 'Number')}}{{Spec2('ES6')}}Ajout des méthodes et propriétés suivantes : ({{jsxref("Number.EPSILON", "EPSILON")}}, {{jsxref("Number.isFinite", "isFinite")}}, {{jsxref("Number.isInteger", "isInteger")}}, {{jsxref("Number.isNaN", "isNaN")}}, {{jsxref("Number.parseFloat", "parseFloat")}}, {{jsxref("Number.parseInt", "parseInt")}})
{{SpecName('ESDraft', '#sec-number-objects', 'Number')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/isfinite/index.html b/files/fr/web/javascript/reference/global_objects/number/isfinite/index.html deleted file mode 100644 index 9cf0331fab..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/isfinite/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Number.isFinite() -slug: Web/JavaScript/Reference/Global_Objects/Number/isFinite -tags: - - ECMAScript6 - - JavaScript - - Méthode - - Number - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Number/isFinite -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isFinite ---- -
{{JSRef}}
- -

La méthode Number.isFinite() permet de déterminer si la valeur fournie est un nombre fini.

- -
{{EmbedInteractiveExample("pages/js/number-isfinite.html")}}
- -

Syntaxe

- -
Number.isFinite(valeurÀTester);
- -

Paramètres

- -
-
valeurÀTester
-
La valeur dont on souhaite savoir si elle est finie.
-
- -

Valeur de retour

- -

Un booléen indiquant si la valeur passée en argument est un nombre fini.

- -

Description

- -

Par rapport à la fonction de l'objet global {{jsxref("isFinite","isFinite()")}} qui convertit l'argument donné en un nombre, la fonction Number.isFinite ne convertit pas l'argument et ne renvoie pas true.

- -

Exemples

- -
Number.isFinite(Infinity);  // false
-Number.isFinite(NaN);       // false
-Number.isFinite(-Infinity); // false
-
-Number.isFinite(0);         // true
-Number.isFinite(2e64);      // true
-
-Number.isFinite("0");       // false, ce qui aurait
-                            // renvoyé true avec isFinite("0")
-
-Number.isFinite(null);      // false, ce qui aurait
-                            // renvoyé true avc isFinite(null)
-
- -

Prothèse d'émulation (polyfill)

- -
// Number.isFinite polyfill
-// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite
-if (typeof Number.isFinite !== 'function') {
-    Number.isFinite = function isFinite(value) {
-        // 1. Si Type(number) n'est pas Number, on renvoie false.
-        if (typeof value !== 'number') {
-            return false;
-        }
-        // 2. Si le nombre est NaN, +∞, ou −∞, on renvoie false.
-        if (value !== value || value === Infinity || value === -Infinity) {
-            return false;
-        }
-        // 3. Sinon on renvoie true.
-        return true;
-    };
-}
-
- -

Deuxième version plus concise qui utilise la méthode globale isFinite

- -
if (Number.isFinite === undefined) Number.isFinite = function(value) {
-    return typeof value === "number" && isFinite(value);
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-number.isfinite', 'Number.isInteger')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.isfinite', 'Number.isInteger')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.isFinite")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/isfinite/index.md b/files/fr/web/javascript/reference/global_objects/number/isfinite/index.md new file mode 100644 index 0000000000..9cf0331fab --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/isfinite/index.md @@ -0,0 +1,112 @@ +--- +title: Number.isFinite() +slug: Web/JavaScript/Reference/Global_Objects/Number/isFinite +tags: + - ECMAScript6 + - JavaScript + - Méthode + - Number + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isFinite +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isFinite +--- +
{{JSRef}}
+ +

La méthode Number.isFinite() permet de déterminer si la valeur fournie est un nombre fini.

+ +
{{EmbedInteractiveExample("pages/js/number-isfinite.html")}}
+ +

Syntaxe

+ +
Number.isFinite(valeurÀTester);
+ +

Paramètres

+ +
+
valeurÀTester
+
La valeur dont on souhaite savoir si elle est finie.
+
+ +

Valeur de retour

+ +

Un booléen indiquant si la valeur passée en argument est un nombre fini.

+ +

Description

+ +

Par rapport à la fonction de l'objet global {{jsxref("isFinite","isFinite()")}} qui convertit l'argument donné en un nombre, la fonction Number.isFinite ne convertit pas l'argument et ne renvoie pas true.

+ +

Exemples

+ +
Number.isFinite(Infinity);  // false
+Number.isFinite(NaN);       // false
+Number.isFinite(-Infinity); // false
+
+Number.isFinite(0);         // true
+Number.isFinite(2e64);      // true
+
+Number.isFinite("0");       // false, ce qui aurait
+                            // renvoyé true avec isFinite("0")
+
+Number.isFinite(null);      // false, ce qui aurait
+                            // renvoyé true avc isFinite(null)
+
+ +

Prothèse d'émulation (polyfill)

+ +
// Number.isFinite polyfill
+// http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite
+if (typeof Number.isFinite !== 'function') {
+    Number.isFinite = function isFinite(value) {
+        // 1. Si Type(number) n'est pas Number, on renvoie false.
+        if (typeof value !== 'number') {
+            return false;
+        }
+        // 2. Si le nombre est NaN, +∞, ou −∞, on renvoie false.
+        if (value !== value || value === Infinity || value === -Infinity) {
+            return false;
+        }
+        // 3. Sinon on renvoie true.
+        return true;
+    };
+}
+
+ +

Deuxième version plus concise qui utilise la méthode globale isFinite

+ +
if (Number.isFinite === undefined) Number.isFinite = function(value) {
+    return typeof value === "number" && isFinite(value);
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-number.isfinite', 'Number.isInteger')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.isfinite', 'Number.isInteger')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.isFinite")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/isinteger/index.html b/files/fr/web/javascript/reference/global_objects/number/isinteger/index.html deleted file mode 100644 index a6f1f364e5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/isinteger/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Number.isInteger() -slug: Web/JavaScript/Reference/Global_Objects/Number/isInteger -tags: - - JavaScript - - Méthode - - Number - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Number/isInteger -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isInteger ---- -
{{JSRef}}
- -

La méthode Number.isInteger() permet de déterminer si l'argument est un nombre entier.

- -
{{EmbedInteractiveExample("pages/js/number-isinteger.html")}}
- -

Syntaxe

- -
Number.isInteger(valeurÀTester)
- -

Paramètres

- -
-
valeurÀTester
-
La valeur dont on souhaite savoir si elle est entière ou non.
-
- -

Valeur de retour

- -

Un booléen qui indique si la valeur fournie en argument est un entier.

- -

Description

- -

Si la valeur à tester est un entier, cette méthode renvoie true, false sinon. Si la valeur est {{jsxref("NaN")}} ou l'infini ({{jsxref("Infinity")}}), la méthode renverra false. La méthode renverra également true pour les nombres flottants qui peuvent être représentés comme des entiers.

- -

Exemples

- -
Number.isInteger(1);         // true
-Number.isInteger(-100000);   // true
-Number.isInteger(0);         // true
-Number.isInteger(1.000)      // true
-// Number.isInteger(9…9999); // true, même si le nombre dépasse 32 bits
-
-Number.isInteger(0.1);       // false
-Number.isInteger(Math.PI);   // false
-
-Number.isInteger(-Infinity); // false
-Number.isInteger(true);      // false
-Number.isInteger(NaN);       // false
-Number.isInteger("10");      // false
-
-Number.isInteger(5.0);       // true
-Number.isInteger(5.000000000000001);// false
-Number.isInteger(5.0000000000000001); // true
-
- -

Prothèse d'émulation (polyfill)

- -
Number.isInteger = Number.isInteger || function(value) {
-    return typeof value === "number" &&
-           isFinite(value) &&
-           Math.floor(value) === value;
-};
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-number.isinteger', 'Number.isInteger')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.isinteger', 'Number.isInteger')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.isInteger")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/isinteger/index.md b/files/fr/web/javascript/reference/global_objects/number/isinteger/index.md new file mode 100644 index 0000000000..a6f1f364e5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/isinteger/index.md @@ -0,0 +1,99 @@ +--- +title: Number.isInteger() +slug: Web/JavaScript/Reference/Global_Objects/Number/isInteger +tags: + - JavaScript + - Méthode + - Number + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isInteger +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isInteger +--- +
{{JSRef}}
+ +

La méthode Number.isInteger() permet de déterminer si l'argument est un nombre entier.

+ +
{{EmbedInteractiveExample("pages/js/number-isinteger.html")}}
+ +

Syntaxe

+ +
Number.isInteger(valeurÀTester)
+ +

Paramètres

+ +
+
valeurÀTester
+
La valeur dont on souhaite savoir si elle est entière ou non.
+
+ +

Valeur de retour

+ +

Un booléen qui indique si la valeur fournie en argument est un entier.

+ +

Description

+ +

Si la valeur à tester est un entier, cette méthode renvoie true, false sinon. Si la valeur est {{jsxref("NaN")}} ou l'infini ({{jsxref("Infinity")}}), la méthode renverra false. La méthode renverra également true pour les nombres flottants qui peuvent être représentés comme des entiers.

+ +

Exemples

+ +
Number.isInteger(1);         // true
+Number.isInteger(-100000);   // true
+Number.isInteger(0);         // true
+Number.isInteger(1.000)      // true
+// Number.isInteger(9…9999); // true, même si le nombre dépasse 32 bits
+
+Number.isInteger(0.1);       // false
+Number.isInteger(Math.PI);   // false
+
+Number.isInteger(-Infinity); // false
+Number.isInteger(true);      // false
+Number.isInteger(NaN);       // false
+Number.isInteger("10");      // false
+
+Number.isInteger(5.0);       // true
+Number.isInteger(5.000000000000001);// false
+Number.isInteger(5.0000000000000001); // true
+
+ +

Prothèse d'émulation (polyfill)

+ +
Number.isInteger = Number.isInteger || function(value) {
+    return typeof value === "number" &&
+           isFinite(value) &&
+           Math.floor(value) === value;
+};
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-number.isinteger', 'Number.isInteger')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.isinteger', 'Number.isInteger')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.isInteger")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/isnan/index.html b/files/fr/web/javascript/reference/global_objects/number/isnan/index.html deleted file mode 100644 index 2b7f565807..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/isnan/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Number.isNaN() -slug: Web/JavaScript/Reference/Global_Objects/Number/isNaN -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Number - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Number/isNaN -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isNaN ---- -
{{JSRef}}
- -

La méthode Number.isNaN() permet de déterminer si la valeur passée en argument est {{jsxref("NaN")}}, avec un type {{jsxref("Number")}}. Cette version est plus robuste que la méthode de l'objet global {{jsxref("isNaN")}}.

- -
{{EmbedInteractiveExample("pages/js/number-isnan.html", "taller")}}
- -

Syntaxe

- -
Number.isNaN(valeurÀTester)
- -

Paramètres

- -
-
valeurÀTester
-
La valeur qu'on souhaite comparer à {{jsxref("NaN")}}.
-
- -

Valeur de retour

- -

Un booléen qui indique si la valeur fournie en argument est {{jsxref("NaN")}}.

- -

Description

- -

Les deux opérateurs d'égalité, {{jsxref("Opérateurs/Opérateurs_de_comparaison", "==", "#.C3.89galit.C3.A9_simple_(.3D.3D)")}} et {{jsxref("Opérateurs/Opérateurs_de_comparaison", "===", "#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)")}}, renvoient false pour vérifier que {{jsxref("NaN")}} est NaN. La fonction Number.isNaN est nécessaire pour distinguer ce cas. Le résultat de cette comparaison sera différent avec les autres méthodes de comparaisons en JavaScript.

- -

En effet, la fonction globale {{jsxref("isNaN")}} convertit l'argument en un nombre.  Number.isNaN ne convertit pas l'argument. Cela signifie qu'on peut passer des valeurs qui, normalement, seraient converties en NaN, mais qui ne sont pas NaN. Cela signifie également que, uniquement lorsque la méthode sera utilisée avec des nombres qui valent NaN, elle renverra true.

- -

Exemples

- -
Number.isNaN(NaN); // true
-Number.isNaN(Number.NaN); // true
-Number.isNaN(0 / 0); // true
-
-// tout le reste renverra : false
-Number.isNaN(undefined);
-Number.isNaN({});
-
-Number.isNaN(true);
-Number.isNaN(null);
-Number.isNaN(37);
-
-Number.isNaN("37");
-Number.isNaN("37.37");
-Number.isNaN("");
-Number.isNaN(" ");
-Number.isNaN("NaN");
-Number.isNaN("blabla"); // ex : cette valeur aurait rendu true avec la méthode isNaN de l'objet global
- -

Prothèse d'émulation (polyfill)

- -

La fonction suivant fonctionne car NaN est la seule valeur JavaScript qui n'est pas égale à elle-même.

- -
Number.isNaN = Number.isNaN || function(value) {
-    return typeof value === "number" && isNaN(value);
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.isnan', 'Number.isnan')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.isnan', 'Number.isnan')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.isNaN")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/isnan/index.md b/files/fr/web/javascript/reference/global_objects/number/isnan/index.md new file mode 100644 index 0000000000..2b7f565807 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/isnan/index.md @@ -0,0 +1,101 @@ +--- +title: Number.isNaN() +slug: Web/JavaScript/Reference/Global_Objects/Number/isNaN +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Number + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isNaN +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isNaN +--- +
{{JSRef}}
+ +

La méthode Number.isNaN() permet de déterminer si la valeur passée en argument est {{jsxref("NaN")}}, avec un type {{jsxref("Number")}}. Cette version est plus robuste que la méthode de l'objet global {{jsxref("isNaN")}}.

+ +
{{EmbedInteractiveExample("pages/js/number-isnan.html", "taller")}}
+ +

Syntaxe

+ +
Number.isNaN(valeurÀTester)
+ +

Paramètres

+ +
+
valeurÀTester
+
La valeur qu'on souhaite comparer à {{jsxref("NaN")}}.
+
+ +

Valeur de retour

+ +

Un booléen qui indique si la valeur fournie en argument est {{jsxref("NaN")}}.

+ +

Description

+ +

Les deux opérateurs d'égalité, {{jsxref("Opérateurs/Opérateurs_de_comparaison", "==", "#.C3.89galit.C3.A9_simple_(.3D.3D)")}} et {{jsxref("Opérateurs/Opérateurs_de_comparaison", "===", "#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)")}}, renvoient false pour vérifier que {{jsxref("NaN")}} est NaN. La fonction Number.isNaN est nécessaire pour distinguer ce cas. Le résultat de cette comparaison sera différent avec les autres méthodes de comparaisons en JavaScript.

+ +

En effet, la fonction globale {{jsxref("isNaN")}} convertit l'argument en un nombre.  Number.isNaN ne convertit pas l'argument. Cela signifie qu'on peut passer des valeurs qui, normalement, seraient converties en NaN, mais qui ne sont pas NaN. Cela signifie également que, uniquement lorsque la méthode sera utilisée avec des nombres qui valent NaN, elle renverra true.

+ +

Exemples

+ +
Number.isNaN(NaN); // true
+Number.isNaN(Number.NaN); // true
+Number.isNaN(0 / 0); // true
+
+// tout le reste renverra : false
+Number.isNaN(undefined);
+Number.isNaN({});
+
+Number.isNaN(true);
+Number.isNaN(null);
+Number.isNaN(37);
+
+Number.isNaN("37");
+Number.isNaN("37.37");
+Number.isNaN("");
+Number.isNaN(" ");
+Number.isNaN("NaN");
+Number.isNaN("blabla"); // ex : cette valeur aurait rendu true avec la méthode isNaN de l'objet global
+ +

Prothèse d'émulation (polyfill)

+ +

La fonction suivant fonctionne car NaN est la seule valeur JavaScript qui n'est pas égale à elle-même.

+ +
Number.isNaN = Number.isNaN || function(value) {
+    return typeof value === "number" && isNaN(value);
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.isnan', 'Number.isnan')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.isnan', 'Number.isnan')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.isNaN")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.html b/files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.html deleted file mode 100644 index c992339e23..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Number.isSafeInteger() -slug: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Number - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isSafeInteger ---- -
{{JSRef}}
- -

La méthode Number.isSafeInteger() permet de déterminer si la valeur, passée en argument, est un entier représentable correctement en JavaScript (c'est-à-dire un nombre compris entre -(2^53-1) et 2^53-1).

- -
{{EmbedInteractiveExample("pages/js/number-issafeinteger.html")}}
- - - -
-

Note : Pour représenter des entiers qui ne sont pas compris dans cet intervalle, on pourra utiliser le type {{jsxref("BigInt")}}.

-
- -

Syntaxe

- -
Number.isSafeInteger(valeurÀTester)
- -

Paramètres

- -
-
valeurÀTester
-
La valeur dont on souhaite savoir si elle représente un entier représentable correctement en une valeur non signée sur 32 bits. (JavaScript utilise les nombres au format de virgule flottante à double précision comme spécifié dans IEEE 754 et ne peut représenter avec certitude un entier qu'entre -(2^53-1) et 2^53-1 (c'est-à-dire ± 9007199254740991).
-
- -

Valeur de retour

- -

Un booléen qui indique si la valeur fournie en argument est un entier représentable correctement en JavaScript.

- -

Description

- -

Un entier correctement représentable en JavaScript :

- - - -

Ainsi, par exemple, 2^53 - 1 peut être représenté correctement, aucun autre entier ne peut être arrondi en cette valeur selon IEEE-754. En revanche, 2^53 ne peut pas être représenté correctement car 2^53 + 1 sera arrondi en 2^53 selon les règles IEEE-754 (arrondi à l'entier le plus proche).

- -

L'intervalle des entiers qui peuvent être correctement représentés est [-(2^53 - 1),2^53 - 1 ].

- -

Exemples

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.isSafeInteger")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.md b/files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.md new file mode 100644 index 0000000000..c992339e23 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/issafeinteger/index.md @@ -0,0 +1,99 @@ +--- +title: Number.isSafeInteger() +slug: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Number + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/isSafeInteger +--- +
{{JSRef}}
+ +

La méthode Number.isSafeInteger() permet de déterminer si la valeur, passée en argument, est un entier représentable correctement en JavaScript (c'est-à-dire un nombre compris entre -(2^53-1) et 2^53-1).

+ +
{{EmbedInteractiveExample("pages/js/number-issafeinteger.html")}}
+ + + +
+

Note : Pour représenter des entiers qui ne sont pas compris dans cet intervalle, on pourra utiliser le type {{jsxref("BigInt")}}.

+
+ +

Syntaxe

+ +
Number.isSafeInteger(valeurÀTester)
+ +

Paramètres

+ +
+
valeurÀTester
+
La valeur dont on souhaite savoir si elle représente un entier représentable correctement en une valeur non signée sur 32 bits. (JavaScript utilise les nombres au format de virgule flottante à double précision comme spécifié dans IEEE 754 et ne peut représenter avec certitude un entier qu'entre -(2^53-1) et 2^53-1 (c'est-à-dire ± 9007199254740991).
+
+ +

Valeur de retour

+ +

Un booléen qui indique si la valeur fournie en argument est un entier représentable correctement en JavaScript.

+ +

Description

+ +

Un entier correctement représentable en JavaScript :

+ + + +

Ainsi, par exemple, 2^53 - 1 peut être représenté correctement, aucun autre entier ne peut être arrondi en cette valeur selon IEEE-754. En revanche, 2^53 ne peut pas être représenté correctement car 2^53 + 1 sera arrondi en 2^53 selon les règles IEEE-754 (arrondi à l'entier le plus proche).

+ +

L'intervalle des entiers qui peuvent être correctement représentés est [-(2^53 - 1),2^53 - 1 ].

+ +

Exemples

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.isSafeInteger")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.html b/files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.html deleted file mode 100644 index 9b389e3531..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Number.MAX_SAFE_INTEGER -slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER -tags: - - ECMAScript 2015 - - JavaScript - - Number - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER ---- -
{{JSRef}}
- -

La constante Number.MAX_SAFE_INTEGER représente la valeur (sûre) maximale d’un nombre entier en JavaScript (2^53 -1).

- -
-

Note : Pour représenter des entiers supérieurs à cette valeur, on pourra utiliser le type {{jsxref("BigInt")}}.

-
- -
{{EmbedInteractiveExample("pages/js/number-maxsafeinteger.html")}}
- - - -

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

- -

Description

- -

La constante MAX_SAFE_INTEGER a une valeur de 9007199254740991. Cette valeur s'explique par le fait que JavaScript utilise les nombres au format de virgule flottante à double précision comme spécifié dans IEEE 754 et ne peut représenter avec certitude qu’un nombre entre -(2^53-1) et 2^53 -1.

- -

Dans ce contexte, « sûr » fait référence à la capacité à représenter exactement les entiers et à les comparer entre eux. Par exemple, Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 vaudra true ce qui est mathématiquement incorrect. Pour plus d'informations, voir également {{jsxref("Number.isSafeInteger()")}}.

- -

MAX_SAFE_INTEGER est une propriété statique de {{jsxref("Number")}}, elle doit toujours être utilisée comme Number.MAX_SAFE_INTEGER et non pas comme la propriété d'un objet Number qui aurait été instancié.

- -

Exemples

- -
Number.MAX_SAFE_INTEGER // 9007199254740991
-Math.pow(2, 53) -1      // 9007199254740991
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.MAX_SAFE_INTEGER")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.md b/files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.md new file mode 100644 index 0000000000..9b389e3531 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/max_safe_integer/index.md @@ -0,0 +1,73 @@ +--- +title: Number.MAX_SAFE_INTEGER +slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER +tags: + - ECMAScript 2015 + - JavaScript + - Number + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MAX_SAFE_INTEGER +--- +
{{JSRef}}
+ +

La constante Number.MAX_SAFE_INTEGER représente la valeur (sûre) maximale d’un nombre entier en JavaScript (2^53 -1).

+ +
+

Note : Pour représenter des entiers supérieurs à cette valeur, on pourra utiliser le type {{jsxref("BigInt")}}.

+
+ +
{{EmbedInteractiveExample("pages/js/number-maxsafeinteger.html")}}
+ + + +

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

+ +

Description

+ +

La constante MAX_SAFE_INTEGER a une valeur de 9007199254740991. Cette valeur s'explique par le fait que JavaScript utilise les nombres au format de virgule flottante à double précision comme spécifié dans IEEE 754 et ne peut représenter avec certitude qu’un nombre entre -(2^53-1) et 2^53 -1.

+ +

Dans ce contexte, « sûr » fait référence à la capacité à représenter exactement les entiers et à les comparer entre eux. Par exemple, Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 vaudra true ce qui est mathématiquement incorrect. Pour plus d'informations, voir également {{jsxref("Number.isSafeInteger()")}}.

+ +

MAX_SAFE_INTEGER est une propriété statique de {{jsxref("Number")}}, elle doit toujours être utilisée comme Number.MAX_SAFE_INTEGER et non pas comme la propriété d'un objet Number qui aurait été instancié.

+ +

Exemples

+ +
Number.MAX_SAFE_INTEGER // 9007199254740991
+Math.pow(2, 53) -1      // 9007199254740991
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.MAX_SAFE_INTEGER")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/max_value/index.html b/files/fr/web/javascript/reference/global_objects/number/max_value/index.html deleted file mode 100644 index a673992a3b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/max_value/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Number.MAX_VALUE -slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE -tags: - - JavaScript - - Number - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MAX_VALUE ---- -
{{JSRef}}
- -

La propriété Number.MAX_VALUE représente la valeur maximale qui peut être représentée par un nombre en JavaScript.

- -
{{EmbedInteractiveExample("pages/js/number-maxvalue.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

La propriété statique MAX_VALUE vaut environ 1.79E+308 (soit 2^1024). Les valeurs supérieures à MAX_VALUE sont représentées par {{jsxref("Infinity")}} (pour l'infini).

- -

MAX_VALUE est une propriété statique de {{jsxref("Number")}}, il faut donc l'utiliser avec Number.MAX_VALUE, plutôt qu'en faisant appel à la propriété d'un objet Number qui aurait été instancié (si on appelle cette propriété sur l'objet Number créé, on obtiendra {{jsxref("undefined")}}).

- -

Exemples

- -

Le code suivant teste si le produit de deux nombres est inférieur ou égal à MAX_VALUE, selon le résultat de ce test, soit on utilisera func1, soit on utilisera func2.

- -
if (num1 * num2 <= Number.MAX_VALUE) {
-   func1();
-} else {
-   func2();
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.2', 'Number.MAX_VALUE')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.max_value', 'Number.MAX_VALUE')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.max_value', 'Number.MAX_VALUE')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.MAX_VALUE")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/max_value/index.md b/files/fr/web/javascript/reference/global_objects/number/max_value/index.md new file mode 100644 index 0000000000..a673992a3b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/max_value/index.md @@ -0,0 +1,79 @@ +--- +title: Number.MAX_VALUE +slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE +tags: + - JavaScript + - Number + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MAX_VALUE +--- +
{{JSRef}}
+ +

La propriété Number.MAX_VALUE représente la valeur maximale qui peut être représentée par un nombre en JavaScript.

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

Description

+ +

La propriété statique MAX_VALUE vaut environ 1.79E+308 (soit 2^1024). Les valeurs supérieures à MAX_VALUE sont représentées par {{jsxref("Infinity")}} (pour l'infini).

+ +

MAX_VALUE est une propriété statique de {{jsxref("Number")}}, il faut donc l'utiliser avec Number.MAX_VALUE, plutôt qu'en faisant appel à la propriété d'un objet Number qui aurait été instancié (si on appelle cette propriété sur l'objet Number créé, on obtiendra {{jsxref("undefined")}}).

+ +

Exemples

+ +

Le code suivant teste si le produit de deux nombres est inférieur ou égal à MAX_VALUE, selon le résultat de ce test, soit on utilisera func1, soit on utilisera func2.

+ +
if (num1 * num2 <= Number.MAX_VALUE) {
+   func1();
+} else {
+   func2();
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.2', 'Number.MAX_VALUE')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.max_value', 'Number.MAX_VALUE')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.max_value', 'Number.MAX_VALUE')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.MAX_VALUE")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.html b/files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.html deleted file mode 100644 index e61fc520fd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Number.MIN_SAFE_INTEGER -slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER -tags: - - ECMAScript 2015 - - JavaScript - - Number - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER ---- -
{{JSRef}}
- -

La constante Number.MIN_SAFE_INTEGER représente le plus petit entier représentable correctement en JavaScript (-(2^53 -1)).

- -
-

Note : Pour représenter des entiers inférieurs à cette valeur, on pourra utiliser le type {{jsxref("BigInt")}}.

-
- -
{{EmbedInteractiveExample("pages/js/number-min-safe-integer.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

La constante MIN_SAFE_INTEGER vaut -9007199254740991. Cette valeur provient du fait qu'en JavaScript, les nombres sont représentés en format à double précision selon la norme IEEE 754 et on ne peut représenter correctement que les nombres compris entre -(2^53-1) et 2^53 -1. Voir {{jsxref("Number.isSafeInteger()")}} pour plus d'informations.

- -

MIN_SAFE_INTEGER étant une méthode statique de {{jsxref("Number")}}, il faut utiliser Number.MIN_SAFE_INTEGER()et non pas la méthode d'un objet Number qui aurait été instancié.

- -

Exemples

- -
Number.MIN_SAFE_INTEGER // -9007199254740991
--Math.pow(2, 53) -1     // -9007199254740991
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.min_safe_integer', 'Number.MIN_SAFE_INTEGER')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.min_safe_integer', 'Number.MIN_SAFE_INTEGER')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.MIN_SAFE_INTEGER")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.md b/files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.md new file mode 100644 index 0000000000..e61fc520fd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/min_safe_integer/index.md @@ -0,0 +1,71 @@ +--- +title: Number.MIN_SAFE_INTEGER +slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER +tags: + - ECMAScript 2015 + - JavaScript + - Number + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MIN_SAFE_INTEGER +--- +
{{JSRef}}
+ +

La constante Number.MIN_SAFE_INTEGER représente le plus petit entier représentable correctement en JavaScript (-(2^53 -1)).

+ +
+

Note : Pour représenter des entiers inférieurs à cette valeur, on pourra utiliser le type {{jsxref("BigInt")}}.

+
+ +
{{EmbedInteractiveExample("pages/js/number-min-safe-integer.html")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

Description

+ +

La constante MIN_SAFE_INTEGER vaut -9007199254740991. Cette valeur provient du fait qu'en JavaScript, les nombres sont représentés en format à double précision selon la norme IEEE 754 et on ne peut représenter correctement que les nombres compris entre -(2^53-1) et 2^53 -1. Voir {{jsxref("Number.isSafeInteger()")}} pour plus d'informations.

+ +

MIN_SAFE_INTEGER étant une méthode statique de {{jsxref("Number")}}, il faut utiliser Number.MIN_SAFE_INTEGER()et non pas la méthode d'un objet Number qui aurait été instancié.

+ +

Exemples

+ +
Number.MIN_SAFE_INTEGER // -9007199254740991
+-Math.pow(2, 53) -1     // -9007199254740991
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.min_safe_integer', 'Number.MIN_SAFE_INTEGER')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.min_safe_integer', 'Number.MIN_SAFE_INTEGER')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.MIN_SAFE_INTEGER")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/min_value/index.html b/files/fr/web/javascript/reference/global_objects/number/min_value/index.html deleted file mode 100644 index 257b17dc9e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/min_value/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Number.MIN_VALUE -slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE -tags: - - JavaScript - - Number - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MIN_VALUE ---- -
{{JSRef}}
- -

La propriété Number.MIN_VALUE représente la plus petite valeur numérique positive qu'il est possible de représenter en JavaScript.

- -
{{EmbedInteractiveExample("pages/js/number-min-value.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

La propriété MIN_VALUE représente le nombre positif le plus proche de 0 et non pas le nombre négatif minimal qu'il est possible de représenter en JavaScript.

- -

MIN_VALUE vaut environ 5e-324. Les valeurs inférieures à MIN_VALUE sont converties en 0.

- -

MIN_VALUE est une propriété statique de {{jsxref("Number")}} et doit donc être utilisée avec la syntaxe Number.MIN_VALUE, et non pas via la propriété d'un objet Number qui aurait été instancié.

- -

Exemples

- -

Le code qui suit effectue la division de deux nombres. Si le résultat obtenu est supérieur ou égal à MIN_VALUE, la fonction func1 sera appelée, sinon la fonction func2 sera utilisée.

- -
if (num1 / num2 >= Number.MIN_VALUE) {
-    func1();
-} else {
-    func2();
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1
{{SpecName('ES5.1', '#sec-15.7.3.3', 'Number.MIN_VALUE')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.min_value', 'Number.MIN_VALUE')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.min_value', 'Number.MIN_VALUE')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.MIN_VALUE")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/min_value/index.md b/files/fr/web/javascript/reference/global_objects/number/min_value/index.md new file mode 100644 index 0000000000..257b17dc9e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/min_value/index.md @@ -0,0 +1,82 @@ +--- +title: Number.MIN_VALUE +slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE +tags: + - JavaScript + - Number + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/MIN_VALUE +--- +
{{JSRef}}
+ +

La propriété Number.MIN_VALUE représente la plus petite valeur numérique positive qu'il est possible de représenter en JavaScript.

+ +
{{EmbedInteractiveExample("pages/js/number-min-value.html")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

Description

+ +

La propriété MIN_VALUE représente le nombre positif le plus proche de 0 et non pas le nombre négatif minimal qu'il est possible de représenter en JavaScript.

+ +

MIN_VALUE vaut environ 5e-324. Les valeurs inférieures à MIN_VALUE sont converties en 0.

+ +

MIN_VALUE est une propriété statique de {{jsxref("Number")}} et doit donc être utilisée avec la syntaxe Number.MIN_VALUE, et non pas via la propriété d'un objet Number qui aurait été instancié.

+ +

Exemples

+ +

Le code qui suit effectue la division de deux nombres. Si le résultat obtenu est supérieur ou égal à MIN_VALUE, la fonction func1 sera appelée, sinon la fonction func2 sera utilisée.

+ +
if (num1 / num2 >= Number.MIN_VALUE) {
+    func1();
+} else {
+    func2();
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1
{{SpecName('ES5.1', '#sec-15.7.3.3', 'Number.MIN_VALUE')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.min_value', 'Number.MIN_VALUE')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.min_value', 'Number.MIN_VALUE')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.MIN_VALUE")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/nan/index.html b/files/fr/web/javascript/reference/global_objects/number/nan/index.html deleted file mode 100644 index 4f16fd16ae..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/nan/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Number.NaN -slug: Web/JavaScript/Reference/Global_Objects/Number/NaN -tags: - - JavaScript - - Number - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/NaN -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/NaN ---- -
{{JSRef}}
- -

La propriété Number.NaN représente une valeur qui n'est pas un nombre (en anglais « Not-A-Number » qui donne NaN). Elle est équivalente à {{jsxref("NaN")}}.

- -
{{EmbedInteractiveExample("pages/js/number-nan.html")}}
- -

Il n'est pas nécessaire de créer un objet {{jsxref("Number")}} pour accéder à cette propriété statique. Il suffit d'utiliser directement Number.NaN.

- -

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

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.4', 'Number.NaN')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.nan', 'Number.NaN')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.nan', 'Number.NaN')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.NaN")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/nan/index.md b/files/fr/web/javascript/reference/global_objects/number/nan/index.md new file mode 100644 index 0000000000..4f16fd16ae --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/nan/index.md @@ -0,0 +1,63 @@ +--- +title: Number.NaN +slug: Web/JavaScript/Reference/Global_Objects/Number/NaN +tags: + - JavaScript + - Number + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/NaN +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/NaN +--- +
{{JSRef}}
+ +

La propriété Number.NaN représente une valeur qui n'est pas un nombre (en anglais « Not-A-Number » qui donne NaN). Elle est équivalente à {{jsxref("NaN")}}.

+ +
{{EmbedInteractiveExample("pages/js/number-nan.html")}}
+ +

Il n'est pas nécessaire de créer un objet {{jsxref("Number")}} pour accéder à cette propriété statique. Il suffit d'utiliser directement Number.NaN.

+ +

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

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.4', 'Number.NaN')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.nan', 'Number.NaN')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.nan', 'Number.NaN')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.NaN")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.html b/files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.html deleted file mode 100644 index 634c779d96..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Number.NEGATIVE_INFINITY -slug: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY -tags: - - JavaScript - - Number - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/NEGATIVE_INFINITY ---- -
{{JSRef}}
- -

La propriété Number.NEGATIVE_INFINITY représente l'infini négatif.

- -
{{EmbedInteractiveExample("pages/js/number-negative-infinity.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Description

- -

La valeur de Number.NEGATIVE_INFINITY est égale à l'opposé de la valeur fournie par la propriété {{jsxref("Infinity")}} de l'objet global.

- -

Cette valeur se comporte différemment de l'infini mathématique :

- - - -

La propriété Number.NEGATIVE_INFINITY peut être utilisée pour indiquer une erreur sur un test renvoyant normalement un nombre fini. On notera cependant que la méthode {{jsxref("isFinite")}} est plus pertinente dans ce cas.

- -

Number.NEGATIVE_INFINITY est une propriété statique de {{jsxref("Number")}} et on utilisera directement Number.NEGATIVE_INFINITY plutôt que comme une propriété d'un objet (instance) {{jsxref("Number")}}.

- -

Exemples

- -

Dans l'exemple qui suit, on affecte une variable inférieure à la valeur numérique minimale à la variable petitNombre. Lorsque l'instruction conditionnelle if est exécutée, petitNombre possède la valeur "-Infinity", on modifie donc la valeur de petitNombre afin qu'il puisse être géré.

- -
var petitNombre = (-Number.MAX_VALUE) * 2
-
-if (petitNombre === Number.NEGATIVE_INFINITY) {
- petitNombre = renvoyerUneValeurFinie();
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.5', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.negative_infinity', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.negative_infinity', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.NEGATIVE_INFINITY")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.md b/files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.md new file mode 100644 index 0000000000..634c779d96 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/negative_infinity/index.md @@ -0,0 +1,98 @@ +--- +title: Number.NEGATIVE_INFINITY +slug: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY +tags: + - JavaScript + - Number + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/NEGATIVE_INFINITY +--- +
{{JSRef}}
+ +

La propriété Number.NEGATIVE_INFINITY représente l'infini négatif.

+ +
{{EmbedInteractiveExample("pages/js/number-negative-infinity.html")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

Description

+ +

La valeur de Number.NEGATIVE_INFINITY est égale à l'opposé de la valeur fournie par la propriété {{jsxref("Infinity")}} de l'objet global.

+ +

Cette valeur se comporte différemment de l'infini mathématique :

+ + + +

La propriété Number.NEGATIVE_INFINITY peut être utilisée pour indiquer une erreur sur un test renvoyant normalement un nombre fini. On notera cependant que la méthode {{jsxref("isFinite")}} est plus pertinente dans ce cas.

+ +

Number.NEGATIVE_INFINITY est une propriété statique de {{jsxref("Number")}} et on utilisera directement Number.NEGATIVE_INFINITY plutôt que comme une propriété d'un objet (instance) {{jsxref("Number")}}.

+ +

Exemples

+ +

Dans l'exemple qui suit, on affecte une variable inférieure à la valeur numérique minimale à la variable petitNombre. Lorsque l'instruction conditionnelle if est exécutée, petitNombre possède la valeur "-Infinity", on modifie donc la valeur de petitNombre afin qu'il puisse être géré.

+ +
var petitNombre = (-Number.MAX_VALUE) * 2
+
+if (petitNombre === Number.NEGATIVE_INFINITY) {
+ petitNombre = renvoyerUneValeurFinie();
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.5', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.negative_infinity', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.negative_infinity', 'Number.NEGATIVE_INFINITY')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.NEGATIVE_INFINITY")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/parsefloat/index.html b/files/fr/web/javascript/reference/global_objects/number/parsefloat/index.html deleted file mode 100644 index e0c630af48..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/parsefloat/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Number.parseFloat() -slug: Web/JavaScript/Reference/Global_Objects/Number/parseFloat -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Number - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseFloat -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/parseFloat ---- -
{{JSRef}}
- -

La méthode Number.parseFloat() analyse et convertit une chaîne de caractères en un nombre flottant. Cette méthode possède un comportement identique à {{jsxref("parseFloat")}} et fait partie d'ECMAScript 2015 (dans le but de « modulariser » les méthodes globales).

- -
{{EmbedInteractiveExample("pages/js/number-parsefloat.html")}}
- -

Syntaxe

- -
Number.parseFloat(chaîne)
- -

Paramètres

- -
-
chaîne
-
Une chaîne de caractères qu'on souhaite convertir en nombre flottant.
-
- -

Valeur de retour

- -

Un nombre flottant obtenu à partir de l'analyse de la chaîne de caractères passée en argument. Si le premier caractère de la chaîne ne peut pas être converti en un nombre, la  valeur {{jsxref("NaN")}} sera renvoyée.

- -

Description

- -

Cette méthode possède les mêmes fonctionnalités que la fonction globale {{jsxref("parseFloat", "parseFloat()")}} :

- -
Number.parseFloat === parseFloat; // true
-
- -

Cette méthode fait partie d'ECMAScript 2015 et notamment de la modularisation de certaines fonctions globales. Pour plus de détails et d'exemples, voir {{jsxref("parseFloat", "parseFloat()")}}.

- -

Prothèse d'émulation (polyfill)

- -
if (Number.parseFloat === undefined) {
-    Number.parseFloat = parseFloat;
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.parsefloat', 'Number.parseFloat')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.parsefloat', 'Number.parseFloat')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.parseFloat")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/parsefloat/index.md b/files/fr/web/javascript/reference/global_objects/number/parsefloat/index.md new file mode 100644 index 0000000000..e0c630af48 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/parsefloat/index.md @@ -0,0 +1,81 @@ +--- +title: Number.parseFloat() +slug: Web/JavaScript/Reference/Global_Objects/Number/parseFloat +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Number + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseFloat +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/parseFloat +--- +
{{JSRef}}
+ +

La méthode Number.parseFloat() analyse et convertit une chaîne de caractères en un nombre flottant. Cette méthode possède un comportement identique à {{jsxref("parseFloat")}} et fait partie d'ECMAScript 2015 (dans le but de « modulariser » les méthodes globales).

+ +
{{EmbedInteractiveExample("pages/js/number-parsefloat.html")}}
+ +

Syntaxe

+ +
Number.parseFloat(chaîne)
+ +

Paramètres

+ +
+
chaîne
+
Une chaîne de caractères qu'on souhaite convertir en nombre flottant.
+
+ +

Valeur de retour

+ +

Un nombre flottant obtenu à partir de l'analyse de la chaîne de caractères passée en argument. Si le premier caractère de la chaîne ne peut pas être converti en un nombre, la  valeur {{jsxref("NaN")}} sera renvoyée.

+ +

Description

+ +

Cette méthode possède les mêmes fonctionnalités que la fonction globale {{jsxref("parseFloat", "parseFloat()")}} :

+ +
Number.parseFloat === parseFloat; // true
+
+ +

Cette méthode fait partie d'ECMAScript 2015 et notamment de la modularisation de certaines fonctions globales. Pour plus de détails et d'exemples, voir {{jsxref("parseFloat", "parseFloat()")}}.

+ +

Prothèse d'émulation (polyfill)

+ +
if (Number.parseFloat === undefined) {
+    Number.parseFloat = parseFloat;
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.parsefloat', 'Number.parseFloat')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.parsefloat', 'Number.parseFloat')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.parseFloat")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/parseint/index.html b/files/fr/web/javascript/reference/global_objects/number/parseint/index.html deleted file mode 100644 index 780ba5b85e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/parseint/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Number.parseInt() -slug: Web/JavaScript/Reference/Global_Objects/Number/parseInt -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Number - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseInt -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/parseInt ---- -
{{JSRef}}
- -

La méthode Number.parseInt() analyse et convertit une chaine de caractères, fournie en argument, en un entier dans la base souhaitée.

- -
{{EmbedInteractiveExample("pages/js/number-parseint.html")}}
- -

Syntaxe

- -
Number.parseInt(chaîne [, base])
- -

Paramètres

- -
-
chaîne
-
La valeur à convertir. Si chaine n'est pas une chaîne de caractères, elle sera convertie auparavant. Les blancs qui préfixent la chaîne sont ignorés.
-
base {{optional_inline}}
-
Paramètre optionnel. Un entier représentant la base dans laquelle est représentée la valeur de la chaîne. Il faut toujours spécifier ce paramètre. Cela permet que le code ne soit pas ambigü et permet de garantir un comportement prévisible. En effet les différentes implémentations peuvent fournir des résultats différents lorsque la base n'est pas spécifiée.
-
- -

Valeur de retour

- -

Un entier construit à partir de l'analyse de la chaîne de caractères passée en argument. Si le premier caractère ne permet pas de conversion numérique, c'est la valeur {{jsxref("NaN")}} qui sera renvoyée.

- -

Description

- -

Voir la page {{jsxref("Objets_globaux/parseInt", "parseInt()")}} pour plus de détails et d'exemples. Cette méthode se comporte de façon identique à la fonction globale {{jsxref("Objets_globaux/parseInt", "parseInt()")}} et fait partie d'ECMAScript 2015 (dans le but de « modulariser » les méthodes globales) et on aura :

- -
Number.parseInt === parseInt; // true
- -

Prothèse d'émulation (polyfill)

- -

Si on souhaite bénéficier de cette fonction dans un environnement qui n'en dispose pas, on pourra donc l'émuler de la façon suivante :

- -
if(Number.parseInt === undefined) {
-  Number.parseInt = parseInt;
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.parseint', 'Number.parseInt')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.parseint', 'Number.parseInt')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.parseInt")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/parseint/index.md b/files/fr/web/javascript/reference/global_objects/number/parseint/index.md new file mode 100644 index 0000000000..780ba5b85e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/parseint/index.md @@ -0,0 +1,81 @@ +--- +title: Number.parseInt() +slug: Web/JavaScript/Reference/Global_Objects/Number/parseInt +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Number + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseInt +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/parseInt +--- +
{{JSRef}}
+ +

La méthode Number.parseInt() analyse et convertit une chaine de caractères, fournie en argument, en un entier dans la base souhaitée.

+ +
{{EmbedInteractiveExample("pages/js/number-parseint.html")}}
+ +

Syntaxe

+ +
Number.parseInt(chaîne [, base])
+ +

Paramètres

+ +
+
chaîne
+
La valeur à convertir. Si chaine n'est pas une chaîne de caractères, elle sera convertie auparavant. Les blancs qui préfixent la chaîne sont ignorés.
+
base {{optional_inline}}
+
Paramètre optionnel. Un entier représentant la base dans laquelle est représentée la valeur de la chaîne. Il faut toujours spécifier ce paramètre. Cela permet que le code ne soit pas ambigü et permet de garantir un comportement prévisible. En effet les différentes implémentations peuvent fournir des résultats différents lorsque la base n'est pas spécifiée.
+
+ +

Valeur de retour

+ +

Un entier construit à partir de l'analyse de la chaîne de caractères passée en argument. Si le premier caractère ne permet pas de conversion numérique, c'est la valeur {{jsxref("NaN")}} qui sera renvoyée.

+ +

Description

+ +

Voir la page {{jsxref("Objets_globaux/parseInt", "parseInt()")}} pour plus de détails et d'exemples. Cette méthode se comporte de façon identique à la fonction globale {{jsxref("Objets_globaux/parseInt", "parseInt()")}} et fait partie d'ECMAScript 2015 (dans le but de « modulariser » les méthodes globales) et on aura :

+ +
Number.parseInt === parseInt; // true
+ +

Prothèse d'émulation (polyfill)

+ +

Si on souhaite bénéficier de cette fonction dans un environnement qui n'en dispose pas, on pourra donc l'émuler de la façon suivante :

+ +
if(Number.parseInt === undefined) {
+  Number.parseInt = parseInt;
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-number.parseint', 'Number.parseInt')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-number.parseint', 'Number.parseInt')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.parseInt")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.html b/files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.html deleted file mode 100644 index 8ee53b1752..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Number.POSITIVE_INFINITY -slug: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY -tags: - - JavaScript - - Number - - Propriété - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/POSITIVE_INFINITY ---- -
{{JSRef}}
- -

La propriéte Number.POSITIVE_INFINITY représente l'infini (positif).

- -
{{EmbedInteractiveExample("pages/js/number-positive-infinity.html")}}
- - - -

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

- -

Description

- -

La valeur de Number.POSITIVE_INFINITY est identique à la valeur de la propriété de l'objet global {{jsxref("Infinity")}}.

- -

Cette valeur possède un comportement légèrement différent de l'infini au sens mathématique :

- - - -

Il est possible d'utiliser la propriété Number.POSITIVE_INFINITY pour faire un test d'erreur sur une valeur qu'on attendait finie. Cependant, la méthode {{jsxref("isFinite")}} sera plus appropriée dans ce cas.

- -

Number.POSITIVE_INFINITY est une propriété statique de {{jsxref("Number")}} et il n'est donc pas nécessaire de créer un objet {{jsxref("Number")}} afin d'utiliser cette propriété.

- -

Exemple

- -

Utiliser POSITIVE_INFINITY

- -

Dans l'exemple qui suit, on affecte une valeur plus grande que la valeur maximale à la variable grosNombre. Lors de l'exécution de l'instruction if, grosNombre aura la valeur Infinity, pour continuer, on met à jour grosNombre avec une valeur plus acceptable.

- -
var grosNombre = Number.MAX_VALUE * 2
-if (grosNombre == Number.POSITIVE_INFINITY) {
- grosNombre = renvoyerUnNombreFini();
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.6', 'Number.POSITIVE_INFINITY')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.positive_infinity', 'Number.POSITIVE_INFINITY')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.positive_infinity', 'Number.POSITIVE_INFINITY')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.POSITIVE_INFINITY")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.md b/files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.md new file mode 100644 index 0000000000..8ee53b1752 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/positive_infinity/index.md @@ -0,0 +1,99 @@ +--- +title: Number.POSITIVE_INFINITY +slug: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY +tags: + - JavaScript + - Number + - Propriété + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/POSITIVE_INFINITY +--- +
{{JSRef}}
+ +

La propriéte Number.POSITIVE_INFINITY représente l'infini (positif).

+ +
{{EmbedInteractiveExample("pages/js/number-positive-infinity.html")}}
+ + + +

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

+ +

Description

+ +

La valeur de Number.POSITIVE_INFINITY est identique à la valeur de la propriété de l'objet global {{jsxref("Infinity")}}.

+ +

Cette valeur possède un comportement légèrement différent de l'infini au sens mathématique :

+ + + +

Il est possible d'utiliser la propriété Number.POSITIVE_INFINITY pour faire un test d'erreur sur une valeur qu'on attendait finie. Cependant, la méthode {{jsxref("isFinite")}} sera plus appropriée dans ce cas.

+ +

Number.POSITIVE_INFINITY est une propriété statique de {{jsxref("Number")}} et il n'est donc pas nécessaire de créer un objet {{jsxref("Number")}} afin d'utiliser cette propriété.

+ +

Exemple

+ +

Utiliser POSITIVE_INFINITY

+ +

Dans l'exemple qui suit, on affecte une valeur plus grande que la valeur maximale à la variable grosNombre. Lors de l'exécution de l'instruction if, grosNombre aura la valeur Infinity, pour continuer, on met à jour grosNombre avec une valeur plus acceptable.

+ +
var grosNombre = Number.MAX_VALUE * 2
+if (grosNombre == Number.POSITIVE_INFINITY) {
+ grosNombre = renvoyerUnNombreFini();
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.3.6', 'Number.POSITIVE_INFINITY')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.positive_infinity', 'Number.POSITIVE_INFINITY')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.positive_infinity', 'Number.POSITIVE_INFINITY')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.POSITIVE_INFINITY")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/toexponential/index.html b/files/fr/web/javascript/reference/global_objects/number/toexponential/index.html deleted file mode 100644 index 2b3667b776..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/toexponential/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Number.prototype.toExponential() -slug: Web/JavaScript/Reference/Global_Objects/Number/toExponential -tags: - - JavaScript - - Méthode - - Number - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/toExponential -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toExponential ---- -
{{JSRef}}
- -

La méthode toExponential() renvoie une chaîne de caractères, représentant l'objet Number en notation exponentielle.

- -
{{EmbedInteractiveExample("pages/js/number-toexponential.html")}}
- -

Syntaxe

- -
numObj.toExponential([nbChiffresDécimaux])
- -

Paramètre

- -
-
nbChiffresDécimaux
-
Paramètre optionnel. Un entier donnant le nombre de chiffres qu'on souhaite avoir dans la partie fractionnaire. Le comportement par défaut considèrera autant de chiffres que nécessaire pour représenter le nombre.
-
- -

Valeur de retour

- -

Une chaîne représentant l'objet {{jsxref("Number")}} appelant en notation exponentielle avec un chiffre avant la virgule et arrondi à nbChiffresDécimaux après la virgule.

- -

Exceptions

- -
-
{{jsxref("RangeError")}}
-
Cette exception est causée si nbChiffresDécimaux est trop petit ou trop grand. Les valeurs comprises, au sens large, entre 0 et 20 ne causeront pas d'exception {{jsxref("RangeError")}}. Les implémentations peuvent également autorisér des valeurs en dehors de ces bornes.
-
{{jsxref("TypeError")}}
-
Si cette méthode est invoquée pour un objet qui n'est pas un objet Number.
-
- -

Description

- -

La valeur renvoyée est une chaîne de caractères correspondant à la représentation du nombre en notation exponentielle. La partie entière est constituée d'un seul chiffre et la partie fractionnaire est composée de nbChiffresDécimaux chiffres. Si l'argument nbChiffresDécimaux est absent, il y aura autant de chiffres dans la partie fractionnaire que nécessaire pour représenter le nombre de façon unique.

- -

Si la méthode toExponential() est utilisée avec un littéral numérique et que celui-ci ne possède aucun exposant ou séparateur décimal ("."), il faut laisser un ou plusieurs espaces entre le littéral et le point indiquant l'appel de la méthode. Cela permet d'éviter que le point, permettant d'accéder à la méthode, soit confondu avec un séparateur décimal.

- -

Si un nombre possède plus de chiffres décimaux que nbChiffresDécimaux, le nombre est arrondi au nombre le plus proche, représenté avec nbChiffresDécimaux pour la partie fractionnaire. Voir la discussion sur les arrondis dans la page  de la méthode {{jsxref("Number.toFixed", "toFixed()")}} pour plus de détails, la même méthode est utilisée pour toExponential().

- -

Exemples

- -

Utiliser toExponential

- -
var numObj = 77.1234;
-
-console.log(numObj.toExponential());  // affiche 7.71234e+1
-console.log(numObj.toExponential(4)); // affiche 7.7123e+1
-console.log(numObj.toExponential(2)); // affiche 7.71e+1
-console.log(77.1234.toExponential()); // affiche 7.71234e+1
-console.log(77 .toExponential());     // affiche 7.7e+1
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.6', 'Number.prototype.toExponential')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.toexponential', 'Number.prototype.toExponential')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.toexponential', 'Number.prototype.toExponential')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.toExponential")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/toexponential/index.md b/files/fr/web/javascript/reference/global_objects/number/toexponential/index.md new file mode 100644 index 0000000000..2b3667b776 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/toexponential/index.md @@ -0,0 +1,106 @@ +--- +title: Number.prototype.toExponential() +slug: Web/JavaScript/Reference/Global_Objects/Number/toExponential +tags: + - JavaScript + - Méthode + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toExponential +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toExponential +--- +
{{JSRef}}
+ +

La méthode toExponential() renvoie une chaîne de caractères, représentant l'objet Number en notation exponentielle.

+ +
{{EmbedInteractiveExample("pages/js/number-toexponential.html")}}
+ +

Syntaxe

+ +
numObj.toExponential([nbChiffresDécimaux])
+ +

Paramètre

+ +
+
nbChiffresDécimaux
+
Paramètre optionnel. Un entier donnant le nombre de chiffres qu'on souhaite avoir dans la partie fractionnaire. Le comportement par défaut considèrera autant de chiffres que nécessaire pour représenter le nombre.
+
+ +

Valeur de retour

+ +

Une chaîne représentant l'objet {{jsxref("Number")}} appelant en notation exponentielle avec un chiffre avant la virgule et arrondi à nbChiffresDécimaux après la virgule.

+ +

Exceptions

+ +
+
{{jsxref("RangeError")}}
+
Cette exception est causée si nbChiffresDécimaux est trop petit ou trop grand. Les valeurs comprises, au sens large, entre 0 et 20 ne causeront pas d'exception {{jsxref("RangeError")}}. Les implémentations peuvent également autorisér des valeurs en dehors de ces bornes.
+
{{jsxref("TypeError")}}
+
Si cette méthode est invoquée pour un objet qui n'est pas un objet Number.
+
+ +

Description

+ +

La valeur renvoyée est une chaîne de caractères correspondant à la représentation du nombre en notation exponentielle. La partie entière est constituée d'un seul chiffre et la partie fractionnaire est composée de nbChiffresDécimaux chiffres. Si l'argument nbChiffresDécimaux est absent, il y aura autant de chiffres dans la partie fractionnaire que nécessaire pour représenter le nombre de façon unique.

+ +

Si la méthode toExponential() est utilisée avec un littéral numérique et que celui-ci ne possède aucun exposant ou séparateur décimal ("."), il faut laisser un ou plusieurs espaces entre le littéral et le point indiquant l'appel de la méthode. Cela permet d'éviter que le point, permettant d'accéder à la méthode, soit confondu avec un séparateur décimal.

+ +

Si un nombre possède plus de chiffres décimaux que nbChiffresDécimaux, le nombre est arrondi au nombre le plus proche, représenté avec nbChiffresDécimaux pour la partie fractionnaire. Voir la discussion sur les arrondis dans la page  de la méthode {{jsxref("Number.toFixed", "toFixed()")}} pour plus de détails, la même méthode est utilisée pour toExponential().

+ +

Exemples

+ +

Utiliser toExponential

+ +
var numObj = 77.1234;
+
+console.log(numObj.toExponential());  // affiche 7.71234e+1
+console.log(numObj.toExponential(4)); // affiche 7.7123e+1
+console.log(numObj.toExponential(2)); // affiche 7.71e+1
+console.log(77.1234.toExponential()); // affiche 7.71234e+1
+console.log(77 .toExponential());     // affiche 7.7e+1
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.6', 'Number.prototype.toExponential')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.toexponential', 'Number.prototype.toExponential')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.toexponential', 'Number.prototype.toExponential')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.toExponential")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/tofixed/index.html b/files/fr/web/javascript/reference/global_objects/number/tofixed/index.html deleted file mode 100644 index 04f3a49458..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/tofixed/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Number.prototype.toFixed() -slug: Web/JavaScript/Reference/Global_Objects/Number/toFixed -tags: - - JavaScript - - Méthode - - Number - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/toFixed -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toFixed ---- -
{{JSRef}}
- -

La méthode toFixed() permet de formater un nombre en notation à point-fixe.

- -
{{EmbedInteractiveExample("pages/js/number-tofixed.html")}}
- -

Syntaxe

- -
numObj.toFixed([nbChiffres])
- -

Paramètres

- -
-
nbChiffres {{optional_inline}}
-
Le nombre de chiffres qu'on souhaite avoir après le séparateur décimal. Cette valeur peut être comprise, au sens large, entre 0 et 20. Les différentes implémentations peuvent éventuellement supporter des valeurs en dehors de cet intervalle. Si l'argument n'est pas utilisé, la valeur par défaut sera 0.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le nombre indiqué avec une notation à point fixe.

- -

Exceptions causées

- -
-
{{jsxref("RangeError")}}
-
Cette exception est renvoyée si nbChiffres est trop grand ou trop petit. Les valeurs comprises, au sens large, entre 0 et 100, n'entraîneront pas de RangeError. Les différentes implémentations peuvent ou non supporter des valeurs plus petites et/ou plus grandes.
-
{{jsxref("TypeError")}}
-
Cette exception est renvoyée si cette méthode est invoquée depuis un objet qui n'est pas de type numérique.
-
- -

Description

- -

toFixed() renvoie une chaîne de caractères représentant objetNumber sans notation exponentielle et qui possède exactement nbChiffres pour la partie fractionnaire. Le nombre est arrondi si nécessaire et la partie fractionnaire est complétée par des zéros si nécessaire pour obtenir la longueur souhaitée. Si le objetNumber est supérieur ou égal à 1e+21, la méthode utilise simplement {{jsxref("Number.prototype.toString()")}} et renvoie une chaîne en notation exponentielle.

- -
-

Attention : En raison du standard IEEE 754 qui est utilisé par JavaScript pour représenter les nombres, tous les nombres décimaux ne sont pas représentés exactement en JavaScript, ce qui peut mener à des résultats inattendus (comme 0.1 + 0.2 === 0.3 qui renvoie false).

-
- -

Exemples

- -
var numObj = 12345.6789;
-
-numObj.toFixed();       // Renvoie '12346' : arrondi, aucune partie fractionnaire
-numObj.toFixed(1);      // Renvoie '12345.7' : arrondi ici aussi
-numObj.toFixed(6);      // Renvoie '12345.678900' : des zéros sont ajoutés
-(1.23e+20).toFixed(2);  // Renvoie '123000000000000000000.00'
-(1.23e-10).toFixed(2);  // Renvoie '0.00'
-2.34.toFixed(1);        // Renvoie '2.3'
--2.34.toFixed(1);       // Renvoie -2.3 (en raison de la précédence des opérateurs,
-                        // les littéraux de nombres négatifs ne renvoient pas de chaînes)
-2.35.toFixed(1);        // Renvoie '2.4' (arrondi supérieur)
-2.55.toFixed(1);        // Renvoie '2.5' (cf. l'avertissement ci-avant)
-(-2.34).toFixed(1);     // Renvoie '-2.3'
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.5', 'Number.prototype.toFixed')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.toFixed")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/tofixed/index.md b/files/fr/web/javascript/reference/global_objects/number/tofixed/index.md new file mode 100644 index 0000000000..04f3a49458 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/tofixed/index.md @@ -0,0 +1,110 @@ +--- +title: Number.prototype.toFixed() +slug: Web/JavaScript/Reference/Global_Objects/Number/toFixed +tags: + - JavaScript + - Méthode + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toFixed +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toFixed +--- +
{{JSRef}}
+ +

La méthode toFixed() permet de formater un nombre en notation à point-fixe.

+ +
{{EmbedInteractiveExample("pages/js/number-tofixed.html")}}
+ +

Syntaxe

+ +
numObj.toFixed([nbChiffres])
+ +

Paramètres

+ +
+
nbChiffres {{optional_inline}}
+
Le nombre de chiffres qu'on souhaite avoir après le séparateur décimal. Cette valeur peut être comprise, au sens large, entre 0 et 20. Les différentes implémentations peuvent éventuellement supporter des valeurs en dehors de cet intervalle. Si l'argument n'est pas utilisé, la valeur par défaut sera 0.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le nombre indiqué avec une notation à point fixe.

+ +

Exceptions causées

+ +
+
{{jsxref("RangeError")}}
+
Cette exception est renvoyée si nbChiffres est trop grand ou trop petit. Les valeurs comprises, au sens large, entre 0 et 100, n'entraîneront pas de RangeError. Les différentes implémentations peuvent ou non supporter des valeurs plus petites et/ou plus grandes.
+
{{jsxref("TypeError")}}
+
Cette exception est renvoyée si cette méthode est invoquée depuis un objet qui n'est pas de type numérique.
+
+ +

Description

+ +

toFixed() renvoie une chaîne de caractères représentant objetNumber sans notation exponentielle et qui possède exactement nbChiffres pour la partie fractionnaire. Le nombre est arrondi si nécessaire et la partie fractionnaire est complétée par des zéros si nécessaire pour obtenir la longueur souhaitée. Si le objetNumber est supérieur ou égal à 1e+21, la méthode utilise simplement {{jsxref("Number.prototype.toString()")}} et renvoie une chaîne en notation exponentielle.

+ +
+

Attention : En raison du standard IEEE 754 qui est utilisé par JavaScript pour représenter les nombres, tous les nombres décimaux ne sont pas représentés exactement en JavaScript, ce qui peut mener à des résultats inattendus (comme 0.1 + 0.2 === 0.3 qui renvoie false).

+
+ +

Exemples

+ +
var numObj = 12345.6789;
+
+numObj.toFixed();       // Renvoie '12346' : arrondi, aucune partie fractionnaire
+numObj.toFixed(1);      // Renvoie '12345.7' : arrondi ici aussi
+numObj.toFixed(6);      // Renvoie '12345.678900' : des zéros sont ajoutés
+(1.23e+20).toFixed(2);  // Renvoie '123000000000000000000.00'
+(1.23e-10).toFixed(2);  // Renvoie '0.00'
+2.34.toFixed(1);        // Renvoie '2.3'
+-2.34.toFixed(1);       // Renvoie -2.3 (en raison de la précédence des opérateurs,
+                        // les littéraux de nombres négatifs ne renvoient pas de chaînes)
+2.35.toFixed(1);        // Renvoie '2.4' (arrondi supérieur)
+2.55.toFixed(1);        // Renvoie '2.5' (cf. l'avertissement ci-avant)
+(-2.34).toFixed(1);     // Renvoie '-2.3'
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.5', 'Number.prototype.toFixed')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.toFixed")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.html b/files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.html deleted file mode 100644 index af7692098a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.html +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Number.prototype.toLocaleString() -slug: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString -tags: - - Internationalisation - - JavaScript - - Méthode - - Number - - Prototype - - Reference - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toLocaleString ---- -
{{JSRef}}
- -

La méthode toLocaleString() permet de renvoyer une chaîne de caractères représentant un nombre en tenant compte de la locale.

- -
{{EmbedInteractiveExample("pages/js/number-tolocalestring.html")}}
- - - -

Les arguments locales et options permettent à l'application de spécifier les options de formatage selon la langue utilisée. Ces arguments ont un effet sur le comportement de la fonction. Les implémentations passées, qui ignoraient les arguments locales et options se basaient uniquement sur l'implémentation pour ce qui concernait la locale et le format.

- -

Syntaxe

- -
objetNumber.toLocaleString([locales [, options]])
- -

Paramètres

- -

Voir la section compatibilité des navigateurs afin de voir quels navigateurs supportent les arguments locales et options. L'exemple Vérifier le support des arguments locales et options permet de détecter cette fonctionnalité.

- -
-

Note : L'API ECMAScript Internationalization, implémentée avec Firefox 29, a ajouté l'argument locales à la méthode Number.toLocaleString. Si l'argument vaut undefined,cette méthode renvoie les nombres selon la locale du système d'exploitation, les versions antérieures de Firefox renvoyaient un résultat correspondant à la locale anglaise. Ce changement a été rapporté comme une régression, avec un risque de manque de rétrocompatibilité, avant d'être corrigé avec Firefox 55, voir le bug ({{bug(999003)}}).

-
- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/NumberFormat','Paramètres')}}

- -

Valeur de retour

- -

Une chaîne de caractères qui représente le nombre indiqué en tenant compte de la locale.

- -

Exemples

- -

Utiliser toLocaleString()

- -

En utilisant la fonction simplement, sans spécifier de locale, la chaîne est formatée dans la locale par défaut et avec des options par défaut.

- -
var nombre = 3500;
-
-console.log(nombre.toLocaleString()); // Affichera "3 500" pour la locale française
-
- -

Vérifier le support des arguments locales et options

- -

Les arguments locales et options ne sont pas supportés par tous les navigateurs. Afin de vérifier qu'une implémentation les prend en charge, on se base sur le fait que les balises de langues incorrectes renvoient une exception{{jsxref("RangeError")}} :

- -
function testSupporttoLocaleString() {
-    var nombre = 0;
-    try {
-        nombre.toLocaleString("i");
-    } catch (e) {
-        return e​.name === "RangeError";
-    }
-    return false;
-}
-
- -

Avant ES5.1, il n'était pas nécessaire pour les implémentations de provoquer une erreur d'intervalle si toLocaleString était appelé avec des arguments.

- -

Afin de vérifier le support pour tous les environnements, y compris ceux qui supportent ECMA-262 avant la version 5.1, on peut tester les fonctionnalités définies dans ECMA-402, directement sur Number.prototype.toLocaleString :

- -
function toLocaleStringSupportsOptions() {
-  return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function');
-}
-
- -

Cela permet de tester la présence d'un objet global Intl, de vérifier que celui-ci n'est pas null et qu'il a une méthode NumberFormat.

- -

Utiliser l'argument locales

- -

Cet exemple illustre les variations possibles entre les différents formats localisés. Afin que le format de langue utilisé soit celui de votre utilisateur, assurez-vous de fournir la langue utilisée (ainsi que des langues de secours) en utilisant l'argument locales :

- -
var nombre= 123456.789;
-
-// Pour la locale allemande, on utilise un point comme séparateur
-// pour les milliers et une virgule comme séparateur décimal
-console.log(nombre.toLocaleString("de-DE"));
-// → 123.456,789
-
-// Les locales arabes, dans la plupart des pays arabophones, utilisent
-// les chiffres arabes
-console.log(nombre.toLocaleString("ar-EG"));
-// → ١٢٣٤٥٦٫٧٨٩
-
-// En Inde, on utilise des séparateurs de milliers/lakh/crore
-console.log(nombre.toLocaleString("en-IN"));
-// → 1,23,456.789
-
-// La clé d'extension nu indique un système numérique, ici le système chinois décimal
-console.log(nombre.toLocaleString("zh-Hans-CN-u-nu-hanidec"));
-// → 一二三,四五六.七八九
-
-// quand on souhaite utiliser un langage qui n'est pas supporté, on peut
-// inclure un langage de secours. Exemple ici avec le balinais et l'indonésien
-console.log(nombre.toLocaleString(["ban", "id"]));
-// → 123.456,789
-
- -

Utiliser l'argument options

- -

Les résultats fournis par toLocaleString peuvent être déclinés en utilisant l'argument options :

- -
var nombre = 123456.789;
-
-// on formate selon une devise
-console.log(nombre.toLocaleString("de-DE", {style: "currency", currency: "EUR"}));
-// → 123.456,79 €
-
-// le yen japonais ne possède pas de centimes
-console.log(nombre.toLocaleString("ja-JP", {style: "currency", currency: "JPY"}))
-// → ¥123,457
-
-// on se limite à trois chiffres significatifs
-console.log(nombre.toLocaleString("en-IN", {maximumSignificantDigits: 3}));
-// → 1,23,000
-
-// on utilise la langue du système pour la mise en
-// forme des nombres
-var num = 30000.65;
-console.log(num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}));
-// → "30,000.65" quand l'anglais est la langue par défaut
-// → "30.000,65" quand l'allemand est la langue par défaut
-// → "30 000,65" quand le français est la langue par défaut
-
- -

Performance

- -

Lors du formatage de beaucoup de nombres, il est préférable de créer un objet {{jsxref("NumberFormat")}} et d'utiliser sa méthode {{jsxref("NumberFormat.format")}}.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.3', 'Number.prototype.toLocaleString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.2.1', 'Number.prototype.toLocaleString')}}{{Spec2('ES Int 1.0')}} 
{{SpecName('ES Int 2.0', '#sec-13.2.1', 'Number.prototype.toLocaleString')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Number.prototype.toLocaleString', 'Number.prototype.toLocaleString')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.toLocaleString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.md b/files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.md new file mode 100644 index 0000000000..af7692098a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/tolocalestring/index.md @@ -0,0 +1,196 @@ +--- +title: Number.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString +tags: + - Internationalisation + - JavaScript + - Méthode + - Number + - Prototype + - Reference + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toLocaleString +--- +
{{JSRef}}
+ +

La méthode toLocaleString() permet de renvoyer une chaîne de caractères représentant un nombre en tenant compte de la locale.

+ +
{{EmbedInteractiveExample("pages/js/number-tolocalestring.html")}}
+ + + +

Les arguments locales et options permettent à l'application de spécifier les options de formatage selon la langue utilisée. Ces arguments ont un effet sur le comportement de la fonction. Les implémentations passées, qui ignoraient les arguments locales et options se basaient uniquement sur l'implémentation pour ce qui concernait la locale et le format.

+ +

Syntaxe

+ +
objetNumber.toLocaleString([locales [, options]])
+ +

Paramètres

+ +

Voir la section compatibilité des navigateurs afin de voir quels navigateurs supportent les arguments locales et options. L'exemple Vérifier le support des arguments locales et options permet de détecter cette fonctionnalité.

+ +
+

Note : L'API ECMAScript Internationalization, implémentée avec Firefox 29, a ajouté l'argument locales à la méthode Number.toLocaleString. Si l'argument vaut undefined,cette méthode renvoie les nombres selon la locale du système d'exploitation, les versions antérieures de Firefox renvoyaient un résultat correspondant à la locale anglaise. Ce changement a été rapporté comme une régression, avec un risque de manque de rétrocompatibilité, avant d'être corrigé avec Firefox 55, voir le bug ({{bug(999003)}}).

+
+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/NumberFormat','Paramètres')}}

+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le nombre indiqué en tenant compte de la locale.

+ +

Exemples

+ +

Utiliser toLocaleString()

+ +

En utilisant la fonction simplement, sans spécifier de locale, la chaîne est formatée dans la locale par défaut et avec des options par défaut.

+ +
var nombre = 3500;
+
+console.log(nombre.toLocaleString()); // Affichera "3 500" pour la locale française
+
+ +

Vérifier le support des arguments locales et options

+ +

Les arguments locales et options ne sont pas supportés par tous les navigateurs. Afin de vérifier qu'une implémentation les prend en charge, on se base sur le fait que les balises de langues incorrectes renvoient une exception{{jsxref("RangeError")}} :

+ +
function testSupporttoLocaleString() {
+    var nombre = 0;
+    try {
+        nombre.toLocaleString("i");
+    } catch (e) {
+        return e​.name === "RangeError";
+    }
+    return false;
+}
+
+ +

Avant ES5.1, il n'était pas nécessaire pour les implémentations de provoquer une erreur d'intervalle si toLocaleString était appelé avec des arguments.

+ +

Afin de vérifier le support pour tous les environnements, y compris ceux qui supportent ECMA-262 avant la version 5.1, on peut tester les fonctionnalités définies dans ECMA-402, directement sur Number.prototype.toLocaleString :

+ +
function toLocaleStringSupportsOptions() {
+  return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function');
+}
+
+ +

Cela permet de tester la présence d'un objet global Intl, de vérifier que celui-ci n'est pas null et qu'il a une méthode NumberFormat.

+ +

Utiliser l'argument locales

+ +

Cet exemple illustre les variations possibles entre les différents formats localisés. Afin que le format de langue utilisé soit celui de votre utilisateur, assurez-vous de fournir la langue utilisée (ainsi que des langues de secours) en utilisant l'argument locales :

+ +
var nombre= 123456.789;
+
+// Pour la locale allemande, on utilise un point comme séparateur
+// pour les milliers et une virgule comme séparateur décimal
+console.log(nombre.toLocaleString("de-DE"));
+// → 123.456,789
+
+// Les locales arabes, dans la plupart des pays arabophones, utilisent
+// les chiffres arabes
+console.log(nombre.toLocaleString("ar-EG"));
+// → ١٢٣٤٥٦٫٧٨٩
+
+// En Inde, on utilise des séparateurs de milliers/lakh/crore
+console.log(nombre.toLocaleString("en-IN"));
+// → 1,23,456.789
+
+// La clé d'extension nu indique un système numérique, ici le système chinois décimal
+console.log(nombre.toLocaleString("zh-Hans-CN-u-nu-hanidec"));
+// → 一二三,四五六.七八九
+
+// quand on souhaite utiliser un langage qui n'est pas supporté, on peut
+// inclure un langage de secours. Exemple ici avec le balinais et l'indonésien
+console.log(nombre.toLocaleString(["ban", "id"]));
+// → 123.456,789
+
+ +

Utiliser l'argument options

+ +

Les résultats fournis par toLocaleString peuvent être déclinés en utilisant l'argument options :

+ +
var nombre = 123456.789;
+
+// on formate selon une devise
+console.log(nombre.toLocaleString("de-DE", {style: "currency", currency: "EUR"}));
+// → 123.456,79 €
+
+// le yen japonais ne possède pas de centimes
+console.log(nombre.toLocaleString("ja-JP", {style: "currency", currency: "JPY"}))
+// → ¥123,457
+
+// on se limite à trois chiffres significatifs
+console.log(nombre.toLocaleString("en-IN", {maximumSignificantDigits: 3}));
+// → 1,23,000
+
+// on utilise la langue du système pour la mise en
+// forme des nombres
+var num = 30000.65;
+console.log(num.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}));
+// → "30,000.65" quand l'anglais est la langue par défaut
+// → "30.000,65" quand l'allemand est la langue par défaut
+// → "30 000,65" quand le français est la langue par défaut
+
+ +

Performance

+ +

Lors du formatage de beaucoup de nombres, il est préférable de créer un objet {{jsxref("NumberFormat")}} et d'utiliser sa méthode {{jsxref("NumberFormat.format")}}.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.3', 'Number.prototype.toLocaleString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.2.1', 'Number.prototype.toLocaleString')}}{{Spec2('ES Int 1.0')}} 
{{SpecName('ES Int 2.0', '#sec-13.2.1', 'Number.prototype.toLocaleString')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-Number.prototype.toLocaleString', 'Number.prototype.toLocaleString')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.toLocaleString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/toprecision/index.html b/files/fr/web/javascript/reference/global_objects/number/toprecision/index.html deleted file mode 100644 index 3071e0dafc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/toprecision/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Number.prototype.toPrecision() -slug: Web/JavaScript/Reference/Global_Objects/Number/toPrecision -tags: - - JavaScript - - Méthode - - Number - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/toPrecision -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toPrecision ---- -
{{JSRef}}
- -

La méthode toPrecision() renvoie une chaîne de caractères représentant un nombre avec la précision donnée.

- -
{{EmbedInteractiveExample("pages/js/number-toprecision.html")}}
- -

Syntaxe

- -
numObj.toPrecision([précision])
- -

Paramètre

- -
-
précision
-
Paramètre optionnel. Un entier spécifiant le nombre de chiffres significatifs.
-
- -

Valeur de retour

- -

Cette méthode renvoie une chaîne de caractères représentant l'objet {{jsxref("Number")}} en notation à point fixe ou en notation exponentielle, arrondi avec un nombre de chiffres significatifs égal à précision. Le principe utilisé pour les arrondis est celui décrit dans la page de la méthode {{jsxref("Number.prototype.toFixed()")}}.

- -

Si l'argument précision n'est pas utilisé, la méthode aura le même effet que {{jsxref("Number.prototype.toString()")}}. Si cet argument n'est pas un nombre entier, on prendra le nombre entier le plus proche.

- -

Exceptions

- -
-
{{jsxref("RangeError")}}
-
Si précison n'est pas compris, au sens large, entre 1 et 100, on aura une exception RangeError. Les implémentations peuvent supporter des valeurs supérieures et/ou inférieures. Le standard ECMA-262 ne nécessite qu'une précision allant jusqu'à 21 chiffres significatifs.
-
- -

Exemples

- -
var objetNumber = 5.123456;
-console.log(objetNumber.toPrecision());  //affiche "5.123456"
-console.log(objetNumber.toPrecision(5)); //affiche "5.1235"
-console.log(objetNumber.toPrecision(2)); //affiche "5.1"
-console.log(objetNumber.toPrecision(1)); //affiche "5"
-
-numObj = 0.000123;
-
-console.log(numObj.toPrecision());    // affiche "0.000123"
-console.log(numObj.toPrecision(5));   // affiche "0.00012300"
-console.log(numObj.toPrecision(2));   // affiche "0.00012"
-console.log(numObj.toPrecision(1));   // affiche "0.0001"
-
-// dans certaines circonstances, on peut avoir une notation exponentielle
-console.log((1234.5).toPrecision(2)); // "1.2e+3"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.7', 'Number.prototype.toPrecision')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.toPrecision")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/toprecision/index.md b/files/fr/web/javascript/reference/global_objects/number/toprecision/index.md new file mode 100644 index 0000000000..3071e0dafc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/toprecision/index.md @@ -0,0 +1,104 @@ +--- +title: Number.prototype.toPrecision() +slug: Web/JavaScript/Reference/Global_Objects/Number/toPrecision +tags: + - JavaScript + - Méthode + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toPrecision +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toPrecision +--- +
{{JSRef}}
+ +

La méthode toPrecision() renvoie une chaîne de caractères représentant un nombre avec la précision donnée.

+ +
{{EmbedInteractiveExample("pages/js/number-toprecision.html")}}
+ +

Syntaxe

+ +
numObj.toPrecision([précision])
+ +

Paramètre

+ +
+
précision
+
Paramètre optionnel. Un entier spécifiant le nombre de chiffres significatifs.
+
+ +

Valeur de retour

+ +

Cette méthode renvoie une chaîne de caractères représentant l'objet {{jsxref("Number")}} en notation à point fixe ou en notation exponentielle, arrondi avec un nombre de chiffres significatifs égal à précision. Le principe utilisé pour les arrondis est celui décrit dans la page de la méthode {{jsxref("Number.prototype.toFixed()")}}.

+ +

Si l'argument précision n'est pas utilisé, la méthode aura le même effet que {{jsxref("Number.prototype.toString()")}}. Si cet argument n'est pas un nombre entier, on prendra le nombre entier le plus proche.

+ +

Exceptions

+ +
+
{{jsxref("RangeError")}}
+
Si précison n'est pas compris, au sens large, entre 1 et 100, on aura une exception RangeError. Les implémentations peuvent supporter des valeurs supérieures et/ou inférieures. Le standard ECMA-262 ne nécessite qu'une précision allant jusqu'à 21 chiffres significatifs.
+
+ +

Exemples

+ +
var objetNumber = 5.123456;
+console.log(objetNumber.toPrecision());  //affiche "5.123456"
+console.log(objetNumber.toPrecision(5)); //affiche "5.1235"
+console.log(objetNumber.toPrecision(2)); //affiche "5.1"
+console.log(objetNumber.toPrecision(1)); //affiche "5"
+
+numObj = 0.000123;
+
+console.log(numObj.toPrecision());    // affiche "0.000123"
+console.log(numObj.toPrecision(5));   // affiche "0.00012300"
+console.log(numObj.toPrecision(2));   // affiche "0.00012"
+console.log(numObj.toPrecision(1));   // affiche "0.0001"
+
+// dans certaines circonstances, on peut avoir une notation exponentielle
+console.log((1234.5).toPrecision(2)); // "1.2e+3"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.7.4.7', 'Number.prototype.toPrecision')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.toPrecision")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/tosource/index.html b/files/fr/web/javascript/reference/global_objects/number/tosource/index.html deleted file mode 100644 index 4573bdfacf..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/tosource/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Number.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Number/toSource -tags: - - JavaScript - - Méthode - - Number - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toSource ---- -
{{JSRef}} {{non-standard_header}}
- -

La méthode toSource() permet de renvoyer une chaîne de caractère représentant le code source de l'objet.

- -

Syntaxe

- -
objetNumber.toSource();
-Number.toSource();
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant le code source de l'objet.

- -

Description

- -

La méthode toSource() renvoie les valeurs suivantes :

- - - -

Cette méthode est généralement appelée par du code interne au moteur JavaScript et n'est pas utilisée dans des scripts JavaScript.

- -

Spécifications

- -

Cette méthode ne fait partie d'aucun standard. Elle a été implémentée avec JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/tosource/index.md b/files/fr/web/javascript/reference/global_objects/number/tosource/index.md new file mode 100644 index 0000000000..4573bdfacf --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/tosource/index.md @@ -0,0 +1,56 @@ +--- +title: Number.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Number/toSource +tags: + - JavaScript + - Méthode + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

La méthode toSource() permet de renvoyer une chaîne de caractère représentant le code source de l'objet.

+ +

Syntaxe

+ +
objetNumber.toSource();
+Number.toSource();
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant le code source de l'objet.

+ +

Description

+ +

La méthode toSource() renvoie les valeurs suivantes :

+ + + +

Cette méthode est généralement appelée par du code interne au moteur JavaScript et n'est pas utilisée dans des scripts JavaScript.

+ +

Spécifications

+ +

Cette méthode ne fait partie d'aucun standard. Elle a été implémentée avec JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/tostring/index.html b/files/fr/web/javascript/reference/global_objects/number/tostring/index.html deleted file mode 100644 index b7b615f01d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/tostring/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Number.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Number/toString -tags: - - JavaScript - - Méthode - - Number - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaîne de caractère représentant l'objet Number.

- -
{{EmbedInteractiveExample("pages/js/number-tostring.html")}}
- -

Syntaxe

- -
numObj.toString([base])
- -

Paramètre

- -
-
base
-
Paramètre optionnel. Un entier compris entre 2 et 36 qui indique la base du système numérique à utiliser pour représenter la valeur.
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant l'objet {{jsxref("Number")}}.

- -

Exception

- -
-
{{jsxref("RangeError")}}
-
-

Si toString() reçoit une base qui n'est pas comprise entre 2 et 36, une exception RangeError est levée.

-
-
- -

Description

- -

L'objet {{jsxref("Number")}} surcharge la méthode toString() de {{jsxref("Object")}} et n'hérite donc pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets Number, la méthode toString() renvoie une représentation du nombre, dans une base donnée, en une chaîne de caractères.

- -

La méthode toString() analyse son premier argument et tente de renvoyer une chaîne de caractères représentant le nombre en une base donnée. Pour les bases supérieures à 10, les lettres de l'alphabet sont utilisées pour représenter les numéraux supérieurs à 9. Par exemple, pour les nombres hexadécimaux (en base 16), les lettres a à f sont utilisées.

- -

Si la base n'est pas spécifiée, on utilisera la base 10 par défaut.

- -

Si l'objet Number est négatif, le signe sera conservé. Ceci, même si la base utilisée est la base 2 : la chaîne de caractères rendue sera la représentation binaire du nombre positif précédée par un signe -. La représentation n'est pas le complément à deux du nombre.

- -

Si l'objet Number n'est pas un nombre entier, le point (.) sera utilisé pour séparer la partie entière et décimale.

- -

Exemples

- -

Utiliser toString

- -
var compte = 10;
-
-console.log(compte.toString());   // affiche "10"
-console.log((17).toString());     // affiche "17"
-console.log((17.2).toString());   // affiche "17.2"
-
-var x = 6;
-
-console.log(x.toString(2));       // affiche "110"
-console.log((254).toString(16));  // affiche "fe"
-
-
-console.log((-10).toString(2));   // affiche "-1010"
-console.log((-0xff).toString(2)); // affiche "-11111111"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.4.2', 'Number.prototype.tostring')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.tostring', 'Number.prototype.tostring')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.tostring', 'Number.prototype.tostring')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/tostring/index.md b/files/fr/web/javascript/reference/global_objects/number/tostring/index.md new file mode 100644 index 0000000000..b7b615f01d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/tostring/index.md @@ -0,0 +1,117 @@ +--- +title: Number.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Number/toString +tags: + - JavaScript + - Méthode + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaîne de caractère représentant l'objet Number.

+ +
{{EmbedInteractiveExample("pages/js/number-tostring.html")}}
+ +

Syntaxe

+ +
numObj.toString([base])
+ +

Paramètre

+ +
+
base
+
Paramètre optionnel. Un entier compris entre 2 et 36 qui indique la base du système numérique à utiliser pour représenter la valeur.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant l'objet {{jsxref("Number")}}.

+ +

Exception

+ +
+
{{jsxref("RangeError")}}
+
+

Si toString() reçoit une base qui n'est pas comprise entre 2 et 36, une exception RangeError est levée.

+
+
+ +

Description

+ +

L'objet {{jsxref("Number")}} surcharge la méthode toString() de {{jsxref("Object")}} et n'hérite donc pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets Number, la méthode toString() renvoie une représentation du nombre, dans une base donnée, en une chaîne de caractères.

+ +

La méthode toString() analyse son premier argument et tente de renvoyer une chaîne de caractères représentant le nombre en une base donnée. Pour les bases supérieures à 10, les lettres de l'alphabet sont utilisées pour représenter les numéraux supérieurs à 9. Par exemple, pour les nombres hexadécimaux (en base 16), les lettres a à f sont utilisées.

+ +

Si la base n'est pas spécifiée, on utilisera la base 10 par défaut.

+ +

Si l'objet Number est négatif, le signe sera conservé. Ceci, même si la base utilisée est la base 2 : la chaîne de caractères rendue sera la représentation binaire du nombre positif précédée par un signe -. La représentation n'est pas le complément à deux du nombre.

+ +

Si l'objet Number n'est pas un nombre entier, le point (.) sera utilisé pour séparer la partie entière et décimale.

+ +

Exemples

+ +

Utiliser toString

+ +
var compte = 10;
+
+console.log(compte.toString());   // affiche "10"
+console.log((17).toString());     // affiche "17"
+console.log((17.2).toString());   // affiche "17.2"
+
+var x = 6;
+
+console.log(x.toString(2));       // affiche "110"
+console.log((254).toString(16));  // affiche "fe"
+
+
+console.log((-10).toString(2));   // affiche "-1010"
+console.log((-0xff).toString(2)); // affiche "-11111111"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.4.2', 'Number.prototype.tostring')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.tostring', 'Number.prototype.tostring')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.tostring', 'Number.prototype.tostring')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/number/valueof/index.html b/files/fr/web/javascript/reference/global_objects/number/valueof/index.html deleted file mode 100644 index b90f4c4d93..0000000000 --- a/files/fr/web/javascript/reference/global_objects/number/valueof/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Number.prototype.valueOf() -slug: Web/JavaScript/Reference/Global_Objects/Number/valueOf -tags: - - JavaScript - - Méthode - - Number - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Number/valueOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Number/valueOf ---- -
{{JSRef}}
- -

La méthode valueOf() renvoie la valeur primitive correspondant à celle représentée par l'objet {{jsxref("Number")}}.

- -
{{EmbedInteractiveExample("pages/js/number-valueof.html")}}
- -

Syntaxe

- -
objetNumber.valueOf()
- -

Valeur de retour

- -

Un nombre qui représente la valeur primitive de l'objet {{jsxref("Number")}}.

- -

Description

- -

Cette méthode est généralement utilisée de façon interne au moteur JavaScript et n'est pas utilisée de façon explicite dans du code JavaScript.

- -

Exemples

- -

Utiliser valueOf

- -
var numObj = new Number(10);
-console.log(typeof numObj); // object
-
-var num = numObj.valueOf();
-console.log(num);           // 10
-console.log(typeof num);    // number
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.4.4', 'Number.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Number.valueOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/number/valueof/index.md b/files/fr/web/javascript/reference/global_objects/number/valueof/index.md new file mode 100644 index 0000000000..b90f4c4d93 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/number/valueof/index.md @@ -0,0 +1,83 @@ +--- +title: Number.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Number/valueOf +tags: + - JavaScript + - Méthode + - Number + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Number/valueOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Number/valueOf +--- +
{{JSRef}}
+ +

La méthode valueOf() renvoie la valeur primitive correspondant à celle représentée par l'objet {{jsxref("Number")}}.

+ +
{{EmbedInteractiveExample("pages/js/number-valueof.html")}}
+ +

Syntaxe

+ +
objetNumber.valueOf()
+ +

Valeur de retour

+ +

Un nombre qui représente la valeur primitive de l'objet {{jsxref("Number")}}.

+ +

Description

+ +

Cette méthode est généralement utilisée de façon interne au moteur JavaScript et n'est pas utilisée de façon explicite dans du code JavaScript.

+ +

Exemples

+ +

Utiliser valueOf

+ +
var numObj = new Number(10);
+console.log(typeof numObj); // object
+
+var num = numObj.valueOf();
+console.log(num);           // 10
+console.log(typeof num);    // number
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.7.4.4', 'Number.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Number.valueOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.html b/files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.html deleted file mode 100644 index 3f01c86cbc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Object.prototype.__defineGetter__() -slug: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ -tags: - - Déprécié - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineGetter ---- -
{{JSRef}}
- -
-

Attention : Cette fonctionnalité est dépréciée et il est préférable d'utiliser l'API {{jsxref("Object.defineProperty()")}} et la syntaxe d'initialisation d'objets. Toutefois, __defineGetter__ est largement utilisée sur le Web et est implémentée. Il est donc peu probable que les navigateurs retirent cette méthode.

-
- -

La méthode __defineGetter__ permet de lier une propriété d'un objet à une fonction à exécuter lorsqu'on accède à la propriété.

- -

Syntaxe

- -
obj.__defineGetter__(prop, func)
- -

Paramètres

- -
-
prop
-
Une chaîne de caractères contenant le nom de la propriété à lier à la fonction donnée.
-
func
-
Une fonction à utiliser à chaque fois qu'on accède à la propriété.
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Description

- -

La méthode __defineGetter__ permet de définir un {{jsxref("Opérateurs/L_opérateur_get", "accesseur", "", 1)}} sur un objet pré-existant.

- -

Exemples

- -
// Méthode non-standard et dépréciée
-
-var o = {};
-o.__defineGetter__('gimmeFive', function() { return 5; });
-console.log(o.gimmeFive); // 5
-
-
-// Façon standard
-
-// En utilisant l'opérateur get
-var o = { get gimmeFive() { return 5; } };
-console.log(o.gimmeFive); // 5
-
-// En utilisant Object.defineProperty
-var o = {};
-Object.defineProperty(o, 'gimmeFive', {
-  get: function() {
-    return 5;
-  }
-});
-console.log(o.gimmeFive); // 5
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__defineGetter__', 'Object.prototype.__defineGetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.defineGetter")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.md b/files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.md new file mode 100644 index 0000000000..3f01c86cbc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/__definegetter__/index.md @@ -0,0 +1,100 @@ +--- +title: Object.prototype.__defineGetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ +tags: + - Déprécié + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__ +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineGetter +--- +
{{JSRef}}
+ +
+

Attention : Cette fonctionnalité est dépréciée et il est préférable d'utiliser l'API {{jsxref("Object.defineProperty()")}} et la syntaxe d'initialisation d'objets. Toutefois, __defineGetter__ est largement utilisée sur le Web et est implémentée. Il est donc peu probable que les navigateurs retirent cette méthode.

+
+ +

La méthode __defineGetter__ permet de lier une propriété d'un objet à une fonction à exécuter lorsqu'on accède à la propriété.

+ +

Syntaxe

+ +
obj.__defineGetter__(prop, func)
+ +

Paramètres

+ +
+
prop
+
Une chaîne de caractères contenant le nom de la propriété à lier à la fonction donnée.
+
func
+
Une fonction à utiliser à chaque fois qu'on accède à la propriété.
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Description

+ +

La méthode __defineGetter__ permet de définir un {{jsxref("Opérateurs/L_opérateur_get", "accesseur", "", 1)}} sur un objet pré-existant.

+ +

Exemples

+ +
// Méthode non-standard et dépréciée
+
+var o = {};
+o.__defineGetter__('gimmeFive', function() { return 5; });
+console.log(o.gimmeFive); // 5
+
+
+// Façon standard
+
+// En utilisant l'opérateur get
+var o = { get gimmeFive() { return 5; } };
+console.log(o.gimmeFive); // 5
+
+// En utilisant Object.defineProperty
+var o = {};
+Object.defineProperty(o, 'gimmeFive', {
+  get: function() {
+    return 5;
+  }
+});
+console.log(o.gimmeFive); // 5
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__defineGetter__', 'Object.prototype.__defineGetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.defineGetter")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.html b/files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.html deleted file mode 100644 index 18aeb80b46..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.html +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Object.prototype.__defineSetter__() -slug: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__ -tags: - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__ -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineSetter ---- -
{{JSRef}}
- -
-

Attention : Cette fonctionnalité est dépréciée et il est préférable d'utiliser l'API {{jsxref("Object.defineProperty()")}} et la syntaxe d'initialisation d'objets. Toutefois, __defineGetter__ est largement utilisée sur le Web et est implémentée. Il est donc peu probable que les navigateurs retirent cette méthode.

-
- -

La méthode __defineSetter__ permet de lier une propriété d'un objet à une fonction qui sera exécutée pour toute tentative de définition/changement de cette propriété.

- -

Syntaxe

- -
obj.__defineSetter__(prop, fun)
- -

Paramètres

- -
-
prop
-
Une chaîne de caractères qui contient le nom de la propriété qu'on souhaite lier à la fonction.
-
fun
-
Une fonction à appeler pour chaque modification de la propriété. Cette fonction prend la forme suivante : -
function(val) { . . . }
- -
-
val
-
Un alias pour la variable contenant la nouvelle valeur qu'on souhaite affecter à prop.
-
-
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Description

- -

La méthode __defineSetter__ permet de définir un {{jsxref("Opérateurs/L_opérateur_set", "mutateur", "", 1)}} sur un objet pré-existant.

- -

Exemples

- -
// Méthode non-standard et dépréciée
-
-var o = {};
-o.__defineSetter__('valeur', function(val) { this.uneAutreValeur = val; });
-o.valeur = 5;
-console.log(o.valeur); // undefined
-console.log(o.uneAutreValeur); // 5
-
-
-// Façons standard
-
-// En utilisant l'opérateur set
-var o = { set valeur(val) { this.uneAutreValeur = val; } };
-o.valeur = 5;
-console.log(o.valeur); // undefined
-console.log(o.uneAutreValeur); // 5
-
-// En utilisant Object.defineProperty
-var o = {};
-Object.defineProperty(o, 'valeur', {
-  set: function(val) {
-    this.uneAutreValeur = val;
-  }
-});
-o.valeur = 5;
-console.log(o.valeur); // undefined
-console.log(o.uneAutreValeur); // 5
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__defineSetter__', 'Object.prototype.__defineSetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.defineSetter")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.md b/files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.md new file mode 100644 index 0000000000..18aeb80b46 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/__definesetter__/index.md @@ -0,0 +1,112 @@ +--- +title: Object.prototype.__defineSetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__ +tags: + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__ +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineSetter +--- +
{{JSRef}}
+ +
+

Attention : Cette fonctionnalité est dépréciée et il est préférable d'utiliser l'API {{jsxref("Object.defineProperty()")}} et la syntaxe d'initialisation d'objets. Toutefois, __defineGetter__ est largement utilisée sur le Web et est implémentée. Il est donc peu probable que les navigateurs retirent cette méthode.

+
+ +

La méthode __defineSetter__ permet de lier une propriété d'un objet à une fonction qui sera exécutée pour toute tentative de définition/changement de cette propriété.

+ +

Syntaxe

+ +
obj.__defineSetter__(prop, fun)
+ +

Paramètres

+ +
+
prop
+
Une chaîne de caractères qui contient le nom de la propriété qu'on souhaite lier à la fonction.
+
fun
+
Une fonction à appeler pour chaque modification de la propriété. Cette fonction prend la forme suivante : +
function(val) { . . . }
+ +
+
val
+
Un alias pour la variable contenant la nouvelle valeur qu'on souhaite affecter à prop.
+
+
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Description

+ +

La méthode __defineSetter__ permet de définir un {{jsxref("Opérateurs/L_opérateur_set", "mutateur", "", 1)}} sur un objet pré-existant.

+ +

Exemples

+ +
// Méthode non-standard et dépréciée
+
+var o = {};
+o.__defineSetter__('valeur', function(val) { this.uneAutreValeur = val; });
+o.valeur = 5;
+console.log(o.valeur); // undefined
+console.log(o.uneAutreValeur); // 5
+
+
+// Façons standard
+
+// En utilisant l'opérateur set
+var o = { set valeur(val) { this.uneAutreValeur = val; } };
+o.valeur = 5;
+console.log(o.valeur); // undefined
+console.log(o.uneAutreValeur); // 5
+
+// En utilisant Object.defineProperty
+var o = {};
+Object.defineProperty(o, 'valeur', {
+  set: function(val) {
+    this.uneAutreValeur = val;
+  }
+});
+o.valeur = 5;
+console.log(o.valeur); // undefined
+console.log(o.uneAutreValeur); // 5
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__defineSetter__', 'Object.prototype.__defineSetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.defineSetter")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.html b/files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.html deleted file mode 100644 index a9f818ab42..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Object.prototype.__lookupGetter__() -slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__ -tags: - - Déprécié - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__ -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/lookupGetter ---- -
{{JSRef}} {{deprecated_header}}
- -

La méthode __lookupGetter__ renvoie la fonction liée comme accesseur d'une propriété donnée.

- -

Syntaxe

- -
obj.__lookupGetter__(sprop)
- -

Paramètres

- -
-
sprop
-
Une chaîne de caractères qui contient le nom de la propriété dont on souhaite obtenir l'accesseur (getter).
-
- -

Valeur de retour

- -

La fonction qui est l'accesseur lié à la propriété indiquée.

- -

Description

- -

Si un accesseur a été défini pour une propriété, il n'est pas possible d'obtenir la fonction utilisée en accédant à la propriété car on obtiendrait la valeur de retour de l'accesseur au lieu de l'accesseur lui-même. __lookupGetter__ permet de récupérer la valeur de la fonction pour l'accesseur.

- -

Cette méthode ne doit plus être utilisée et il est possible de la remplacer de façon standard en utilisant : {{jsxref("Object.getOwnPropertyDescriptor()")}} et {{jsxref("Object.getPrototypeOf()")}}.

- -

Exemples

- -
var obj = {
-  get toto() {
-    return Math.random() > 0.5 ? 'toto' : 'truc';
-  }
-};
-
-
-// Méthode non-standard et dépréciée
-obj.__lookupGetter__('toto');
-// (function() { return Math.random() > 0.5 ? 'toto' : 'truc'; })
-
-
-// Méthode standard
-Object.getOwnPropertyDescriptor(obj, "toto").get;
-// (function() { return Math.random() > 0.5 ? 'toto' : 'truc'; })
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__lookupGetter__', 'Object.prototype.__lookupGetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.lookupGetter")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.md b/files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.md new file mode 100644 index 0000000000..a9f818ab42 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/__lookupgetter__/index.md @@ -0,0 +1,88 @@ +--- +title: Object.prototype.__lookupGetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__ +tags: + - Déprécié + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__ +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/lookupGetter +--- +
{{JSRef}} {{deprecated_header}}
+ +

La méthode __lookupGetter__ renvoie la fonction liée comme accesseur d'une propriété donnée.

+ +

Syntaxe

+ +
obj.__lookupGetter__(sprop)
+ +

Paramètres

+ +
+
sprop
+
Une chaîne de caractères qui contient le nom de la propriété dont on souhaite obtenir l'accesseur (getter).
+
+ +

Valeur de retour

+ +

La fonction qui est l'accesseur lié à la propriété indiquée.

+ +

Description

+ +

Si un accesseur a été défini pour une propriété, il n'est pas possible d'obtenir la fonction utilisée en accédant à la propriété car on obtiendrait la valeur de retour de l'accesseur au lieu de l'accesseur lui-même. __lookupGetter__ permet de récupérer la valeur de la fonction pour l'accesseur.

+ +

Cette méthode ne doit plus être utilisée et il est possible de la remplacer de façon standard en utilisant : {{jsxref("Object.getOwnPropertyDescriptor()")}} et {{jsxref("Object.getPrototypeOf()")}}.

+ +

Exemples

+ +
var obj = {
+  get toto() {
+    return Math.random() > 0.5 ? 'toto' : 'truc';
+  }
+};
+
+
+// Méthode non-standard et dépréciée
+obj.__lookupGetter__('toto');
+// (function() { return Math.random() > 0.5 ? 'toto' : 'truc'; })
+
+
+// Méthode standard
+Object.getOwnPropertyDescriptor(obj, "toto").get;
+// (function() { return Math.random() > 0.5 ? 'toto' : 'truc'; })
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__lookupGetter__', 'Object.prototype.__lookupGetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.lookupGetter")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.html b/files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.html deleted file mode 100644 index 7cb7c1f88d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Object.prototype.__lookupSetter__() -slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__ -tags: - - Déprécié - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__ -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/lookupSetter ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode __lookupSetter__ renvoie la fonction définie comme mutateur pour une propriété donnée.

- -

Syntaxe

- -
obj.__lookupSetter__(sprop)
- -

Paramètres

- -
-
sprop
-
Une chaîne qui contient le nom de la propriété dont on souhaite obtenir le mutateur correspondant.
-
- -

Valeur de retour

- -

La fonction associée comme mutateur à la propriété indiquée.

- -

Description

- -

Si un mutateur a été défini pour une propriété, on ne peut pas l'obtenir en faisant référence à la propriété directement. __lookupSetter__ peut être utilisée pour obtenir une référence vers la fonction utilisée comme mutateur.

- -

Cette méthode ne doit plus être utilisée et peut être remplacée avec la méthodes standard {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -

Exemples

- -
var obj = {
-  set toto(valeur) {
-    this.truc = value;
-  }
-};
-
-
-// Méthode non-standard et dépréciée
-obj.__lookupSetter__('toto')
-// (function(valeur) { this.truc = valeur; })
-
-
-// Méthode standard
-Object.getOwnPropertyDescriptor(obj, "toto").set;
-// (function(valeur) { this.truc = valeur; })
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__lookupSetter__', 'Object.prototype.__lookupSetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.lookupSetter")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.md b/files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.md new file mode 100644 index 0000000000..7cb7c1f88d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/__lookupsetter__/index.md @@ -0,0 +1,88 @@ +--- +title: Object.prototype.__lookupSetter__() +slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__ +tags: + - Déprécié + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__ +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/lookupSetter +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode __lookupSetter__ renvoie la fonction définie comme mutateur pour une propriété donnée.

+ +

Syntaxe

+ +
obj.__lookupSetter__(sprop)
+ +

Paramètres

+ +
+
sprop
+
Une chaîne qui contient le nom de la propriété dont on souhaite obtenir le mutateur correspondant.
+
+ +

Valeur de retour

+ +

La fonction associée comme mutateur à la propriété indiquée.

+ +

Description

+ +

Si un mutateur a été défini pour une propriété, on ne peut pas l'obtenir en faisant référence à la propriété directement. __lookupSetter__ peut être utilisée pour obtenir une référence vers la fonction utilisée comme mutateur.

+ +

Cette méthode ne doit plus être utilisée et peut être remplacée avec la méthodes standard {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +

Exemples

+ +
var obj = {
+  set toto(valeur) {
+    this.truc = value;
+  }
+};
+
+
+// Méthode non-standard et dépréciée
+obj.__lookupSetter__('toto')
+// (function(valeur) { this.truc = valeur; })
+
+
+// Méthode standard
+Object.getOwnPropertyDescriptor(obj, "toto").set;
+// (function(valeur) { this.truc = valeur; })
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.prototype.__lookupSetter__', 'Object.prototype.__lookupSetter__()')}}{{Spec2('ESDraft')}}Incluse dans l'annexe normative pour les fonctionnalités historiques liées aux navigateurs web (la spécification codifie ce qui est déjà présent dans les différentes implémentations).
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.lookupSetter")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/assign/index.html b/files/fr/web/javascript/reference/global_objects/object/assign/index.html deleted file mode 100644 index ae556267bd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/assign/index.html +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: Object.assign() -slug: Web/JavaScript/Reference/Global_Objects/Object/assign -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Object - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Object/assign -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/assign ---- -
{{JSRef}}
- -

La méthode Object.assign() est utilisée afin de copier les valeurs de toutes les propriétés directes (non héritées) d'un objet qui sont énumérables sur un autre objet cible. Cette méthode renvoie l'objet cible.

- -
{{EmbedInteractiveExample("pages/js/object-assign.html")}}
- -

Syntaxe

- -
Object.assign(cible, ...sources)
- -

Paramètres

- -
-
cible
-
L'objet cible.
-
sources
-
Le(s) objet(s) source(s).
-
- -

Valeur de retour

- -

L'objet cible, éventuellement modifié, est renvoyé.

- -

Description

- -

La méthode Object.assign permet de ne copier que les propriétés énumérables et propres (les propriétés qui ne sont pas héritées) depuis un objet source vers un objet cible. Elle utilise [[Get]] sur l'objet source et [[Set]] sur l'objet cible, ainsi, elle déclenchera les accesseurs/mutateurs. De cette façon, elle affecte les propriétés plutôt que de juste les copier ou d'en définir de nouvelles. Aussi, il est déconseillé d'utiliser cette méthode si on souhaite uniquement fusionner de nouvelles propriétés dans un prototype si un des objets sources contient des accesseurs. Pour uniquement copier les définitions des propriétés (y compris leur énumérabilité) dans des prototypes, on utilisera plutôt {{jsxref("Object.getOwnPropertyDescriptor()")}} et {{jsxref("Object.defineProperty()")}}.

- -

Les propriétés {{jsxref("String")}} et {{jsxref("Symbol")}} sont copiées. Les propriétés de l'objet cible sont surchargées par celles de l'objet source si elles ont la même clé.

- -

En cas d'erreur, si une propriété n'est pas accessible en écriture par exemple, une exception {{jsxref("TypeError")}} sera levée mais l'objet cible aura été modifié avec les propriétés ajoutées avant l'erreur.

- -

Object.assign ne donnera pas d'erreur si on fournit les valeurs {{jsxref("null")}} ou {{jsxref("undefined")}} pour la valeur source.

- -

Exemples

- -

Cloner un objet

- -
var obj = { a: 1 };
-var copie = Object.assign({}, obj);
-console.log(copie); // {a: 1}
- -
-

Note : Attention, pour un clone réel (deep clone), il faudra utiliser d'autres méthodes car Object.assign() ne copie que les valeurs des propriétés depuis l'objet source, il ne recopie pas intégralement une nouvelle propriété. Si la valeur est une référence à un objet, il copiera uniquement la référence.

-
- -

Fusionner des objets

- -
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 }, l'objet cible est aussi modifié
-
- -

Fusionner des objets partageant des propriétés

- -
var o1 = { a: 1, b: 1, c: 1 };
-var o2 = { b: 2, c: 2 };
-var o3 = { c: 3 };
-
-var obj = Object.assign({}, o1, o2, o3);
-console.log(obj); // { a: 1, b: 2, c: 3 }
-
- -

Les propriétés communes sont surchargées selon l'ordre des paramètres.

- -

Copier des propriétés symboliques

- -
var o1 = { a: 1 };
-var o2 = { [Symbol('toto')]: 2 };
-
-var obj = Object.assign({}, o1, o2);
-console.log(obj); // { a: 1, [Symbol("toto")]: 2 }
-// Attention : dans Firefox le symbole n'est pas affiché
-// en raison du bug 1207182
-console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(toto)]
-
- -

Les propriétés héritées et les propriétés non-énumérables ne peuvent être copiées

- -
var obj = Object.create({ toto: 1 }, { // toto est héritée
-  truc: {
-    value: 2  // truc est non-enumerable (par défaut)
-  },
-  bidule: {
-    value: 3,
-    enumerable: true  // bidule est une propriété propre et énumérable
-  }
-});
-
-var copie = Object.assign({}, obj);
-console.log(copie); // { bidule: 3 }
-
- -

Les types primitifs seront passés en objets

- -
var v1 = 'abc';
-var v2 = true;
-var v3 = 10;
-var v4 = Symbol('toto')
-
-var obj = Object.assign({}, v1, null, v2, undefined, v3, v4);
-// Les valeurs primitives seront converties, null et undefined seront ignorés.
-// Note : seules les chaînes peuvent avoir des propriétés énumérables.
-console.log(obj); // { "0": "a", "1": "b", "2": "c" }
-
- -

Les exceptions interrompent la copie

- -
var target = Object.defineProperty({}, 'toto', {
-  value: 1,
-  writable: false
-}); // target.toto est en lecture seule
-
-Object.assign(target, { truc: 2 }, { toto2: 3, toto: 3, toto3: 3 }, { bidule: 4 });
-// TypeError: "toto" est en lecture seule
-// L'exception est levée lorsqu'on affecte target.toto
-
-console.log(target.truc);  // 2, le premier objet source est bien copié
-console.log(target.toto2); // 3, la première propriété du deuxième objet source est bien copiée
-console.log(target.toto);  // 1, on a une exception ici
-console.log(target.toto3); // undefined, assign est terminé toto3 ne sera pas copié
-console.log(target.bidule);// undefined, le troisième objet source ne sera pas copié non plus.
-
- -

Copier des accesseurs

- -
var obj = {
-  toto: 1,
-  get truc() {
-    return 2;
-  }
-};
-
-var copie = Object.assign({}, obj);
-console.log(copie);
-// { toto: 1, truc: 2 }, la valeur de copie.truc
-// est la valeur renvoyée par l'accesseur d'obj.truc.
-
-// Voici une fonction qui copie les descripteurs
-// dans leur intégralité
-function completeAssign(target, ...sources) {
-  sources.forEach(source => {
-    let descriptors = Object.keys(source).reduce((descriptors, key) => {
-      descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
-      return descriptors;
-    }, {});
-    // Par défaut, Object.assign copie également
-    // les symboles énumérables
-    Object.getOwnPropertySymbols(source).forEach(sym => {
-      let descriptor = Object.getOwnPropertyDescriptor(source, sym);
-      if (descriptor.enumerable) {
-        descriptors[sym] = descriptor;
-      }
-    });
-    Object.defineProperties(target, descriptors);
-  });
-  return target;
-}
-
-var copie = completeAssign({}, obj);
-console.log(copie);
-// { toto:1, get truc() { return 2 } }
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.assign', 'Object.assign')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-object.assign', 'Object.assign')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.assign")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/assign/index.md b/files/fr/web/javascript/reference/global_objects/object/assign/index.md new file mode 100644 index 0000000000..ae556267bd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/assign/index.md @@ -0,0 +1,214 @@ +--- +title: Object.assign() +slug: Web/JavaScript/Reference/Global_Objects/Object/assign +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Object + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Object/assign +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/assign +--- +
{{JSRef}}
+ +

La méthode Object.assign() est utilisée afin de copier les valeurs de toutes les propriétés directes (non héritées) d'un objet qui sont énumérables sur un autre objet cible. Cette méthode renvoie l'objet cible.

+ +
{{EmbedInteractiveExample("pages/js/object-assign.html")}}
+ +

Syntaxe

+ +
Object.assign(cible, ...sources)
+ +

Paramètres

+ +
+
cible
+
L'objet cible.
+
sources
+
Le(s) objet(s) source(s).
+
+ +

Valeur de retour

+ +

L'objet cible, éventuellement modifié, est renvoyé.

+ +

Description

+ +

La méthode Object.assign permet de ne copier que les propriétés énumérables et propres (les propriétés qui ne sont pas héritées) depuis un objet source vers un objet cible. Elle utilise [[Get]] sur l'objet source et [[Set]] sur l'objet cible, ainsi, elle déclenchera les accesseurs/mutateurs. De cette façon, elle affecte les propriétés plutôt que de juste les copier ou d'en définir de nouvelles. Aussi, il est déconseillé d'utiliser cette méthode si on souhaite uniquement fusionner de nouvelles propriétés dans un prototype si un des objets sources contient des accesseurs. Pour uniquement copier les définitions des propriétés (y compris leur énumérabilité) dans des prototypes, on utilisera plutôt {{jsxref("Object.getOwnPropertyDescriptor()")}} et {{jsxref("Object.defineProperty()")}}.

+ +

Les propriétés {{jsxref("String")}} et {{jsxref("Symbol")}} sont copiées. Les propriétés de l'objet cible sont surchargées par celles de l'objet source si elles ont la même clé.

+ +

En cas d'erreur, si une propriété n'est pas accessible en écriture par exemple, une exception {{jsxref("TypeError")}} sera levée mais l'objet cible aura été modifié avec les propriétés ajoutées avant l'erreur.

+ +

Object.assign ne donnera pas d'erreur si on fournit les valeurs {{jsxref("null")}} ou {{jsxref("undefined")}} pour la valeur source.

+ +

Exemples

+ +

Cloner un objet

+ +
var obj = { a: 1 };
+var copie = Object.assign({}, obj);
+console.log(copie); // {a: 1}
+ +
+

Note : Attention, pour un clone réel (deep clone), il faudra utiliser d'autres méthodes car Object.assign() ne copie que les valeurs des propriétés depuis l'objet source, il ne recopie pas intégralement une nouvelle propriété. Si la valeur est une référence à un objet, il copiera uniquement la référence.

+
+ +

Fusionner des objets

+ +
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 }, l'objet cible est aussi modifié
+
+ +

Fusionner des objets partageant des propriétés

+ +
var o1 = { a: 1, b: 1, c: 1 };
+var o2 = { b: 2, c: 2 };
+var o3 = { c: 3 };
+
+var obj = Object.assign({}, o1, o2, o3);
+console.log(obj); // { a: 1, b: 2, c: 3 }
+
+ +

Les propriétés communes sont surchargées selon l'ordre des paramètres.

+ +

Copier des propriétés symboliques

+ +
var o1 = { a: 1 };
+var o2 = { [Symbol('toto')]: 2 };
+
+var obj = Object.assign({}, o1, o2);
+console.log(obj); // { a: 1, [Symbol("toto")]: 2 }
+// Attention : dans Firefox le symbole n'est pas affiché
+// en raison du bug 1207182
+console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(toto)]
+
+ +

Les propriétés héritées et les propriétés non-énumérables ne peuvent être copiées

+ +
var obj = Object.create({ toto: 1 }, { // toto est héritée
+  truc: {
+    value: 2  // truc est non-enumerable (par défaut)
+  },
+  bidule: {
+    value: 3,
+    enumerable: true  // bidule est une propriété propre et énumérable
+  }
+});
+
+var copie = Object.assign({}, obj);
+console.log(copie); // { bidule: 3 }
+
+ +

Les types primitifs seront passés en objets

+ +
var v1 = 'abc';
+var v2 = true;
+var v3 = 10;
+var v4 = Symbol('toto')
+
+var obj = Object.assign({}, v1, null, v2, undefined, v3, v4);
+// Les valeurs primitives seront converties, null et undefined seront ignorés.
+// Note : seules les chaînes peuvent avoir des propriétés énumérables.
+console.log(obj); // { "0": "a", "1": "b", "2": "c" }
+
+ +

Les exceptions interrompent la copie

+ +
var target = Object.defineProperty({}, 'toto', {
+  value: 1,
+  writable: false
+}); // target.toto est en lecture seule
+
+Object.assign(target, { truc: 2 }, { toto2: 3, toto: 3, toto3: 3 }, { bidule: 4 });
+// TypeError: "toto" est en lecture seule
+// L'exception est levée lorsqu'on affecte target.toto
+
+console.log(target.truc);  // 2, le premier objet source est bien copié
+console.log(target.toto2); // 3, la première propriété du deuxième objet source est bien copiée
+console.log(target.toto);  // 1, on a une exception ici
+console.log(target.toto3); // undefined, assign est terminé toto3 ne sera pas copié
+console.log(target.bidule);// undefined, le troisième objet source ne sera pas copié non plus.
+
+ +

Copier des accesseurs

+ +
var obj = {
+  toto: 1,
+  get truc() {
+    return 2;
+  }
+};
+
+var copie = Object.assign({}, obj);
+console.log(copie);
+// { toto: 1, truc: 2 }, la valeur de copie.truc
+// est la valeur renvoyée par l'accesseur d'obj.truc.
+
+// Voici une fonction qui copie les descripteurs
+// dans leur intégralité
+function completeAssign(target, ...sources) {
+  sources.forEach(source => {
+    let descriptors = Object.keys(source).reduce((descriptors, key) => {
+      descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
+      return descriptors;
+    }, {});
+    // Par défaut, Object.assign copie également
+    // les symboles énumérables
+    Object.getOwnPropertySymbols(source).forEach(sym => {
+      let descriptor = Object.getOwnPropertyDescriptor(source, sym);
+      if (descriptor.enumerable) {
+        descriptors[sym] = descriptor;
+      }
+    });
+    Object.defineProperties(target, descriptors);
+  });
+  return target;
+}
+
+var copie = completeAssign({}, obj);
+console.log(copie);
+// { toto:1, get truc() { return 2 } }
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.assign', 'Object.assign')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-object.assign', 'Object.assign')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.assign")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/constructor/index.html b/files/fr/web/javascript/reference/global_objects/object/constructor/index.html deleted file mode 100644 index 956a508206..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/constructor/index.html +++ /dev/null @@ -1,230 +0,0 @@ ---- -title: Object.prototype.constructor -slug: Web/JavaScript/Reference/Global_Objects/Object/constructor -tags: - - JavaScript - - Object - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/constructor ---- -
{{JSRef}}
- -

La propriété constructor renvoie une référence à la fonction {{jsxref("Object")}} qui a créé le prototype de l'instance. La valeur de cette propriété est une référence à la fonction elle-même, ce n'est pas une chaîne de caractères représentant le nom de la fonction. Cette valeur est en lecture seule pour les valeurs de types primitifs comme 1true et "test".

- -

Description

- -

Tous les objets héritent d'une propriété constructor de leur prototype (à l'exception de ceux créés avec Object.create(null)). Les objets créés sans constructeur (c'est-à-dire avec des littéraux) auront le constructeur correspondant au type du littéral :

- -
var o = {};
-o.constructor === Object; // true
-
-var a = [];
-a.constructor === Array; // true
-
-var n = new Number(3)
-n.constructor === Number; // true
- -

Exemples

- -

Afficher le constructeur d'un objet

- -

L'exemple ci-dessous crée un constructeur Arbre, et un objet de ce type, monArbre. Le script affiche ensuite la propriété constructor de l'objet monArbre :

- -
function Arbre(nom) {
-   this.nom = nom;
-}
-
-var monArbre = new Arbre("Sequoia");
-console.log( "monArbre.constructor vaut " + monArbre.constructor );
- -

Cet exemple produira le résultat suivant :

- -
monArbre.constructor vaut function Arbre(nom) {
-    this.nom = nom;
-}
- -

Modifier le constructeur d'un objet

- -

Dans l'exemple suivant, on illustre comment modifier la valeur d'un constructeur pour les objets génériques. Dans l'exemple suivant, seules les valeurs true, 1 et "test" ne seront pas affectées car leurs constructeurs sont en lecture seule uniquement. Cet exemple montre qu'il ne faut pas se reposer de façon aveugle sur la propriété constructor d'un objet.

- -
function Type () {}
-
-var types = [
-  new Array(),
-  [],
-  new Boolean(),
-  true,             // restera tel quel
-  new Date(),
-  new Error(),
-  new Function(),
-  function () {},
-  Math,
-  new Number(),
-  1,                // restera tel quel
-  new Object(),
-  {},
-  new RegExp(),
-  /(?:)/,
-  new String(),
-  'test'            // restera tel quel
-];
-
-for (var i = 0; i < types.length; i++) {
-  types[i].constructor = Type;
-  types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
-}
-
-console.log(types.join('\n'));
-
- -

L'exemple produira le résultat suivant :

- -
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,test
-
- -

Modifier le constructeur d'une fonction

- -

La plupart du temps, cette  propriété est utilisée afin de définir une fonction en tant que constructeur, c'est-à-dire qu'on l'appellera avec new et en « attachant » la chaîne de prototypes.

- -
function Parent() {}
-Parent.prototype.parentMethod = function parentMethod() {};
-
-function Child() {}
-// on redefinit le prototype de child afin qu'il pointe vers celui de Parent
-Child.prototype = Object.create(Parent.prototype);
-
-Child.prototype.constructor = Child; // on renvoie le constructeur original Child
- -

Pourquoi faut-il écrire cette dernière ligne ? Eh bien, ça dépend.

- -

Essayons de définir les cas où il est nécessaire de réaffecter le constructeur original et les cas où c'est superflu.

- -

Imaginons que l'objet possède une méthode create() qui lui permette de créer un autre exemplaire :

- -
function Parent() {};
-function CreatedConstructor() {}
-
-CreatedConstructor.prototype = Object.create(Parent.prototype);
-
-CreatedConstructor.prototype.create = function create() {
-  return new this.constructor();
-}
-
-new CreatedConstructor().create().create();
-// error undefined is not a function car constructor === Parent
- -

Dans l'exemple précédent, on a une exception car le constructeur pointe vers Parent.

- -

Pour éviter cet écueil, il suffit d'affecter le bon constructeur (celui qui sera utilisé ensuite) :

- -
function Parent() {};
-function CreatedConstructor() {}
-
-CreatedConstructor.prototype = Object.create(Parent.prototype);
-// On réaffecte le bon constructeur afin de l'utiliser plus loin
-CreatedConstructor.prototype.constructor = CreatedConstructor;
-
-CreatedConstructor.prototype.create = function create() {
-  return new this.constructor();
-}
-
-new CreatedConstructor().create().create();
-// pas d'exception cette fois-ci
- -

Prenons un autre exemple :

- -
function ParentWithStatic() {}
-
-ParentWithStatic.startPosition = { x: 0, y:0 };
-ParentWithStatic.getStartPosition = function getStartPosition() {
-  return this.startPosition;
-}
-
-function Child(x, y) {
-  this.position = {
-    x: x,
-    y: y
-  };
-}
-
-Child.prototype = Object.create(ParentWithStatic.prototype);
-Child.prototype.constructor = Child;
-
-Child.prototype.getOffsetByInitialPosition = function getOffsetByInitialPosition() {
-  var position = this.position;
-  var startPosition = this.constructor.getStartPosition(); // error undefined is not a function, since the constructor is Child
-
-  return {
-    offsetX: startPosition.x - position.x,
-    offsetY: startPosition.y - position.y
-  }
-};
- -

Ici, il faudra conserverr le constructeur parent si on veut que le code fonctionne correctement.

- -

En résumé, lorsqu'on paramètre manuellement le constructeur, on peut obtenir des résultats sources de confusion. La plupart du temps, la propriété constructor n'est pas utilisée et la réaffecter n'est pas nécessaire.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.2.4.1', 'Object.prototype.constructor')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.constructor")}}

diff --git a/files/fr/web/javascript/reference/global_objects/object/constructor/index.md b/files/fr/web/javascript/reference/global_objects/object/constructor/index.md new file mode 100644 index 0000000000..956a508206 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/constructor/index.md @@ -0,0 +1,230 @@ +--- +title: Object.prototype.constructor +slug: Web/JavaScript/Reference/Global_Objects/Object/constructor +tags: + - JavaScript + - Object + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/constructor +--- +
{{JSRef}}
+ +

La propriété constructor renvoie une référence à la fonction {{jsxref("Object")}} qui a créé le prototype de l'instance. La valeur de cette propriété est une référence à la fonction elle-même, ce n'est pas une chaîne de caractères représentant le nom de la fonction. Cette valeur est en lecture seule pour les valeurs de types primitifs comme 1true et "test".

+ +

Description

+ +

Tous les objets héritent d'une propriété constructor de leur prototype (à l'exception de ceux créés avec Object.create(null)). Les objets créés sans constructeur (c'est-à-dire avec des littéraux) auront le constructeur correspondant au type du littéral :

+ +
var o = {};
+o.constructor === Object; // true
+
+var a = [];
+a.constructor === Array; // true
+
+var n = new Number(3)
+n.constructor === Number; // true
+ +

Exemples

+ +

Afficher le constructeur d'un objet

+ +

L'exemple ci-dessous crée un constructeur Arbre, et un objet de ce type, monArbre. Le script affiche ensuite la propriété constructor de l'objet monArbre :

+ +
function Arbre(nom) {
+   this.nom = nom;
+}
+
+var monArbre = new Arbre("Sequoia");
+console.log( "monArbre.constructor vaut " + monArbre.constructor );
+ +

Cet exemple produira le résultat suivant :

+ +
monArbre.constructor vaut function Arbre(nom) {
+    this.nom = nom;
+}
+ +

Modifier le constructeur d'un objet

+ +

Dans l'exemple suivant, on illustre comment modifier la valeur d'un constructeur pour les objets génériques. Dans l'exemple suivant, seules les valeurs true, 1 et "test" ne seront pas affectées car leurs constructeurs sont en lecture seule uniquement. Cet exemple montre qu'il ne faut pas se reposer de façon aveugle sur la propriété constructor d'un objet.

+ +
function Type () {}
+
+var types = [
+  new Array(),
+  [],
+  new Boolean(),
+  true,             // restera tel quel
+  new Date(),
+  new Error(),
+  new Function(),
+  function () {},
+  Math,
+  new Number(),
+  1,                // restera tel quel
+  new Object(),
+  {},
+  new RegExp(),
+  /(?:)/,
+  new String(),
+  'test'            // restera tel quel
+];
+
+for (var i = 0; i < types.length; i++) {
+  types[i].constructor = Type;
+  types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
+}
+
+console.log(types.join('\n'));
+
+ +

L'exemple produira le résultat suivant :

+ +
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,test
+
+ +

Modifier le constructeur d'une fonction

+ +

La plupart du temps, cette  propriété est utilisée afin de définir une fonction en tant que constructeur, c'est-à-dire qu'on l'appellera avec new et en « attachant » la chaîne de prototypes.

+ +
function Parent() {}
+Parent.prototype.parentMethod = function parentMethod() {};
+
+function Child() {}
+// on redefinit le prototype de child afin qu'il pointe vers celui de Parent
+Child.prototype = Object.create(Parent.prototype);
+
+Child.prototype.constructor = Child; // on renvoie le constructeur original Child
+ +

Pourquoi faut-il écrire cette dernière ligne ? Eh bien, ça dépend.

+ +

Essayons de définir les cas où il est nécessaire de réaffecter le constructeur original et les cas où c'est superflu.

+ +

Imaginons que l'objet possède une méthode create() qui lui permette de créer un autre exemplaire :

+ +
function Parent() {};
+function CreatedConstructor() {}
+
+CreatedConstructor.prototype = Object.create(Parent.prototype);
+
+CreatedConstructor.prototype.create = function create() {
+  return new this.constructor();
+}
+
+new CreatedConstructor().create().create();
+// error undefined is not a function car constructor === Parent
+ +

Dans l'exemple précédent, on a une exception car le constructeur pointe vers Parent.

+ +

Pour éviter cet écueil, il suffit d'affecter le bon constructeur (celui qui sera utilisé ensuite) :

+ +
function Parent() {};
+function CreatedConstructor() {}
+
+CreatedConstructor.prototype = Object.create(Parent.prototype);
+// On réaffecte le bon constructeur afin de l'utiliser plus loin
+CreatedConstructor.prototype.constructor = CreatedConstructor;
+
+CreatedConstructor.prototype.create = function create() {
+  return new this.constructor();
+}
+
+new CreatedConstructor().create().create();
+// pas d'exception cette fois-ci
+ +

Prenons un autre exemple :

+ +
function ParentWithStatic() {}
+
+ParentWithStatic.startPosition = { x: 0, y:0 };
+ParentWithStatic.getStartPosition = function getStartPosition() {
+  return this.startPosition;
+}
+
+function Child(x, y) {
+  this.position = {
+    x: x,
+    y: y
+  };
+}
+
+Child.prototype = Object.create(ParentWithStatic.prototype);
+Child.prototype.constructor = Child;
+
+Child.prototype.getOffsetByInitialPosition = function getOffsetByInitialPosition() {
+  var position = this.position;
+  var startPosition = this.constructor.getStartPosition(); // error undefined is not a function, since the constructor is Child
+
+  return {
+    offsetX: startPosition.x - position.x,
+    offsetY: startPosition.y - position.y
+  }
+};
+ +

Ici, il faudra conserverr le constructeur parent si on veut que le code fonctionne correctement.

+ +

En résumé, lorsqu'on paramètre manuellement le constructeur, on peut obtenir des résultats sources de confusion. La plupart du temps, la propriété constructor n'est pas utilisée et la réaffecter n'est pas nécessaire.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.2.4.1', 'Object.prototype.constructor')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.constructor")}}

diff --git a/files/fr/web/javascript/reference/global_objects/object/create/index.html b/files/fr/web/javascript/reference/global_objects/object/create/index.html deleted file mode 100644 index 016638fa7f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/create/index.html +++ /dev/null @@ -1,215 +0,0 @@ ---- -title: Object.create() -slug: Web/JavaScript/Reference/Global_Objects/Object/create -tags: - - ECMAScript 5 - - JavaScript - - Méthode - - Object - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Object/create -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/create ---- -
{{JSRef}}
- -

La méthode Object.create() crée un nouvel objet avec un prototype donné et des propriétés données.

- -
{{EmbedInteractiveExample("pages/js/object-create.html")}}
- -

Syntaxe

- -
Object.create(proto)
-Object.create(proto, objetPropriétés)
- -

Paramètres

- -
-
proto
-
L'objet qui sera le prototype du nouvel objet créé.
-
objetPropriétés
-
Paramètre optionnel. S'il est fourni et qu'il ne vaut pas {{jsxref("undefined")}}, il sera utilisé comme un objet dont les propriétés propres (celles qui ne sont pas héritées par la chaîne de prototypes) et énumérables définiront des descripteurs pour les propriétés à ajouter au nouvel objet, avec les mêmes noms. Ces propriétés correspondent au deuxième argument de {{jsxref("Object.defineProperties()")}}.
-
- -

Valeur de retour

- -

Un nouvel objet qui dispose du prototype et des propriétés indiquées.

- -

Exceptions

- -

Cette méthode lève une exception {{jsxref("TypeError")}} si le paramètre objetPropriétés vaut {{jsxref("null")}} ou s'il ne décrit pas des propriétés d'un objet.

- -

Exemples

- -

L'héritage classique avec Object.create()

- -

Dans l'exemple ci-dessous, on utilise Object.create() afin de réaliser un héritage de classe. Ce modèle ne supporte que l'héritage unique (un objet hérite directement uniquement d'un autre objet) car JavaScript ne gère pas l'héritage multiple.

- -
// Forme, la classe parente
-function Forme() {
-  this.x = 0;
-  this.y = 0;
-}
-
-// Méthode de la classe parente
-Forme.prototype.déplacer = function(x, y) {
-  this.x += x;
-  this.y += y;
-  console.info('Forme déplacée.');
-};
-
-// Rectangle - classe fille
-function Rectangle() {
-  // on appelle le constructeur parent
-  Forme.call(this);
-}
-
-// La classe fille surcharge la classe parente
-Rectangle.prototype = Object.create(Forme.prototype);
-
-// Si on ne définit pas le constructeur avec Rectangle, il récupèrera le constructeur
-// Forme (le parent).
-Rectangle.prototype.constructor = Rectangle;
-
-var rect = new Rectangle();
-
-console.log('instance de Rectangle ? ', (rect instanceof Rectangle));
-// true
-console.log('une instance de Forme ? ', (rect instanceof Forme));
- // true
-rect.déplacer(1, 1);
-// Affiche 'Forme déplacée.'
-
- -

Si on souhaite hériter de plusieurs objets, on peut utiliser des mixins.

- -
function MaClasse() {
-  ClasseParente1.call(this);
-  ClasseParente2.call(this);
-}
-
-MaClasse.prototype = Object.create(ClasseParente1.prototype); // héritage d'une classe
-Object.assign(MaClasse.prototype, ClasseParente2.prototype); // mixin pour une autre
-MaClasse.prototype.constructor = MaClasse; // On réaffecte le constructeur
-
-MaClasse.prototype.maMéthode = function() {
-  // faire quelque chose
-};
-
- -

Ici, la méthode {{jsxref("Object.assign()")}} copie les propriétés du prototype de la classe parente (ClassParente2) sur le prototype de la classe fille (MaClasse), les rendant disponibles pour toutes les instances de MaClasse. Object.assign() a été introduit avec ES2015 et une prothèse d'émulation (polyfill) est disponible. Si le support des navigateurs plus anciens est nécessaire, les méthodes jQuery.extend() ou _.assign() (Lodash) peuvent être utilisées.

- -

Utiliser l'argument objetPropriétés avec Object.create()

- -
var o;
-
-// on crée un objet avec null
-// comme prototype
-o = Object.create(null);
-
-
-o = {};
-// est équivalent à :
-o = Object.create(Object.prototype);
-
-
-// Exemple où on crée un objet avec quelques propriétés
-// (On voit ici que le second paramètres fait correspondre les clés
-// avec des descripteurs de propriétés.)
-o = Object.create(Object.prototype, {
-  // toto est une propriété de donnée
-  toto: { writable: true, configurable: true, value: 'hello' },
-  // truc est une propriété d'accesseur/mutateur
-  truc: {
-    configurable: false,
-    get: function() { return 10; },
-    set: function(value) { console.log('Définir `o.truc` à', value); }
-/* avec les accesseurs ES2015 on aura :
-    get() { return 10; },
-    set(value) { console.log('Définir `o.truc` à', value); } */
-  }
-});
-
-
-function Constructeur() {}
-o = new Constructeur();
-// est équivalent à :
-o = Object.create(Constructeur.prototype);
-// Bien entendu, si la fonction Constructeur
-// possède des instructions pour l'initialisation,
-// Object.create() ne pourra pas le reproduire
-
-
-// on crée un nouvel objet dont le prototype est
-// un nouvel objet vide et on y ajoute une propriété
-// 'p' qui vaut 42
-o = Object.create({}, { p: { value: 42 } });
-
-// par défaut, les propriétés ne sont PAS
-// écrivables, énumérables ou configurables
-o.p = 24;
-o.p;
-// 42
-
-o.q = 12;
-for (var prop in o) {
-  console.log(prop);
-}
-// 'q'
-
-delete o.p;
-// false
-
-// Pour définir une propriété selon ES3
-o2 = Object.create({}, {
-  p: {
-    value: 42,
-    writable: true,
-    enumerable: true,
-    configurable: true
-  }
-});
-
-// Équivalent à
-// o2 = Object.create({p: 42});
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.5', 'Object.create')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES2015', '#sec-object.create', 'Object.create')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-object.create', 'Object.create')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.create")}}

- -

Voir aussi

- - \ No newline at end of file diff --git a/files/fr/web/javascript/reference/global_objects/object/create/index.md b/files/fr/web/javascript/reference/global_objects/object/create/index.md new file mode 100644 index 0000000000..016638fa7f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/create/index.md @@ -0,0 +1,215 @@ +--- +title: Object.create() +slug: Web/JavaScript/Reference/Global_Objects/Object/create +tags: + - ECMAScript 5 + - JavaScript + - Méthode + - Object + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Object/create +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/create +--- +
{{JSRef}}
+ +

La méthode Object.create() crée un nouvel objet avec un prototype donné et des propriétés données.

+ +
{{EmbedInteractiveExample("pages/js/object-create.html")}}
+ +

Syntaxe

+ +
Object.create(proto)
+Object.create(proto, objetPropriétés)
+ +

Paramètres

+ +
+
proto
+
L'objet qui sera le prototype du nouvel objet créé.
+
objetPropriétés
+
Paramètre optionnel. S'il est fourni et qu'il ne vaut pas {{jsxref("undefined")}}, il sera utilisé comme un objet dont les propriétés propres (celles qui ne sont pas héritées par la chaîne de prototypes) et énumérables définiront des descripteurs pour les propriétés à ajouter au nouvel objet, avec les mêmes noms. Ces propriétés correspondent au deuxième argument de {{jsxref("Object.defineProperties()")}}.
+
+ +

Valeur de retour

+ +

Un nouvel objet qui dispose du prototype et des propriétés indiquées.

+ +

Exceptions

+ +

Cette méthode lève une exception {{jsxref("TypeError")}} si le paramètre objetPropriétés vaut {{jsxref("null")}} ou s'il ne décrit pas des propriétés d'un objet.

+ +

Exemples

+ +

L'héritage classique avec Object.create()

+ +

Dans l'exemple ci-dessous, on utilise Object.create() afin de réaliser un héritage de classe. Ce modèle ne supporte que l'héritage unique (un objet hérite directement uniquement d'un autre objet) car JavaScript ne gère pas l'héritage multiple.

+ +
// Forme, la classe parente
+function Forme() {
+  this.x = 0;
+  this.y = 0;
+}
+
+// Méthode de la classe parente
+Forme.prototype.déplacer = function(x, y) {
+  this.x += x;
+  this.y += y;
+  console.info('Forme déplacée.');
+};
+
+// Rectangle - classe fille
+function Rectangle() {
+  // on appelle le constructeur parent
+  Forme.call(this);
+}
+
+// La classe fille surcharge la classe parente
+Rectangle.prototype = Object.create(Forme.prototype);
+
+// Si on ne définit pas le constructeur avec Rectangle, il récupèrera le constructeur
+// Forme (le parent).
+Rectangle.prototype.constructor = Rectangle;
+
+var rect = new Rectangle();
+
+console.log('instance de Rectangle ? ', (rect instanceof Rectangle));
+// true
+console.log('une instance de Forme ? ', (rect instanceof Forme));
+ // true
+rect.déplacer(1, 1);
+// Affiche 'Forme déplacée.'
+
+ +

Si on souhaite hériter de plusieurs objets, on peut utiliser des mixins.

+ +
function MaClasse() {
+  ClasseParente1.call(this);
+  ClasseParente2.call(this);
+}
+
+MaClasse.prototype = Object.create(ClasseParente1.prototype); // héritage d'une classe
+Object.assign(MaClasse.prototype, ClasseParente2.prototype); // mixin pour une autre
+MaClasse.prototype.constructor = MaClasse; // On réaffecte le constructeur
+
+MaClasse.prototype.maMéthode = function() {
+  // faire quelque chose
+};
+
+ +

Ici, la méthode {{jsxref("Object.assign()")}} copie les propriétés du prototype de la classe parente (ClassParente2) sur le prototype de la classe fille (MaClasse), les rendant disponibles pour toutes les instances de MaClasse. Object.assign() a été introduit avec ES2015 et une prothèse d'émulation (polyfill) est disponible. Si le support des navigateurs plus anciens est nécessaire, les méthodes jQuery.extend() ou _.assign() (Lodash) peuvent être utilisées.

+ +

Utiliser l'argument objetPropriétés avec Object.create()

+ +
var o;
+
+// on crée un objet avec null
+// comme prototype
+o = Object.create(null);
+
+
+o = {};
+// est équivalent à :
+o = Object.create(Object.prototype);
+
+
+// Exemple où on crée un objet avec quelques propriétés
+// (On voit ici que le second paramètres fait correspondre les clés
+// avec des descripteurs de propriétés.)
+o = Object.create(Object.prototype, {
+  // toto est une propriété de donnée
+  toto: { writable: true, configurable: true, value: 'hello' },
+  // truc est une propriété d'accesseur/mutateur
+  truc: {
+    configurable: false,
+    get: function() { return 10; },
+    set: function(value) { console.log('Définir `o.truc` à', value); }
+/* avec les accesseurs ES2015 on aura :
+    get() { return 10; },
+    set(value) { console.log('Définir `o.truc` à', value); } */
+  }
+});
+
+
+function Constructeur() {}
+o = new Constructeur();
+// est équivalent à :
+o = Object.create(Constructeur.prototype);
+// Bien entendu, si la fonction Constructeur
+// possède des instructions pour l'initialisation,
+// Object.create() ne pourra pas le reproduire
+
+
+// on crée un nouvel objet dont le prototype est
+// un nouvel objet vide et on y ajoute une propriété
+// 'p' qui vaut 42
+o = Object.create({}, { p: { value: 42 } });
+
+// par défaut, les propriétés ne sont PAS
+// écrivables, énumérables ou configurables
+o.p = 24;
+o.p;
+// 42
+
+o.q = 12;
+for (var prop in o) {
+  console.log(prop);
+}
+// 'q'
+
+delete o.p;
+// false
+
+// Pour définir une propriété selon ES3
+o2 = Object.create({}, {
+  p: {
+    value: 42,
+    writable: true,
+    enumerable: true,
+    configurable: true
+  }
+});
+
+// Équivalent à
+// o2 = Object.create({p: 42});
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.5', 'Object.create')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES2015', '#sec-object.create', 'Object.create')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-object.create', 'Object.create')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.create")}}

+ +

Voir aussi

+ + \ No newline at end of file diff --git a/files/fr/web/javascript/reference/global_objects/object/defineproperties/index.html b/files/fr/web/javascript/reference/global_objects/object/defineproperties/index.html deleted file mode 100644 index ff3d03ff4a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/defineproperties/index.html +++ /dev/null @@ -1,195 +0,0 @@ ---- -title: Object.defineProperties() -slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperties -tags: - - ECMAScript 5 - - JavaScript - - Méthode - - Object - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperties -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineProperties ---- -
{{JSRef}}
- -

La méthode Object.defineProperties() permet de définir ou de modifier les propriétés d'un objet directement sur celui-ci. La valeur renvoyée est l'objet modifié.

- -
{{EmbedInteractiveExample("pages/js/object-defineproperties.html")}}
- -

Syntaxe

- -
Object.defineProperties(obj, props)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite modifier ou définir certaines propriétés.
-
props
-
Un objet dont les propriétés propres et énumérables sont des descripteurs de propriétés pour les propriétés à définir ou à modifier. Les descripteurs de propriétés peuvent avoir deux formes (voir {{jsxref("Object.defineProperty()")}} pour plus d'informations) : un descripteur de donnée ou un descripteur d'accesseur. Les descripteurs de donnée et d'accesseur peuvent avoir les clés suivantes : -
-
configurable
-
true si et seulement si le type de ce descripteur peut être modifié et si la propriété peut être supprimée de l'objet.
- Par défaut : false.
-
enumerable
-
true si et seulement si la propriété doit être listée lors des énumérations de propriétés de l'objet (quand on liste les propriétés pour une boucle par exemple).
- Par défaut : false.
-
- -

Un descripteur de donnée pourra avoir les clés suivantes :

- -
-
value
-
La valeur associée à la propriété. Cela peut être n'importe quelle valeur valide en JavaScript (un nombre, un objet, etc.).
- Par défaut : {{jsxref("undefined")}}.
-
writable
-
true si et seulement si la valeur associée à la propriété peut être modifiée par un {{jsxref("Opérateurs/Opérateurs_d_affectation", "opérateur d'affectation", "", 1)}}.
- Par défaut : false.
-
- -

Un descripteur d'accesseur pourra avoir les clés suivantes :

- -
-
get
-
Une fonction utilisée comme accesseur pour la propriété ou {{jsxref("undefined")}} s'il n'y a pas d'accesseur. La fonction renvoyée sera utilisée comme valeur pour la propriété.
- Par défaut : {{jsxref("undefined")}}.
-
set
-
Une fonction utilisée comme mutateur pour la propriété ou {{jsxref("undefined")}} s'il n'y a pas de mutateur. La fonction qui sera utilisée ensuite recevra la nouvelle valeur à affecter à la propriété comme argument.
- Par défaut : {{jsxref("undefined")}}.
-
- -

Si un descripteur ne possède aucune clé parmi value, writable, get et set, il sera considéré comme un descripteur de donnée. Si un descripteur possède à la fois les clés value/writable et get/set, une exception sera levée.

-
-
- -

Valeur de retour

- -

L'objet passé à la fonction, éventuellement modifié.

- -

Description

- -

Object.defineProperties permet principalement de définir toutes les propriétés  de l'objet obj correspondant aux propriétés énumérable de props.

- -

Exemples

- -
var obj = {};
-Object.defineProperties(obj, {
-  "propriété1": {
-    value: true,
-    writable: true
-  },
-  "propriété2": {
-    value: "Coucou",
-    writable: false
-  }
-  // etc.
-});
- -

Prothèse d'émulation (polyfill)

- -

Si on considère un environnement pur où tous les noms et toutes les propriétés font référence à leurs valeurs initiales, Object.defineProperties est quasiment équivalent à l'implémentation suivante en JavaScript (voir la note liée à isCallable) :

- -
function defineProperties(obj, properties) {
-  function convertToDescriptor(desc) {
-    function hasProperty(obj, prop) {
-      return Object.prototype.hasOwnProperty.call(obj, prop);
-    }
-
-    function isCallable(v) {
-      // NB : à modifier s'il y a plus de types
-      // que les fonctions qui sont
-      // appelables (callables)
-      return typeof v === "function";
-    }
-
-    if (typeof desc !== "object" || desc === null)
-      throw new TypeError("bad desc");
-
-    var d = {};
-
-    if (hasProperty(desc, "enumerable"))
-      d.enumerable = !!desc.enumerable;
-    if (hasProperty(desc, "configurable"))
-      d.configurable = !!desc.configurable;
-    if (hasProperty(desc, "value"))
-      d.value = desc.value;
-    if (hasProperty(desc, "writable"))
-      d.writable = !!desc.writable;
-    if ( hasProperty(desc, "get") ) {
-      var g = desc.get;
-
-      if (!isCallable(g) && typeof g !== "undefined")
-        throw new TypeError("bad get");
-      d.get = g;
-    }
-    if ( hasProperty(desc, "set") ) {
-      var s = desc.set;
-      if (!isCallable(s) && typeof s !== "undefined")
-        throw new TypeError("bad set");
-      d.set = s;
-    }
-
-    if (("get" in d || "set" in d) && ("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 < keys.length; i++)
-    descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);
-
-  for (var i = 0; i < descs.length; i++)
-    Object.defineProperty(obj, descs[i][0], descs[i][1]);
-
-  return obj;
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.7', 'Object.defineProperties')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée par JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.defineproperties', 'Object.defineProperties')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.defineproperties', 'Object.defineProperties')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.defineProperties")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/defineproperties/index.md b/files/fr/web/javascript/reference/global_objects/object/defineproperties/index.md new file mode 100644 index 0000000000..ff3d03ff4a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/defineproperties/index.md @@ -0,0 +1,195 @@ +--- +title: Object.defineProperties() +slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperties +tags: + - ECMAScript 5 + - JavaScript + - Méthode + - Object + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperties +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineProperties +--- +
{{JSRef}}
+ +

La méthode Object.defineProperties() permet de définir ou de modifier les propriétés d'un objet directement sur celui-ci. La valeur renvoyée est l'objet modifié.

+ +
{{EmbedInteractiveExample("pages/js/object-defineproperties.html")}}
+ +

Syntaxe

+ +
Object.defineProperties(obj, props)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite modifier ou définir certaines propriétés.
+
props
+
Un objet dont les propriétés propres et énumérables sont des descripteurs de propriétés pour les propriétés à définir ou à modifier. Les descripteurs de propriétés peuvent avoir deux formes (voir {{jsxref("Object.defineProperty()")}} pour plus d'informations) : un descripteur de donnée ou un descripteur d'accesseur. Les descripteurs de donnée et d'accesseur peuvent avoir les clés suivantes : +
+
configurable
+
true si et seulement si le type de ce descripteur peut être modifié et si la propriété peut être supprimée de l'objet.
+ Par défaut : false.
+
enumerable
+
true si et seulement si la propriété doit être listée lors des énumérations de propriétés de l'objet (quand on liste les propriétés pour une boucle par exemple).
+ Par défaut : false.
+
+ +

Un descripteur de donnée pourra avoir les clés suivantes :

+ +
+
value
+
La valeur associée à la propriété. Cela peut être n'importe quelle valeur valide en JavaScript (un nombre, un objet, etc.).
+ Par défaut : {{jsxref("undefined")}}.
+
writable
+
true si et seulement si la valeur associée à la propriété peut être modifiée par un {{jsxref("Opérateurs/Opérateurs_d_affectation", "opérateur d'affectation", "", 1)}}.
+ Par défaut : false.
+
+ +

Un descripteur d'accesseur pourra avoir les clés suivantes :

+ +
+
get
+
Une fonction utilisée comme accesseur pour la propriété ou {{jsxref("undefined")}} s'il n'y a pas d'accesseur. La fonction renvoyée sera utilisée comme valeur pour la propriété.
+ Par défaut : {{jsxref("undefined")}}.
+
set
+
Une fonction utilisée comme mutateur pour la propriété ou {{jsxref("undefined")}} s'il n'y a pas de mutateur. La fonction qui sera utilisée ensuite recevra la nouvelle valeur à affecter à la propriété comme argument.
+ Par défaut : {{jsxref("undefined")}}.
+
+ +

Si un descripteur ne possède aucune clé parmi value, writable, get et set, il sera considéré comme un descripteur de donnée. Si un descripteur possède à la fois les clés value/writable et get/set, une exception sera levée.

+
+
+ +

Valeur de retour

+ +

L'objet passé à la fonction, éventuellement modifié.

+ +

Description

+ +

Object.defineProperties permet principalement de définir toutes les propriétés  de l'objet obj correspondant aux propriétés énumérable de props.

+ +

Exemples

+ +
var obj = {};
+Object.defineProperties(obj, {
+  "propriété1": {
+    value: true,
+    writable: true
+  },
+  "propriété2": {
+    value: "Coucou",
+    writable: false
+  }
+  // etc.
+});
+ +

Prothèse d'émulation (polyfill)

+ +

Si on considère un environnement pur où tous les noms et toutes les propriétés font référence à leurs valeurs initiales, Object.defineProperties est quasiment équivalent à l'implémentation suivante en JavaScript (voir la note liée à isCallable) :

+ +
function defineProperties(obj, properties) {
+  function convertToDescriptor(desc) {
+    function hasProperty(obj, prop) {
+      return Object.prototype.hasOwnProperty.call(obj, prop);
+    }
+
+    function isCallable(v) {
+      // NB : à modifier s'il y a plus de types
+      // que les fonctions qui sont
+      // appelables (callables)
+      return typeof v === "function";
+    }
+
+    if (typeof desc !== "object" || desc === null)
+      throw new TypeError("bad desc");
+
+    var d = {};
+
+    if (hasProperty(desc, "enumerable"))
+      d.enumerable = !!desc.enumerable;
+    if (hasProperty(desc, "configurable"))
+      d.configurable = !!desc.configurable;
+    if (hasProperty(desc, "value"))
+      d.value = desc.value;
+    if (hasProperty(desc, "writable"))
+      d.writable = !!desc.writable;
+    if ( hasProperty(desc, "get") ) {
+      var g = desc.get;
+
+      if (!isCallable(g) && typeof g !== "undefined")
+        throw new TypeError("bad get");
+      d.get = g;
+    }
+    if ( hasProperty(desc, "set") ) {
+      var s = desc.set;
+      if (!isCallable(s) && typeof s !== "undefined")
+        throw new TypeError("bad set");
+      d.set = s;
+    }
+
+    if (("get" in d || "set" in d) && ("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 < keys.length; i++)
+    descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);
+
+  for (var i = 0; i < descs.length; i++)
+    Object.defineProperty(obj, descs[i][0], descs[i][1]);
+
+  return obj;
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.7', 'Object.defineProperties')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée par JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.defineproperties', 'Object.defineProperties')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.defineproperties', 'Object.defineProperties')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.defineProperties")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/defineproperty/index.html b/files/fr/web/javascript/reference/global_objects/object/defineproperty/index.html deleted file mode 100644 index c2ab4ad294..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/defineproperty/index.html +++ /dev/null @@ -1,418 +0,0 @@ ---- -title: Object.defineProperty() -slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperty -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineProperty ---- -
{{JSRef}}
- -

La méthode statique Object.defineProperty() permet de définir une nouvelle propriété ou de modifier une propriété existante, directement sur un objet. La méthode renvoie l'objet modifié.

- -
-

Note : Cette méthode est directement appelée via le constructeur {{jsxref("Object")}} plutôt que sur les instances de type Object.

-
- -
{{EmbedInteractiveExample("pages/js/object-defineproperty.html")}}
- -

Syntaxe

- -
Object.defineProperty(obj, prop, descripteur)
- -

Paramètres

- -
-
obj
-
L'objet sur lequel on souhaite définir ou modifier une propriété.
-
prop
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété qu'on définit ou qu'on modifie.
-
descripteur
-
Le descripteur de la propriété qu'on définit ou qu'on modifie.
-
- -

Valeur de retour

- -

L'objet qui a été passé à la fonction et qui a éventuellement été modifié.

- -

Description

- -

Cette méthode permet d'ajouter ou de modifier une propriété d'un objet avec une certaine précision. En effet, quand on ajoute une propriété « normalement » (via une affectation), on crée une propriété dont le comportement par défaut fait qu'elle sera listée dans une énumération de propriétés (par exemple avec une boucle {{jsxref("Instructions/for...in","for...in")}} ou via la méthode {{jsxref("Object.keys")}}), dont la valeur peut être changée et qui peut être supprimée via {{jsxref("Opérateurs/L_opérateur_delete","delete")}}. La méthode Object.defineProperty() permet de préciser le comportement attendu, potentiellement différent de celui par défaut.

- -

Les descripteurs de propriété existent en deux versions : les descripteurs de données et les descripteurs d'accesseur. Un descripteur de données est une propriété qui possède une valeur et qui peut ou non être accessible en écriture. Un descripteur d'accesseur est une propriété décrite par une paire d'accesseur/mutateur (getter/setter) qui sont des fonctions. Un descripteur est un descripteur de données ou un descripteur d'accesseur, il ne peut pas être les deux.

- -

Les descripteurs de données et d'accesseur sont des objets. Ils partagent les propriétés suivantes (la valeur par défaut indiquée est utilisée lorsqu'on passe par Object.defineProperty()) :

- -
-
configurable
-
true si et seulement si le type de ce descripteur de propriété peut être changé et si la propriété peut/pourra être supprimée de l'objet correspondant..
- La valeur par défaut est false.
-
enumerable
-
true si et seulement si la propriété apparaît lors de l'énumération des propriétés de l'objet correspondant.
- La valeur par défaut est false.
-
- -

Un descripteur de données possède les propriétés optionnelles suivantes :

- -
-
value
-
La valeur associée à la propriété. Peut être n'importe quelle valeur JavaScript valide (un nombre, un objet, etc.).
- La valeur par défaut est {{jsxref("undefined")}}.
-
writable
-
true si et seulement si la valeur associée à la propriété peut être modifiée en utilisant un {{jsxref("Opérateurs/Opérateurs_d_affectation", "opérateur d'affectation", "", 1)}}.
- La valeur par défaut est false.
-
- -

Un descripteur d'accesseur possède les propriétés optionnelles suivantes :

- -
-
get
-
Une fonction qui est utilisée comme accesseur (getter) pour la propriété ou bien {{jsxref("undefined")}} s'il n'existe pas d'accesseur. La valeur de retour de la fonction sera utilisée comme valeur pour la propriété. Lorsqu'on accède à la propriété, la fonction est appelée sans argument avec this qui est l'objet pour lequel on souhaite consulter la propriété.
- La valeur par défaut est {{jsxref("undefined")}}.
-
set
-
Une fonction qui est utilisée comme mutateur (setter) pour la propriété ou bien {{jsxref("undefined")}} s'il n'existe pas de mutateur. Pour unique argument, la fonction recevra la nouvelle valeur à affecter à la propriété. Le contexte this passé est l'objet sur lequel on souhaite modifier la propriété.
- La valeur par défaut est {{jsxref("undefined")}}.
-
- -

Si un descripteur ne possède aucune des clés value, writable, get ou set, il est considéré comme un descripteur de données. Si un descripteur possède à la fois une propriété value ou writable et une propriété get ou set, un exception sera déclenchée.

- -

Il faut garder à l'esprit que ces options ne sont pas nécessairement les descripteurs des propriétés propres. Elles peuvent être héritées et faire partie de la chaine des prototypes. Afin de s'assurer que les valeur par défaut sont préservées, on peut d'abord geler le prototype {{jsxref("Object.prototype")}}, définir toutes les options explicitement ou faire pointer la propriété {{jsxref("Object.prototype.__proto__", "__proto__")}} vers {{jsxref("null")}} (par exemple avec {{jsxref("Object.create","Object.create(null)")}}).

- -
var obj = {};
-// en utilisant __proto__
-Object.defineProperty(obj, "clé", {
-  __proto__: null, // aucune propriété héritée
-  value: "static"  // non énumérable
-                   // non configurable
-                   // non accessible en écriture
-                   // par défaut
-});
-
-// en étant explicite
-Object.defineProperty(obj, "clé", {
-  enumerable: false,
-  configurable: false,
-  writable: false,
-  value: "static"
-});
-
-// en recyclant un objet
-function avecValeur(valeur) {
-  var d = avecValeur.d || (
-    avecValeur.d = {
-      enumerable: false,
-      writable: false,
-      configurable: false,
-      value: null
-    }
-  );
-  if(d.value !== valeur){
-    d.value = valeur;
-  }
-  return d;
-}
-// ... autres instructions... puis
-Object.defineProperty(obj, "clé", avecValeur("static"));
-
-// si la méthode freeze est disponible,
-// on peut empêcher que du code ajoute des
-// propriétés (valeur, get, set, enumerable,
-// writable, configurable) au prototype d'Object
-(Object.freeze||Object)(Object.prototype);
- -

Exemples

- -

Pour plus d'exemples utilisant la méthode Object.defineProperty avec une syntaxe de masque binaire, voir les exemples supplémentaires.

- -

Créer une propriété

- -

Lorsqu'une propriété n'existe pas pour l'objet, Object.defineProperty() créera une nouvelle propriété telle qu'elle est décrite. Certains champs du descripteur peuvent manquer, les valeurs par défaut seront alors utilisées. Tous les booléens ont false pour valeur par défaut. Une propriété définie sans get/set/value/writable est appelée « générique » et « correspond » à un descripteur de données.

- -
var o = {}; // on crée un nouvel objet
-
-// Exemple d'une propriété ajoutée via defineProperty
-// avec un descripteur de données
-Object.defineProperty(o, "a", {value : 37,
-                               writable : true,
-                               enumerable : true,
-                               configurable : true});
-// la propriété 'a' existe pour l'objet o et vaut 37
-
-// Exemple d'une propriété ajoutée via defineProperty
-// avec un descripteur d'accesseur
-var valeurB = 38;
-Object.defineProperty(o, "b", {get : function(){ return valeurB; },
-                               set : function(nouvelleValeur){
-                                           valeurB = nouvelleValeur;
-                                     },
-                               enumerable : true,
-                               configurable : true});
-o.b; // 38
-// la propriété 'b' existe pour l'objet o
-// et vaut 38
-// La valeur de o.b est désormais toujours
-// identique à valeurB, sauf si o.b est redéfini
-
-// On ne peut pas mélanger les deux :
-Object.defineProperty(o, "conflit", { value: 0x9f91102,
-                                       get: function() {
-                                            return 0xdeadbeef;
-                                       }
-                                     });
-// une exception TypeError sera lancée : value n'apparaît
-// que dans les descripteurs de données
-// get n'apparait que dans les descripteurs d'accesseur
-
- -

Modifier une propriété existante

- -

Quand une propriété existe d'ores et déjà pour un objet, Object.defineProperty() tentera de modifier la propriété pour qu'elle corresponde aux valeurs indiquées dans le descripteur et à la configuration de l'objet courant. Si l'ancien descripteur avait configurable à  false (la propriété est dite non-configurable), aucun attribut, à l'exception de writable, ne peut être changé. Dans ce cas, il n'est pas possible de changer entre les types de descripteur.

- -

Si une propriété est non-configurable, son attribut writable ne peut être mis qu'à false.

- -

Une exception {{jsxref("TypeError")}} peut être levée quand on essaie de modifier des attributs de propriété non-configurables (en dehors des attributs value et writable) sauf dans le cas où les valeurs souhaitées sont les mêmes que les valeurs courantes.

- -

Attribut writable

- -

Lorsque l'attribut writable vaut false pour la propriété, cette dernière n'est plus accessible en écriture. Il est impossible de la réaffecter.

- -
var o = {}; // On crée un nouvel objet
-
-Object.defineProperty(o, "a", { value : 37,
-                                writable : false });
-
-console.log(o.a); // inscrit 37 dans les journaux (logs)
-o.a = 25; // Aucune exception n'est lancée (on aurait une
-          // exception en mode strict, y compris si la
-          // valeur souhaitée avait été la même)
-console.log(o.a); // inscrit toujours 37.
-                  //L'affectation n'a pas fonctionné.
- -
// En mode strict
-(function() {
-  'use strict';
-  var o = {};
-  Object.defineProperty(o, 'b', {
-    value: 2,
-    writable: false
-  });
-  o.b = 3; // déclenche une TypeError: "b" est en lecture seule
-  return o.b; // renvoie 2 sans la ligne précédente
-}());
-
- -

Comme on l'a vu dans l'exemple, essayer de modifier une propriété non accessible en écriture ne la modifie pas. Cela ne rend pas d'erreur non plus (en mode non-strict).

- -

Attribut enumerable

- -

L'attribut de propriété enumerable permet de définir si la propriété est sélectionnée par {{jsxref("Object.assign()")}} ou via l'opérateur de décomposition (spread). Pour les propriétés qui ne sont pas nommées avec des symboles, les propriétés énumérables correspondent aux propriétés qui sont listées avec une boucle {{jsxref("Instructions/for...in","for...in")}} ou avec la méthode {{jsxref("Object.keys()")}}.

- -
var o = {};
-Object.defineProperty(o, 'a', {
-  value: 1,
-  enumerable: true
-});
-Object.defineProperty(o, 'b', {
-  value: 2,
-  enumerable: false
-});
-Object.defineProperty(o, 'c', {
-  value: 3
-}); // enumerable vaut false par défaut
-o.d = 4; // enumerable vaut true par défaut
-         // lorsqu'on crée une propriété
-         // en la définissant
-Object.defineProperty(o, Symbol.for('e'), {
-  value: 5,
-  enumerable: true
-});
-Object.defineProperty(o, Symbol.for('f'), {
-  value: 6,
-  enumerable: false
-});
-
-for (var i in o) {
-  console.log(i);
-}
-// affiche 'a' et 'd' (dans un ordre indéfini)
-
-Object.keys(o); // ['a', 'd']
-
-o.propertyIsEnumerable('a'); // true
-o.propertyIsEnumerable('b'); // false
-o.propertyIsEnumerable('c'); // false
-o.propertyIsEnumerable('d'); // true
-o.propertyIsEnumerable(Symbol.for('e')); // true
-o.propertyIsEnumerable(Symbol.for('f')); // false
-
-var p = { ...o }
-p.a // 1
-p.b // undefined
-p.c // undefined
-p.d // 4
-p[Symbol.for('e')] // 5
-p[Symbol.for('f')] // undefined
-
- -

Attribut configurable

- -

L'attribut configurable permet de contrôler si la propriété peut être supprimée et si les autres attributs de propriété (voir ci-avant), à l'exception de value ou de writable, peuvent être modifiés.

- -
var o = {};
-Object.defineProperty(o, "a", { get : function(){return 1;},
-                                configurable : false } );
-
-Object.defineProperty(o, "a", {configurable : true});
-// renvoie une TypeError
-
-Object.defineProperty(o, "a", {enumerable : true});
-// renvoie une TypeError
-
-Object.defineProperty(o, "a", {set : function(){}});
-// renvoie une TypeError (set était non défini avant)
-
-Object.defineProperty(o, "a", {get : function(){return 1;}});
-// renvoie une TypeError
-// (bien que le nouveau get soit identique au précédent)
-
-Object.defineProperty(o, "a", {value : 12});
-// renvoie une TypeError
-
-console.log(o.a); // log 1
-delete o.a; // Rien ne se passe
-console.log(o.a); // log 1
-
- -

Si l'attribut configurable de o.a avait été true, aucune de ces erreurs n'aurait été renvoyée et la propriété aurait été supprimée au final.

- -

Ajouter des propriétés et des valeurs par défaut

- -

Il est toujours important de savoir comment les valeurs par défaut sont appliquées. Le comportement est souvent différent entre une affectation simple et l'utilisation de Object.defineProperty(). Par exemple :

- -
var o = {};
-
-o.a = 1;
-// est équivalent à :
-Object.defineProperty(o, "a", {value : 1,
-                               writable : true,
-                               configurable : true,
-                               enumerable : true});
-
-
-// D'un autre côté,
-Object.defineProperty(o, "a", {value : 1});
-// sera équivalent à :
-Object.defineProperty(o, "a", {value : 1,
-                               writable : false,
-                               configurable : false,
-                               enumerable : false});
-
- -

Accesseurs et mutateurs adaptés

- -

L'exemple ci-dessous illustre comment implémenter un objet qui archive des données. Lorsque la propriété température est définie, on ajoute une entrée au tableau archive :

- -
function Archiviste() {
-  var température = null;
-  var archive = [];
-
-  Object.defineProperty(this, "température",{
-    get: function() {
-      console.log("accès !");
-      return température;
-    },
-    set: function(value) {
-      température = value;
-      archive.push({val: température});
-    }
-  });
-
-  this.getArchive = function() {return archive;};
-}
-
-var arc = new Archiviste();
-arc.température; // "accès !"
-arc.température = 11;
-arc.température = 13;
-arc.getArchive(); // [{val: 11}, {val: 13}]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉ tatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.6', 'Object.defineProperty')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.defineproperty', 'Object.defineProperty')}}{{Spec2('ES6')}}
-

{{SpecName('ESDraft', '#sec-object.defineproperty', 'Object.defineProperty')}}

-
{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.defineProperty")}}

- -

Notes de compatibilité

- -

Redéfinir la propriété length d'un tableau (Array)

- -

Il est possible de redéfinir la propriété {{jsxref("Array.length", "length")}} utilisée pour les tableaux, avec les restrictions vues. (La propriété length est initialement non-configurable, non-enumérable et accessible en écriture (writable vaut true)). Ainsi, sur un tableau, si rien n'a été fait, on peut modifier la valeur de la propriété length ou la rendre non accessible en écriture. Il n'est pas permis de changer son caractère énumérable ou configurable. Cependant, tous les navigateurs n'autorisent pas cette redéfinition.

- -

Les versions de Firefox 4 à 22 renverront une exception {{jsxref("TypeError")}} pour chaque tentative (licite ou non) de modification de la propriété length d'un tableau.

- -

Pour les versions de Chrome qui implémentent Object.defineProperty(), elles ignorent, dans certaines circonstances, une redéfinition de la propriété utilisant une valeur différente de la valeur courante de length. Sous certaines circonstances, le changement de l'accès en écriture n'aura aucun effet (et ne renverra aucune exception). Les méthodes relatives comme  {{jsxref("Array.prototype.push")}} ne respectent pas le non accès en écriture.

- -

Pour les versions de Safari qui implémentent Object.defineProperty() elles ignorent la redéfinition d'une valeur différente de la valeur courante. Toute tentative de modifier l'accès en écriture échouera silencieusement (aucune modification effective, aucune exception renvoyée).

- -

Seules les versions Internet Explorer 9 et supérieures et Firefox 23 et supérieures semblent supporter complètement la redéfinition de la propriété length pour les tableaux. À l'heure actuelle, il n'est pas conseillé de s'attendre à ce qu'une telle redéfinition fonctionne ou ne fonctionne pas. Même dans le cas où on peut supposer que cela fonctionne de façon cohérente : ce n'est pas vraiment une bonne idée de le faire (en anglais).

- -

Notes spécifiques relatives à Internet Explorer 8

- -

Internet Explorer 8 a implémenté une méthode Object.defineProperty() uniquement utilisable sur les objets DOM. Quelques éléments sont à noter :

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/defineproperty/index.md b/files/fr/web/javascript/reference/global_objects/object/defineproperty/index.md new file mode 100644 index 0000000000..c2ab4ad294 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/defineproperty/index.md @@ -0,0 +1,418 @@ +--- +title: Object.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperty +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/defineProperty +--- +
{{JSRef}}
+ +

La méthode statique Object.defineProperty() permet de définir une nouvelle propriété ou de modifier une propriété existante, directement sur un objet. La méthode renvoie l'objet modifié.

+ +
+

Note : Cette méthode est directement appelée via le constructeur {{jsxref("Object")}} plutôt que sur les instances de type Object.

+
+ +
{{EmbedInteractiveExample("pages/js/object-defineproperty.html")}}
+ +

Syntaxe

+ +
Object.defineProperty(obj, prop, descripteur)
+ +

Paramètres

+ +
+
obj
+
L'objet sur lequel on souhaite définir ou modifier une propriété.
+
prop
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété qu'on définit ou qu'on modifie.
+
descripteur
+
Le descripteur de la propriété qu'on définit ou qu'on modifie.
+
+ +

Valeur de retour

+ +

L'objet qui a été passé à la fonction et qui a éventuellement été modifié.

+ +

Description

+ +

Cette méthode permet d'ajouter ou de modifier une propriété d'un objet avec une certaine précision. En effet, quand on ajoute une propriété « normalement » (via une affectation), on crée une propriété dont le comportement par défaut fait qu'elle sera listée dans une énumération de propriétés (par exemple avec une boucle {{jsxref("Instructions/for...in","for...in")}} ou via la méthode {{jsxref("Object.keys")}}), dont la valeur peut être changée et qui peut être supprimée via {{jsxref("Opérateurs/L_opérateur_delete","delete")}}. La méthode Object.defineProperty() permet de préciser le comportement attendu, potentiellement différent de celui par défaut.

+ +

Les descripteurs de propriété existent en deux versions : les descripteurs de données et les descripteurs d'accesseur. Un descripteur de données est une propriété qui possède une valeur et qui peut ou non être accessible en écriture. Un descripteur d'accesseur est une propriété décrite par une paire d'accesseur/mutateur (getter/setter) qui sont des fonctions. Un descripteur est un descripteur de données ou un descripteur d'accesseur, il ne peut pas être les deux.

+ +

Les descripteurs de données et d'accesseur sont des objets. Ils partagent les propriétés suivantes (la valeur par défaut indiquée est utilisée lorsqu'on passe par Object.defineProperty()) :

+ +
+
configurable
+
true si et seulement si le type de ce descripteur de propriété peut être changé et si la propriété peut/pourra être supprimée de l'objet correspondant..
+ La valeur par défaut est false.
+
enumerable
+
true si et seulement si la propriété apparaît lors de l'énumération des propriétés de l'objet correspondant.
+ La valeur par défaut est false.
+
+ +

Un descripteur de données possède les propriétés optionnelles suivantes :

+ +
+
value
+
La valeur associée à la propriété. Peut être n'importe quelle valeur JavaScript valide (un nombre, un objet, etc.).
+ La valeur par défaut est {{jsxref("undefined")}}.
+
writable
+
true si et seulement si la valeur associée à la propriété peut être modifiée en utilisant un {{jsxref("Opérateurs/Opérateurs_d_affectation", "opérateur d'affectation", "", 1)}}.
+ La valeur par défaut est false.
+
+ +

Un descripteur d'accesseur possède les propriétés optionnelles suivantes :

+ +
+
get
+
Une fonction qui est utilisée comme accesseur (getter) pour la propriété ou bien {{jsxref("undefined")}} s'il n'existe pas d'accesseur. La valeur de retour de la fonction sera utilisée comme valeur pour la propriété. Lorsqu'on accède à la propriété, la fonction est appelée sans argument avec this qui est l'objet pour lequel on souhaite consulter la propriété.
+ La valeur par défaut est {{jsxref("undefined")}}.
+
set
+
Une fonction qui est utilisée comme mutateur (setter) pour la propriété ou bien {{jsxref("undefined")}} s'il n'existe pas de mutateur. Pour unique argument, la fonction recevra la nouvelle valeur à affecter à la propriété. Le contexte this passé est l'objet sur lequel on souhaite modifier la propriété.
+ La valeur par défaut est {{jsxref("undefined")}}.
+
+ +

Si un descripteur ne possède aucune des clés value, writable, get ou set, il est considéré comme un descripteur de données. Si un descripteur possède à la fois une propriété value ou writable et une propriété get ou set, un exception sera déclenchée.

+ +

Il faut garder à l'esprit que ces options ne sont pas nécessairement les descripteurs des propriétés propres. Elles peuvent être héritées et faire partie de la chaine des prototypes. Afin de s'assurer que les valeur par défaut sont préservées, on peut d'abord geler le prototype {{jsxref("Object.prototype")}}, définir toutes les options explicitement ou faire pointer la propriété {{jsxref("Object.prototype.__proto__", "__proto__")}} vers {{jsxref("null")}} (par exemple avec {{jsxref("Object.create","Object.create(null)")}}).

+ +
var obj = {};
+// en utilisant __proto__
+Object.defineProperty(obj, "clé", {
+  __proto__: null, // aucune propriété héritée
+  value: "static"  // non énumérable
+                   // non configurable
+                   // non accessible en écriture
+                   // par défaut
+});
+
+// en étant explicite
+Object.defineProperty(obj, "clé", {
+  enumerable: false,
+  configurable: false,
+  writable: false,
+  value: "static"
+});
+
+// en recyclant un objet
+function avecValeur(valeur) {
+  var d = avecValeur.d || (
+    avecValeur.d = {
+      enumerable: false,
+      writable: false,
+      configurable: false,
+      value: null
+    }
+  );
+  if(d.value !== valeur){
+    d.value = valeur;
+  }
+  return d;
+}
+// ... autres instructions... puis
+Object.defineProperty(obj, "clé", avecValeur("static"));
+
+// si la méthode freeze est disponible,
+// on peut empêcher que du code ajoute des
+// propriétés (valeur, get, set, enumerable,
+// writable, configurable) au prototype d'Object
+(Object.freeze||Object)(Object.prototype);
+ +

Exemples

+ +

Pour plus d'exemples utilisant la méthode Object.defineProperty avec une syntaxe de masque binaire, voir les exemples supplémentaires.

+ +

Créer une propriété

+ +

Lorsqu'une propriété n'existe pas pour l'objet, Object.defineProperty() créera une nouvelle propriété telle qu'elle est décrite. Certains champs du descripteur peuvent manquer, les valeurs par défaut seront alors utilisées. Tous les booléens ont false pour valeur par défaut. Une propriété définie sans get/set/value/writable est appelée « générique » et « correspond » à un descripteur de données.

+ +
var o = {}; // on crée un nouvel objet
+
+// Exemple d'une propriété ajoutée via defineProperty
+// avec un descripteur de données
+Object.defineProperty(o, "a", {value : 37,
+                               writable : true,
+                               enumerable : true,
+                               configurable : true});
+// la propriété 'a' existe pour l'objet o et vaut 37
+
+// Exemple d'une propriété ajoutée via defineProperty
+// avec un descripteur d'accesseur
+var valeurB = 38;
+Object.defineProperty(o, "b", {get : function(){ return valeurB; },
+                               set : function(nouvelleValeur){
+                                           valeurB = nouvelleValeur;
+                                     },
+                               enumerable : true,
+                               configurable : true});
+o.b; // 38
+// la propriété 'b' existe pour l'objet o
+// et vaut 38
+// La valeur de o.b est désormais toujours
+// identique à valeurB, sauf si o.b est redéfini
+
+// On ne peut pas mélanger les deux :
+Object.defineProperty(o, "conflit", { value: 0x9f91102,
+                                       get: function() {
+                                            return 0xdeadbeef;
+                                       }
+                                     });
+// une exception TypeError sera lancée : value n'apparaît
+// que dans les descripteurs de données
+// get n'apparait que dans les descripteurs d'accesseur
+
+ +

Modifier une propriété existante

+ +

Quand une propriété existe d'ores et déjà pour un objet, Object.defineProperty() tentera de modifier la propriété pour qu'elle corresponde aux valeurs indiquées dans le descripteur et à la configuration de l'objet courant. Si l'ancien descripteur avait configurable à  false (la propriété est dite non-configurable), aucun attribut, à l'exception de writable, ne peut être changé. Dans ce cas, il n'est pas possible de changer entre les types de descripteur.

+ +

Si une propriété est non-configurable, son attribut writable ne peut être mis qu'à false.

+ +

Une exception {{jsxref("TypeError")}} peut être levée quand on essaie de modifier des attributs de propriété non-configurables (en dehors des attributs value et writable) sauf dans le cas où les valeurs souhaitées sont les mêmes que les valeurs courantes.

+ +

Attribut writable

+ +

Lorsque l'attribut writable vaut false pour la propriété, cette dernière n'est plus accessible en écriture. Il est impossible de la réaffecter.

+ +
var o = {}; // On crée un nouvel objet
+
+Object.defineProperty(o, "a", { value : 37,
+                                writable : false });
+
+console.log(o.a); // inscrit 37 dans les journaux (logs)
+o.a = 25; // Aucune exception n'est lancée (on aurait une
+          // exception en mode strict, y compris si la
+          // valeur souhaitée avait été la même)
+console.log(o.a); // inscrit toujours 37.
+                  //L'affectation n'a pas fonctionné.
+ +
// En mode strict
+(function() {
+  'use strict';
+  var o = {};
+  Object.defineProperty(o, 'b', {
+    value: 2,
+    writable: false
+  });
+  o.b = 3; // déclenche une TypeError: "b" est en lecture seule
+  return o.b; // renvoie 2 sans la ligne précédente
+}());
+
+ +

Comme on l'a vu dans l'exemple, essayer de modifier une propriété non accessible en écriture ne la modifie pas. Cela ne rend pas d'erreur non plus (en mode non-strict).

+ +

Attribut enumerable

+ +

L'attribut de propriété enumerable permet de définir si la propriété est sélectionnée par {{jsxref("Object.assign()")}} ou via l'opérateur de décomposition (spread). Pour les propriétés qui ne sont pas nommées avec des symboles, les propriétés énumérables correspondent aux propriétés qui sont listées avec une boucle {{jsxref("Instructions/for...in","for...in")}} ou avec la méthode {{jsxref("Object.keys()")}}.

+ +
var o = {};
+Object.defineProperty(o, 'a', {
+  value: 1,
+  enumerable: true
+});
+Object.defineProperty(o, 'b', {
+  value: 2,
+  enumerable: false
+});
+Object.defineProperty(o, 'c', {
+  value: 3
+}); // enumerable vaut false par défaut
+o.d = 4; // enumerable vaut true par défaut
+         // lorsqu'on crée une propriété
+         // en la définissant
+Object.defineProperty(o, Symbol.for('e'), {
+  value: 5,
+  enumerable: true
+});
+Object.defineProperty(o, Symbol.for('f'), {
+  value: 6,
+  enumerable: false
+});
+
+for (var i in o) {
+  console.log(i);
+}
+// affiche 'a' et 'd' (dans un ordre indéfini)
+
+Object.keys(o); // ['a', 'd']
+
+o.propertyIsEnumerable('a'); // true
+o.propertyIsEnumerable('b'); // false
+o.propertyIsEnumerable('c'); // false
+o.propertyIsEnumerable('d'); // true
+o.propertyIsEnumerable(Symbol.for('e')); // true
+o.propertyIsEnumerable(Symbol.for('f')); // false
+
+var p = { ...o }
+p.a // 1
+p.b // undefined
+p.c // undefined
+p.d // 4
+p[Symbol.for('e')] // 5
+p[Symbol.for('f')] // undefined
+
+ +

Attribut configurable

+ +

L'attribut configurable permet de contrôler si la propriété peut être supprimée et si les autres attributs de propriété (voir ci-avant), à l'exception de value ou de writable, peuvent être modifiés.

+ +
var o = {};
+Object.defineProperty(o, "a", { get : function(){return 1;},
+                                configurable : false } );
+
+Object.defineProperty(o, "a", {configurable : true});
+// renvoie une TypeError
+
+Object.defineProperty(o, "a", {enumerable : true});
+// renvoie une TypeError
+
+Object.defineProperty(o, "a", {set : function(){}});
+// renvoie une TypeError (set était non défini avant)
+
+Object.defineProperty(o, "a", {get : function(){return 1;}});
+// renvoie une TypeError
+// (bien que le nouveau get soit identique au précédent)
+
+Object.defineProperty(o, "a", {value : 12});
+// renvoie une TypeError
+
+console.log(o.a); // log 1
+delete o.a; // Rien ne se passe
+console.log(o.a); // log 1
+
+ +

Si l'attribut configurable de o.a avait été true, aucune de ces erreurs n'aurait été renvoyée et la propriété aurait été supprimée au final.

+ +

Ajouter des propriétés et des valeurs par défaut

+ +

Il est toujours important de savoir comment les valeurs par défaut sont appliquées. Le comportement est souvent différent entre une affectation simple et l'utilisation de Object.defineProperty(). Par exemple :

+ +
var o = {};
+
+o.a = 1;
+// est équivalent à :
+Object.defineProperty(o, "a", {value : 1,
+                               writable : true,
+                               configurable : true,
+                               enumerable : true});
+
+
+// D'un autre côté,
+Object.defineProperty(o, "a", {value : 1});
+// sera équivalent à :
+Object.defineProperty(o, "a", {value : 1,
+                               writable : false,
+                               configurable : false,
+                               enumerable : false});
+
+ +

Accesseurs et mutateurs adaptés

+ +

L'exemple ci-dessous illustre comment implémenter un objet qui archive des données. Lorsque la propriété température est définie, on ajoute une entrée au tableau archive :

+ +
function Archiviste() {
+  var température = null;
+  var archive = [];
+
+  Object.defineProperty(this, "température",{
+    get: function() {
+      console.log("accès !");
+      return température;
+    },
+    set: function(value) {
+      température = value;
+      archive.push({val: température});
+    }
+  });
+
+  this.getArchive = function() {return archive;};
+}
+
+var arc = new Archiviste();
+arc.température; // "accès !"
+arc.température = 11;
+arc.température = 13;
+arc.getArchive(); // [{val: 11}, {val: 13}]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉ tatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.6', 'Object.defineProperty')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.defineproperty', 'Object.defineProperty')}}{{Spec2('ES6')}}
+

{{SpecName('ESDraft', '#sec-object.defineproperty', 'Object.defineProperty')}}

+
{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.defineProperty")}}

+ +

Notes de compatibilité

+ +

Redéfinir la propriété length d'un tableau (Array)

+ +

Il est possible de redéfinir la propriété {{jsxref("Array.length", "length")}} utilisée pour les tableaux, avec les restrictions vues. (La propriété length est initialement non-configurable, non-enumérable et accessible en écriture (writable vaut true)). Ainsi, sur un tableau, si rien n'a été fait, on peut modifier la valeur de la propriété length ou la rendre non accessible en écriture. Il n'est pas permis de changer son caractère énumérable ou configurable. Cependant, tous les navigateurs n'autorisent pas cette redéfinition.

+ +

Les versions de Firefox 4 à 22 renverront une exception {{jsxref("TypeError")}} pour chaque tentative (licite ou non) de modification de la propriété length d'un tableau.

+ +

Pour les versions de Chrome qui implémentent Object.defineProperty(), elles ignorent, dans certaines circonstances, une redéfinition de la propriété utilisant une valeur différente de la valeur courante de length. Sous certaines circonstances, le changement de l'accès en écriture n'aura aucun effet (et ne renverra aucune exception). Les méthodes relatives comme  {{jsxref("Array.prototype.push")}} ne respectent pas le non accès en écriture.

+ +

Pour les versions de Safari qui implémentent Object.defineProperty() elles ignorent la redéfinition d'une valeur différente de la valeur courante. Toute tentative de modifier l'accès en écriture échouera silencieusement (aucune modification effective, aucune exception renvoyée).

+ +

Seules les versions Internet Explorer 9 et supérieures et Firefox 23 et supérieures semblent supporter complètement la redéfinition de la propriété length pour les tableaux. À l'heure actuelle, il n'est pas conseillé de s'attendre à ce qu'une telle redéfinition fonctionne ou ne fonctionne pas. Même dans le cas où on peut supposer que cela fonctionne de façon cohérente : ce n'est pas vraiment une bonne idée de le faire (en anglais).

+ +

Notes spécifiques relatives à Internet Explorer 8

+ +

Internet Explorer 8 a implémenté une méthode Object.defineProperty() uniquement utilisable sur les objets DOM. Quelques éléments sont à noter :

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/entries/index.html b/files/fr/web/javascript/reference/global_objects/object/entries/index.html deleted file mode 100644 index 9d3d2080a7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/entries/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Object.entries() -slug: Web/JavaScript/Reference/Global_Objects/Object/entries -tags: - - ECMAScript2016 - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/entries -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/entries ---- -
{{JSRef}}
- -

La méthode Object.entries() renvoie un tableau des propriétés propres énumérables d'un objet dont la clé est une chaîne de caractères, sous la forme de paires [clé, valeur], dans le même ordre qu'une boucle {{jsxref("Instructions/for...in", "for...in")}} (la boucle for-in est différente car elle parcourt la chaîne des prototypes).

- -

L'ordre du tableau renvoyé par cette méthode ne dépend pas de la façon dont l'objet est défini. S'il faut garantir un certain ordre, on pourra utiliser la méthode {{jsxref("Array.sort()")}}.

- -
{{EmbedInteractiveExample("pages/js/object-entries.html")}}
- -

Syntaxe

- -
Object.entries(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite connaître les propriétés propres énumérables dont la clé est une chaîne de caractères, sous la forme de paires [clé, valeur].
-
- -

Valeur de retour

- -

Un tableau qui contient les propriétés énumérables propres de l'objet sous la forme de paires [clé, valeur].

- -

Description

- -

Object.entries() renvoie un tableau dont les éléments sont des paires (des tableaux à deux éléments)  [clé, valeur] qui correspondent aux propriétés énumérables qui sont directement présentes sur l'objet passé en argument. L'ordre du tableau est le même que celui utilisé lorsqu'on parcourt les valeurs manuellement.

- -

Exemples

- -
var obj = { toto: "truc", machin: 42 };
-console.log(Object.entries(obj)); // [ ['toto', 'truc'], ['machin', 42] ]
-
-// Un objet semblable à un tableau
-var obj = { 0: 'a', 1: 'b', 2: 'c' };
-console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
-
-// Un objet semblable à un tableau
-// dont les clés sont aléatoirement ordonnées
-var un_obj = { 100: 'a', 2: 'b', 7: 'c' };
-console.log(Object.entries(un_obj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
-
-// getToto est une propriété non énumérable
-var mon_obj = Object.create({}, { getToto: { value: function() { return this.toto; } } });
-mon_obj.toto = "truc";
-console.log(Object.entries(mon_obj)); // [ ['toto', 'truc'] ]
-
-// un argument de type primitif sera
-// converti en un objet
-console.log(Object.entries("toto")); // [ ['0', 't'], ['1', 'o'], ['2', 't'],  ['3', 'o'] ]
-
-// Un tableau vide pour les types primitifs qui n'ont pas de propriétés
-console.log(Object.entries(100)); // [ ]
-
-// parcourir les clés-valeurs
-var autreObjet = {a:5, b:7, c:9};
-
-for (var [cle, valeur] of Object.entries(autreObjet)){
-  console.log(cle + ' ' + valeur);
-}
-
-// Ou encore, en utilisant les méthodes génériques
-Object.entries(autreObjet).forEach(([clé, valeur]) => {
-  console.log(clé + ' ' + valeur);
-});
-
- -

Convertir un objet en Map

- -

Le constructeur {{jsxref("Map", "new Map()")}} accepte un argument itérable pour décrire les entrées du tableau associatif. Grâce à Object.entries, il est possible de convertir simplement un objet {{jsxref("Object")}} en un objet {{jsxref("Map")}} :

- -
var obj = { toto: "truc", machin: 42 };
-var map = new Map(Object.entries(obj));
-console.log(map); // Map { toto: "truc", machin: 42 }
- -

Parcourir un objet

- -

En utilisant la décomposition des tableaux, on peut simplement parcourir les différentes propriétés d'un objet :

- -
const obj = { toto: "truc", bidule: 42 };
-Object.entries(obj).forEach(
-  ([clé, valeur]) => console.log(`${clé}: ${valeur}`)
-);
-// "toto: truc"
-// "bidule: 42"
- -

Prothèse d'émulation (polyfill)

- -

Afin d'ajouter le support pour Object.entries dans des environnements plus anciens qui ne supportent pas la méthode nativement, vous pouvez utiliser une prothèse comme celle proposée sur le dépôt tc39/proposal-object-values-entries ou sur le dépôt es-shims/Object.entries.

- -

Vous pouvez également utiliser la prothèse suivante (qui nécessitera la prothèse pour Object.prototype.keys() si on souhaite être compatible avec IE 8 et les versions antérieures) :

- -
if (!Object.entries) {
-  Object.entries = function( obj ){
-    var ownProps = Object.keys( obj ),
-        i = ownProps.length,
-        resArray = new Array(i);
-    while (i--)
-      resArray[i] = [ownProps[i], obj[ownProps[i]]];
-
-    return resArray;
-  };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.entries', 'Object.entries')}}{{Spec2('ESDraft')}} 
{{SpecName('ES8', '#sec-object.entries', 'Object.entries')}}{{Spec2('ES8')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.entries")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/entries/index.md b/files/fr/web/javascript/reference/global_objects/object/entries/index.md new file mode 100644 index 0000000000..9d3d2080a7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/entries/index.md @@ -0,0 +1,157 @@ +--- +title: Object.entries() +slug: Web/JavaScript/Reference/Global_Objects/Object/entries +tags: + - ECMAScript2016 + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/entries +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/entries +--- +
{{JSRef}}
+ +

La méthode Object.entries() renvoie un tableau des propriétés propres énumérables d'un objet dont la clé est une chaîne de caractères, sous la forme de paires [clé, valeur], dans le même ordre qu'une boucle {{jsxref("Instructions/for...in", "for...in")}} (la boucle for-in est différente car elle parcourt la chaîne des prototypes).

+ +

L'ordre du tableau renvoyé par cette méthode ne dépend pas de la façon dont l'objet est défini. S'il faut garantir un certain ordre, on pourra utiliser la méthode {{jsxref("Array.sort()")}}.

+ +
{{EmbedInteractiveExample("pages/js/object-entries.html")}}
+ +

Syntaxe

+ +
Object.entries(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite connaître les propriétés propres énumérables dont la clé est une chaîne de caractères, sous la forme de paires [clé, valeur].
+
+ +

Valeur de retour

+ +

Un tableau qui contient les propriétés énumérables propres de l'objet sous la forme de paires [clé, valeur].

+ +

Description

+ +

Object.entries() renvoie un tableau dont les éléments sont des paires (des tableaux à deux éléments)  [clé, valeur] qui correspondent aux propriétés énumérables qui sont directement présentes sur l'objet passé en argument. L'ordre du tableau est le même que celui utilisé lorsqu'on parcourt les valeurs manuellement.

+ +

Exemples

+ +
var obj = { toto: "truc", machin: 42 };
+console.log(Object.entries(obj)); // [ ['toto', 'truc'], ['machin', 42] ]
+
+// Un objet semblable à un tableau
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
+
+// Un objet semblable à un tableau
+// dont les clés sont aléatoirement ordonnées
+var un_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.entries(un_obj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
+
+// getToto est une propriété non énumérable
+var mon_obj = Object.create({}, { getToto: { value: function() { return this.toto; } } });
+mon_obj.toto = "truc";
+console.log(Object.entries(mon_obj)); // [ ['toto', 'truc'] ]
+
+// un argument de type primitif sera
+// converti en un objet
+console.log(Object.entries("toto")); // [ ['0', 't'], ['1', 'o'], ['2', 't'],  ['3', 'o'] ]
+
+// Un tableau vide pour les types primitifs qui n'ont pas de propriétés
+console.log(Object.entries(100)); // [ ]
+
+// parcourir les clés-valeurs
+var autreObjet = {a:5, b:7, c:9};
+
+for (var [cle, valeur] of Object.entries(autreObjet)){
+  console.log(cle + ' ' + valeur);
+}
+
+// Ou encore, en utilisant les méthodes génériques
+Object.entries(autreObjet).forEach(([clé, valeur]) => {
+  console.log(clé + ' ' + valeur);
+});
+
+ +

Convertir un objet en Map

+ +

Le constructeur {{jsxref("Map", "new Map()")}} accepte un argument itérable pour décrire les entrées du tableau associatif. Grâce à Object.entries, il est possible de convertir simplement un objet {{jsxref("Object")}} en un objet {{jsxref("Map")}} :

+ +
var obj = { toto: "truc", machin: 42 };
+var map = new Map(Object.entries(obj));
+console.log(map); // Map { toto: "truc", machin: 42 }
+ +

Parcourir un objet

+ +

En utilisant la décomposition des tableaux, on peut simplement parcourir les différentes propriétés d'un objet :

+ +
const obj = { toto: "truc", bidule: 42 };
+Object.entries(obj).forEach(
+  ([clé, valeur]) => console.log(`${clé}: ${valeur}`)
+);
+// "toto: truc"
+// "bidule: 42"
+ +

Prothèse d'émulation (polyfill)

+ +

Afin d'ajouter le support pour Object.entries dans des environnements plus anciens qui ne supportent pas la méthode nativement, vous pouvez utiliser une prothèse comme celle proposée sur le dépôt tc39/proposal-object-values-entries ou sur le dépôt es-shims/Object.entries.

+ +

Vous pouvez également utiliser la prothèse suivante (qui nécessitera la prothèse pour Object.prototype.keys() si on souhaite être compatible avec IE 8 et les versions antérieures) :

+ +
if (!Object.entries) {
+  Object.entries = function( obj ){
+    var ownProps = Object.keys( obj ),
+        i = ownProps.length,
+        resArray = new Array(i);
+    while (i--)
+      resArray[i] = [ownProps[i], obj[ownProps[i]]];
+
+    return resArray;
+  };
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.entries', 'Object.entries')}}{{Spec2('ESDraft')}} 
{{SpecName('ES8', '#sec-object.entries', 'Object.entries')}}{{Spec2('ES8')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.entries")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/freeze/index.html b/files/fr/web/javascript/reference/global_objects/object/freeze/index.html deleted file mode 100644 index 603a62206d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/freeze/index.html +++ /dev/null @@ -1,252 +0,0 @@ ---- -title: Object.freeze() -slug: Web/JavaScript/Reference/Global_Objects/Object/freeze -tags: - - ECMAScript 5 - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/freeze -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/freeze ---- -
{{JSRef}}
- -

La méthode Object.freeze() permet de geler un objet, c'est-à-dire qu'on empêche d'ajouter de nouvelles propriétés, de supprimer ou d'éditer des propriétés existantes, y compris en ce qui concerne leur caractère énumérable, configurable ou pour l'accès en écriture. L'objet devient ainsi immuable. La méthode renvoie l'objet ainsi « gelé ».

- -
{{EmbedInteractiveExample("pages/js/object-freeze.html")}}
- -

Syntaxe

- -
Object.freeze(obj)
- -

Paramètres

- -
-
obj
-
L'objet à geler.
-
- -

Valeur de retour

- -

L'objet qui a été passé à la fonction.

- -

Description

- -

Rien ne pourra être ajouté ou supprimé dans l'ensemble des propriétés de l'objet gelé. Toute tentative échouera, silencieusement ou via une exception {{jsxref("TypeError")}} (la plupart du temps en {{jsxref("Strict_mode", "mode strict", "", 1)}}).

- -

Les propriétés qui sont des données ne pourront pas être changées et les attributs writable et configurable vaudront false. Les propriétés qui sont des accesseurs ou des mutateurs fonctionneront de la même façon (et ne changeront pas la valeur associée malgré le fait qu'il n'y ait pas d'erreur). Les propriétés dont les valeurs sont des objets pourront être modifiées si ces objets ne sont pas gelés. Les tableaux peuvent également être gelés ce qui empêche alors d'ajouter ou de retirer des éléments ou de modifier les éléments existants si ceux-ci ne sont pas des objets.

- -

La fonction renvoie l'objet passé en argument, elle ne crée pas une copie « gelée ».

- -

Exemples

- -

Geler des objets

- -
var obj = {
-  prop: function (){},
-  toto: "truc"
-};
-
-// On peut ajouter de nouvelles propriétés,
-// éditer ou supprimer celles existantes
-obj.toto = "machin";
-obj.bidule = "woof";
-delete obj.prop;
-
-// L'argument et la valeur renvoyée correspondent au
-// même objet.
-// Il n'est pas nécessaire d'utiliser la valeur renvoyée
-// pour geler l'objet original.
-var o = Object.freeze(obj);
-
-o === obj; // true
-Object.isFrozen(obj); // true
-
-// Maintenant que l'objet est gelé, les changements échoueront
-obj.toto = "eheh"; // échoue silencieusement
-obj.roxor = "ga bu zo meu"; // échoue silencieusement et n'ajoute
-                            // pas la propriété
-
-// ...en mode strict, l'échec se traduira par une exception TypeErrors
-function echec(){
-  "use strict";
-  obj.toto = "bipbip"; // renvoie une TypeError
-  delete obj.toto;     // renvoie une TypeError
-  delete obj.roxor;    // renvoie true car l'attribut n' a pas été ajouté
-  obj.bipbip = "arf";  // renvoie une  TypeError
-}
-
-echec();
-
-// Les changements via Object.defineProperty échoueront également
-// renvoie une TypeError
-Object.defineProperty(obj, "ohoh", { value: 17 });
-// renvoie une TypeError
-Object.defineProperty(obj, "toto", { value: "eit" });
-
-// Il est également impossible de modifier le prototype.
-// Les deux instructions suivantes déclencheront une TypeError.
-Object.setPrototypeOf(obj, { x: 20 });
-obj.__proto__ = { x: 20 };
-
- -

Geler un tableau

- -
let a = [0];
-Object.freeze(a);
-// Le tableau ne peut plus être modifié
-
-a[0] = 1;  // échoue silencieusement
-a.push(2); // échoue silencieusement
-
-// en mode strict, de telles tentatives
-// déclencheront des exceptions TypeError
-function echec() {
-  "use strict"
-  a[0] = 1;
-  a.push(2);
-}
-
-echec();
-
- -

L'exemple qui suit illustre comment les propriétés qui sont des objets peuvent être éditées (la méthode freeze ne s'applique que sur l'objet courant et de façon superficielle).

- -
obj1 = {
-  internal: {}
-};
-
-Object.freeze(obj1);
-obj1.internal.a = 'valeurA';
-
-obj1.internal.a // 'valeurA'
- -

L'objet qui est gelé est immuable mais ce n'est pas nécessairement une constante. Pour obtenir une constante, il faut que l'ensemble des références (directes et indirectes) pointe vers des objets immuables. Les chaînes de caractères, les nombres et les booléens sont toujours immuables. La plupart du temps, on aura besoin de créer des constantes au cas par cas (et non de façon générale).

- -

Qu'est-ce que le gel « superficiel » ? (shallow freeze)

- -

Lorsqu'on appelle Object.freeze(monObjet), le gel ne s'applique qu'aux propriétés directement rattachées à monObjet. L'ajout, la suppression ou la réaffectation ne sont empêchées que sur l'objet directement. Si les valeurs de ces propriétés sont également des objets, ces derniers ne sont pas gelés et on peut leur ajouter/supprimer/réaffecter des valeurs.

- -
var employé = {
-  nom: "Leroy",
-  designation: "Développeur",
-  adresse: {
-    cp: "72000",
-    ville: "Le Mans"
-  }
-};
-
-Object.freeze(employé);
-
-employé.nom = "John"; // propriété directe, la réaffectation échoue en silence
-employé.adresse.ville = "Paris"; // propriété d'un objet fils : modifiable
-
-console.log(employé.adresse.ville); // affichera Paris
-
- -

Pour rendre l'objet complètement immuable, on gèle chacun des objets qu'il contient. Voici un exemple simple de fonction pour parcourir les propriétés qui sont des objets et les geler (attention, cela ne gère pas le cas où on a des cycles de références, ce qui entraînerait une boucle infinie).

- -
function deepFreeze(obj) {
-
-  // On récupère les noms des propriétés définies sur obj
-  var propNames = Object.getOwnPropertyNames(obj);
-
-  // On gèle les propriétés avant de geler l'objet
-  for(let name of propNames){
-    let value = obj[name];
-    obj[name] = value && typeof value === "object" ?
-      deepFreeze(value) : value;
-  }
-
-  // On gèle l'objet initial
-  return Object.freeze(obj);
-}
-
-obj2 = {
-  internal: {
-    a: null
-  }
-};
-
-deepFreeze(obj2);
-obj2.internal.a = 'valeurB'; // échouera silencieusement en mode non-strict
-obj2.internal.a; // null
- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais est d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ECMAScript 2015 (ES2015), un argument qui n'est pas un objet sera traité comme un objet ordinaire gelé et sera renvoyé tel quel par la méthode.

- -
Object.freeze(1);
-// TypeError: 1 is not an object - code ES5
-
-Object.freeze(1);
-// 1                             - code ES2015
- -

Geler un {{domxref("ArrayBufferView")}} contenant des éléments entraînera une exception {{jsxref("TypeError")}} car ce sont des vues sur des zones mémoires.

- -
> Object.freeze(new Uint8Array(0)) // Aucun élément
-Uint8Array []
-
-> Object.freeze(new Uint8Array(1)) // Avec des éléments
-TypeError: Cannot freeze array buffer views with elements
-
-> Object.freeze(new DataView(new ArrayBuffer(32))) // Aucun élément
-DataView {}
-
-> Object.freeze(new Float64Array(new ArrayBuffer(64), 63, 0)) // Aucun élément
-Float64Array []
-
-> Object.freeze(new Float64Array(new ArrayBuffer(64), 32, 2)) // Avec des éléments
-TypeError: Cannot freeze array buffer views with elements
-
- -

On notera que les trois propriétés standard (buf.byteLength, buf.byteOffset et buf.buffer) sont en lecture seule (comme pour {{jsxref("ArrayBuffer")}} et {{jsxref("SharedArrayBuffer")}}) : il n'y a donc aucune raison de vouloir geler ces propriétés.

- -

Comparaison avec Object.seal()

- -

Lorsqu'on utilise la méthode Object.freeze(), les propriétés existantes d'un objet deviennent immuables. En revanche, avec {{jsxref("Object.seal()")}}, il est toujours possible de modifier la valeur des propriétés existantes d'un objet scellé.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.9', 'Object.freeze')}}{{Spec2('ES5.1')}}Définition initiale.
- Implémentée avec JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.freeze', 'Object.freeze')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.freeze', 'Object.freeze')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.freeze")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/freeze/index.md b/files/fr/web/javascript/reference/global_objects/object/freeze/index.md new file mode 100644 index 0000000000..603a62206d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/freeze/index.md @@ -0,0 +1,252 @@ +--- +title: Object.freeze() +slug: Web/JavaScript/Reference/Global_Objects/Object/freeze +tags: + - ECMAScript 5 + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/freeze +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/freeze +--- +
{{JSRef}}
+ +

La méthode Object.freeze() permet de geler un objet, c'est-à-dire qu'on empêche d'ajouter de nouvelles propriétés, de supprimer ou d'éditer des propriétés existantes, y compris en ce qui concerne leur caractère énumérable, configurable ou pour l'accès en écriture. L'objet devient ainsi immuable. La méthode renvoie l'objet ainsi « gelé ».

+ +
{{EmbedInteractiveExample("pages/js/object-freeze.html")}}
+ +

Syntaxe

+ +
Object.freeze(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet à geler.
+
+ +

Valeur de retour

+ +

L'objet qui a été passé à la fonction.

+ +

Description

+ +

Rien ne pourra être ajouté ou supprimé dans l'ensemble des propriétés de l'objet gelé. Toute tentative échouera, silencieusement ou via une exception {{jsxref("TypeError")}} (la plupart du temps en {{jsxref("Strict_mode", "mode strict", "", 1)}}).

+ +

Les propriétés qui sont des données ne pourront pas être changées et les attributs writable et configurable vaudront false. Les propriétés qui sont des accesseurs ou des mutateurs fonctionneront de la même façon (et ne changeront pas la valeur associée malgré le fait qu'il n'y ait pas d'erreur). Les propriétés dont les valeurs sont des objets pourront être modifiées si ces objets ne sont pas gelés. Les tableaux peuvent également être gelés ce qui empêche alors d'ajouter ou de retirer des éléments ou de modifier les éléments existants si ceux-ci ne sont pas des objets.

+ +

La fonction renvoie l'objet passé en argument, elle ne crée pas une copie « gelée ».

+ +

Exemples

+ +

Geler des objets

+ +
var obj = {
+  prop: function (){},
+  toto: "truc"
+};
+
+// On peut ajouter de nouvelles propriétés,
+// éditer ou supprimer celles existantes
+obj.toto = "machin";
+obj.bidule = "woof";
+delete obj.prop;
+
+// L'argument et la valeur renvoyée correspondent au
+// même objet.
+// Il n'est pas nécessaire d'utiliser la valeur renvoyée
+// pour geler l'objet original.
+var o = Object.freeze(obj);
+
+o === obj; // true
+Object.isFrozen(obj); // true
+
+// Maintenant que l'objet est gelé, les changements échoueront
+obj.toto = "eheh"; // échoue silencieusement
+obj.roxor = "ga bu zo meu"; // échoue silencieusement et n'ajoute
+                            // pas la propriété
+
+// ...en mode strict, l'échec se traduira par une exception TypeErrors
+function echec(){
+  "use strict";
+  obj.toto = "bipbip"; // renvoie une TypeError
+  delete obj.toto;     // renvoie une TypeError
+  delete obj.roxor;    // renvoie true car l'attribut n' a pas été ajouté
+  obj.bipbip = "arf";  // renvoie une  TypeError
+}
+
+echec();
+
+// Les changements via Object.defineProperty échoueront également
+// renvoie une TypeError
+Object.defineProperty(obj, "ohoh", { value: 17 });
+// renvoie une TypeError
+Object.defineProperty(obj, "toto", { value: "eit" });
+
+// Il est également impossible de modifier le prototype.
+// Les deux instructions suivantes déclencheront une TypeError.
+Object.setPrototypeOf(obj, { x: 20 });
+obj.__proto__ = { x: 20 };
+
+ +

Geler un tableau

+ +
let a = [0];
+Object.freeze(a);
+// Le tableau ne peut plus être modifié
+
+a[0] = 1;  // échoue silencieusement
+a.push(2); // échoue silencieusement
+
+// en mode strict, de telles tentatives
+// déclencheront des exceptions TypeError
+function echec() {
+  "use strict"
+  a[0] = 1;
+  a.push(2);
+}
+
+echec();
+
+ +

L'exemple qui suit illustre comment les propriétés qui sont des objets peuvent être éditées (la méthode freeze ne s'applique que sur l'objet courant et de façon superficielle).

+ +
obj1 = {
+  internal: {}
+};
+
+Object.freeze(obj1);
+obj1.internal.a = 'valeurA';
+
+obj1.internal.a // 'valeurA'
+ +

L'objet qui est gelé est immuable mais ce n'est pas nécessairement une constante. Pour obtenir une constante, il faut que l'ensemble des références (directes et indirectes) pointe vers des objets immuables. Les chaînes de caractères, les nombres et les booléens sont toujours immuables. La plupart du temps, on aura besoin de créer des constantes au cas par cas (et non de façon générale).

+ +

Qu'est-ce que le gel « superficiel » ? (shallow freeze)

+ +

Lorsqu'on appelle Object.freeze(monObjet), le gel ne s'applique qu'aux propriétés directement rattachées à monObjet. L'ajout, la suppression ou la réaffectation ne sont empêchées que sur l'objet directement. Si les valeurs de ces propriétés sont également des objets, ces derniers ne sont pas gelés et on peut leur ajouter/supprimer/réaffecter des valeurs.

+ +
var employé = {
+  nom: "Leroy",
+  designation: "Développeur",
+  adresse: {
+    cp: "72000",
+    ville: "Le Mans"
+  }
+};
+
+Object.freeze(employé);
+
+employé.nom = "John"; // propriété directe, la réaffectation échoue en silence
+employé.adresse.ville = "Paris"; // propriété d'un objet fils : modifiable
+
+console.log(employé.adresse.ville); // affichera Paris
+
+ +

Pour rendre l'objet complètement immuable, on gèle chacun des objets qu'il contient. Voici un exemple simple de fonction pour parcourir les propriétés qui sont des objets et les geler (attention, cela ne gère pas le cas où on a des cycles de références, ce qui entraînerait une boucle infinie).

+ +
function deepFreeze(obj) {
+
+  // On récupère les noms des propriétés définies sur obj
+  var propNames = Object.getOwnPropertyNames(obj);
+
+  // On gèle les propriétés avant de geler l'objet
+  for(let name of propNames){
+    let value = obj[name];
+    obj[name] = value && typeof value === "object" ?
+      deepFreeze(value) : value;
+  }
+
+  // On gèle l'objet initial
+  return Object.freeze(obj);
+}
+
+obj2 = {
+  internal: {
+    a: null
+  }
+};
+
+deepFreeze(obj2);
+obj2.internal.a = 'valeurB'; // échouera silencieusement en mode non-strict
+obj2.internal.a; // null
+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais est d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ECMAScript 2015 (ES2015), un argument qui n'est pas un objet sera traité comme un objet ordinaire gelé et sera renvoyé tel quel par la méthode.

+ +
Object.freeze(1);
+// TypeError: 1 is not an object - code ES5
+
+Object.freeze(1);
+// 1                             - code ES2015
+ +

Geler un {{domxref("ArrayBufferView")}} contenant des éléments entraînera une exception {{jsxref("TypeError")}} car ce sont des vues sur des zones mémoires.

+ +
> Object.freeze(new Uint8Array(0)) // Aucun élément
+Uint8Array []
+
+> Object.freeze(new Uint8Array(1)) // Avec des éléments
+TypeError: Cannot freeze array buffer views with elements
+
+> Object.freeze(new DataView(new ArrayBuffer(32))) // Aucun élément
+DataView {}
+
+> Object.freeze(new Float64Array(new ArrayBuffer(64), 63, 0)) // Aucun élément
+Float64Array []
+
+> Object.freeze(new Float64Array(new ArrayBuffer(64), 32, 2)) // Avec des éléments
+TypeError: Cannot freeze array buffer views with elements
+
+ +

On notera que les trois propriétés standard (buf.byteLength, buf.byteOffset et buf.buffer) sont en lecture seule (comme pour {{jsxref("ArrayBuffer")}} et {{jsxref("SharedArrayBuffer")}}) : il n'y a donc aucune raison de vouloir geler ces propriétés.

+ +

Comparaison avec Object.seal()

+ +

Lorsqu'on utilise la méthode Object.freeze(), les propriétés existantes d'un objet deviennent immuables. En revanche, avec {{jsxref("Object.seal()")}}, il est toujours possible de modifier la valeur des propriétés existantes d'un objet scellé.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.9', 'Object.freeze')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implémentée avec JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.freeze', 'Object.freeze')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.freeze', 'Object.freeze')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.freeze")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/fromentries/index.html b/files/fr/web/javascript/reference/global_objects/object/fromentries/index.html deleted file mode 100644 index 713a473ddf..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/fromentries/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Object.fromEntries() -slug: Web/JavaScript/Reference/Global_Objects/Object/fromEntries -tags: - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/fromEntries -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/fromEntries ---- -
{{JSRef}}
- -

La méthode Object.fromEntries() permet de transformer une liste de paires de clés/valeurs en un objet.

- -
{{EmbedInteractiveExample("pages/js/object-fromentries.html")}}
- -

Syntaxe

- -
Object.fromEntries(iterable);
- -

Paramètres

- -
-
iterable
-
Un itérable tel qu'un tableau ({{jsxref("Array")}}) ou une {{jsxref("Map")}} ou tout autre objet qui implémente le protocole itérable.
-
- -

Valeur de retour

- -

Un nouvel objet dont les propriétés sont fournies par les éléments de l'itérable.

- -

Description

- -

La méthode Object.fromEntries() prend comme argument une liste de paires de clés-valeurs et renvoie un nouvel objet dont les propriétés sont fournies par ces clés-valeurs. L'argument iterable doit implémenter une méthode @@iterator qui renvoie un itérateur produisant un objet semblable à un tableau avec deux éléments ; le premier élément est une valeur qui sera utilisée comme clé de la propriété et le second élément sera utilisé comme valeur associée à cette clé.

- -

Object.fromEntries() est la fonction inverse de {{jsxref("Object.entries()")}}.

- -

Exemples

- -

Convertir une Map en un Object

- -

Grâce à Object.fromEntries, on peut convertir des objets {{jsxref("Map")}} en {{jsxref("Object")}} :

- -
const map = new Map([ ['toto', 'truc'], ['machin', 42] ]);
-const obj = Object.fromEntries(map);
-console.log(obj); // { toto: "truc", machin: 42 }
-
- -

Convertir un Array en un Object

- -

Grâce à Object.fromEntries, on peut convertir des objets {{jsxref("Array")}} en {{jsxref("Object")}} :

- -
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
-const obj = Object.fromEntries(arr);
-console.log(obj); // { 0: "a", 1: "b", 2: "c" }
-
- -

Transformer des objets

- -

Avec Object.fromEntries et la méthode réciproque {{jsxref("Object.entries()")}}, et les méthodes de manipulation de tableaux, on peut transformer des objets :

- -
const object1 = { a: 1, b: 2, c: 3 };
-
-const object2 = Object.fromEntries(
-  Object.entries(object1)
-  .map(([ key, val ]) => [ key, val * 2 ])
-);
-
-console.log(object2);
-// { a: 2, b: 4, c: 6 }
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.fromentries', 'Object.fromEntries')}}{{Spec2('ESDraft')}}Définition initiale avec ES2019.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.fromEntries")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/fromentries/index.md b/files/fr/web/javascript/reference/global_objects/object/fromentries/index.md new file mode 100644 index 0000000000..713a473ddf --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/fromentries/index.md @@ -0,0 +1,105 @@ +--- +title: Object.fromEntries() +slug: Web/JavaScript/Reference/Global_Objects/Object/fromEntries +tags: + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/fromEntries +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/fromEntries +--- +
{{JSRef}}
+ +

La méthode Object.fromEntries() permet de transformer une liste de paires de clés/valeurs en un objet.

+ +
{{EmbedInteractiveExample("pages/js/object-fromentries.html")}}
+ +

Syntaxe

+ +
Object.fromEntries(iterable);
+ +

Paramètres

+ +
+
iterable
+
Un itérable tel qu'un tableau ({{jsxref("Array")}}) ou une {{jsxref("Map")}} ou tout autre objet qui implémente le protocole itérable.
+
+ +

Valeur de retour

+ +

Un nouvel objet dont les propriétés sont fournies par les éléments de l'itérable.

+ +

Description

+ +

La méthode Object.fromEntries() prend comme argument une liste de paires de clés-valeurs et renvoie un nouvel objet dont les propriétés sont fournies par ces clés-valeurs. L'argument iterable doit implémenter une méthode @@iterator qui renvoie un itérateur produisant un objet semblable à un tableau avec deux éléments ; le premier élément est une valeur qui sera utilisée comme clé de la propriété et le second élément sera utilisé comme valeur associée à cette clé.

+ +

Object.fromEntries() est la fonction inverse de {{jsxref("Object.entries()")}}.

+ +

Exemples

+ +

Convertir une Map en un Object

+ +

Grâce à Object.fromEntries, on peut convertir des objets {{jsxref("Map")}} en {{jsxref("Object")}} :

+ +
const map = new Map([ ['toto', 'truc'], ['machin', 42] ]);
+const obj = Object.fromEntries(map);
+console.log(obj); // { toto: "truc", machin: 42 }
+
+ +

Convertir un Array en un Object

+ +

Grâce à Object.fromEntries, on peut convertir des objets {{jsxref("Array")}} en {{jsxref("Object")}} :

+ +
const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
+const obj = Object.fromEntries(arr);
+console.log(obj); // { 0: "a", 1: "b", 2: "c" }
+
+ +

Transformer des objets

+ +

Avec Object.fromEntries et la méthode réciproque {{jsxref("Object.entries()")}}, et les méthodes de manipulation de tableaux, on peut transformer des objets :

+ +
const object1 = { a: 1, b: 2, c: 3 };
+
+const object2 = Object.fromEntries(
+  Object.entries(object1)
+  .map(([ key, val ]) => [ key, val * 2 ])
+);
+
+console.log(object2);
+// { a: 2, b: 4, c: 6 }
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.fromentries', 'Object.fromEntries')}}{{Spec2('ESDraft')}}Définition initiale avec ES2019.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.fromEntries")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html b/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html deleted file mode 100644 index c0166fad63..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: Object.getOwnPropertyDescriptor() -slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor -tags: - - ECMAScript 5 - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptor ---- -
{{JSRef}}
- -

La méthode Object.getOwnPropertyDescriptor() renvoie un descripteur de la propriété propre d'un objet (c'est-à-dire une propriété directement présente et pas héritée via la chaîne de prototypes).

- -
{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptor.html")}}
- -

Syntaxe

- -
Object.getOwnPropertyDescriptor(obj, prop)
- -

Paramètres

- -
-
obj
-
L'objet sur lequel on cherche la propriété.
-
prop
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on souhaite avoir la description.
-
- -

Valeur de retour

- -

Un descripteur de propriété de la propriété souhaitée si elle existe pour l'objet en question, sinon {{jsxref("undefined")}}.

- -

Description

- -

Cette méthode permet d'avoir des informations précises sur une propriété. Une propriété JavaScript est un nom (qui est une chaîne de caractères) ou un symbole ({{jsxref("Symbol")}}) associé à un descripteur. Voir la page {{jsxref("Object.defineProperty")}} pour plus d'informations sur les descripteurs de propriétés.

- -

Un descripteur de propriété est un enregistrement qui dispose des attributs suivants :

- -
-
value
-
La valeur associée à la propriété (pour les descripteurs de données uniquement).
-
writable
-
true si et seulement si la valeur associée à la propriété peut être changée (pour les descripteurs de données uniquement).
-
get
-
Une fonction qui joue le rôle d'accesseur (getter) pour la propriété ou {{jsxref("undefined")}} s'il n'y a pas d'accesseur (pour les descripteurs d'accesseurs uniquement).
-
set
-
Une fonction qui joue le rôle de mutateur (setter) pour la propriété ou undefined s'il n'y a pas de tel mutateur (pour les descripteurs d'accesseurs uniquement).
-
configurable
-
true si et seulement si le type du descripteur peut être changé et si la propriété peut être supprimée de l'objet.
-
enumerable
-
true si et seulement si la propriété doit apparaître lors d'une énumération des propriétés de l'objet.
-
- -

Exemples

- -
var o, d;
-
-o = { get toto() { return 17; } };
-d = Object.getOwnPropertyDescriptor(o, "toto");
-// d : {
-//       configurable: true,
-//       enumerable: true,
-//       get: /*l'accesseur*/,
-//       set: undefined
-//    }
-
-o = { truc: 42 };
-d = Object.getOwnPropertyDescriptor(o, "truc");
-// d : {
-//        configurable: true,
-//        enumerable: true,
-//        value: 42,
-//        writable: true
-//      }
-
-o = {};
-Object.defineProperty(o, "machin", {
-                                      value: 8675309,
-                                      writable: false,
-                                      enumerable: false });
-d = Object.getOwnPropertyDescriptor(o, "machin");
-// d : {
-//        value: 8675309,
-//        writable: false,
-//        enumerable: false,
-//        configurable: false
-//      }
- -

Notes

- -

Pour ES5, si le premier argument de la méthode n'est pas un objet (mais une valeur d'un autre type), une exception {{jsxref("TypeError")}} sera levée. Pour ES2015, un argument non-objet sera d'abord converti en objet avant d'appliquer la méthode.

- -
Object.getOwnPropertyDescriptor("toto", 0);
-// TypeError: "toto" n'est pas un objet  // code ES5
-
-// code ES2015
-Object.getOwnPropertyDescriptor("toto", 0);
-// {
-//    configurable:false,
-//    enumerable:true,
-//    value:"f",
-//    writable:false
-// }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.3', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ES5.1')}}Définition initiale.
- Implémentée avec JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.getOwnPropertyDescriptor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.md b/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.md new file mode 100644 index 0000000000..c0166fad63 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.md @@ -0,0 +1,146 @@ +--- +title: Object.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor +tags: + - ECMAScript 5 + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

La méthode Object.getOwnPropertyDescriptor() renvoie un descripteur de la propriété propre d'un objet (c'est-à-dire une propriété directement présente et pas héritée via la chaîne de prototypes).

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptor.html")}}
+ +

Syntaxe

+ +
Object.getOwnPropertyDescriptor(obj, prop)
+ +

Paramètres

+ +
+
obj
+
L'objet sur lequel on cherche la propriété.
+
prop
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on souhaite avoir la description.
+
+ +

Valeur de retour

+ +

Un descripteur de propriété de la propriété souhaitée si elle existe pour l'objet en question, sinon {{jsxref("undefined")}}.

+ +

Description

+ +

Cette méthode permet d'avoir des informations précises sur une propriété. Une propriété JavaScript est un nom (qui est une chaîne de caractères) ou un symbole ({{jsxref("Symbol")}}) associé à un descripteur. Voir la page {{jsxref("Object.defineProperty")}} pour plus d'informations sur les descripteurs de propriétés.

+ +

Un descripteur de propriété est un enregistrement qui dispose des attributs suivants :

+ +
+
value
+
La valeur associée à la propriété (pour les descripteurs de données uniquement).
+
writable
+
true si et seulement si la valeur associée à la propriété peut être changée (pour les descripteurs de données uniquement).
+
get
+
Une fonction qui joue le rôle d'accesseur (getter) pour la propriété ou {{jsxref("undefined")}} s'il n'y a pas d'accesseur (pour les descripteurs d'accesseurs uniquement).
+
set
+
Une fonction qui joue le rôle de mutateur (setter) pour la propriété ou undefined s'il n'y a pas de tel mutateur (pour les descripteurs d'accesseurs uniquement).
+
configurable
+
true si et seulement si le type du descripteur peut être changé et si la propriété peut être supprimée de l'objet.
+
enumerable
+
true si et seulement si la propriété doit apparaître lors d'une énumération des propriétés de l'objet.
+
+ +

Exemples

+ +
var o, d;
+
+o = { get toto() { return 17; } };
+d = Object.getOwnPropertyDescriptor(o, "toto");
+// d : {
+//       configurable: true,
+//       enumerable: true,
+//       get: /*l'accesseur*/,
+//       set: undefined
+//    }
+
+o = { truc: 42 };
+d = Object.getOwnPropertyDescriptor(o, "truc");
+// d : {
+//        configurable: true,
+//        enumerable: true,
+//        value: 42,
+//        writable: true
+//      }
+
+o = {};
+Object.defineProperty(o, "machin", {
+                                      value: 8675309,
+                                      writable: false,
+                                      enumerable: false });
+d = Object.getOwnPropertyDescriptor(o, "machin");
+// d : {
+//        value: 8675309,
+//        writable: false,
+//        enumerable: false,
+//        configurable: false
+//      }
+ +

Notes

+ +

Pour ES5, si le premier argument de la méthode n'est pas un objet (mais une valeur d'un autre type), une exception {{jsxref("TypeError")}} sera levée. Pour ES2015, un argument non-objet sera d'abord converti en objet avant d'appliquer la méthode.

+ +
Object.getOwnPropertyDescriptor("toto", 0);
+// TypeError: "toto" n'est pas un objet  // code ES5
+
+// code ES2015
+Object.getOwnPropertyDescriptor("toto", 0);
+// {
+//    configurable:false,
+//    enumerable:true,
+//    value:"f",
+//    writable:false
+// }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.3', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implémentée avec JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.getOwnPropertyDescriptor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html b/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html deleted file mode 100644 index 5e3b853e50..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Object.getOwnPropertyDescriptors() -slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors -tags: - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptors ---- -
{{JSRef}}
- -

La méthode Object.getOwnPropertyDescriptors() renvoie l'ensemble des descripteurs des propriétés propres d'un objet donné.

- -
{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptors.html")}}
- -

Syntaxe

- -
Object.getOwnPropertyDescriptors(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite connaître les descripteurs des propriétés.
-
- -

Valeur de retour

- -

Un objet qui contient tous les descripteurs des propriétés propres de l'objet passé en paramètre. S'il n'y aucune propriété, cela sera un objet vide.

- -

Description

- -

Cette méthode permet d'examiner de façon précise les différentes propriétés directement rattachées à un objet. Une propriété JavaScript se définit par un nom (une chaîne de caractères) ou un symbole ({{jsxref("Symbol")}}) et un descripteur. Vous pouvez trouver de plus amples informations sur les types de descripteurs et sur leurs attributs sur la page de {{jsxref("Object.defineProperty()")}}.

- -

Un descripteur de propriété est un enregistrement qui possède les attributs suivants :

- -
-
value
-
La valeur associée à la propriété (uniquement pour les descripteurs de données).
-
writable
-
true si et seulement si la valeur associée à la propriété peut être changée (uniquement pour les descripteurs de données).
-
get
-
Une fonction qui est utilisée comme accesseur pour la propriété ou {{jsxref("undefined")}} s'il n'existe pas de tel accesseur (uniquement pour les descripteurs d'accesseur/mutateur).
-
set
-
Une fonction qui est utilisée comme mutateur pour la propriété ou {{jsxref("undefined")}} s'il n'existe pas de tel mutateur (uniquement pour les descripteurs d'accesseur/mutateur).
-
configurable
-
true si et seulement si le type de descripteur peut être changé et si la propriété peut être supprimée de l'objet correspondant.
-
enumerable
-
true si et seulement si cette propriété est listée lorsqu'on énumère les propriétés de l'objet correspondant.
-
- -

Exemples

- -

Créer un clone

- -

La méthode {{jsxref("Object.assign()")}} ne copiera que les propriétés propres et énumérables d'un objet source vers un objet cible. On peut donc utiliser cette méthode avec {{jsxref("Object.create()")}} afin de réaliser une copie « plate » entre deux objets inconnus :

- -
Object.create(
-  Object.getPrototypeOf(obj),
-  Object.getOwnPropertyDescriptors(obj)
-);
-
- -

Créer une sous-classe

- -

Pour créer une sous-classe, généralement, on définit la sous-classe et on définit son prototype comme étant une instance de la classe parente. Enfin on définit les propriétés de cette nouvelle sous-classe.

- -
function superclass() {};
-superclass.prototype = {
-  // on définit les méthodes et propriétés
-  // de la classe parente
-};
-
-function subclass() {};
-subclass.prototype = Object.create(
-  superclass.prototype,
-  Object.getOwnPropertyDescriptors({
-  // on définit les méthodes et propriétés
-  // de la sous-classe
-}));
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}{{Spec2('ESDraft')}} 
{{SpecName('ES2017', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}{{Spec2('ES2017')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.getOwnPropertyDescriptors")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.md b/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.md new file mode 100644 index 0000000000..5e3b853e50 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.md @@ -0,0 +1,117 @@ +--- +title: Object.getOwnPropertyDescriptors() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors +tags: + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyDescriptors +--- +
{{JSRef}}
+ +

La méthode Object.getOwnPropertyDescriptors() renvoie l'ensemble des descripteurs des propriétés propres d'un objet donné.

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptors.html")}}
+ +

Syntaxe

+ +
Object.getOwnPropertyDescriptors(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite connaître les descripteurs des propriétés.
+
+ +

Valeur de retour

+ +

Un objet qui contient tous les descripteurs des propriétés propres de l'objet passé en paramètre. S'il n'y aucune propriété, cela sera un objet vide.

+ +

Description

+ +

Cette méthode permet d'examiner de façon précise les différentes propriétés directement rattachées à un objet. Une propriété JavaScript se définit par un nom (une chaîne de caractères) ou un symbole ({{jsxref("Symbol")}}) et un descripteur. Vous pouvez trouver de plus amples informations sur les types de descripteurs et sur leurs attributs sur la page de {{jsxref("Object.defineProperty()")}}.

+ +

Un descripteur de propriété est un enregistrement qui possède les attributs suivants :

+ +
+
value
+
La valeur associée à la propriété (uniquement pour les descripteurs de données).
+
writable
+
true si et seulement si la valeur associée à la propriété peut être changée (uniquement pour les descripteurs de données).
+
get
+
Une fonction qui est utilisée comme accesseur pour la propriété ou {{jsxref("undefined")}} s'il n'existe pas de tel accesseur (uniquement pour les descripteurs d'accesseur/mutateur).
+
set
+
Une fonction qui est utilisée comme mutateur pour la propriété ou {{jsxref("undefined")}} s'il n'existe pas de tel mutateur (uniquement pour les descripteurs d'accesseur/mutateur).
+
configurable
+
true si et seulement si le type de descripteur peut être changé et si la propriété peut être supprimée de l'objet correspondant.
+
enumerable
+
true si et seulement si cette propriété est listée lorsqu'on énumère les propriétés de l'objet correspondant.
+
+ +

Exemples

+ +

Créer un clone

+ +

La méthode {{jsxref("Object.assign()")}} ne copiera que les propriétés propres et énumérables d'un objet source vers un objet cible. On peut donc utiliser cette méthode avec {{jsxref("Object.create()")}} afin de réaliser une copie « plate » entre deux objets inconnus :

+ +
Object.create(
+  Object.getPrototypeOf(obj),
+  Object.getOwnPropertyDescriptors(obj)
+);
+
+ +

Créer une sous-classe

+ +

Pour créer une sous-classe, généralement, on définit la sous-classe et on définit son prototype comme étant une instance de la classe parente. Enfin on définit les propriétés de cette nouvelle sous-classe.

+ +
function superclass() {};
+superclass.prototype = {
+  // on définit les méthodes et propriétés
+  // de la classe parente
+};
+
+function subclass() {};
+subclass.prototype = Object.create(
+  superclass.prototype,
+  Object.getOwnPropertyDescriptors({
+  // on définit les méthodes et propriétés
+  // de la sous-classe
+}));
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}{{Spec2('ESDraft')}} 
{{SpecName('ES2017', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}{{Spec2('ES2017')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.getOwnPropertyDescriptors")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.html b/files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.html deleted file mode 100644 index 88f96ed522..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.html +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Object.getOwnPropertyNames() -slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyNames ---- -
{{JSRef}}
- -

La méthode Object.getOwnPropertyNames() renvoie un tableau de toutes les propriétés (qu'elles soient énumérables ou non, tant qu'elles ne sont pas désignées par un symbole) propres à un objet (c'est-à-dire n'étant pas héritées via la chaîne de prototypes).

- -
{{EmbedInteractiveExample("pages/js/object-getownpropertynames.html")}}
- -

Syntaxe

- -
Object.getOwnPropertyNames(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont seront listées les propriétés propres énumérables et non-énumérables.
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères qui sont les noms des propriétés propres (celles directement rattachées à l'objet) de l'objet passé en argument.

- -

Description

- -

Object.getOwnPropertyNames renvoie un tableau dont les éléments sont des chaînes de caractères correspondant aux noms des propriétés énumerables et non-énumerables appartenant directement à l'objet obj. L'ordre des propriétés énumérables est cohérent avec l'ordre utilisé dans une boucle {{jsxref("Instructions/for...in","for...in")}} (ou avec {{jsxref("Object.keys")}}) parmi les propriétés de l'objet. L'ordre des propriétés non-énumérables dans le tableau et parmi les propriétés énumérables n'est pas défini.

- -

Exemples

- -

Utiliser Object.getOwnPropertyNames()

- -
var arr = ["a", "b", "c"];
-console.log(Object.getOwnPropertyNames(arr).sort());
-// ["0", "1", "2", "length"]
-
-// Objet semblable à un tableau (array-like)
-var obj = { 0: "a", 1: "b", 2: "c"};
-console.log(Object.getOwnPropertyNames(obj).sort());
-// ["0", "1", "2"]
-
-
-// On affiche les noms et les valeurs
-// des propriétés avec Array.forEach
-Object.getOwnPropertyNames(obj).forEach(
-  function(val, idx, array) {
-    console.log(val + " -> " + obj[val]);
-});
-// affiche
-// 0 -> a
-// 1 -> b
-// 2 -> c
-
-// propriété non-énumérable
-var mon_obj = Object.create({}, {
-  getToto: {
-    value: function() { return this.toto; },
-    enumerable: false
-  }
-});
-mon_obj.toto = 1;
-
-console.log(Object.getOwnPropertyNames(mon_obj).sort());
-// ["toto", "getToto"]
-
- -

Si on souhaite n'avoir que les propriétés énumérables, on peut utiliser {{jsxref("Object.keys")}} ou bien une boucle {{jsxref("Instructions/for...in","for...in")}} (cette méthode renverra également les propriétés héritées via la chaîne de prototypes si on ne filtre pas avec la méthode {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}}).

- -

Les propriétés héritées via la chaîne de prototype ne sont pas listées :

- -
function ClasseParente() {}
-ClasseParente.prototype.inheritedMethod = function () {};
-
-function ClasseFille () {
-  this.prop = 5;
-  this.method = function () {};
-}
-ClasseFille.prototype = new ClasseParente();
-ClasseFille.prototype.prototypeMethod = function () {};
-
-console.log(
-  Object.getOwnPropertyNames(
-    new ClasseFille() // ["prop", "method"]
-  )
-)
-
- -

Obtenir uniquement les propriétés non-énumérables

- -

On utilise ici la fonction {{jsxref("Array.prototype.filter()")}} pour retirer les clés énumérables (obtenus avec {{jsxref("Object.keys()")}}) de la liste de toutes les clés (obtenues avec Object.getOwnPropertynames) afin de n'avoir que les propriétés propres non-énumérables.

- -
var target = myObject;
-var enum_et_nonenum = Object.getOwnPropertyNames(target);
-var enum_uniquement = Object.keys(target);
-var nonenum_uniquement = enum_et_nonenum.filter(function(key) {
-  var indexInEnum = enum_uniquement.indexOf(key)
-  if (indexInEnum == -1) {
-    // non trouvée dans enum_uniquement indique
-    // que la clé est non-énumérable, on la
-    // garde donc dans le filtre avec true
-    return true;
-  } else {
-    return false;
-  }
-});
-
-console.log(nonenum_uniquement);
-
- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais une valeur d'un autre type primitif), une exception {{jsxref("TypeError")}} sera levée. Pour ES2015, un argument qui n'est pas un objet sera d'abord transformé en objet avant que la méthode soit appliquée.

- -
Object.getOwnPropertyNames('toto')
-TypeError: "toto" n'est pas un objet // code ES5
-
-Object.getOwnPropertyNames('toto')
-['length', '0', '1', '2']         // code ES2015
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.4', 'Object.getOwnPropertyNames')}}{{Spec2('ES5.1')}}Définition initiale.
- Implémentée avec JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.getOwnPropertyNames")}}

- -

Notes spécifiques à Firefox

- -

Pour les versions antérieures à Firefox 28 {{geckoRelease("28")}}, Object.getOwnPropertyNames ne listait pas les propriétés non-résolues des objets {{jsxref("Error")}}. Cela a été résolu dans les versions suivantes ({{bug("724768")}}).

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.md b/files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.md new file mode 100644 index 0000000000..88f96ed522 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/getownpropertynames/index.md @@ -0,0 +1,177 @@ +--- +title: Object.getOwnPropertyNames() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertyNames +--- +
{{JSRef}}
+ +

La méthode Object.getOwnPropertyNames() renvoie un tableau de toutes les propriétés (qu'elles soient énumérables ou non, tant qu'elles ne sont pas désignées par un symbole) propres à un objet (c'est-à-dire n'étant pas héritées via la chaîne de prototypes).

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertynames.html")}}
+ +

Syntaxe

+ +
Object.getOwnPropertyNames(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont seront listées les propriétés propres énumérables et non-énumérables.
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères qui sont les noms des propriétés propres (celles directement rattachées à l'objet) de l'objet passé en argument.

+ +

Description

+ +

Object.getOwnPropertyNames renvoie un tableau dont les éléments sont des chaînes de caractères correspondant aux noms des propriétés énumerables et non-énumerables appartenant directement à l'objet obj. L'ordre des propriétés énumérables est cohérent avec l'ordre utilisé dans une boucle {{jsxref("Instructions/for...in","for...in")}} (ou avec {{jsxref("Object.keys")}}) parmi les propriétés de l'objet. L'ordre des propriétés non-énumérables dans le tableau et parmi les propriétés énumérables n'est pas défini.

+ +

Exemples

+ +

Utiliser Object.getOwnPropertyNames()

+ +
var arr = ["a", "b", "c"];
+console.log(Object.getOwnPropertyNames(arr).sort());
+// ["0", "1", "2", "length"]
+
+// Objet semblable à un tableau (array-like)
+var obj = { 0: "a", 1: "b", 2: "c"};
+console.log(Object.getOwnPropertyNames(obj).sort());
+// ["0", "1", "2"]
+
+
+// On affiche les noms et les valeurs
+// des propriétés avec Array.forEach
+Object.getOwnPropertyNames(obj).forEach(
+  function(val, idx, array) {
+    console.log(val + " -> " + obj[val]);
+});
+// affiche
+// 0 -> a
+// 1 -> b
+// 2 -> c
+
+// propriété non-énumérable
+var mon_obj = Object.create({}, {
+  getToto: {
+    value: function() { return this.toto; },
+    enumerable: false
+  }
+});
+mon_obj.toto = 1;
+
+console.log(Object.getOwnPropertyNames(mon_obj).sort());
+// ["toto", "getToto"]
+
+ +

Si on souhaite n'avoir que les propriétés énumérables, on peut utiliser {{jsxref("Object.keys")}} ou bien une boucle {{jsxref("Instructions/for...in","for...in")}} (cette méthode renverra également les propriétés héritées via la chaîne de prototypes si on ne filtre pas avec la méthode {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}}).

+ +

Les propriétés héritées via la chaîne de prototype ne sont pas listées :

+ +
function ClasseParente() {}
+ClasseParente.prototype.inheritedMethod = function () {};
+
+function ClasseFille () {
+  this.prop = 5;
+  this.method = function () {};
+}
+ClasseFille.prototype = new ClasseParente();
+ClasseFille.prototype.prototypeMethod = function () {};
+
+console.log(
+  Object.getOwnPropertyNames(
+    new ClasseFille() // ["prop", "method"]
+  )
+)
+
+ +

Obtenir uniquement les propriétés non-énumérables

+ +

On utilise ici la fonction {{jsxref("Array.prototype.filter()")}} pour retirer les clés énumérables (obtenus avec {{jsxref("Object.keys()")}}) de la liste de toutes les clés (obtenues avec Object.getOwnPropertynames) afin de n'avoir que les propriétés propres non-énumérables.

+ +
var target = myObject;
+var enum_et_nonenum = Object.getOwnPropertyNames(target);
+var enum_uniquement = Object.keys(target);
+var nonenum_uniquement = enum_et_nonenum.filter(function(key) {
+  var indexInEnum = enum_uniquement.indexOf(key)
+  if (indexInEnum == -1) {
+    // non trouvée dans enum_uniquement indique
+    // que la clé est non-énumérable, on la
+    // garde donc dans le filtre avec true
+    return true;
+  } else {
+    return false;
+  }
+});
+
+console.log(nonenum_uniquement);
+
+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais une valeur d'un autre type primitif), une exception {{jsxref("TypeError")}} sera levée. Pour ES2015, un argument qui n'est pas un objet sera d'abord transformé en objet avant que la méthode soit appliquée.

+ +
Object.getOwnPropertyNames('toto')
+TypeError: "toto" n'est pas un objet // code ES5
+
+Object.getOwnPropertyNames('toto')
+['length', '0', '1', '2']         // code ES2015
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.4', 'Object.getOwnPropertyNames')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implémentée avec JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.getOwnPropertyNames")}}

+ +

Notes spécifiques à Firefox

+ +

Pour les versions antérieures à Firefox 28 {{geckoRelease("28")}}, Object.getOwnPropertyNames ne listait pas les propriétés non-résolues des objets {{jsxref("Error")}}. Cela a été résolu dans les versions suivantes ({{bug("724768")}}).

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html b/files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html deleted file mode 100644 index 965712b26d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Object.getOwnPropertySymbols() -slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertySymbols ---- -
{{JSRef}}
- -

La méthode Object.getOwnPropertySymbols() renvoie un tableau contenant tous les symboles des propriétés trouvées directement sur un objet donné.

- -
{{EmbedInteractiveExample("pages/js/object-getownpropertysymbols.html")}}
- -

Syntaxe

- -
Object.getOwnPropertySymbols(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite lister les symboles des propriétés propres.
-
- -

Valeur de retour

- -

Un tableau des symboles trouvés directement sur l'objet passé en argument.

- -

Description

- -

De la même façon que {{jsxref("Object.getOwnPropertyNames()")}}, il est possible d'avoir la liste des symboles des propriétés d'un objet donné sous forme d'un tableau. La méthode {{jsxref("Object.getOwnPropertyNames()")}} ne contiendra uniquement que les propriétés « nommées » d'un objet et non pas les propriétés uniquement accessibles via un symbole.

- -

Par défaut, aucun objet ne possède de propriété accessible via un symbole à l'état initial. Ainsi, Object.getOwnPropertySymbols() renvoie un tableau vide sauf si des propriétés nommées avec des symboles ont été définies pour l'objet.

- -

Exemples

- -
var obj = {};
-var a = Symbol("a");
-var b = Symbol.for("b");
-
-obj[a] = "symboleLocal";
-obj[b] = "symboleGlobal";
-
-var objectSymboles = Object.getOwnPropertySymbols(obj);
-
-console.log(objectSymboles.length); // 2
-console.log(objectSymboles)         // [Symbol(a), Symbol(b)]
-console.log(objectSymboles[0])      // Symbol(a)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.getownpropertysymbols', 'Object.getOwnPropertySymbols')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-object.getownpropertysymbols', 'Object.getOwnPropertySymbols')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.getOwnPropertySymbols")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.md b/files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.md new file mode 100644 index 0000000000..965712b26d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/getownpropertysymbols/index.md @@ -0,0 +1,87 @@ +--- +title: Object.getOwnPropertySymbols() +slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getOwnPropertySymbols +--- +
{{JSRef}}
+ +

La méthode Object.getOwnPropertySymbols() renvoie un tableau contenant tous les symboles des propriétés trouvées directement sur un objet donné.

+ +
{{EmbedInteractiveExample("pages/js/object-getownpropertysymbols.html")}}
+ +

Syntaxe

+ +
Object.getOwnPropertySymbols(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite lister les symboles des propriétés propres.
+
+ +

Valeur de retour

+ +

Un tableau des symboles trouvés directement sur l'objet passé en argument.

+ +

Description

+ +

De la même façon que {{jsxref("Object.getOwnPropertyNames()")}}, il est possible d'avoir la liste des symboles des propriétés d'un objet donné sous forme d'un tableau. La méthode {{jsxref("Object.getOwnPropertyNames()")}} ne contiendra uniquement que les propriétés « nommées » d'un objet et non pas les propriétés uniquement accessibles via un symbole.

+ +

Par défaut, aucun objet ne possède de propriété accessible via un symbole à l'état initial. Ainsi, Object.getOwnPropertySymbols() renvoie un tableau vide sauf si des propriétés nommées avec des symboles ont été définies pour l'objet.

+ +

Exemples

+ +
var obj = {};
+var a = Symbol("a");
+var b = Symbol.for("b");
+
+obj[a] = "symboleLocal";
+obj[b] = "symboleGlobal";
+
+var objectSymboles = Object.getOwnPropertySymbols(obj);
+
+console.log(objectSymboles.length); // 2
+console.log(objectSymboles)         // [Symbol(a), Symbol(b)]
+console.log(objectSymboles[0])      // Symbol(a)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.getownpropertysymbols', 'Object.getOwnPropertySymbols')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-object.getownpropertysymbols', 'Object.getOwnPropertySymbols')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.getOwnPropertySymbols")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.html deleted file mode 100644 index 59e9a065ed..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Object.getPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf -tags: - - ECMAScript5 - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getPrototypeOf ---- -
{{JSRef}}
- -

La méthode Object.getPrototypeOf() renvoie le prototype d'un objet donné (i.e. la valeur de la propriété [[Prototype]] interne).

- -
{{EmbedInteractiveExample("pages/js/object-getprototypeof.html")}}
- -

Syntaxe

- -
Object.getPrototypeOf(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite obtenir le prototype.
-
- -

Valeur de retour

- -

Le prototype de l'objet passé en argument. Si aucune propriété n'est héritée, c'est la valeur {{jsxref("null")}} qui est renvoyée.

- -

Exemples

- -
var proto = {};
-var obj = Object.create(proto);
-Object.getPrototypeOf(obj) === proto; // true
-
- -

Notes

- -

Pour ES5, la méthode renvoie une exception {{jsxref("TypeError")}} si le paramètre obj n'est pas un objet. Pour ES2015, le paramètre sera converti en un objet avant l'application de la méthode.

- -
Object.getPrototypeOf("toto");
-// TypeError: "toto" n'est pas un objet (code ES5)
-Object.getPrototypeOf("toto");
-// String.prototype                     (code ES2015)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.2', 'Object.getPrototypeOf')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES6', '#sec-object.getprototypeof', 'Object.getPrototypeOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.getprototypeof', 'Object.getPrototypeOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.getPrototypeOf")}}

- -

Notes relatives à Opera

- -

Bien que les anciennes versions d'Opera ne supportent pas Object.getPrototypeOf(), Opera supporte la propriété non-standard {{jsxref("Object.proto", "__proto__")}} depuis Opera 10.50.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.md new file mode 100644 index 0000000000..59e9a065ed --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/getprototypeof/index.md @@ -0,0 +1,96 @@ +--- +title: Object.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf +tags: + - ECMAScript5 + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/getPrototypeOf +--- +
{{JSRef}}
+ +

La méthode Object.getPrototypeOf() renvoie le prototype d'un objet donné (i.e. la valeur de la propriété [[Prototype]] interne).

+ +
{{EmbedInteractiveExample("pages/js/object-getprototypeof.html")}}
+ +

Syntaxe

+ +
Object.getPrototypeOf(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite obtenir le prototype.
+
+ +

Valeur de retour

+ +

Le prototype de l'objet passé en argument. Si aucune propriété n'est héritée, c'est la valeur {{jsxref("null")}} qui est renvoyée.

+ +

Exemples

+ +
var proto = {};
+var obj = Object.create(proto);
+Object.getPrototypeOf(obj) === proto; // true
+
+ +

Notes

+ +

Pour ES5, la méthode renvoie une exception {{jsxref("TypeError")}} si le paramètre obj n'est pas un objet. Pour ES2015, le paramètre sera converti en un objet avant l'application de la méthode.

+ +
Object.getPrototypeOf("toto");
+// TypeError: "toto" n'est pas un objet (code ES5)
+Object.getPrototypeOf("toto");
+// String.prototype                     (code ES2015)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.2', 'Object.getPrototypeOf')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES6', '#sec-object.getprototypeof', 'Object.getPrototypeOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.getprototypeof', 'Object.getPrototypeOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.getPrototypeOf")}}

+ +

Notes relatives à Opera

+ +

Bien que les anciennes versions d'Opera ne supportent pas Object.getPrototypeOf(), Opera supporte la propriété non-standard {{jsxref("Object.proto", "__proto__")}} depuis Opera 10.50.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.html b/files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.html deleted file mode 100644 index f7fa173baa..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.html +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: Object.prototype.hasOwnProperty() -slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty -tags: - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/hasOwnProperty ---- -
{{JSRef}}
- -

La méthode hasOwnProperty() retourne un booléen indiquant si l'objet possède la propriété spécifiée "en propre", sans que celle-ci provienne de la chaîne de prototypes de l'objet.

- -
{{EmbedInteractiveExample("pages/js/object-prototype-hasownproperty.html")}}
- -

Syntaxe

- -
obj.hasOwnProperty(prop)
- -

Paramètres

- -
-
prop
-
Le nom ({{jsxref("String")}}) ou le symbole ({{jsxref("Symbol")}}) de la propriété à tester.
-
- -

Valeur de retour

- -

Un booléen qui indique si l'objet possède ou non la propriété indiquée en argument et que celle-ci est directement rattachée à l'objet (elle ne provient pas de la chaîne de prototypes de l'objet). hasOwnProperty() renvoie true si la propriété existe et que sa valeur est {{jsxref("null")}} ou {{jsxref("undefined")}}.

- -

Description

- -

Chaque objet descendant d'{{jsxref("Object")}} hérite de la méthode hasOwnProperty(). Cette méthode peut être utilisée pour déterminer si un objet a la propriété spécifiée en tant que propriété directe de cet objet. Contrairement à l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}, cette méthode ne vérifie pas la chaîne des prototypes de l'objet. Si l'objet est un tableau ({{jsxref("Array")}}), la méthode hasOwnProperty() pourra être utilisée afin de vérifier la présence d'un index.

- -

Exemples

- -

Utiliser hasOwnProperty() pour tester l'existence d'une propriété

- -

L'exemple suivant détermine si l'objet o contient une propriété appelée prop:

- -
o = new Object();
-o.hasOwnProperty('prop'); // false
-o.prop = 'exists';
-o.hasOwnProperty('prop'); // true
- -

Propriétés directes et propriétés héritées

- -

L'exemple suivant illustre la différence entre les propriétés directes et les propriétés héritées à partir de la chaîne de prototypes :

- -
o = new Object();
-o.prop = 'exists';
-
-o.hasOwnProperty('prop');
-// retourne true
-
-o.hasOwnProperty('toString');
-// retourne false
-
-o.hasOwnProperty('hasOwnProperty');
-// retourne false
- -

Parcourir les propriétés d'un objet

- -

L'exemple suivant montre comment parcourir les propriétés d'un objet sans traiter les propriétés héritées. On notera que la boucle  {{jsxref("Instructions/for...in", "for...in")}} ne prend en compte que les éléments énumérables. Il ne faut donc pas déduire de l'absence de propriétés non-énumérables dans la boucle, que hasOwnProperty() est elle-même strictement restreinte aux éléments énumérables (comme c'est le cas pour {{jsxref("Object.getOwnPropertyNames()")}}) .

- -
var bidule = {
-    truc: 'stack'
-};
-
-for (var nom in bidule) {
-    if (bidule.hasOwnProperty(nom)) {
-        console.log("C'est bien la propriété (" +
-                     nom +
-                     "), sa valeur : " + bidule[nom]
-                    );
-    }
-    else {
-        console.log(nom);
-        // toString ou autre
-    }
-}
- -

hasOwnProperty() en tant que propriété

- -

JavaScript ne protège pas le nom de propriété hasOwnProperty, ainsi il est possible qu'un objet puisse avoir une propriété avec ce nom, il sera donc nécessaire d'utiliser une version externe de la méthode pour obtenir des résultats corrects.

- -
var toto = {
-  hasOwnProperty: function() {
-    return false;
-  },
-  truc: 'Voici les dragons'
-};
-
-toto.hasOwnProperty('truc'); // renvoie toujours false
-
-// On utilise une méthode d'un autre objet
-// et on l'appelle avec this qui vaut toto
-({}).hasOwnProperty.call(toto, 'truc'); // true
-
-// On peut aussi utiliser la propriété hasOwnProperty de Object prototype
-Object.prototype.hasOwnProperty.call(toto, 'truc'); // true
-
- -

La dernière version utilisée permet de ne pas créer d'objet supplémentaire.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.hasOwnProperty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.md b/files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.md new file mode 100644 index 0000000000..f7fa173baa --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/hasownproperty/index.md @@ -0,0 +1,155 @@ +--- +title: Object.prototype.hasOwnProperty() +slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty +tags: + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/hasOwnProperty +--- +
{{JSRef}}
+ +

La méthode hasOwnProperty() retourne un booléen indiquant si l'objet possède la propriété spécifiée "en propre", sans que celle-ci provienne de la chaîne de prototypes de l'objet.

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-hasownproperty.html")}}
+ +

Syntaxe

+ +
obj.hasOwnProperty(prop)
+ +

Paramètres

+ +
+
prop
+
Le nom ({{jsxref("String")}}) ou le symbole ({{jsxref("Symbol")}}) de la propriété à tester.
+
+ +

Valeur de retour

+ +

Un booléen qui indique si l'objet possède ou non la propriété indiquée en argument et que celle-ci est directement rattachée à l'objet (elle ne provient pas de la chaîne de prototypes de l'objet). hasOwnProperty() renvoie true si la propriété existe et que sa valeur est {{jsxref("null")}} ou {{jsxref("undefined")}}.

+ +

Description

+ +

Chaque objet descendant d'{{jsxref("Object")}} hérite de la méthode hasOwnProperty(). Cette méthode peut être utilisée pour déterminer si un objet a la propriété spécifiée en tant que propriété directe de cet objet. Contrairement à l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}, cette méthode ne vérifie pas la chaîne des prototypes de l'objet. Si l'objet est un tableau ({{jsxref("Array")}}), la méthode hasOwnProperty() pourra être utilisée afin de vérifier la présence d'un index.

+ +

Exemples

+ +

Utiliser hasOwnProperty() pour tester l'existence d'une propriété

+ +

L'exemple suivant détermine si l'objet o contient une propriété appelée prop:

+ +
o = new Object();
+o.hasOwnProperty('prop'); // false
+o.prop = 'exists';
+o.hasOwnProperty('prop'); // true
+ +

Propriétés directes et propriétés héritées

+ +

L'exemple suivant illustre la différence entre les propriétés directes et les propriétés héritées à partir de la chaîne de prototypes :

+ +
o = new Object();
+o.prop = 'exists';
+
+o.hasOwnProperty('prop');
+// retourne true
+
+o.hasOwnProperty('toString');
+// retourne false
+
+o.hasOwnProperty('hasOwnProperty');
+// retourne false
+ +

Parcourir les propriétés d'un objet

+ +

L'exemple suivant montre comment parcourir les propriétés d'un objet sans traiter les propriétés héritées. On notera que la boucle  {{jsxref("Instructions/for...in", "for...in")}} ne prend en compte que les éléments énumérables. Il ne faut donc pas déduire de l'absence de propriétés non-énumérables dans la boucle, que hasOwnProperty() est elle-même strictement restreinte aux éléments énumérables (comme c'est le cas pour {{jsxref("Object.getOwnPropertyNames()")}}) .

+ +
var bidule = {
+    truc: 'stack'
+};
+
+for (var nom in bidule) {
+    if (bidule.hasOwnProperty(nom)) {
+        console.log("C'est bien la propriété (" +
+                     nom +
+                     "), sa valeur : " + bidule[nom]
+                    );
+    }
+    else {
+        console.log(nom);
+        // toString ou autre
+    }
+}
+ +

hasOwnProperty() en tant que propriété

+ +

JavaScript ne protège pas le nom de propriété hasOwnProperty, ainsi il est possible qu'un objet puisse avoir une propriété avec ce nom, il sera donc nécessaire d'utiliser une version externe de la méthode pour obtenir des résultats corrects.

+ +
var toto = {
+  hasOwnProperty: function() {
+    return false;
+  },
+  truc: 'Voici les dragons'
+};
+
+toto.hasOwnProperty('truc'); // renvoie toujours false
+
+// On utilise une méthode d'un autre objet
+// et on l'appelle avec this qui vaut toto
+({}).hasOwnProperty.call(toto, 'truc'); // true
+
+// On peut aussi utiliser la propriété hasOwnProperty de Object prototype
+Object.prototype.hasOwnProperty.call(toto, 'truc'); // true
+
+ +

La dernière version utilisée permet de ne pas créer d'objet supplémentaire.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.hasOwnProperty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/index.html b/files/fr/web/javascript/reference/global_objects/object/index.html deleted file mode 100644 index b40363652e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/index.html +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: Object -slug: Web/JavaScript/Reference/Global_Objects/Object -tags: - - Constructeur - - JavaScript - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object -original_slug: Web/JavaScript/Reference/Objets_globaux/Object ---- -
{{JSRef}}
- -

Le constructeur Object crée un wrapper d'objet.

- -

Syntaxe

- -
// Initialisateur d'objet ou littéral { [ paireNomValeur1[, paireNomValeur2[,
- ...paireNomValeurN] ] ] }
-
-// Appelé comme un constructeur
-new Object([valeur])
- -

Paramètres

- -
-
paireNomValeur1, paireNomValeur2, ... paireNomValeurN
-
Paires de noms (chaînes) et de valeurs (toutes valeurs) où le nom est séparé de la valeur par deux points (:).
-
valeur
-
Toute valeur.
-
- -

Description

- -

Le constructeur Object crée un wrapper d'objet pour la valeur donnée. Si la valeur est {{jsxref("null")}} ou {{jsxref("undefined")}}, il créera et retournera un objet vide, sinon, il retournera un objet du Type qui correspond à la valeur donnée. Si la valeur est déjà un objet, le constructeur retournera cette valeur.

- -

Lorsqu'il n'est pas appelé dans un contexte constructeur, Object se comporte de façon identique à new Object().

- -

Voir aussi initialisateur d'objet / syntaxe de littéral.

- -

Propriétés du constructeur Object

- -
-
Object.length
-
A une valeur de 1.
-
{{jsxref("Object.prototype")}}
-
Permet l'ajout de propriétés à tous les objets de type Object.
-
- -

Méthodes du constructeur Object

- -
-
{{jsxref("Object.assign()")}}
-
Copie les valeurs de toutes propriétés propres énumérables depuis un ou plusieurs objets source dans un objet cible.
-
{{jsxref("Object.create()")}}
-
Crée un nouvel objet avec le prototype d'objet et les propriétés indiqués.
-
{{jsxref("Object.defineProperty()")}}
-
Ajoute à un objet la propriété nommée décrite par le descripteur donné.
-
{{jsxref("Object.defineProperties()")}}
-
Ajoute à un objet les propriétés nommées décrites par les descripteurs donnés.
-
{{jsxref("Object.entries()")}}
-
Retourne un tableau contenant les paires [clé, valeur] des propriétés énumérables propres (c'est-à-dire directement rattachées à l'objet) de l'objet donné et dont les clés sont des chaînes de caractères.
-
{{jsxref("Object.freeze()")}}
-
Gèle un objet : un autre code ne peut ni détruire ni changer aucune propriété.
-
{{jsxref("Object.fromEntries()")}}
-
Renvoie un nouvel objet à partir d'un itérable contenant des paires de clés-valeurs (l'opération duale de {{jsxref("Object.entries")}}).
-
{{jsxref("Object.getOwnPropertyDescriptor()")}}
-
Retourne un descripteur de propriété pour une propriété nommée d'un objet.
-
{{jsxref("Object.getOwnPropertyDescriptors()")}}
-
Retourne un objet contenant tous les descripteurs des propriétés propres d'un objet.
-
{{jsxref("Object.getOwnPropertyNames()")}}
-
Retourne un tableau contenant les noms de toutes les propriétés énumérables et non énumérables propres de l'objet donné.
-
{{jsxref("Object.getOwnPropertySymbols()")}}
-
Retourne un tableau de toutes les propriétés symboles trouvées directement dans un objet donné.
-
{{jsxref("Object.getPrototypeOf()")}}
-
Retourne le prototype de l'objet indiqué.
-
{{jsxref("Object.is()")}}
-
Détermine si deux valeurs sont la même valeur. Considère comme égales toutes les valeurs NaN (ce qui diffère à la fois de la Comparaison d'Égalité Abstraite et de la Comparaison d'Égalité Stricte).
-
{{jsxref("Object.isExtensible()")}}
-
Détermine si l'extension d'un objet est permise.
-
{{jsxref("Object.isFrozen()")}}
-
Détermine si un objet a été gelé.
-
{{jsxref("Object.isSealed()")}}
-
Détermine si un objet est scellé.
-
{{jsxref("Object.keys()")}}
-
Retourne un tableau contenant les noms de toutes les propriétés énumérables propres de l'objet donné.
-
{{jsxref("Object.preventExtensions()")}}
-
Empêche toute extension de l'objet.
-
{{jsxref("Object.seal()")}}
-
Empêche un autre code de détruire les propriétés d'un objet.
-
{{jsxref("Object.setPrototypeOf()")}}
-
Définit le prototype d'un objet (c-à-d, la propriété interne [[Prototype]]).
-
{{jsxref("Object.values()")}}
-
Retourne le tableau des valeurs énumérables propres de l'objet donné dont les clés sont des chaînes de caractères.
-
- -

Instances d'Object et objet de prototype Object

- -

Tous les objets en JavaScript descendent d'Object ; tous les objets héritent des méthodes et des propriétés de {{jsxref("Object.prototype")}}, même si elles peuvent être surchargées. Par exemple, d'autres prototypes de constructeurs surchargent la propriété du constructor et fournissent leurs propres méthodes toString(). Les changements apportés à l'objet de prototype Object sont propagées à tous les objets, à moins que les propriétés et méthodes auxquelles s'appliquent ces changements ne soient surchargées plus loin dans la chaîne de prototypes.

- -

Propriétés

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

Méthodes

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

Suppression d'une propriété dans un objet

- -

Il n'y a aucune méthode dans un Object lui-même pour supprimer ses propres propriétés (par exemple, comme Map.prototype.delete()). Pour ce faire, il faut utiliser l'opérateur delete.

- -

Exemples

- -

Utilisation d'Object avec les types undefined et null

- -

Les exemples suivants stockent un Object vide dans o :

- -
var o = new Object();
-
- -
var o = new Object(undefined);
-
- -
var o = new Object(null);
-
- -

Utilisation d'Object pour créer des objets Boolean

- -

Les exemples suivants stockent des objets {{jsxref("Boolean")}} dans o :

- -
// Équivalent à : o = new Boolean(true);
-var o = new Object(true);
-
- -
// Équivalent à : o = new Boolean(false);
-var o = new Object(Boolean());
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaire
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.2', 'Object')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-object-objects', 'Object')}}{{Spec2('ES6')}}Ajout de Object.assign, Object.getOwnPropertySymbols, Object.setPrototypeOf, Object.is
{{SpecName('ESDraft', '#sec-object-objects', 'Object')}}{{Spec2('ESDraft')}}Ajout de Object.entries, de Object.values et de Object.getOwnPropertyDescriptors.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/index.md b/files/fr/web/javascript/reference/global_objects/object/index.md new file mode 100644 index 0000000000..b40363652e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/index.md @@ -0,0 +1,181 @@ +--- +title: Object +slug: Web/JavaScript/Reference/Global_Objects/Object +tags: + - Constructeur + - JavaScript + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object +original_slug: Web/JavaScript/Reference/Objets_globaux/Object +--- +
{{JSRef}}
+ +

Le constructeur Object crée un wrapper d'objet.

+ +

Syntaxe

+ +
// Initialisateur d'objet ou littéral { [ paireNomValeur1[, paireNomValeur2[,
+ ...paireNomValeurN] ] ] }
+
+// Appelé comme un constructeur
+new Object([valeur])
+ +

Paramètres

+ +
+
paireNomValeur1, paireNomValeur2, ... paireNomValeurN
+
Paires de noms (chaînes) et de valeurs (toutes valeurs) où le nom est séparé de la valeur par deux points (:).
+
valeur
+
Toute valeur.
+
+ +

Description

+ +

Le constructeur Object crée un wrapper d'objet pour la valeur donnée. Si la valeur est {{jsxref("null")}} ou {{jsxref("undefined")}}, il créera et retournera un objet vide, sinon, il retournera un objet du Type qui correspond à la valeur donnée. Si la valeur est déjà un objet, le constructeur retournera cette valeur.

+ +

Lorsqu'il n'est pas appelé dans un contexte constructeur, Object se comporte de façon identique à new Object().

+ +

Voir aussi initialisateur d'objet / syntaxe de littéral.

+ +

Propriétés du constructeur Object

+ +
+
Object.length
+
A une valeur de 1.
+
{{jsxref("Object.prototype")}}
+
Permet l'ajout de propriétés à tous les objets de type Object.
+
+ +

Méthodes du constructeur Object

+ +
+
{{jsxref("Object.assign()")}}
+
Copie les valeurs de toutes propriétés propres énumérables depuis un ou plusieurs objets source dans un objet cible.
+
{{jsxref("Object.create()")}}
+
Crée un nouvel objet avec le prototype d'objet et les propriétés indiqués.
+
{{jsxref("Object.defineProperty()")}}
+
Ajoute à un objet la propriété nommée décrite par le descripteur donné.
+
{{jsxref("Object.defineProperties()")}}
+
Ajoute à un objet les propriétés nommées décrites par les descripteurs donnés.
+
{{jsxref("Object.entries()")}}
+
Retourne un tableau contenant les paires [clé, valeur] des propriétés énumérables propres (c'est-à-dire directement rattachées à l'objet) de l'objet donné et dont les clés sont des chaînes de caractères.
+
{{jsxref("Object.freeze()")}}
+
Gèle un objet : un autre code ne peut ni détruire ni changer aucune propriété.
+
{{jsxref("Object.fromEntries()")}}
+
Renvoie un nouvel objet à partir d'un itérable contenant des paires de clés-valeurs (l'opération duale de {{jsxref("Object.entries")}}).
+
{{jsxref("Object.getOwnPropertyDescriptor()")}}
+
Retourne un descripteur de propriété pour une propriété nommée d'un objet.
+
{{jsxref("Object.getOwnPropertyDescriptors()")}}
+
Retourne un objet contenant tous les descripteurs des propriétés propres d'un objet.
+
{{jsxref("Object.getOwnPropertyNames()")}}
+
Retourne un tableau contenant les noms de toutes les propriétés énumérables et non énumérables propres de l'objet donné.
+
{{jsxref("Object.getOwnPropertySymbols()")}}
+
Retourne un tableau de toutes les propriétés symboles trouvées directement dans un objet donné.
+
{{jsxref("Object.getPrototypeOf()")}}
+
Retourne le prototype de l'objet indiqué.
+
{{jsxref("Object.is()")}}
+
Détermine si deux valeurs sont la même valeur. Considère comme égales toutes les valeurs NaN (ce qui diffère à la fois de la Comparaison d'Égalité Abstraite et de la Comparaison d'Égalité Stricte).
+
{{jsxref("Object.isExtensible()")}}
+
Détermine si l'extension d'un objet est permise.
+
{{jsxref("Object.isFrozen()")}}
+
Détermine si un objet a été gelé.
+
{{jsxref("Object.isSealed()")}}
+
Détermine si un objet est scellé.
+
{{jsxref("Object.keys()")}}
+
Retourne un tableau contenant les noms de toutes les propriétés énumérables propres de l'objet donné.
+
{{jsxref("Object.preventExtensions()")}}
+
Empêche toute extension de l'objet.
+
{{jsxref("Object.seal()")}}
+
Empêche un autre code de détruire les propriétés d'un objet.
+
{{jsxref("Object.setPrototypeOf()")}}
+
Définit le prototype d'un objet (c-à-d, la propriété interne [[Prototype]]).
+
{{jsxref("Object.values()")}}
+
Retourne le tableau des valeurs énumérables propres de l'objet donné dont les clés sont des chaînes de caractères.
+
+ +

Instances d'Object et objet de prototype Object

+ +

Tous les objets en JavaScript descendent d'Object ; tous les objets héritent des méthodes et des propriétés de {{jsxref("Object.prototype")}}, même si elles peuvent être surchargées. Par exemple, d'autres prototypes de constructeurs surchargent la propriété du constructor et fournissent leurs propres méthodes toString(). Les changements apportés à l'objet de prototype Object sont propagées à tous les objets, à moins que les propriétés et méthodes auxquelles s'appliquent ces changements ne soient surchargées plus loin dans la chaîne de prototypes.

+ +

Propriétés

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

Méthodes

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

Suppression d'une propriété dans un objet

+ +

Il n'y a aucune méthode dans un Object lui-même pour supprimer ses propres propriétés (par exemple, comme Map.prototype.delete()). Pour ce faire, il faut utiliser l'opérateur delete.

+ +

Exemples

+ +

Utilisation d'Object avec les types undefined et null

+ +

Les exemples suivants stockent un Object vide dans o :

+ +
var o = new Object();
+
+ +
var o = new Object(undefined);
+
+ +
var o = new Object(null);
+
+ +

Utilisation d'Object pour créer des objets Boolean

+ +

Les exemples suivants stockent des objets {{jsxref("Boolean")}} dans o :

+ +
// Équivalent à : o = new Boolean(true);
+var o = new Object(true);
+
+ +
// Équivalent à : o = new Boolean(false);
+var o = new Object(Boolean());
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaire
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée par JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.2', 'Object')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-object-objects', 'Object')}}{{Spec2('ES6')}}Ajout de Object.assign, Object.getOwnPropertySymbols, Object.setPrototypeOf, Object.is
{{SpecName('ESDraft', '#sec-object-objects', 'Object')}}{{Spec2('ESDraft')}}Ajout de Object.entries, de Object.values et de Object.getOwnPropertyDescriptors.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/is/index.html b/files/fr/web/javascript/reference/global_objects/object/is/index.html deleted file mode 100644 index 1f414765fb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/is/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Object.is() -slug: Web/JavaScript/Reference/Global_Objects/Object/is -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Object - - Reference - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/Object/is -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/is ---- -
{{JSRef}}
- -

La méthode Object.is() permet de déterminer si deux valeurs sont les mêmes.

- -

Syntaxe

- -
Object.is(value1, value2);
- -

Paramètres

- -
-
valeur1
-
La première valeur à comparer.
-
valeur2
-
La seconde valeur à comparer.
-
- -

Valeur de retour

- -

Un booléen indiquant si les arguments ont la même valeur.

- -

Description

- -

Object.is() permet de déterminer si deux valeurs sont identiques. Deux valeurs sont considérées identiques si :

- - - -

Attention, ce n'est pas la même égalité qu'avec l'opérateur {{jsxref("Opérateurs/Opérateurs_de_comparaison", "==", "#.C3.89galit.C3.A9_simple_(.3D.3D)")}}. L'opérateur == applique différentes conversions à chaque opérande (si ils ne sont pas du même type) avant de tester l'égalité (d'où le comportement "" == false qui donne true), Object.is ne convertit aucune des deux valeurs.

- -

Cette égalité est également différente de l'égalité stricte qu'on peut avoir avec l'opérateur {{jsxref("Opérateurs/Opérateurs_de_comparaison", "===", "#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)")}}. L'opérateur === (et également l'opérateur ==) considère que -0 et +0 sont égales et que {{jsxref("Number.NaN")}} n'est pas égal à {{jsxref("NaN")}}.

- -

Exemples

- -
Object.is("toto", "toto");     // true
-Object.is(window, window);     // true
-
-Object.is("toto", "truc");     // false
-Object.is([], []);             // false
-
-var toto = {a: 1};
-var truc = {a: 1};
-Object.is(toto, toto);          // true
-Object.is(toto, truc);          // false
-
-Object.is(null, null);          // true
-
-// Cas aux limites (cas spéciaux)
-Object.is(0, -0);                // false
-Object.is(-0, -0);               // true
-Object.is(NaN, 0/0);             // true
- -

Prothèse d'émulation (polyfill)

- -
if (!Object.is) {
-  Object.is = function(v1, v2) {
-    // Algorithme SameValue
-    if (v1 === v2) { //Étapes 1-5, 7-10
-      //Étapes 6.b-6.b +0 !=-0
-      return v1 !== 0 || 1 / v1 === 1 / v2;
-    } else {
-      //Étapes 6.a: NaN == NaN
-      return v1 !== v1 && v2 !== v2;
-    }
-  };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.is', 'Object.is')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-object.is', 'Object.is')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.is")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/is/index.md b/files/fr/web/javascript/reference/global_objects/object/is/index.md new file mode 100644 index 0000000000..1f414765fb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/is/index.md @@ -0,0 +1,127 @@ +--- +title: Object.is() +slug: Web/JavaScript/Reference/Global_Objects/Object/is +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Object + - Reference + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/Object/is +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/is +--- +
{{JSRef}}
+ +

La méthode Object.is() permet de déterminer si deux valeurs sont les mêmes.

+ +

Syntaxe

+ +
Object.is(value1, value2);
+ +

Paramètres

+ +
+
valeur1
+
La première valeur à comparer.
+
valeur2
+
La seconde valeur à comparer.
+
+ +

Valeur de retour

+ +

Un booléen indiquant si les arguments ont la même valeur.

+ +

Description

+ +

Object.is() permet de déterminer si deux valeurs sont identiques. Deux valeurs sont considérées identiques si :

+ + + +

Attention, ce n'est pas la même égalité qu'avec l'opérateur {{jsxref("Opérateurs/Opérateurs_de_comparaison", "==", "#.C3.89galit.C3.A9_simple_(.3D.3D)")}}. L'opérateur == applique différentes conversions à chaque opérande (si ils ne sont pas du même type) avant de tester l'égalité (d'où le comportement "" == false qui donne true), Object.is ne convertit aucune des deux valeurs.

+ +

Cette égalité est également différente de l'égalité stricte qu'on peut avoir avec l'opérateur {{jsxref("Opérateurs/Opérateurs_de_comparaison", "===", "#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)")}}. L'opérateur === (et également l'opérateur ==) considère que -0 et +0 sont égales et que {{jsxref("Number.NaN")}} n'est pas égal à {{jsxref("NaN")}}.

+ +

Exemples

+ +
Object.is("toto", "toto");     // true
+Object.is(window, window);     // true
+
+Object.is("toto", "truc");     // false
+Object.is([], []);             // false
+
+var toto = {a: 1};
+var truc = {a: 1};
+Object.is(toto, toto);          // true
+Object.is(toto, truc);          // false
+
+Object.is(null, null);          // true
+
+// Cas aux limites (cas spéciaux)
+Object.is(0, -0);                // false
+Object.is(-0, -0);               // true
+Object.is(NaN, 0/0);             // true
+ +

Prothèse d'émulation (polyfill)

+ +
if (!Object.is) {
+  Object.is = function(v1, v2) {
+    // Algorithme SameValue
+    if (v1 === v2) { //Étapes 1-5, 7-10
+      //Étapes 6.b-6.b +0 !=-0
+      return v1 !== 0 || 1 / v1 === 1 / v2;
+    } else {
+      //Étapes 6.a: NaN == NaN
+      return v1 !== v1 && v2 !== v2;
+    }
+  };
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.is', 'Object.is')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-object.is', 'Object.is')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.is")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/isextensible/index.html b/files/fr/web/javascript/reference/global_objects/object/isextensible/index.html deleted file mode 100644 index 7446914f88..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/isextensible/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Object.isExtensible() -slug: Web/JavaScript/Reference/Global_Objects/Object/isExtensible -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/isExtensible -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isExtensible ---- -
{{JSRef}}
- -

La méthode Object.isExtensible() permet de déterminer si un objet est extensible (c'est-à-dire qu'on peut lui ajouter de nouvelles propriétés).

- -
{{EmbedInteractiveExample("pages/js/object-isextensible.html")}}
- -

Syntaxe

- -
Object.isExtensible(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite vérifier s'il est extensible.
-
- -

Valeur de retour

- -

Un booléen qui indique si oui ou non l'objet passé en argument peut être étendu.

- -

Description

- -

Par défaut, les objets sont extensibles, on peut leur ajouter de nouvelles propriétés (et pour les moteurs qui supportent {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}}, leur propriété __proto__ peut être modifiée). Un objet peut devenir non-extensible en utilisant les méthodes {{jsxref("Object.preventExtensions()")}}, {{jsxref("Object.seal()")}}, ou {{jsxref("Object.freeze()")}}.

- -

Exemples

- -
// Les nouveaux objets sont extensibles.
-var vide = {};
-Object.isExtensible(vide); // true
-
-// ...mais on peut les rendre non-extensibles.
-Object.preventExtensions(vide);
-Object.isExtensible(vide); // false
-
-// Les objets scellés sont, par définition, non-extensibles.
-var scellé = Object.seal({});
-Object.isExtensible(scellé); // false
-
-// Les objets gelés sont également, par définition, non-extensibles.
-var gelé = Object.freeze({});
-Object.isExtensible(gelé); // false
-
- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, un argument qui n'est pas un objet sera traité comme un objet ordinaire non-extensible, la méthode renverra false.

- -
Object.isExtensible(1);
-// TypeError: 1 n'est pas un objet (code ES5)
-
-Object.isExtensible(1);
-// false                           (code ES2015)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.13', 'Object.isExtensible')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.isextensible', 'Object.isExtensible')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.isextensible', 'Object.isExtensible')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.isExtensible")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/isextensible/index.md b/files/fr/web/javascript/reference/global_objects/object/isextensible/index.md new file mode 100644 index 0000000000..7446914f88 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/isextensible/index.md @@ -0,0 +1,109 @@ +--- +title: Object.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Object/isExtensible +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isExtensible +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isExtensible +--- +
{{JSRef}}
+ +

La méthode Object.isExtensible() permet de déterminer si un objet est extensible (c'est-à-dire qu'on peut lui ajouter de nouvelles propriétés).

+ +
{{EmbedInteractiveExample("pages/js/object-isextensible.html")}}
+ +

Syntaxe

+ +
Object.isExtensible(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite vérifier s'il est extensible.
+
+ +

Valeur de retour

+ +

Un booléen qui indique si oui ou non l'objet passé en argument peut être étendu.

+ +

Description

+ +

Par défaut, les objets sont extensibles, on peut leur ajouter de nouvelles propriétés (et pour les moteurs qui supportent {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}}, leur propriété __proto__ peut être modifiée). Un objet peut devenir non-extensible en utilisant les méthodes {{jsxref("Object.preventExtensions()")}}, {{jsxref("Object.seal()")}}, ou {{jsxref("Object.freeze()")}}.

+ +

Exemples

+ +
// Les nouveaux objets sont extensibles.
+var vide = {};
+Object.isExtensible(vide); // true
+
+// ...mais on peut les rendre non-extensibles.
+Object.preventExtensions(vide);
+Object.isExtensible(vide); // false
+
+// Les objets scellés sont, par définition, non-extensibles.
+var scellé = Object.seal({});
+Object.isExtensible(scellé); // false
+
+// Les objets gelés sont également, par définition, non-extensibles.
+var gelé = Object.freeze({});
+Object.isExtensible(gelé); // false
+
+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, un argument qui n'est pas un objet sera traité comme un objet ordinaire non-extensible, la méthode renverra false.

+ +
Object.isExtensible(1);
+// TypeError: 1 n'est pas un objet (code ES5)
+
+Object.isExtensible(1);
+// false                           (code ES2015)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.13', 'Object.isExtensible')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.isextensible', 'Object.isExtensible')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.isextensible', 'Object.isExtensible')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.isExtensible")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/isfrozen/index.html b/files/fr/web/javascript/reference/global_objects/object/isfrozen/index.html deleted file mode 100644 index 0491daef10..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/isfrozen/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: Object.isFrozen() -slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isFrozen ---- -
{{JSRef}}
- -

La méthode Object.isFrozen()permet de déterminer si un objet est {{jsxref("Object.freeze()", "gelé", "", 1)}}.

- -
{{EmbedInteractiveExample("pages/js/object-isfrozen.html")}}
- -

Syntaxe

- -
Object.isFrozen(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite vérifier s'il est gelé.
-
- -

Valeur de retour

- -

Un booléen qui indique si oui ou non l'objet passé en argument est gelé.

- -

Description

- -

Un objet est gelé si et seulement s'il n'est pas {{jsxref("Object.isExtensible", "extensible","",1)}}, que toutes ses propriétés sont non-configurables et que ses propriétés de données (c'est-à-dire les propriétés qui ne sont pas des accesseurs ou des mutateurs) sont non-accessibles en écriture.

- -

Exemples

- -
// Un objet nouvellement créé est extensible
-// et est donc dégelé
-Object.isFrozen({}); // false
-
-// Un objet vide et non extensible est gelé
-var videGelé = Object.preventExtensions({});
-Object.isFrozen(videGelé); // true
-
-// Un nouvel objet avec une propriété est
-// extensible et donc dégelé
-var uneProp = { p: 42 };
-Object.isFrozen(uneProp); // false
-
-// Si on empêche d'étendre un objet non vide,
-// cela ne le rend pas gelé car la propriété
-// est toujours configurable (et accessible
-// en écriture)
-Object.preventExtensions(uneProp);
-Object.isFrozen(uneProp); // false
-
-// ...si on supprime la seule propriété existante
-// en revanche, on a bien un objet gelé
-delete uneProp.p;
-Object.isFrozen(uneProp); // true
-
-// Un objet non-extensible et avec une propriété
-// non-accessible en écriture mais toujours configurable
-// n'est pas gelé
-var nonWritable = { e: "plep" };
-Object.preventExtensions(nonWritable);
-
-Object.defineProperty(nonWritable, "e", { writable: false });
-// on la rend non accessible en écriture
-
-Object.isFrozen(nonWritable); // false
-
-// Si on rend la propriété non-configurable,
-// l'objet devient gelé
-
-Object.defineProperty(nonWritable, "e", { configurable: false });
-// on la rend non-configurable
-
-Object.isFrozen(nonWritable) === true);
-
-// Un objet non-extensible avec une propriété non-configurable
-// mais accessible en écriture n'est pas gelé
-var nonConfigurable = { release: "the kraken!" };
-Object.preventExtensions(nonConfigurable);
-Object.defineProperty(nonConfigurable, "release", { configurable: false });
-Object.isFrozen(nonConfigurable); // false
-
-// Si cette propriété devient non accessible
-// en écriture, l'objet est gelé
-Object.defineProperty(nonConfigurable, "release", { writable: false });
-Object.isFrozen(nonConfigurable); // true
-
-// Un objet non-extensible avec un accesseur
-// configurable n'est pas gelé
-var accesseur = { get manger() { return "miam"; } };
-Object.preventExtensions(accesseur);
-Object.isFrozen(accesseur); // false
-
-// ...si on rend la propriété non-configurable,
-// l'objet est gelé.
-Object.defineProperty(accesseur, "manger", { configurable: false });
-Object.isFrozen(accesseur); // true
-
-// La façon la plus simple est d'utiliser la
-// méthode Object.freeze
-var gelé = { 1: 81 };
-Object.isFrozen(gelé); // false
-Object.freeze(gelé);
-Object.isFrozen(gelé); // true
-
-// Par définition, un objet gelé est non-extensible.
-Object.isExtensible(gelé); // false
-
-// Par définition, un objet gelé est scellé.
-Object.isSealed(gelé); // true
-
- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais est d'un autre type primitif), cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, un argument qui n'est pas un objet sera traité comme s'il était un objet gelé et la méthode renverra true.

- -
Object.isFrozen(1);
-// TypeError: 1 n'est pas un objet (code ES5)
-
-Object.isFrozen(1);
-// true                            (code ES2015)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée par JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.isfrozen', 'Object.isFrozen')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.isFrozen")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/isfrozen/index.md b/files/fr/web/javascript/reference/global_objects/object/isfrozen/index.md new file mode 100644 index 0000000000..0491daef10 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/isfrozen/index.md @@ -0,0 +1,172 @@ +--- +title: Object.isFrozen() +slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isFrozen +--- +
{{JSRef}}
+ +

La méthode Object.isFrozen()permet de déterminer si un objet est {{jsxref("Object.freeze()", "gelé", "", 1)}}.

+ +
{{EmbedInteractiveExample("pages/js/object-isfrozen.html")}}
+ +

Syntaxe

+ +
Object.isFrozen(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite vérifier s'il est gelé.
+
+ +

Valeur de retour

+ +

Un booléen qui indique si oui ou non l'objet passé en argument est gelé.

+ +

Description

+ +

Un objet est gelé si et seulement s'il n'est pas {{jsxref("Object.isExtensible", "extensible","",1)}}, que toutes ses propriétés sont non-configurables et que ses propriétés de données (c'est-à-dire les propriétés qui ne sont pas des accesseurs ou des mutateurs) sont non-accessibles en écriture.

+ +

Exemples

+ +
// Un objet nouvellement créé est extensible
+// et est donc dégelé
+Object.isFrozen({}); // false
+
+// Un objet vide et non extensible est gelé
+var videGelé = Object.preventExtensions({});
+Object.isFrozen(videGelé); // true
+
+// Un nouvel objet avec une propriété est
+// extensible et donc dégelé
+var uneProp = { p: 42 };
+Object.isFrozen(uneProp); // false
+
+// Si on empêche d'étendre un objet non vide,
+// cela ne le rend pas gelé car la propriété
+// est toujours configurable (et accessible
+// en écriture)
+Object.preventExtensions(uneProp);
+Object.isFrozen(uneProp); // false
+
+// ...si on supprime la seule propriété existante
+// en revanche, on a bien un objet gelé
+delete uneProp.p;
+Object.isFrozen(uneProp); // true
+
+// Un objet non-extensible et avec une propriété
+// non-accessible en écriture mais toujours configurable
+// n'est pas gelé
+var nonWritable = { e: "plep" };
+Object.preventExtensions(nonWritable);
+
+Object.defineProperty(nonWritable, "e", { writable: false });
+// on la rend non accessible en écriture
+
+Object.isFrozen(nonWritable); // false
+
+// Si on rend la propriété non-configurable,
+// l'objet devient gelé
+
+Object.defineProperty(nonWritable, "e", { configurable: false });
+// on la rend non-configurable
+
+Object.isFrozen(nonWritable) === true);
+
+// Un objet non-extensible avec une propriété non-configurable
+// mais accessible en écriture n'est pas gelé
+var nonConfigurable = { release: "the kraken!" };
+Object.preventExtensions(nonConfigurable);
+Object.defineProperty(nonConfigurable, "release", { configurable: false });
+Object.isFrozen(nonConfigurable); // false
+
+// Si cette propriété devient non accessible
+// en écriture, l'objet est gelé
+Object.defineProperty(nonConfigurable, "release", { writable: false });
+Object.isFrozen(nonConfigurable); // true
+
+// Un objet non-extensible avec un accesseur
+// configurable n'est pas gelé
+var accesseur = { get manger() { return "miam"; } };
+Object.preventExtensions(accesseur);
+Object.isFrozen(accesseur); // false
+
+// ...si on rend la propriété non-configurable,
+// l'objet est gelé.
+Object.defineProperty(accesseur, "manger", { configurable: false });
+Object.isFrozen(accesseur); // true
+
+// La façon la plus simple est d'utiliser la
+// méthode Object.freeze
+var gelé = { 1: 81 };
+Object.isFrozen(gelé); // false
+Object.freeze(gelé);
+Object.isFrozen(gelé); // true
+
+// Par définition, un objet gelé est non-extensible.
+Object.isExtensible(gelé); // false
+
+// Par définition, un objet gelé est scellé.
+Object.isSealed(gelé); // true
+
+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais est d'un autre type primitif), cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, un argument qui n'est pas un objet sera traité comme s'il était un objet gelé et la méthode renverra true.

+ +
Object.isFrozen(1);
+// TypeError: 1 n'est pas un objet (code ES5)
+
+Object.isFrozen(1);
+// true                            (code ES2015)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée par JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.isfrozen', 'Object.isFrozen')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.isFrozen")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.html deleted file mode 100644 index 1ea7916982..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Object.prototype.isPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf -tags: - - JavaScript - - Méthode - - Object - - Prototype - - Reference - - isPrototype -translation_of: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isPrototypeOf ---- -
{{JSRef}}
- -

La méthode isPrototypeOf() permet de tester si un objet existe dans la chaîne de prototypes d'un autre objet.

- -
{{EmbedInteractiveExample("pages/js/object-prototype-isprototypeof.html")}}
- -
-

Note : isPrototypeOf() est différent de l'opérateur {{jsxref("Opérateurs/instanceof", "instanceof")}}. Dans l'expression "object instanceof AFunction", on compare la chaîne de prototypes d'object avec AFunction.prototype et non avec AFunction.

-
- -

Syntaxe

- -
prototypeObj.isPrototypeOf(objet)
- -

Paramètres

- -
-
objet
-
L'objet dont la chaîne de prototypes sera parcourue.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean")}} indiquant si l'objet appelant se trouve dans sa chaîne de prototypes de l'objet indiqué.

- -

Erreurs déclenchées

- -
-
{{jsxref("TypeError")}}
-
Une exception {{jsxref("TypeError")}} est déclenchée si prototypeObj est undefined ou null.
-
- -

Description

- -

La méthode isPrototypeOf () vous permet de vérifier si un objet existe ou non dans la chaîne de prototypes d'un autre objet.

- -

Exemples

- -

Cet exemple montre que Bidule.prototype, Truc.prototype, Machin.prototype et Object.prototype font bien partie de la chaîne de prototype pour l'objet bidule :

- -
function Machin() {}
-function Truc() {}
-function Bidule() {}
-
-Truc.prototype = Object.create(Machin.prototype);
-Bidule.prototype = Object.create(Truc.prototype);
-
-var bidule = new Bidule();
-
-console.log(Bidule.prototype.isPrototypeOf(bidule)); // true
-console.log(Truc.prototype.isPrototypeOf(bidule)); // true
-console.log(Machin.prototype.isPrototypeOf(bidule)); // true
-console.log(Object.prototype.isPrototypeOf(bidule)); // true
-
- -

La méthode isPrototypeOf(), avec l'opérateur {{jsxref("Operators/instanceof", "instanceof")}} en particulier, s'avère particulièrement utile si vous avez du code qui ne peut fonctionner que lorsqu'il traite des objets descendant d'une chaîne de prototypes donnée, par ex., pour garantir que certaines méthodes ou propriétés seront présentes dans cet objet.

- -

Par exemple, vérifier que bidule descend bien de Machin.prototype :

- -
if (Toto.prototype.isPrototypeOf(bidule)) {
-  // effectuer quelque chose de sûr
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaire
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.isPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.md new file mode 100644 index 0000000000..1ea7916982 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/isprototypeof/index.md @@ -0,0 +1,121 @@ +--- +title: Object.prototype.isPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf +tags: + - JavaScript + - Méthode + - Object + - Prototype + - Reference + - isPrototype +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isPrototypeOf +--- +
{{JSRef}}
+ +

La méthode isPrototypeOf() permet de tester si un objet existe dans la chaîne de prototypes d'un autre objet.

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-isprototypeof.html")}}
+ +
+

Note : isPrototypeOf() est différent de l'opérateur {{jsxref("Opérateurs/instanceof", "instanceof")}}. Dans l'expression "object instanceof AFunction", on compare la chaîne de prototypes d'object avec AFunction.prototype et non avec AFunction.

+
+ +

Syntaxe

+ +
prototypeObj.isPrototypeOf(objet)
+ +

Paramètres

+ +
+
objet
+
L'objet dont la chaîne de prototypes sera parcourue.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean")}} indiquant si l'objet appelant se trouve dans sa chaîne de prototypes de l'objet indiqué.

+ +

Erreurs déclenchées

+ +
+
{{jsxref("TypeError")}}
+
Une exception {{jsxref("TypeError")}} est déclenchée si prototypeObj est undefined ou null.
+
+ +

Description

+ +

La méthode isPrototypeOf () vous permet de vérifier si un objet existe ou non dans la chaîne de prototypes d'un autre objet.

+ +

Exemples

+ +

Cet exemple montre que Bidule.prototype, Truc.prototype, Machin.prototype et Object.prototype font bien partie de la chaîne de prototype pour l'objet bidule :

+ +
function Machin() {}
+function Truc() {}
+function Bidule() {}
+
+Truc.prototype = Object.create(Machin.prototype);
+Bidule.prototype = Object.create(Truc.prototype);
+
+var bidule = new Bidule();
+
+console.log(Bidule.prototype.isPrototypeOf(bidule)); // true
+console.log(Truc.prototype.isPrototypeOf(bidule)); // true
+console.log(Machin.prototype.isPrototypeOf(bidule)); // true
+console.log(Object.prototype.isPrototypeOf(bidule)); // true
+
+ +

La méthode isPrototypeOf(), avec l'opérateur {{jsxref("Operators/instanceof", "instanceof")}} en particulier, s'avère particulièrement utile si vous avez du code qui ne peut fonctionner que lorsqu'il traite des objets descendant d'une chaîne de prototypes donnée, par ex., pour garantir que certaines méthodes ou propriétés seront présentes dans cet objet.

+ +

Par exemple, vérifier que bidule descend bien de Machin.prototype :

+ +
if (Toto.prototype.isPrototypeOf(bidule)) {
+  // effectuer quelque chose de sûr
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaire
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.isPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/issealed/index.html b/files/fr/web/javascript/reference/global_objects/object/issealed/index.html deleted file mode 100644 index 01a1062763..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/issealed/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Object.isSealed() -slug: Web/JavaScript/Reference/Global_Objects/Object/isSealed -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/isSealed -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isSealed ---- -
{{JSRef}}
- -

La méthode Object.isSealed() permet de déterminer si un objet est scellé.

- -
{{EmbedInteractiveExample("pages/js/object-issealed.html")}}
- -

Syntaxe

- -
Object.isSealed(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite savoir s'il est scellé.
-
- -

Valeur de retour

- -

Un booléen indiquant si l'objet est scellé ou non.

- -

Description

- -

Renvoie true si l'objet est scellé, false sinon. Un objet scellé est un objet qui n'est pas {{jsxref("Object.isExtensible", "extensible","",1)}} et dont toutes les propriétés sont non-configurables (on ne peut donc pas les retirer, en revanche on peut avoir un droit de modification).

- -

Exemples

- -
// Par défaut, les objets ne sont pas scellés
-var vide = {};
-Object.isSealed(vide); // false
-
-// Si un objet vide est rendu non-extensible,
-// il est scellé
-Object.preventExtensions(vide);
-Object.isSealed(vide); // true
-
-// Ce qui n'est pas vrai pour un objet non-vide,
-// sauf si toutes ses propriétés sont non-configurables
-var avecPropriétés = { pif: "paf pouf" };
-Object.preventExtensions(avecPropriétés);
-Object.isSealed(avecPropriétés); // false
-
-// Si on rend les propriétés non configurables,
-// l'objet est scellé
-Object.defineProperty(avecPropriétés, "pif", { configurable: false });
-Object.isSealed(avecPropriétés); // true
-
-// La méthode la plus simple est d'utiliser Object.seal.
-var scellé = {};
-Object.seal(scellé);
-Object.isSealed(scellé); // true
-
-// Un objet scellé est, par définition, non-extensible
-Object.isExtensible(scellé); // false
-
-// Un objet scellé peut être gelé mais ce n'est pas
-// nécessaire. gelé signifie que les propriétés ne
-// peuvent pas être modifiées
-Object.isFrozen(scellé); // true
-
-var s2 = Object.seal({ p: 3 });
-Object.isFrozen(s2); // false ("p" est toujours modifiable)
-
-var s3 = Object.seal({ get p() { return 0; } });
-// pour les accesseurs, seule l'accès en
-// configuration est important
-Object.isFrozen(s3); // true 
- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, une valeur qui n'est pas un objet sera traitée comme si c'était un objet scellé et la méthode renverra true.

- -
Object.isSealed(1);
-// TypeError: 1 is not an object (ES5 code)
-
-Object.isSealed(1);
-// true                          (ES2015 code)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.11', 'Object.isSealed')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.issealed', 'Object.isSealed')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.issealed', 'Object.isSealed')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.isSealed")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/issealed/index.md b/files/fr/web/javascript/reference/global_objects/object/issealed/index.md new file mode 100644 index 0000000000..01a1062763 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/issealed/index.md @@ -0,0 +1,132 @@ +--- +title: Object.isSealed() +slug: Web/JavaScript/Reference/Global_Objects/Object/isSealed +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/isSealed +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/isSealed +--- +
{{JSRef}}
+ +

La méthode Object.isSealed() permet de déterminer si un objet est scellé.

+ +
{{EmbedInteractiveExample("pages/js/object-issealed.html")}}
+ +

Syntaxe

+ +
Object.isSealed(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite savoir s'il est scellé.
+
+ +

Valeur de retour

+ +

Un booléen indiquant si l'objet est scellé ou non.

+ +

Description

+ +

Renvoie true si l'objet est scellé, false sinon. Un objet scellé est un objet qui n'est pas {{jsxref("Object.isExtensible", "extensible","",1)}} et dont toutes les propriétés sont non-configurables (on ne peut donc pas les retirer, en revanche on peut avoir un droit de modification).

+ +

Exemples

+ +
// Par défaut, les objets ne sont pas scellés
+var vide = {};
+Object.isSealed(vide); // false
+
+// Si un objet vide est rendu non-extensible,
+// il est scellé
+Object.preventExtensions(vide);
+Object.isSealed(vide); // true
+
+// Ce qui n'est pas vrai pour un objet non-vide,
+// sauf si toutes ses propriétés sont non-configurables
+var avecPropriétés = { pif: "paf pouf" };
+Object.preventExtensions(avecPropriétés);
+Object.isSealed(avecPropriétés); // false
+
+// Si on rend les propriétés non configurables,
+// l'objet est scellé
+Object.defineProperty(avecPropriétés, "pif", { configurable: false });
+Object.isSealed(avecPropriétés); // true
+
+// La méthode la plus simple est d'utiliser Object.seal.
+var scellé = {};
+Object.seal(scellé);
+Object.isSealed(scellé); // true
+
+// Un objet scellé est, par définition, non-extensible
+Object.isExtensible(scellé); // false
+
+// Un objet scellé peut être gelé mais ce n'est pas
+// nécessaire. gelé signifie que les propriétés ne
+// peuvent pas être modifiées
+Object.isFrozen(scellé); // true
+
+var s2 = Object.seal({ p: 3 });
+Object.isFrozen(s2); // false ("p" est toujours modifiable)
+
+var s3 = Object.seal({ get p() { return 0; } });
+// pour les accesseurs, seule l'accès en
+// configuration est important
+Object.isFrozen(s3); // true 
+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, une valeur qui n'est pas un objet sera traitée comme si c'était un objet scellé et la méthode renverra true.

+ +
Object.isSealed(1);
+// TypeError: 1 is not an object (ES5 code)
+
+Object.isSealed(1);
+// true                          (ES2015 code)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.11', 'Object.isSealed')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.issealed', 'Object.isSealed')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.issealed', 'Object.isSealed')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.isSealed")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/keys/index.html b/files/fr/web/javascript/reference/global_objects/object/keys/index.html deleted file mode 100644 index 363b079f16..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/keys/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Object.keys() -slug: Web/JavaScript/Reference/Global_Objects/Object/keys -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/keys -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/keys ---- -
{{JSRef}}
- -

La méthode Object.keys() renvoie un tableau contenant les noms des propriétés propres à un objet (qui ne sont pas héritées via la chaîne de prototypes) et qui sont énumérables. L'ordre de ce tableau est le même que celui obtenu par une boucle {{jsxref("Instructions/for...in","for...in")}} (à la différence qu'une boucle for-in liste également les propriétés héritées).

- -
{{EmbedInteractiveExample("pages/js/object-keys.html")}}
- -

Syntaxe

- -
Object.keys(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite lister les propriétés propres et énumérables.
-
- -

Valeur de retour

- -

Un tableau de chaînes de caractères qui sont les noms des propriétés énumérables de l'objet passé en argument.

- -

Description

- -

Object.keys() renvoie un tableau dont les éléments sont les chaînes de caractères des noms des propriétés propres et énumérables d'obj. L'ordre des propriétés obtenu est le même que celui obtenu lorsqu'on boucle manuellement sur les propriétés de l'objet.

- -

Exemples

- -
var arr = ["a", "b", "c"];
-console.log(Object.keys(arr));
-// affichera ['0', '1', '2']
-
-// un objet semblable à un tableau
-var obj = { 0 : "a", 1 : "b", 2 : "c"};
-console.log(Object.keys(obj));
-// affichera ['0', '1', '2']
-
-// un objet semblable à un tableau avec
-// un ordre de clé aléatoire
-var an_obj = { 100: "a", 2: "b", 7: "c"};
-console.log(Object.keys(an_obj));
-// affichera ['2', '7', '100']
-
-// getToto est une propriété non énumérable
-var monObjet = Object.create({}, {
-                                 getToto : {
-                                            value : function () {
-                                              return this.toto }
-                                           }
-                                  });
-monObjet.toto = 1;
-
-console.log(Object.keys(monObjet));
-// affichera ['toto']
-
- -

Si on souhaite lister toutes les propriétés, y compris celles qui ne sont pas énumérables, on pourra utiliser {{jsxref("Object.getOwnPropertyNames()")}}.

- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015 (ES6), un argument qui n'est pas un objet sera d'abord converti en objet.

- -
Object.keys("toto");
-// TypeError: "toto" n'est pas un objet (code ES5)
-
-Object.keys("toto");
-// ["0", "1", "2", "3"]                   (code ES2015)
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.14', 'Object.keys')}}{{Spec2('ES5.1')}}Définition initiale.
- Implémentée avec JavaScript 1.8.5
{{SpecName('ES2015', '#sec-object.keys', 'Object.keys')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-object.keys', 'Object.keys')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.keys")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/keys/index.md b/files/fr/web/javascript/reference/global_objects/object/keys/index.md new file mode 100644 index 0000000000..363b079f16 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/keys/index.md @@ -0,0 +1,124 @@ +--- +title: Object.keys() +slug: Web/JavaScript/Reference/Global_Objects/Object/keys +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/keys +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/keys +--- +
{{JSRef}}
+ +

La méthode Object.keys() renvoie un tableau contenant les noms des propriétés propres à un objet (qui ne sont pas héritées via la chaîne de prototypes) et qui sont énumérables. L'ordre de ce tableau est le même que celui obtenu par une boucle {{jsxref("Instructions/for...in","for...in")}} (à la différence qu'une boucle for-in liste également les propriétés héritées).

+ +
{{EmbedInteractiveExample("pages/js/object-keys.html")}}
+ +

Syntaxe

+ +
Object.keys(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite lister les propriétés propres et énumérables.
+
+ +

Valeur de retour

+ +

Un tableau de chaînes de caractères qui sont les noms des propriétés énumérables de l'objet passé en argument.

+ +

Description

+ +

Object.keys() renvoie un tableau dont les éléments sont les chaînes de caractères des noms des propriétés propres et énumérables d'obj. L'ordre des propriétés obtenu est le même que celui obtenu lorsqu'on boucle manuellement sur les propriétés de l'objet.

+ +

Exemples

+ +
var arr = ["a", "b", "c"];
+console.log(Object.keys(arr));
+// affichera ['0', '1', '2']
+
+// un objet semblable à un tableau
+var obj = { 0 : "a", 1 : "b", 2 : "c"};
+console.log(Object.keys(obj));
+// affichera ['0', '1', '2']
+
+// un objet semblable à un tableau avec
+// un ordre de clé aléatoire
+var an_obj = { 100: "a", 2: "b", 7: "c"};
+console.log(Object.keys(an_obj));
+// affichera ['2', '7', '100']
+
+// getToto est une propriété non énumérable
+var monObjet = Object.create({}, {
+                                 getToto : {
+                                            value : function () {
+                                              return this.toto }
+                                           }
+                                  });
+monObjet.toto = 1;
+
+console.log(Object.keys(monObjet));
+// affichera ['toto']
+
+ +

Si on souhaite lister toutes les propriétés, y compris celles qui ne sont pas énumérables, on pourra utiliser {{jsxref("Object.getOwnPropertyNames()")}}.

+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015 (ES6), un argument qui n'est pas un objet sera d'abord converti en objet.

+ +
Object.keys("toto");
+// TypeError: "toto" n'est pas un objet (code ES5)
+
+Object.keys("toto");
+// ["0", "1", "2", "3"]                   (code ES2015)
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.14', 'Object.keys')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implémentée avec JavaScript 1.8.5
{{SpecName('ES2015', '#sec-object.keys', 'Object.keys')}}{{Spec2('ES2015')}}
{{SpecName('ESDraft', '#sec-object.keys', 'Object.keys')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.keys")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/preventextensions/index.html b/files/fr/web/javascript/reference/global_objects/object/preventextensions/index.html deleted file mode 100644 index 5222f65c40..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/preventextensions/index.html +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: Object.preventExtensions() -slug: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/preventExtensions ---- -
{{JSRef}}
- -

La méthode Object.preventExtensions() permet d'empêcher l'ajout de nouvelles propriétés à un objet (i.e. d'étendre l'objet grâce à de nouvelles caractéristiques).

- -
{{EmbedInteractiveExample("pages/js/object-preventextensions.html")}}
- -

Syntaxe

- -
Object.preventExtensions(obj)
- -

Paramètres

- -
-
obj
-
L'objet qu'on souhaite rendre non-extensible.
-
- -

Valeur de retour

- -

L'objet rendu non-extensible.

- -

Description

- -

Un objet est extensible si on peut lui ajouter de nouvelles propriétés. Object.preventExtensions() marque un objet et le rend non-extensible. Ainsi, cet objet ne pourra avoir d'autres propriétés que celles à l'instant où il a été marqué comme non-extensible. Attention, les propriétés existantes d'un objet non-extensible peuvent toujours être supprimées. Toute tentative d'ajout de nouvelles propriétés à un objet non-extensible échouera, soit de façon silencieuse, soit en levant une exception {{jsxref("TypeError")}} (le plus souvent en {{jsxref("Strict_mode", "mode strict", "", 1)}}).

- -

Object.preventExtensions() n'empêche que l'ajout des propriétés directement sur l'objet, il n'empêche pas d'ajouter des propriétés sur le prototype.

- -

Cette méthode rend la propriété interne [[prototype]] de la cible immuable, toute réaffectation de [[prototype]] déclenchera une exception TypeError. Ce comportement est spécifique à la propriété interne [[prototype]], les autres propriétés de la cible restent modifiables.

- -

Si, grâce à cette méthode, on peut rendre un objet non-extensible, il n'existe aucune méthode pour effectuer l'action inverse (rendre un objet non-extensible à nouveau extensible).

- -

Exemples

- -
// Object.preventExtensions renvoie l'objet
-// non-extensible.
-var obj = {};
-var obj2 = Object.preventExtensions(obj);
-obj === obj2; // true
-
-// Par défaut, les objets sont extensibles.
-var vide = {};
-Object.isExtensible(vide); // true
-
-// ...mais cela peut être modifié.
-Object.preventExtensions(vide);
-Object.isExtensible(vide) === false);
-
-// Object.defineProperty lève une exception
-// lorsqu'on tente d'ajouter de nouvelles propriétés
-var nonExtensible = { removable: true };
-Object.preventExtensions(nonExtensible);
-
-Object.defineProperty(nonExtensible, 'nouvelle', { value: 8675309 });
-/ lève une TypeError
-
-// En mode strict, toute tentative d'ajout
-// lève une exception TypeError
-function échec() {
-  'use strict';
-  nonExtensible.nouvelleProp = 'ÉCHEC'; //
-}
-échec();
-
-// EXTENSION (ne fonctionne que pour les moteurs
-// qui utilisent __proto__ ) :
-// Le prototype (via __proto__) d'un objet non-extensible
-// n'est pas modifiable :
-var fixed = Object.preventExtensions({});
-fixed.__proto__ = { oh: 'hey' }; // lève une TypeError
-
- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, une valeur qui n'est pas un objet sera traitée comme un objet ordinaire qui n'est pas extensible et la méthode renverra cette valeur.

- -
Object.preventExtensions(1);
-// TypeError : 1 n'est pas un object (code ES5)
-
-Object.preventExtensions(1);
-// 1                             (code ES2015)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.10', 'Object.preventExtensions')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.preventextensions', 'Object.preventExtensions')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.preventextensions', 'Object.preventExtensions')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.preventExtensions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/preventextensions/index.md b/files/fr/web/javascript/reference/global_objects/object/preventextensions/index.md new file mode 100644 index 0000000000..5222f65c40 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/preventextensions/index.md @@ -0,0 +1,136 @@ +--- +title: Object.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/preventExtensions +--- +
{{JSRef}}
+ +

La méthode Object.preventExtensions() permet d'empêcher l'ajout de nouvelles propriétés à un objet (i.e. d'étendre l'objet grâce à de nouvelles caractéristiques).

+ +
{{EmbedInteractiveExample("pages/js/object-preventextensions.html")}}
+ +

Syntaxe

+ +
Object.preventExtensions(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet qu'on souhaite rendre non-extensible.
+
+ +

Valeur de retour

+ +

L'objet rendu non-extensible.

+ +

Description

+ +

Un objet est extensible si on peut lui ajouter de nouvelles propriétés. Object.preventExtensions() marque un objet et le rend non-extensible. Ainsi, cet objet ne pourra avoir d'autres propriétés que celles à l'instant où il a été marqué comme non-extensible. Attention, les propriétés existantes d'un objet non-extensible peuvent toujours être supprimées. Toute tentative d'ajout de nouvelles propriétés à un objet non-extensible échouera, soit de façon silencieuse, soit en levant une exception {{jsxref("TypeError")}} (le plus souvent en {{jsxref("Strict_mode", "mode strict", "", 1)}}).

+ +

Object.preventExtensions() n'empêche que l'ajout des propriétés directement sur l'objet, il n'empêche pas d'ajouter des propriétés sur le prototype.

+ +

Cette méthode rend la propriété interne [[prototype]] de la cible immuable, toute réaffectation de [[prototype]] déclenchera une exception TypeError. Ce comportement est spécifique à la propriété interne [[prototype]], les autres propriétés de la cible restent modifiables.

+ +

Si, grâce à cette méthode, on peut rendre un objet non-extensible, il n'existe aucune méthode pour effectuer l'action inverse (rendre un objet non-extensible à nouveau extensible).

+ +

Exemples

+ +
// Object.preventExtensions renvoie l'objet
+// non-extensible.
+var obj = {};
+var obj2 = Object.preventExtensions(obj);
+obj === obj2; // true
+
+// Par défaut, les objets sont extensibles.
+var vide = {};
+Object.isExtensible(vide); // true
+
+// ...mais cela peut être modifié.
+Object.preventExtensions(vide);
+Object.isExtensible(vide) === false);
+
+// Object.defineProperty lève une exception
+// lorsqu'on tente d'ajouter de nouvelles propriétés
+var nonExtensible = { removable: true };
+Object.preventExtensions(nonExtensible);
+
+Object.defineProperty(nonExtensible, 'nouvelle', { value: 8675309 });
+/ lève une TypeError
+
+// En mode strict, toute tentative d'ajout
+// lève une exception TypeError
+function échec() {
+  'use strict';
+  nonExtensible.nouvelleProp = 'ÉCHEC'; //
+}
+échec();
+
+// EXTENSION (ne fonctionne que pour les moteurs
+// qui utilisent __proto__ ) :
+// Le prototype (via __proto__) d'un objet non-extensible
+// n'est pas modifiable :
+var fixed = Object.preventExtensions({});
+fixed.__proto__ = { oh: 'hey' }; // lève une TypeError
+
+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet mais une valeur d'un autre type primitif, cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, une valeur qui n'est pas un objet sera traitée comme un objet ordinaire qui n'est pas extensible et la méthode renverra cette valeur.

+ +
Object.preventExtensions(1);
+// TypeError : 1 n'est pas un object (code ES5)
+
+Object.preventExtensions(1);
+// 1                             (code ES2015)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.2.3.10', 'Object.preventExtensions')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.5.
{{SpecName('ES6', '#sec-object.preventextensions', 'Object.preventExtensions')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.preventextensions', 'Object.preventExtensions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.preventExtensions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.html b/files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.html deleted file mode 100644 index 39e1146c13..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.html +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Object.prototype.propertyIsEnumerable() -slug: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable -tags: - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/propertyIsEnumerable ---- -
{{JSRef}}
- -

La méthode propertyIsEnumerable() renvoie un booléen qui indique si la propriété donnée est énumérable.

- -
{{EmbedInteractiveExample("pages/js/object-prototype-propertyisenumerable.html")}}
- -

Syntaxe

- -
obj.propertyIsEnumerable(prop)
- -

Paramètres

- -
-
prop
-
Le nom de la propriété dont on souhaite savoir si elle est énumérable ou non.
-
- -

Valeur de retour

- -

Un booléen qui indique si la propriété passée en argument est énumérable.

- -

Description

- -

Chaque objet possède une méthode propertyIsEnumerable. Cette méthode est utilisée afin de savoir s'il est possible d'énumérer la propriété donnée au moyen d'une boucle {{jsxref("Instructions/for...in", "for...in")}}. Cela concerne uniquement les propriétés propres à l'objet (celles qui ne sont pas héritées via la chaîne de prototypes). Si un objet ne possède pas la propriété, cette méthode renverra false.

- -

Exemples

- -

Utiliser propertyIsEnumerable

- -

Dans l'exemple qui suit, on illustre comment utiliser propertyIsEnumerable sur les objets et tableaux :

- -
var o = {};
-var a = [];
-o.prop = 'est énumérable';
-a[0] = 'est énumérable';
-
-o.propertyIsEnumerable('prop');   // renvoie true
-a.propertyIsEnumerable(0);        // renvoie true
-
- -

Objets natifs et objets définis par l'utilisateur

- -

Dans l'exemple ci-dessous, on illustre l'énumérabilité des propriétés des objets natifs et celle des objets tiers, définis dans les scripts :

- -
var a = ['est énumérable'];
-
-a.propertyIsEnumerable(0);          // renvoie true
-a.propertyIsEnumerable('length');   // renvoie false
-
-Math.propertyIsEnumerable('random');   // renvoie false
-this.propertyIsEnumerable('Math');     // renvoie false
-
- -

Propriétés héritées et propriétés propres

- -
var a = [];
-a.propertyIsEnumerable('constructor');         // renvoie false
-
-function premierConstructeur() {
-  this.propriete = 'non énumérable';
-}
-
-premierConstructeur.prototype.premiereMethode = function() {};
-
-function secondConstructeur() {
-  this.methode = function methode() { return 'énumérable'; };
-}
-
-secondConstructeur.prototype = new premierConstructeur;
-secondConstructeur.prototype.constructor = secondConstructeur;
-
-var o = new secondConstructeur();
-o.propArbitraire = 'is enumerable';
-
-o.propertyIsEnumerable('propArbitraire');   // renvoie true
-o.propertyIsEnumerable('méthode');          // renvoie true
-o.propertyIsEnumerable('propriété');        // renvoie false
-
-o.propriete = 'énumérable';
-
-o.propertyIsEnumerable('propriété');        // renvoie true
-
-// Ces instructions renvoient false car propertyIsEnumerable
-// ne prend pas en compte la chaîne de prototypes
-o.propertyIsEnumerable('prototype');   // renvoie false
-o.propertyIsEnumerable('constructor'); // renvoie false
-o.propertyIsEnumerable('premièreMéthode'); // renvoie false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.2.4.7', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.propertyIsEnumerable")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.md b/files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.md new file mode 100644 index 0000000000..39e1146c13 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/propertyisenumerable/index.md @@ -0,0 +1,145 @@ +--- +title: Object.prototype.propertyIsEnumerable() +slug: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable +tags: + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/propertyIsEnumerable +--- +
{{JSRef}}
+ +

La méthode propertyIsEnumerable() renvoie un booléen qui indique si la propriété donnée est énumérable.

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-propertyisenumerable.html")}}
+ +

Syntaxe

+ +
obj.propertyIsEnumerable(prop)
+ +

Paramètres

+ +
+
prop
+
Le nom de la propriété dont on souhaite savoir si elle est énumérable ou non.
+
+ +

Valeur de retour

+ +

Un booléen qui indique si la propriété passée en argument est énumérable.

+ +

Description

+ +

Chaque objet possède une méthode propertyIsEnumerable. Cette méthode est utilisée afin de savoir s'il est possible d'énumérer la propriété donnée au moyen d'une boucle {{jsxref("Instructions/for...in", "for...in")}}. Cela concerne uniquement les propriétés propres à l'objet (celles qui ne sont pas héritées via la chaîne de prototypes). Si un objet ne possède pas la propriété, cette méthode renverra false.

+ +

Exemples

+ +

Utiliser propertyIsEnumerable

+ +

Dans l'exemple qui suit, on illustre comment utiliser propertyIsEnumerable sur les objets et tableaux :

+ +
var o = {};
+var a = [];
+o.prop = 'est énumérable';
+a[0] = 'est énumérable';
+
+o.propertyIsEnumerable('prop');   // renvoie true
+a.propertyIsEnumerable(0);        // renvoie true
+
+ +

Objets natifs et objets définis par l'utilisateur

+ +

Dans l'exemple ci-dessous, on illustre l'énumérabilité des propriétés des objets natifs et celle des objets tiers, définis dans les scripts :

+ +
var a = ['est énumérable'];
+
+a.propertyIsEnumerable(0);          // renvoie true
+a.propertyIsEnumerable('length');   // renvoie false
+
+Math.propertyIsEnumerable('random');   // renvoie false
+this.propertyIsEnumerable('Math');     // renvoie false
+
+ +

Propriétés héritées et propriétés propres

+ +
var a = [];
+a.propertyIsEnumerable('constructor');         // renvoie false
+
+function premierConstructeur() {
+  this.propriete = 'non énumérable';
+}
+
+premierConstructeur.prototype.premiereMethode = function() {};
+
+function secondConstructeur() {
+  this.methode = function methode() { return 'énumérable'; };
+}
+
+secondConstructeur.prototype = new premierConstructeur;
+secondConstructeur.prototype.constructor = secondConstructeur;
+
+var o = new secondConstructeur();
+o.propArbitraire = 'is enumerable';
+
+o.propertyIsEnumerable('propArbitraire');   // renvoie true
+o.propertyIsEnumerable('méthode');          // renvoie true
+o.propertyIsEnumerable('propriété');        // renvoie false
+
+o.propriete = 'énumérable';
+
+o.propertyIsEnumerable('propriété');        // renvoie true
+
+// Ces instructions renvoient false car propertyIsEnumerable
+// ne prend pas en compte la chaîne de prototypes
+o.propertyIsEnumerable('prototype');   // renvoie false
+o.propertyIsEnumerable('constructor'); // renvoie false
+o.propertyIsEnumerable('premièreMéthode'); // renvoie false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.2.4.7', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.propertyIsEnumerable")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/proto/index.html b/files/fr/web/javascript/reference/global_objects/object/proto/index.html deleted file mode 100644 index 6f754d2c34..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/proto/index.html +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Object.prototype.__proto__ -slug: Web/JavaScript/Reference/Global_Objects/Object/proto -tags: - - Deprecated - - ECMAScript 2015 - - JavaScript - - Object - - Propriété - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/proto -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/proto ---- -
{{JSRef}}{{Deprecated_header}}
- -
-

Attention : Étant donnée la façon dont la plupart des moteurs JavaScript optimisent les performances, modifier le [[Prototype]] d'un objet est une opération lente pour chaque navigateur et moteur JavaScript. Les impacts liés aux performances sur ce point sont vastes et subtiles : ils concernent pas uniquement le temps passé à effectuer obj.__proto__ = ..., mais peuvent concerner n'importe quel code pour n'importe quel objet dont [[Prototype]] a été modifié. Si vous souhaitez obtenir des performances optimales, évitez de modifier le [[Prototype]] d'un objet. À la place, il est conseillé de créer un objet avec le prototype voulu en utilisant {{jsxref("Object.create()")}}.

-
- -
-

Attention : Bien que la propriété Object.prototype.__proto__ soit déjà supportée dans la plupart des navigateurs à l'heure actuelle, son comportement n'a été standardisé que récemment avec la spécification ECMAScript 2015. Si vous avez besoin d'utiliser cette propriété dans des environnements antérieurs à ES2015, il est recommandé d'utiliser {{jsxref("Object.getPrototypeOf()")}}.

-
- -

La propriété __proto__ de {{jsxref("Object.prototype")}} est une propriété accesseur (un couple de fonction avec un accesseur (getter) et un mutateur (setter)) qui expose le [[Prototype]] interne (qui est soit un objet, soit {{jsxref("null")}}) de l'objet courant.

- -

L'utilisation de __proto__ est sujet à controverse. Elle a été déconseillée par plusieurs personnes et n'avait jamais été incluse dans la spécification ECMAScript. Cependant, de nombreux navigateurs ont décidé de l'implémenter. À l'heure actuelle, la propriété __proto__ a été standardisée avec la spécification ECMAScript 2015 et sera officiellement supportée à l'avenir. Une alternative à cette propriété peut être l'utilisation des méthodes {{jsxref("Object.getPrototypeOf")}}/{{jsxref("Reflect.getPrototypeOf")}} et {{jsxref("Object.setPrototypeOf")}}/{{jsxref("Reflect.setPrototypeOf")}}. Cependant, modifier le [[Prototype]] d'un objet est toujours une opération lente qui doit être évitée le plus possible pour des raisons de performances.

- -

La propriété __proto__ peut également être utilisée avec un littéral objet afin de définir le [[Prototype]] lors de la construction (ce qui en fait une alternative à {{jsxref("Object.create()")}}. Voir la page sur {{jsxref("Opérateurs/Initialisateur_objet","les initialisateurs d'objet","",1)}}.

- -

Syntaxe

- -
var proto = obj.__proto__;
- -
-

Note : le nom de la propriété est composé de deux tirets bas, suivis de « proto », suivis par deux tirets bas (underscores)

-
- -

Description

- -

L'accesseur __proto__ expose la valeur du [[Prototype]] interne d'un objet.

- - - -

Le mutateur __proto__ permet de changer le [[Prototype]] d'un objet. Cet objet doit être extensible selon {{jsxref("Object.isExtensible")}}, si ce n'est pas le cas, une exception {{jsxref("TypeError")}} sera renvoyée. La valeur fournie pour le nouveau prototype doit être un objet ou {{jsxref("null")}}. Toute autre valeur entraînera un échec silencieux.

- -

Pour plus d'éléments sur le fonctionnement de l'héritage et des prototypes, voir la page sur l'héritage et les chaînes de prototypes.

- -

Le propriété __proto__ n'est qu'une propriété accesseur (composée d'une fonction accesseur (getter) et d'une fonction mutateur (setter)) pour {{jsxref("Object.prototype")}}. Si l'accès à __proto__ consulte {{jsxref("Object.prototype")}}, on trouvera la propriété. Un accesseur qui ne consulte pas {{jsxref("Object.prototype")}} ne pourra pas trouver le prototype. Si une propriété __proto__ est trouvée avant que {{jsxref("Object.prototype")}} ne soit consulté, cette propriété « cachera » {{jsxref("Object.prototype")}}.

- -
var aucunProto = Object.create(null);
-
-console.log(typeof aucunProto.__proto__); // undefined
-console.log(Object.getPrototypeOf(aucunProto)); // null
-
-aucunProto.__proto__ = 17;
-
-console.log(aucunProto.__proto__); // 17
-console.log(Object.getPrototypeOf(aucunProto)); // null
-
-var protoCaché = {};
-Object.defineProperty(protoCaché, "__proto__",
-                      { value: 42, writable: true, configurable: true, enumerable: true });
-
-console.log(protoCaché.__proto__); // 42
-console.log(Object.getPrototypeOf(protoCaché) === Object.prototype); // true
-
- -

Exemples

- -

Dans ce qui suit, on crée un nouvelle instance d'Employé et on teste si __proto__ est bien le même objet que le prototype de son constructeur.

- -
-

Attention : Les remarques données plus haut sur les atteintes à la performance restent valables pour ces exemples. Ces exemples permettent uniquement d'illustrer le fonctionnement de __proto__, ils ne font pas office de recommandations.

-
- -
// On déclare une fonction à utiliser comme constructeur
-function Employé() {
-  /* on initialise l'instance */
-}
-
-// On crée une nouvelle instance d'Employé
-var fred = new Employé();
-
-// On teste l'équivalence
-fred.__proto__ === Employé.prototype; // true
-
- -

À cet instant, fred hérite de Employé. On peut toutefois changer ça en assignant un nouvel objet à fred.__proto__ :

- -
// Assigner un nouvel objet à __proto__
-fred.__proto__ = Object.prototype;
-
- -

fred n'hérite plus de Employé.prototype, mais de Object.prototype. Il perd donc les propriétés héritées de Employé.prototype.

- -

Cela n'est possible que pour les objets {{jsxref("Object.isExtensible", "extensibles","",1)}}. La propriété __proto__ d'un objet non-extensible ne peut pas être changée :

- -
var obj = {};
-Object.preventExtensions(obj);
-
-obj.__proto__ = {}; // renvoie une exception TypeError
-
- -

On notera que même la propriété __proto__ de Object.prototype peut être redéfinie tant que la chaîne de prototypes se termine par null :

- -
var b = {};
-
-Object.prototype.__proto__ =
-    Object.create(null, //[[Prototype]]
-                  { salut: { value: function () {console.log('salut');}}});
-
-b.salut();
- -

Si la propriété __proto__ de {{jsxref("Object.prototype")}} ne permet pas d'aboutir à {{jsxref("null")}} via la chaîne de prototypes, on a une chaîne cyclique et on doit avoir une exception {{jsxref("TypeError")}} "cyclic __proto__ value".

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.prototype.__proto__', 'Object.prototype.__proto__')}}{{Spec2('ES2015')}}Incluse dans l'annexe (normative) pour le fonctionnalités additionneles d'ECMAScript pour les navigateurs web (note : la spécification codifie ce qui est déjà présent dans les implémentations).
{{SpecName('ESDraft', '#sec-additional-properties-of-the-object.prototype-object', 'Object.prototype.__proto__')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.proto")}}

- -

Notes de compatibilité

- -

Bien que la spécification ES2015 rende le support de __proto__ nécessaire pour les navigateurs web, elle n'est pas obligatoire pour les autres environnements (bien que ce soit conseillé vu le caractère normatif de l'annexe). Si votre code doit être compatible avec un environnement qui n'est pas un navigateur web, il est recommandé d'utiliser {{jsxref("Object.getPrototypeOf()")}} et {{jsxref("Object.setPrototypeOf()")}} à la place.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/proto/index.md b/files/fr/web/javascript/reference/global_objects/object/proto/index.md new file mode 100644 index 0000000000..6f754d2c34 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/proto/index.md @@ -0,0 +1,161 @@ +--- +title: Object.prototype.__proto__ +slug: Web/JavaScript/Reference/Global_Objects/Object/proto +tags: + - Deprecated + - ECMAScript 2015 + - JavaScript + - Object + - Propriété + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/proto +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/proto +--- +
{{JSRef}}{{Deprecated_header}}
+ +
+

Attention : Étant donnée la façon dont la plupart des moteurs JavaScript optimisent les performances, modifier le [[Prototype]] d'un objet est une opération lente pour chaque navigateur et moteur JavaScript. Les impacts liés aux performances sur ce point sont vastes et subtiles : ils concernent pas uniquement le temps passé à effectuer obj.__proto__ = ..., mais peuvent concerner n'importe quel code pour n'importe quel objet dont [[Prototype]] a été modifié. Si vous souhaitez obtenir des performances optimales, évitez de modifier le [[Prototype]] d'un objet. À la place, il est conseillé de créer un objet avec le prototype voulu en utilisant {{jsxref("Object.create()")}}.

+
+ +
+

Attention : Bien que la propriété Object.prototype.__proto__ soit déjà supportée dans la plupart des navigateurs à l'heure actuelle, son comportement n'a été standardisé que récemment avec la spécification ECMAScript 2015. Si vous avez besoin d'utiliser cette propriété dans des environnements antérieurs à ES2015, il est recommandé d'utiliser {{jsxref("Object.getPrototypeOf()")}}.

+
+ +

La propriété __proto__ de {{jsxref("Object.prototype")}} est une propriété accesseur (un couple de fonction avec un accesseur (getter) et un mutateur (setter)) qui expose le [[Prototype]] interne (qui est soit un objet, soit {{jsxref("null")}}) de l'objet courant.

+ +

L'utilisation de __proto__ est sujet à controverse. Elle a été déconseillée par plusieurs personnes et n'avait jamais été incluse dans la spécification ECMAScript. Cependant, de nombreux navigateurs ont décidé de l'implémenter. À l'heure actuelle, la propriété __proto__ a été standardisée avec la spécification ECMAScript 2015 et sera officiellement supportée à l'avenir. Une alternative à cette propriété peut être l'utilisation des méthodes {{jsxref("Object.getPrototypeOf")}}/{{jsxref("Reflect.getPrototypeOf")}} et {{jsxref("Object.setPrototypeOf")}}/{{jsxref("Reflect.setPrototypeOf")}}. Cependant, modifier le [[Prototype]] d'un objet est toujours une opération lente qui doit être évitée le plus possible pour des raisons de performances.

+ +

La propriété __proto__ peut également être utilisée avec un littéral objet afin de définir le [[Prototype]] lors de la construction (ce qui en fait une alternative à {{jsxref("Object.create()")}}. Voir la page sur {{jsxref("Opérateurs/Initialisateur_objet","les initialisateurs d'objet","",1)}}.

+ +

Syntaxe

+ +
var proto = obj.__proto__;
+ +
+

Note : le nom de la propriété est composé de deux tirets bas, suivis de « proto », suivis par deux tirets bas (underscores)

+
+ +

Description

+ +

L'accesseur __proto__ expose la valeur du [[Prototype]] interne d'un objet.

+ + + +

Le mutateur __proto__ permet de changer le [[Prototype]] d'un objet. Cet objet doit être extensible selon {{jsxref("Object.isExtensible")}}, si ce n'est pas le cas, une exception {{jsxref("TypeError")}} sera renvoyée. La valeur fournie pour le nouveau prototype doit être un objet ou {{jsxref("null")}}. Toute autre valeur entraînera un échec silencieux.

+ +

Pour plus d'éléments sur le fonctionnement de l'héritage et des prototypes, voir la page sur l'héritage et les chaînes de prototypes.

+ +

Le propriété __proto__ n'est qu'une propriété accesseur (composée d'une fonction accesseur (getter) et d'une fonction mutateur (setter)) pour {{jsxref("Object.prototype")}}. Si l'accès à __proto__ consulte {{jsxref("Object.prototype")}}, on trouvera la propriété. Un accesseur qui ne consulte pas {{jsxref("Object.prototype")}} ne pourra pas trouver le prototype. Si une propriété __proto__ est trouvée avant que {{jsxref("Object.prototype")}} ne soit consulté, cette propriété « cachera » {{jsxref("Object.prototype")}}.

+ +
var aucunProto = Object.create(null);
+
+console.log(typeof aucunProto.__proto__); // undefined
+console.log(Object.getPrototypeOf(aucunProto)); // null
+
+aucunProto.__proto__ = 17;
+
+console.log(aucunProto.__proto__); // 17
+console.log(Object.getPrototypeOf(aucunProto)); // null
+
+var protoCaché = {};
+Object.defineProperty(protoCaché, "__proto__",
+                      { value: 42, writable: true, configurable: true, enumerable: true });
+
+console.log(protoCaché.__proto__); // 42
+console.log(Object.getPrototypeOf(protoCaché) === Object.prototype); // true
+
+ +

Exemples

+ +

Dans ce qui suit, on crée un nouvelle instance d'Employé et on teste si __proto__ est bien le même objet que le prototype de son constructeur.

+ +
+

Attention : Les remarques données plus haut sur les atteintes à la performance restent valables pour ces exemples. Ces exemples permettent uniquement d'illustrer le fonctionnement de __proto__, ils ne font pas office de recommandations.

+
+ +
// On déclare une fonction à utiliser comme constructeur
+function Employé() {
+  /* on initialise l'instance */
+}
+
+// On crée une nouvelle instance d'Employé
+var fred = new Employé();
+
+// On teste l'équivalence
+fred.__proto__ === Employé.prototype; // true
+
+ +

À cet instant, fred hérite de Employé. On peut toutefois changer ça en assignant un nouvel objet à fred.__proto__ :

+ +
// Assigner un nouvel objet à __proto__
+fred.__proto__ = Object.prototype;
+
+ +

fred n'hérite plus de Employé.prototype, mais de Object.prototype. Il perd donc les propriétés héritées de Employé.prototype.

+ +

Cela n'est possible que pour les objets {{jsxref("Object.isExtensible", "extensibles","",1)}}. La propriété __proto__ d'un objet non-extensible ne peut pas être changée :

+ +
var obj = {};
+Object.preventExtensions(obj);
+
+obj.__proto__ = {}; // renvoie une exception TypeError
+
+ +

On notera que même la propriété __proto__ de Object.prototype peut être redéfinie tant que la chaîne de prototypes se termine par null :

+ +
var b = {};
+
+Object.prototype.__proto__ =
+    Object.create(null, //[[Prototype]]
+                  { salut: { value: function () {console.log('salut');}}});
+
+b.salut();
+ +

Si la propriété __proto__ de {{jsxref("Object.prototype")}} ne permet pas d'aboutir à {{jsxref("null")}} via la chaîne de prototypes, on a une chaîne cyclique et on doit avoir une exception {{jsxref("TypeError")}} "cyclic __proto__ value".

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.prototype.__proto__', 'Object.prototype.__proto__')}}{{Spec2('ES2015')}}Incluse dans l'annexe (normative) pour le fonctionnalités additionneles d'ECMAScript pour les navigateurs web (note : la spécification codifie ce qui est déjà présent dans les implémentations).
{{SpecName('ESDraft', '#sec-additional-properties-of-the-object.prototype-object', 'Object.prototype.__proto__')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.proto")}}

+ +

Notes de compatibilité

+ +

Bien que la spécification ES2015 rende le support de __proto__ nécessaire pour les navigateurs web, elle n'est pas obligatoire pour les autres environnements (bien que ce soit conseillé vu le caractère normatif de l'annexe). Si votre code doit être compatible avec un environnement qui n'est pas un navigateur web, il est recommandé d'utiliser {{jsxref("Object.getPrototypeOf()")}} et {{jsxref("Object.setPrototypeOf()")}} à la place.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/seal/index.html b/files/fr/web/javascript/reference/global_objects/object/seal/index.html deleted file mode 100644 index c29d88b1e6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/seal/index.html +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Object.seal() -slug: Web/JavaScript/Reference/Global_Objects/Object/seal -tags: - - ECMAScript 5 - - JavaScript - - JavaScript 1.8.5 - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/seal -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/seal ---- -
{{JSRef}}
- -

La méthode Object.seal() scelle un objet afin d'empêcher l'ajout de nouvelles propriétés, en marquant les propriétés existantes comme non-configurables. Les valeurs des propriétés courantes peuvent toujours être modifiées si elles sont accessibles en écriture.

- -
{{EmbedInteractiveExample("pages/js/object-seal.html")}}
- -

Syntaxe

- -
Object.seal(obj)
- -

Paramètres

- -
-
obj
-
L'objet à sceller. Ce peut être n'importe quelle valeur qui n'ait pas un type primitif.
-
- -

Valeur de retour

- -

L'objet qui est scellé.

- -

Description

- -

Par défaut, les objets sont {{jsxref("Object.isExtensible()", "extensibles", "", 1)}} (ce qui signifie que de nouvelles propriétés peuvent leur être ajoutées). Sceller un objet empêche l'ajout de nouvelles propriétés et marque les propriétés existantes comme non-configurables. Ainsi, l'ensemble de propriétés de l'objet devient fixé et immuable. Le fait de rendre les propriétés non-configurables empêche également de transformer des propriétés de données en accesseurs et vice versa. Cela n'empêche pas de modifier la valeur des propriétés. Toute tentative de suppression ou d'ajout de propriétés à un objet qui est scellé, de conversion d'une propriété de données en accesseurs ou vice versa échouera, soit de manière silencieuse soit en lançant une exception {{jsxref("TypeError")}} (la plupart du temps en {{jsxref("Fonctions_et_portee_des_fonctions/Strict_mode","mode strict","",1)}}.

- -

La chaîne de prototypes reste la même. Cependant, la propriété {{jsxref("Object.proto", "__proto__")}} ( {{deprecated_inline}} ) est scellée également.

- -

Exemples

- -
var obj = {
-    prop: function () {},
-    toto: "truc"
-  };
-
-// On peut ajouter de nouvelles propriétés
-// Les propriétés existantes peuvent être
-// changées ou retirées
-obj.toto = "machin";
-obj.blop = "blip";
-delete obj.prop;
-
-var o = Object.seal(obj);
-
-o === obj; // true
-Object.isSealed(obj); // true
-
-// On peut toujours changer la valeur
-// d'une propriété d'un objet scellé
-obj.toto = "moh";
-
-// Mais on ne peut pas convertir les données
-// en accesseurs (ou vice versa)
-Object.defineProperty(obj, "toto", { get: function() { return "g"; } });
-// lancera une TypeError
-
-// Tout autre changement que celui d'une valeur
-// ne fonctionnera pas
-
-obj.coincoin = "mon canard";
-// la propriété n'est pas ajoutée
-
-delete obj.toto;
-// la propriété n'est pas supprimée
-
-// ...en mode strict, cela lancera des TypeErrors
-function échec() {
-  "use strict";
-  delete obj.toto; // lance une TypeError
-  obj.tutu = "arf"; // lance une TypeError
-}
-échec();
-
-// L'utilisation de la méthode Object.defineProperty ne fonctionnera pas
-
-Object.defineProperty(obj, "ohai", { value: 17 });
-// lance une TypeError
-
-Object.defineProperty(obj, "toto", { value: "eit" });
-// modifie une propriété existante
- -

Notes

- -

Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais une valeur d'un autre type primitif), cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, un argument qui n'est pas un objet sera traité comme un objet ordinaire scellé et la méthode renverra cet objet.

- -
Object.seal(1);
-// TypeError : 1 n'est pas un objet (code ES5)
-
-Object.seal(1);
-// 1 (code ES2015)
- -

Comparaison avec Object.freeze()

- -

Lorsqu'on utilise la méthode {{jsxref("Object.freeze()")}}, les propriétés existantes d'un objet gelé deviennent immuables. En revanche, avec Object.seal(), il est toujours possible de modifier la valeur des propriétés existantes d'un objet scellé.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaire
{{SpecName('ES5.1', '#sec-15.2.3.8', 'Object.seal')}}{{Spec2('ES5.1')}}Définition initiale.
- Implémentée par JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.seal', 'Object.seal')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-object.seal', 'Object.seal')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.seal")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/seal/index.md b/files/fr/web/javascript/reference/global_objects/object/seal/index.md new file mode 100644 index 0000000000..c29d88b1e6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/seal/index.md @@ -0,0 +1,150 @@ +--- +title: Object.seal() +slug: Web/JavaScript/Reference/Global_Objects/Object/seal +tags: + - ECMAScript 5 + - JavaScript + - JavaScript 1.8.5 + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/seal +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/seal +--- +
{{JSRef}}
+ +

La méthode Object.seal() scelle un objet afin d'empêcher l'ajout de nouvelles propriétés, en marquant les propriétés existantes comme non-configurables. Les valeurs des propriétés courantes peuvent toujours être modifiées si elles sont accessibles en écriture.

+ +
{{EmbedInteractiveExample("pages/js/object-seal.html")}}
+ +

Syntaxe

+ +
Object.seal(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet à sceller. Ce peut être n'importe quelle valeur qui n'ait pas un type primitif.
+
+ +

Valeur de retour

+ +

L'objet qui est scellé.

+ +

Description

+ +

Par défaut, les objets sont {{jsxref("Object.isExtensible()", "extensibles", "", 1)}} (ce qui signifie que de nouvelles propriétés peuvent leur être ajoutées). Sceller un objet empêche l'ajout de nouvelles propriétés et marque les propriétés existantes comme non-configurables. Ainsi, l'ensemble de propriétés de l'objet devient fixé et immuable. Le fait de rendre les propriétés non-configurables empêche également de transformer des propriétés de données en accesseurs et vice versa. Cela n'empêche pas de modifier la valeur des propriétés. Toute tentative de suppression ou d'ajout de propriétés à un objet qui est scellé, de conversion d'une propriété de données en accesseurs ou vice versa échouera, soit de manière silencieuse soit en lançant une exception {{jsxref("TypeError")}} (la plupart du temps en {{jsxref("Fonctions_et_portee_des_fonctions/Strict_mode","mode strict","",1)}}.

+ +

La chaîne de prototypes reste la même. Cependant, la propriété {{jsxref("Object.proto", "__proto__")}} ( {{deprecated_inline}} ) est scellée également.

+ +

Exemples

+ +
var obj = {
+    prop: function () {},
+    toto: "truc"
+  };
+
+// On peut ajouter de nouvelles propriétés
+// Les propriétés existantes peuvent être
+// changées ou retirées
+obj.toto = "machin";
+obj.blop = "blip";
+delete obj.prop;
+
+var o = Object.seal(obj);
+
+o === obj; // true
+Object.isSealed(obj); // true
+
+// On peut toujours changer la valeur
+// d'une propriété d'un objet scellé
+obj.toto = "moh";
+
+// Mais on ne peut pas convertir les données
+// en accesseurs (ou vice versa)
+Object.defineProperty(obj, "toto", { get: function() { return "g"; } });
+// lancera une TypeError
+
+// Tout autre changement que celui d'une valeur
+// ne fonctionnera pas
+
+obj.coincoin = "mon canard";
+// la propriété n'est pas ajoutée
+
+delete obj.toto;
+// la propriété n'est pas supprimée
+
+// ...en mode strict, cela lancera des TypeErrors
+function échec() {
+  "use strict";
+  delete obj.toto; // lance une TypeError
+  obj.tutu = "arf"; // lance une TypeError
+}
+échec();
+
+// L'utilisation de la méthode Object.defineProperty ne fonctionnera pas
+
+Object.defineProperty(obj, "ohai", { value: 17 });
+// lance une TypeError
+
+Object.defineProperty(obj, "toto", { value: "eit" });
+// modifie une propriété existante
+ +

Notes

+ +

Pour ES5, si l'argument passé à la méthode n'est pas un objet (mais une valeur d'un autre type primitif), cela entraînera une exception {{jsxref("TypeError")}}. Pour ES2015, un argument qui n'est pas un objet sera traité comme un objet ordinaire scellé et la méthode renverra cet objet.

+ +
Object.seal(1);
+// TypeError : 1 n'est pas un objet (code ES5)
+
+Object.seal(1);
+// 1 (code ES2015)
+ +

Comparaison avec Object.freeze()

+ +

Lorsqu'on utilise la méthode {{jsxref("Object.freeze()")}}, les propriétés existantes d'un objet gelé deviennent immuables. En revanche, avec Object.seal(), il est toujours possible de modifier la valeur des propriétés existantes d'un objet scellé.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaire
{{SpecName('ES5.1', '#sec-15.2.3.8', 'Object.seal')}}{{Spec2('ES5.1')}}Définition initiale.
+ Implémentée par JavaScript 1.8.5
{{SpecName('ES6', '#sec-object.seal', 'Object.seal')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-object.seal', 'Object.seal')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.seal")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.html deleted file mode 100644 index 6a5f21af97..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.html +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: Object.setPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/setPrototypeOf ---- -
{{JSRef}}
- -
-

Attention : Étant donnée la façon dont la plupart des moteurs JavaScript optimisent les performances, modifier le [[Prototype]] d'un objet est une opération lente pour chaque navigateur et moteur JavaScript. Les impacts liés aux performances sur ce point sont vastes et subtiles : ils concernent pas uniquement le temps passé à effectuer Object.setPrototypeOf, mais peuvent concerner n'importe quel code pour n'importe quel objet dont [[Prototype]] a été modifié. Si vous souhaitez obtenir des performances optimales, évitez de modifier le [[Prototype]] d'un objet. À la place, il est conseillé de créer un objet avec le prototype voulu en utilisant {{jsxref("Object/create","Object.create()")}}

-
- -

La méthode Object.setPrototypeOf() définit le prototype (autrement dit la propriété interne [[Prototype]]) d'un objet donné avec un autre objet ou {{jsxref("null")}}.

- -

Syntaxe

- -
Object.setPrototypeOf(obj, prototype)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite définir le prototype.
-
prototype
-
Le nouveau prototype de l'objet (un objet ou null).
-
- -

Valeur de retour

- -

L'objet sur lequel on a défini le prototype.

- -

Description

- -

Cette méthode renvoie une exception {{jsxref("TypeError")}} si l'objet dont on souhaite modifier le [[Prototype]] est non-extensible selon {{jsxref("Object.isExtensible")}}.  Cette méthode ne fait rien si le paramètre prototype n'est ni un objet ni {{jsxref("null")}} (par exemple : un nombre, une chaîne, un booléen ou {{jsxref("undefined")}}).  Dans les autres cas, cette méthode substitue le [[Prototype]] de obj avec un nouvel objet.

- -

Object.setPrototypeOf() fait partie de la spécification ECMAScript 2015. L'utilisation de cette méthode est considérée comme la façon correcte pour modifier le prototype d'un objet (contrairement à la propriété {{jsxref("Object/proto","Object.prototype.__proto__")}} plus controversée).

- -

Exemples

- -
var dict = Object.setPrototypeOf({}, null);
-
- -

Prothèse d'émulation (polyfill)

- -

En utilisant la propriété {{jsxref("Object.proto", "Object.prototype.__proto__")}}, on peut définir Object.setPrototypeOf si elle n'est pas disponible :

- -
// Cette prothèse ne fonctionne pas pour IE
-Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
-  obj.__proto__ = proto;
-  return obj;
-}
- -

Ajouter une chaîne de prototypes à un objet

- -

En combinant Object.getPrototypeOf() et {{jsxref("Object.proto", "Object.prototype.__proto__")}} on peut ajouter une chaîne de prototypes au nouveau prototype d'un objet :

- -
/**
-*** Object.setPrototypeOf(@object, @prototype)
-* Change le prototype d'une instance
-*
-**/
-
-Object.setPrototypeOf = function (oInstance, oProto) {
-  oInstance.__proto__ = oProto;
-  return oInstance;
-};
-
-/**
-*** Object.appendChain(@object, @prototype)
-*
-* Ajoute le premier prototype non-natif d'une chaîne au nouveau prototype.
-* Renvoie @object (si c'est une valeur primitive, elle sera transformée
-* en objet).
-*
-*** 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")
-*
-* Ajoute le premier prototype non-natif d'une chaîne à l'objet Function.prototype
-* puis ajoute new Function(["@arg"(s)], "@function_body") à cette chaîne.
-* Renvoie la fonction.
-*
-**/
-
-Object.appendChain = function (oChain, oProto) {
-  if (arguments.length < 2) {
-    throw new TypeError("Object.appendChain - Pas suffisamment d'arguments");
-  }
-  if (typeof oProto !== 'object' && typeof oProto !== 'string') {
-   throw new TypeError("le deuxième argument de Object.appendChain doit être un objet ou une chaîne");
-  }
-
-  var oNewProto = oProto, oReturn = o2nd = oLast = oChain instanceof this ? oChain : new oChain.constructor(oChain);
-
-  for (var o1st = this.getPrototypeOf(o2nd); o1st !== Object.prototype && 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;
-}
-
- -

Utilisation

- -

Ajouter une chaîne de prototypes à un prototype

- -
function Mammifère () {
-  this.isMammifère = "oui";
-}
-
-function EspèceMammifère (sEspèceMammifère) {
-  this.espèce = sEspèceMammifère;
-}
-
-EspèceMammifère.prototype = new Mammifère();
-EspèceMammifère.prototype.constructor = EspèceMammifère;
-
-var oChat = new EspèceMammifère("Felis");
-
-console.log(oChat.isMammifère); // "oui"
-
-function Animal () {
-  this.respire = "oui";
-}
-
-Object.appendChain(oChat, new Animal());
-
-console.log(oChat.respire); // "oui"
-
- -

Deuxième exemple : Transformer une valeur primitive en une instance de son constructeur et ajouter sa chaîne à un prototype

- -
function MySymbol () {
-  this.isSymbol = "yes";
-}
-
-var nPrime = 17;
-
-console.log(typeof nPrime); // "number"
-
-var oPrime = Object.appendChain(nPrime, new MySymbol());
-
-console.log(oPrime); // "17"
-console.log(oPrime.isSymbol); // "yes"
-console.log(typeof oPrime); // "object"
-
- -

Troisième exemple : Ajouter une chaîne de prototypes à l'objet Function.prototype object et ajouter une nouvelle fonction à cette chaîne

- -
function Personne (sNom) {
-  this.identité = sNom;
-}
-
-var george = Object.appendChain(new Person("George"),
-                                "console.log(\"Salut !!\");");
-
-console.log(george.identité); // "George"
-george(); // "Salut !!"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.setprototypeof', 'Object.setPrototypeOf')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-object.setprototypeof', 'Object.setPrototypeOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.setPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.md new file mode 100644 index 0000000000..6a5f21af97 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/setprototypeof/index.md @@ -0,0 +1,207 @@ +--- +title: Object.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/setPrototypeOf +--- +
{{JSRef}}
+ +
+

Attention : Étant donnée la façon dont la plupart des moteurs JavaScript optimisent les performances, modifier le [[Prototype]] d'un objet est une opération lente pour chaque navigateur et moteur JavaScript. Les impacts liés aux performances sur ce point sont vastes et subtiles : ils concernent pas uniquement le temps passé à effectuer Object.setPrototypeOf, mais peuvent concerner n'importe quel code pour n'importe quel objet dont [[Prototype]] a été modifié. Si vous souhaitez obtenir des performances optimales, évitez de modifier le [[Prototype]] d'un objet. À la place, il est conseillé de créer un objet avec le prototype voulu en utilisant {{jsxref("Object/create","Object.create()")}}

+
+ +

La méthode Object.setPrototypeOf() définit le prototype (autrement dit la propriété interne [[Prototype]]) d'un objet donné avec un autre objet ou {{jsxref("null")}}.

+ +

Syntaxe

+ +
Object.setPrototypeOf(obj, prototype)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite définir le prototype.
+
prototype
+
Le nouveau prototype de l'objet (un objet ou null).
+
+ +

Valeur de retour

+ +

L'objet sur lequel on a défini le prototype.

+ +

Description

+ +

Cette méthode renvoie une exception {{jsxref("TypeError")}} si l'objet dont on souhaite modifier le [[Prototype]] est non-extensible selon {{jsxref("Object.isExtensible")}}.  Cette méthode ne fait rien si le paramètre prototype n'est ni un objet ni {{jsxref("null")}} (par exemple : un nombre, une chaîne, un booléen ou {{jsxref("undefined")}}).  Dans les autres cas, cette méthode substitue le [[Prototype]] de obj avec un nouvel objet.

+ +

Object.setPrototypeOf() fait partie de la spécification ECMAScript 2015. L'utilisation de cette méthode est considérée comme la façon correcte pour modifier le prototype d'un objet (contrairement à la propriété {{jsxref("Object/proto","Object.prototype.__proto__")}} plus controversée).

+ +

Exemples

+ +
var dict = Object.setPrototypeOf({}, null);
+
+ +

Prothèse d'émulation (polyfill)

+ +

En utilisant la propriété {{jsxref("Object.proto", "Object.prototype.__proto__")}}, on peut définir Object.setPrototypeOf si elle n'est pas disponible :

+ +
// Cette prothèse ne fonctionne pas pour IE
+Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
+  obj.__proto__ = proto;
+  return obj;
+}
+ +

Ajouter une chaîne de prototypes à un objet

+ +

En combinant Object.getPrototypeOf() et {{jsxref("Object.proto", "Object.prototype.__proto__")}} on peut ajouter une chaîne de prototypes au nouveau prototype d'un objet :

+ +
/**
+*** Object.setPrototypeOf(@object, @prototype)
+* Change le prototype d'une instance
+*
+**/
+
+Object.setPrototypeOf = function (oInstance, oProto) {
+  oInstance.__proto__ = oProto;
+  return oInstance;
+};
+
+/**
+*** Object.appendChain(@object, @prototype)
+*
+* Ajoute le premier prototype non-natif d'une chaîne au nouveau prototype.
+* Renvoie @object (si c'est une valeur primitive, elle sera transformée
+* en objet).
+*
+*** 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")
+*
+* Ajoute le premier prototype non-natif d'une chaîne à l'objet Function.prototype
+* puis ajoute new Function(["@arg"(s)], "@function_body") à cette chaîne.
+* Renvoie la fonction.
+*
+**/
+
+Object.appendChain = function (oChain, oProto) {
+  if (arguments.length < 2) {
+    throw new TypeError("Object.appendChain - Pas suffisamment d'arguments");
+  }
+  if (typeof oProto !== 'object' && typeof oProto !== 'string') {
+   throw new TypeError("le deuxième argument de Object.appendChain doit être un objet ou une chaîne");
+  }
+
+  var oNewProto = oProto, oReturn = o2nd = oLast = oChain instanceof this ? oChain : new oChain.constructor(oChain);
+
+  for (var o1st = this.getPrototypeOf(o2nd); o1st !== Object.prototype && 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;
+}
+
+ +

Utilisation

+ +

Ajouter une chaîne de prototypes à un prototype

+ +
function Mammifère () {
+  this.isMammifère = "oui";
+}
+
+function EspèceMammifère (sEspèceMammifère) {
+  this.espèce = sEspèceMammifère;
+}
+
+EspèceMammifère.prototype = new Mammifère();
+EspèceMammifère.prototype.constructor = EspèceMammifère;
+
+var oChat = new EspèceMammifère("Felis");
+
+console.log(oChat.isMammifère); // "oui"
+
+function Animal () {
+  this.respire = "oui";
+}
+
+Object.appendChain(oChat, new Animal());
+
+console.log(oChat.respire); // "oui"
+
+ +

Deuxième exemple : Transformer une valeur primitive en une instance de son constructeur et ajouter sa chaîne à un prototype

+ +
function MySymbol () {
+  this.isSymbol = "yes";
+}
+
+var nPrime = 17;
+
+console.log(typeof nPrime); // "number"
+
+var oPrime = Object.appendChain(nPrime, new MySymbol());
+
+console.log(oPrime); // "17"
+console.log(oPrime.isSymbol); // "yes"
+console.log(typeof oPrime); // "object"
+
+ +

Troisième exemple : Ajouter une chaîne de prototypes à l'objet Function.prototype object et ajouter une nouvelle fonction à cette chaîne

+ +
function Personne (sNom) {
+  this.identité = sNom;
+}
+
+var george = Object.appendChain(new Person("George"),
+                                "console.log(\"Salut !!\");");
+
+console.log(george.identité); // "George"
+george(); // "Salut !!"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-object.setprototypeof', 'Object.setPrototypeOf')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-object.setprototypeof', 'Object.setPrototypeOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.setPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.html b/files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.html deleted file mode 100644 index 331b91a04f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Object.prototype.toLocaleString() -slug: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString -tags: - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/toLocaleString ---- -
{{JSRef}}
- -

La méthode toLocaleString() renvoie une chaine de caractères représentant l'objet. Cette méthode est destinée à être surchargée par les objets dérivés à des fins spécifiques pour prendre en compte les locales.

- -
{{EmbedInteractiveExample("pages/js/object-prototype-tolocalestring.html")}}
- -

Syntaxe

- -
obj.toLocaleString()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente l'objet en tenant compte de la locale.

- -

Description

- -

La méthode toLocaleString renvoie le résultat de l'appel à la méthode {{jsxref("Object.toString", "toString()")}}.

- -

Cette fonction est destinée à fournir aux objets une méthode générique toLocaleString, même si tous ne peuvent l'utiliser. Voir la liste ci-dessous.

- -

Objets surchargeant la méthode toLocaleString

- - - -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.2.4.3', 'Object.prototype.toLocaleString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.tolocalestring', 'Object.prototype.toLocaleString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.tolocalestring', 'Object.prototype.toLocaleString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.toLocaleString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.md b/files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.md new file mode 100644 index 0000000000..331b91a04f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/tolocalestring/index.md @@ -0,0 +1,82 @@ +--- +title: Object.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString +tags: + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/toLocaleString +--- +
{{JSRef}}
+ +

La méthode toLocaleString() renvoie une chaine de caractères représentant l'objet. Cette méthode est destinée à être surchargée par les objets dérivés à des fins spécifiques pour prendre en compte les locales.

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-tolocalestring.html")}}
+ +

Syntaxe

+ +
obj.toLocaleString()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente l'objet en tenant compte de la locale.

+ +

Description

+ +

La méthode toLocaleString renvoie le résultat de l'appel à la méthode {{jsxref("Object.toString", "toString()")}}.

+ +

Cette fonction est destinée à fournir aux objets une méthode générique toLocaleString, même si tous ne peuvent l'utiliser. Voir la liste ci-dessous.

+ +

Objets surchargeant la méthode toLocaleString

+ + + +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.2.4.3', 'Object.prototype.toLocaleString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.tolocalestring', 'Object.prototype.toLocaleString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.tolocalestring', 'Object.prototype.toLocaleString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.toLocaleString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/tosource/index.html b/files/fr/web/javascript/reference/global_objects/object/tosource/index.html deleted file mode 100644 index 7bc57ea1d3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/tosource/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: Object.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Object/toSource -tags: - - JavaScript - - Méthode - - Non-standard - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/toSource ---- -
{{JSRef}} {{non-standard_header}}
- -

La méthode toSource() renvoie une chaîne de caractères représentant le code source d'un objet.

- -

Syntaxe

- -
Object.toSource();
-obj.toSource();
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le code source de l'objet.

- -

Description

- -

La méthode toSource() renvoie les valeurs suivantes :

- - - -

La méthode toSource() peut être utilisée à des fins de débogage pour analyser le contenu d'un objet.

- -

Surcharger la méthode toSource()

- -

La méthode toSource() peut être surchargée pour les différents objets. Par exemple :

- -
function Personne(nom) {
-  this.nom = nom;
-}
-
-Personne.prototype.toSource = function Personne_toSource() {
-  return 'new Personne(' + uneval(this.nom) + ')';
-};
-
-console.log(new Personne('Jean').toSource()); // ---> new Personne("Jean")
-
- -

Les méthodes toSource() natives

- -

Chaque constructeur natif JavaScript possède sa propre méthode toSource(). Ces objets sont :

- - - -

Limites : les objets cycliques

- -

Dans le cas d'objets qui font référence à eux-mêmes (une liste cyclique ou un arbre), toSource() ne représentera pas la référence (Firefox 24). Par exemple :

- -
var obj1 = {};
-var obj2 = { a: obj1 };
-obj1.b = obj2;
-
-console.log('Cyclique : ' + (obj1.b.a == obj1));
-
-var objSource = obj1.toSource(); // renvoie "({b:{a:{}}})"
-
-obj1 = eval(objSource);
-
-console.log('Cyclique : ' + (obj1.b.a == obj1));
-
- -

Si on utilise une structure cyclique et qu'on a besoin de toSource(), il faudra surcharger la méthode toSource() pour avoir le comportement souhaité.

- -

Exemples

- -

Utiliser toSource()

- -

Dans le code qui suit, on définit un objet Chien et on crée monChien qui est une instance de type Chien :

- -
function Chien(nom, race, couleur, sexe) {
-  this.nom = nom;
-  this.race = race;
-  this.couleur = couleur;
-  this.sexe = sexe;
-}
-
-monChien = new Chien('Gabby', 'Labrador', 'chocolat', 'femelle');
-
- -

Si on appelle la méthode toSource() sur monChien, on obtiendra le littéral permettant de définir l'objet :

- -
monChien.toSource();
-// returns ({nom:"Gabby", race:"Labrador", couleur:"chocolat", sexe:"femelle"})
-
- -

Spécifications

- -

Cette méthode ne fait partie d'aucun standard, implémentée avec JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/tosource/index.md b/files/fr/web/javascript/reference/global_objects/object/tosource/index.md new file mode 100644 index 0000000000..7bc57ea1d3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/tosource/index.md @@ -0,0 +1,129 @@ +--- +title: Object.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Object/toSource +tags: + - JavaScript + - Méthode + - Non-standard + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

La méthode toSource() renvoie une chaîne de caractères représentant le code source d'un objet.

+ +

Syntaxe

+ +
Object.toSource();
+obj.toSource();
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le code source de l'objet.

+ +

Description

+ +

La méthode toSource() renvoie les valeurs suivantes :

+ + + +

La méthode toSource() peut être utilisée à des fins de débogage pour analyser le contenu d'un objet.

+ +

Surcharger la méthode toSource()

+ +

La méthode toSource() peut être surchargée pour les différents objets. Par exemple :

+ +
function Personne(nom) {
+  this.nom = nom;
+}
+
+Personne.prototype.toSource = function Personne_toSource() {
+  return 'new Personne(' + uneval(this.nom) + ')';
+};
+
+console.log(new Personne('Jean').toSource()); // ---> new Personne("Jean")
+
+ +

Les méthodes toSource() natives

+ +

Chaque constructeur natif JavaScript possède sa propre méthode toSource(). Ces objets sont :

+ + + +

Limites : les objets cycliques

+ +

Dans le cas d'objets qui font référence à eux-mêmes (une liste cyclique ou un arbre), toSource() ne représentera pas la référence (Firefox 24). Par exemple :

+ +
var obj1 = {};
+var obj2 = { a: obj1 };
+obj1.b = obj2;
+
+console.log('Cyclique : ' + (obj1.b.a == obj1));
+
+var objSource = obj1.toSource(); // renvoie "({b:{a:{}}})"
+
+obj1 = eval(objSource);
+
+console.log('Cyclique : ' + (obj1.b.a == obj1));
+
+ +

Si on utilise une structure cyclique et qu'on a besoin de toSource(), il faudra surcharger la méthode toSource() pour avoir le comportement souhaité.

+ +

Exemples

+ +

Utiliser toSource()

+ +

Dans le code qui suit, on définit un objet Chien et on crée monChien qui est une instance de type Chien :

+ +
function Chien(nom, race, couleur, sexe) {
+  this.nom = nom;
+  this.race = race;
+  this.couleur = couleur;
+  this.sexe = sexe;
+}
+
+monChien = new Chien('Gabby', 'Labrador', 'chocolat', 'femelle');
+
+ +

Si on appelle la méthode toSource() sur monChien, on obtiendra le littéral permettant de définir l'objet :

+ +
monChien.toSource();
+// returns ({nom:"Gabby", race:"Labrador", couleur:"chocolat", sexe:"femelle"})
+
+ +

Spécifications

+ +

Cette méthode ne fait partie d'aucun standard, implémentée avec JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/tostring/index.html b/files/fr/web/javascript/reference/global_objects/object/tostring/index.html deleted file mode 100644 index e702efa029..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/tostring/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Object.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Object/toString -tags: - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaîne de caractères représentant l'objet.

- -
{{EmbedInteractiveExample("pages/js/object-prototype-tostring.html")}}
- -

Syntaxe

- -
obj.toString()
- -

Valeur de retour

- -

Une chaîne de caractères représentant l'objet.

- -

Description

- -

Chaque object possède une méthode toString() qui est appelée de façon automatique à chaque fois que l'objet doit être représenté sous forme de texte ou à chaque fois qu'on utilise un objet et que la valeur attendue est une chaîne de caractères. Par défaut, chaque objet qui descend d'Object hérite de la méthode toString(). Si cette méthode n'est pas surchargée, toString() renvoie "[object type]", où type est le type de l'objet. Par exemple :

- -
var o = new Object();
-o.toString();           // renvoie [object Object]
-
- -
-

Note : À partir de JavaScript 1.8.5 toString(), lorsqu'elle est appelée sur {{jsxref("null")}} renvoie [object Null], et lorsqu'elle est appelée sur {{jsxref("undefined")}} renvoie [object Undefined], ce qui est conforme à ECMAScript 5 et aux errata qui ont suivis. Voir l'exemple ci-après Utiliser toString pour détecter le type d'un objet.

-
- -

Exemples

- -

Surcharger la méthode toString() par défaut

- -

Il est possible de surcharger la méthode toString(). La méthode toString() ne prend pas d'argument et doit renvoyer une chaîne de caractères. La méthode toString() peut renvoyer n'importe quelle valeur mais elle sera plus pertinente si elle renvoie des informations sur l'objet courant.

- -

Le code qui suit définit un type d'objet Chien et instancie monChien, qui est de type Chien :

- -
function Chien(nom, race, couleur, sexe) {
-  this.nom = nom;
-  this.race = race;
-  this.couleur = couleur;
-  this.sexe = sexe;
-}
-
-monChien = new Chien('Gabby', 'Labrador', 'chocolat', 'femelle');
-
- -

Si on appelle la méthode toString() sur cet objet, on aura le résultat suivant (provenant de la méthode originale, héritée d'{{jsxref("Object")}}) :

- -
monChien.toString(); // renvoie [object Object]
-
- -

Dans le code qui suit, on surcharge la méthode toString() avec chienToString(). Cette méthode produit une chaîne qui contient l'ensemble des propriétés (race, couleur, sexe, nom) de l'objet :

- -
Chien.prototype.toString = function chienToString() {
-  var ret = 'Le chien ' + this.nom + ' est un ' + this.race + ' ' + this.sexe + ' ' + this.couleur;
-  return ret;
-}
-
- -

En utilisant la fonction ci-avant, à chaque fois que monChien sera utilisé là où on attend une chaîne, le moteur JavaScript appellera automatique la fonction chienToString()qui renverra la chaîne suivante :

- -
Le chien Gabby est un labrador femelle chocolat.
-
- -

Utiliser toString() pour détecter le type d'un objet

- -

toString() peut être utilisée pour tous les objets afin d'obtenir son type. Pour utiliser Object.prototype.toString() avec n'importe quel objet, il sera nécessaire d'appeler {{jsxref("Function.prototype.call()")}} ou {{jsxref("Function.prototype.apply()")}} (pour éviter les versions surchargées).

- -
var toString = Object.prototype.toString;
-
-toString.call(new Date);    // [object Date]
-toString.call(new String);  // [object String]
-toString.call(Math);        // [object Math]
-
-// Depuis JavaScript 1.8.5
-toString.call(undefined);   // [object Undefined]
-toString.call(null);        // [object Null]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.2.4.2', 'Object.prototype.toString')}}{{Spec2('ES5.1')}}Lorsque la méthode est appelée sur {{jsxref("null")}}, elle renvoie [object Null], et sur {{jsxref( "undefined")}} elle renvoie [object Undefined]
{{SpecName('ES6', '#sec-object.prototype.tostring', 'Object.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.tostring', 'Object.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/tostring/index.md b/files/fr/web/javascript/reference/global_objects/object/tostring/index.md new file mode 100644 index 0000000000..e702efa029 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/tostring/index.md @@ -0,0 +1,133 @@ +--- +title: Object.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Object/toString +tags: + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaîne de caractères représentant l'objet.

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-tostring.html")}}
+ +

Syntaxe

+ +
obj.toString()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant l'objet.

+ +

Description

+ +

Chaque object possède une méthode toString() qui est appelée de façon automatique à chaque fois que l'objet doit être représenté sous forme de texte ou à chaque fois qu'on utilise un objet et que la valeur attendue est une chaîne de caractères. Par défaut, chaque objet qui descend d'Object hérite de la méthode toString(). Si cette méthode n'est pas surchargée, toString() renvoie "[object type]", où type est le type de l'objet. Par exemple :

+ +
var o = new Object();
+o.toString();           // renvoie [object Object]
+
+ +
+

Note : À partir de JavaScript 1.8.5 toString(), lorsqu'elle est appelée sur {{jsxref("null")}} renvoie [object Null], et lorsqu'elle est appelée sur {{jsxref("undefined")}} renvoie [object Undefined], ce qui est conforme à ECMAScript 5 et aux errata qui ont suivis. Voir l'exemple ci-après Utiliser toString pour détecter le type d'un objet.

+
+ +

Exemples

+ +

Surcharger la méthode toString() par défaut

+ +

Il est possible de surcharger la méthode toString(). La méthode toString() ne prend pas d'argument et doit renvoyer une chaîne de caractères. La méthode toString() peut renvoyer n'importe quelle valeur mais elle sera plus pertinente si elle renvoie des informations sur l'objet courant.

+ +

Le code qui suit définit un type d'objet Chien et instancie monChien, qui est de type Chien :

+ +
function Chien(nom, race, couleur, sexe) {
+  this.nom = nom;
+  this.race = race;
+  this.couleur = couleur;
+  this.sexe = sexe;
+}
+
+monChien = new Chien('Gabby', 'Labrador', 'chocolat', 'femelle');
+
+ +

Si on appelle la méthode toString() sur cet objet, on aura le résultat suivant (provenant de la méthode originale, héritée d'{{jsxref("Object")}}) :

+ +
monChien.toString(); // renvoie [object Object]
+
+ +

Dans le code qui suit, on surcharge la méthode toString() avec chienToString(). Cette méthode produit une chaîne qui contient l'ensemble des propriétés (race, couleur, sexe, nom) de l'objet :

+ +
Chien.prototype.toString = function chienToString() {
+  var ret = 'Le chien ' + this.nom + ' est un ' + this.race + ' ' + this.sexe + ' ' + this.couleur;
+  return ret;
+}
+
+ +

En utilisant la fonction ci-avant, à chaque fois que monChien sera utilisé là où on attend une chaîne, le moteur JavaScript appellera automatique la fonction chienToString()qui renverra la chaîne suivante :

+ +
Le chien Gabby est un labrador femelle chocolat.
+
+ +

Utiliser toString() pour détecter le type d'un objet

+ +

toString() peut être utilisée pour tous les objets afin d'obtenir son type. Pour utiliser Object.prototype.toString() avec n'importe quel objet, il sera nécessaire d'appeler {{jsxref("Function.prototype.call()")}} ou {{jsxref("Function.prototype.apply()")}} (pour éviter les versions surchargées).

+ +
var toString = Object.prototype.toString;
+
+toString.call(new Date);    // [object Date]
+toString.call(new String);  // [object String]
+toString.call(Math);        // [object Math]
+
+// Depuis JavaScript 1.8.5
+toString.call(undefined);   // [object Undefined]
+toString.call(null);        // [object Null]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.2.4.2', 'Object.prototype.toString')}}{{Spec2('ES5.1')}}Lorsque la méthode est appelée sur {{jsxref("null")}}, elle renvoie [object Null], et sur {{jsxref( "undefined")}} elle renvoie [object Undefined]
{{SpecName('ES6', '#sec-object.prototype.tostring', 'Object.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.tostring', 'Object.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/valueof/index.html b/files/fr/web/javascript/reference/global_objects/object/valueof/index.html deleted file mode 100644 index 4a913a7d0e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/valueof/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Object.prototype.valueOf() -slug: Web/JavaScript/Reference/Global_Objects/Object/valueOf -tags: - - JavaScript - - Méthode - - Object - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/valueOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/valueOf ---- -
{{JSRef}}
- -

La méthode valueOf() renvoie la valeur primitive d'un objet donné.

- -
{{EmbedInteractiveExample("pages/js/object-prototype-valueof.html")}}
- -

Syntaxe

- -
object.valueOf()
- -

Valeur de retour

- -

La valeur primitive de l'objet appelant.

- -

Description

- -

JavaScript appelle la méthode valueOf pour convertir un objet en une valeur primitive. Il est rarement nécessaire d'appeler soi-même la méthode valueOf ; JavaScript l'invoque automatiquement lorsqu'il rencontre un objet alors qu'il attend une valeur primitive.

- -

Par défaut, la méthode valueOf est héritée par tout objet descendant d'{{jsxref("Object")}}. Tous les objets globaux natifs redéfinissent cette méthode pour renvoyer une valeur appropriée. Si un objet n'a pas de valeur primitive, valueOf renvoie l'objet lui-même, ce qui sera affiché comme :

- -
[object Object]
-
- -

valueOf peut être utilisée afin de convertir un objet prédéfini en une valeur primitive. Si un objet est défini dans un script, il est possible de surcharger Object.prototype.valueOf pour appeler une méthode personnalisée au lieu de la méthode par défaut d'Object.

- -

Surcharger valueOf pour des objets personnalisés

- -

Il est possible de créer une fonction à appeler à la place de la méthode valueOf par défaut. Celle-ci ne peut pas recevoir de paramètres.

- -

Supposons qu'on ait un type d'objet monTypeDeNombre et qu'on désire lui ajouter une méthode valueOf spécifique, on pourra utiliser le code suivant :

- -
monTypeDeNombre.prototype.valueOf = function(){ return valeurPrimitive;};
-
- -

En utilisant ce code, chaque fois qu'un objet de type monTypeDeNombre sera utilisé dans un contexte où il doit être représenté comme une valeur primitive, JavaScript appellera automatiquement la fonction qui y est définie.

- -

C'est habituellement JavaScript qui invoquera la méthode valueOf, mais il est aussi possible de l'appeler soi-même :

- -
monNombre.valueOf()
-
- -
-

Note : Les objets à utiliser dans un contexte textuel sont convertis avec la méthode {{jsxref("Object.toString", "toString()")}} ce qui est différent de la conversion d'objets {{jsxref("String")}} en valeurs primitives avec valueOf. Tous les objets peuvent être convertis en chaînes de caractères (la façon la plus générique étant "[object type]"). En revanche, la plupart des objets ne peut pas être convertie en nombre ou booléen par exemple.

-
- -

Exemples

- -

Utiliser valueOf

- -
function MonTypeDeNombre(n) {
-    this.nombre = n;
-}
-
-MonTypeDeNombre.prototype.valueOf = function(){
-  return this.nombre;
-}
-
-var monObj = new MonTypeDeNombre(4);
-console.log(monObj + 3); // 7 car l'opération a implicitement utilisé valueOf
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.2.4.4', 'Object.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.valueOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/valueof/index.md b/files/fr/web/javascript/reference/global_objects/object/valueof/index.md new file mode 100644 index 0000000000..4a913a7d0e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/valueof/index.md @@ -0,0 +1,117 @@ +--- +title: Object.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Object/valueOf +tags: + - JavaScript + - Méthode + - Object + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/valueOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/valueOf +--- +
{{JSRef}}
+ +

La méthode valueOf() renvoie la valeur primitive d'un objet donné.

+ +
{{EmbedInteractiveExample("pages/js/object-prototype-valueof.html")}}
+ +

Syntaxe

+ +
object.valueOf()
+ +

Valeur de retour

+ +

La valeur primitive de l'objet appelant.

+ +

Description

+ +

JavaScript appelle la méthode valueOf pour convertir un objet en une valeur primitive. Il est rarement nécessaire d'appeler soi-même la méthode valueOf ; JavaScript l'invoque automatiquement lorsqu'il rencontre un objet alors qu'il attend une valeur primitive.

+ +

Par défaut, la méthode valueOf est héritée par tout objet descendant d'{{jsxref("Object")}}. Tous les objets globaux natifs redéfinissent cette méthode pour renvoyer une valeur appropriée. Si un objet n'a pas de valeur primitive, valueOf renvoie l'objet lui-même, ce qui sera affiché comme :

+ +
[object Object]
+
+ +

valueOf peut être utilisée afin de convertir un objet prédéfini en une valeur primitive. Si un objet est défini dans un script, il est possible de surcharger Object.prototype.valueOf pour appeler une méthode personnalisée au lieu de la méthode par défaut d'Object.

+ +

Surcharger valueOf pour des objets personnalisés

+ +

Il est possible de créer une fonction à appeler à la place de la méthode valueOf par défaut. Celle-ci ne peut pas recevoir de paramètres.

+ +

Supposons qu'on ait un type d'objet monTypeDeNombre et qu'on désire lui ajouter une méthode valueOf spécifique, on pourra utiliser le code suivant :

+ +
monTypeDeNombre.prototype.valueOf = function(){ return valeurPrimitive;};
+
+ +

En utilisant ce code, chaque fois qu'un objet de type monTypeDeNombre sera utilisé dans un contexte où il doit être représenté comme une valeur primitive, JavaScript appellera automatiquement la fonction qui y est définie.

+ +

C'est habituellement JavaScript qui invoquera la méthode valueOf, mais il est aussi possible de l'appeler soi-même :

+ +
monNombre.valueOf()
+
+ +
+

Note : Les objets à utiliser dans un contexte textuel sont convertis avec la méthode {{jsxref("Object.toString", "toString()")}} ce qui est différent de la conversion d'objets {{jsxref("String")}} en valeurs primitives avec valueOf. Tous les objets peuvent être convertis en chaînes de caractères (la façon la plus générique étant "[object type]"). En revanche, la plupart des objets ne peut pas être convertie en nombre ou booléen par exemple.

+
+ +

Exemples

+ +

Utiliser valueOf

+ +
function MonTypeDeNombre(n) {
+    this.nombre = n;
+}
+
+MonTypeDeNombre.prototype.valueOf = function(){
+  return this.nombre;
+}
+
+var monObj = new MonTypeDeNombre(4);
+console.log(monObj + 3); // 7 car l'opération a implicitement utilisé valueOf
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.2.4.4', 'Object.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.valueOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/object/values/index.html b/files/fr/web/javascript/reference/global_objects/object/values/index.html deleted file mode 100644 index 6d6c9f0372..0000000000 --- a/files/fr/web/javascript/reference/global_objects/object/values/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Object.values() -slug: Web/JavaScript/Reference/Global_Objects/Object/values -tags: - - ECMAScript2016 - - JavaScript - - Méthode - - Object - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Object/values -original_slug: Web/JavaScript/Reference/Objets_globaux/Object/values ---- -
{{JSRef}}
- -

La méthode Object.values() renvoie un tableau contenant les valeurs des propriétés propres énumérables d'un objet dont l'ordre est le même que celui obtenu avec une boucle {{jsxref("Instructions/for...in", "for...in")}} (la boucle for-in est différente car elle parcourt également les propriétés héritées).

- -
{{EmbedInteractiveExample("pages/js/object-values.html")}}
- -

Syntaxe

- -
Object.values(obj)
- -

Paramètres

- -
-
obj
-
L'objet dont on souhaite connaître les valeurs des propriétés propres énumérables.
-
- -

Valeur de retour

- -

Un tableau dont les éléments sont les valeurs des propriétés énumérables de l'objet passé en argument.

- -

Description

- -

Object.values() renvoie un tableau dont les éléments sont les valeurs des propriétés énumérables directement rattachées à l'objet passé en argument. L'ordre du tableau est le même que celui obtenu lorsqu'on parcourt les propriétés manuellement.

- -

Exemples

- -
var obj = { toto: "truc", machin: 42 };
-console.log(Object.values(obj)); // ['truc', 42]
-
-// un objet semblable à un tableau
-var obj = { 0: 'a', 1: 'b', 2: 'c' };
-console.log(Object.values(obj)); // ['a', 'b', 'c']
-
-// un objet semblable à un tableau
-// dont les clés sont ordonnées aléatoirement
-// lorsque des clés numériques sont utilisées, les valeurs sont
-// renvoyées selon l'ordre numérique des clés
-var un_obj = { 100: 'a', 2: 'b', 7: 'c' };
-console.log(Object.values(un_obj)); // ['b', 'c', 'a']
-
-// getToto est une propriété qui
-// n'est pas énumérable
-var mon_obj = Object.create({}, { getToto: { value: function() { return this.toto; } } });
-mon_obj.toto = "truc";
-console.log(Object.values(mon_obj)); // ['truc']
-
-// un argument de type primitif sera
-// converti en un objet
-console.log(Object.values("toto")); // ['t', 'o', 't', 'o']
-
- -

Prothèse d'émulation (polyfill)

- -

Afin d'ajouter le support pour Object.values dans des environnements plus anciens qui ne supportent pas la méthode nativement, vous pouvez utiliser une prothèse comme celle proposée sur le dépôt tc39/proposal-object-values-entries ou sur le dépôt es-shims/Object.values.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.values', 'Object.values')}}{{Spec2('ESDraft')}} 
{{SpecName('ES8', '#sec-object.values', 'Object.values')}}{{Spec2('ES8')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Object.values")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/object/values/index.md b/files/fr/web/javascript/reference/global_objects/object/values/index.md new file mode 100644 index 0000000000..6d6c9f0372 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/object/values/index.md @@ -0,0 +1,104 @@ +--- +title: Object.values() +slug: Web/JavaScript/Reference/Global_Objects/Object/values +tags: + - ECMAScript2016 + - JavaScript + - Méthode + - Object + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Object/values +original_slug: Web/JavaScript/Reference/Objets_globaux/Object/values +--- +
{{JSRef}}
+ +

La méthode Object.values() renvoie un tableau contenant les valeurs des propriétés propres énumérables d'un objet dont l'ordre est le même que celui obtenu avec une boucle {{jsxref("Instructions/for...in", "for...in")}} (la boucle for-in est différente car elle parcourt également les propriétés héritées).

+ +
{{EmbedInteractiveExample("pages/js/object-values.html")}}
+ +

Syntaxe

+ +
Object.values(obj)
+ +

Paramètres

+ +
+
obj
+
L'objet dont on souhaite connaître les valeurs des propriétés propres énumérables.
+
+ +

Valeur de retour

+ +

Un tableau dont les éléments sont les valeurs des propriétés énumérables de l'objet passé en argument.

+ +

Description

+ +

Object.values() renvoie un tableau dont les éléments sont les valeurs des propriétés énumérables directement rattachées à l'objet passé en argument. L'ordre du tableau est le même que celui obtenu lorsqu'on parcourt les propriétés manuellement.

+ +

Exemples

+ +
var obj = { toto: "truc", machin: 42 };
+console.log(Object.values(obj)); // ['truc', 42]
+
+// un objet semblable à un tableau
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.values(obj)); // ['a', 'b', 'c']
+
+// un objet semblable à un tableau
+// dont les clés sont ordonnées aléatoirement
+// lorsque des clés numériques sont utilisées, les valeurs sont
+// renvoyées selon l'ordre numérique des clés
+var un_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.values(un_obj)); // ['b', 'c', 'a']
+
+// getToto est une propriété qui
+// n'est pas énumérable
+var mon_obj = Object.create({}, { getToto: { value: function() { return this.toto; } } });
+mon_obj.toto = "truc";
+console.log(Object.values(mon_obj)); // ['truc']
+
+// un argument de type primitif sera
+// converti en un objet
+console.log(Object.values("toto")); // ['t', 'o', 't', 'o']
+
+ +

Prothèse d'émulation (polyfill)

+ +

Afin d'ajouter le support pour Object.values dans des environnements plus anciens qui ne supportent pas la méthode nativement, vous pouvez utiliser une prothèse comme celle proposée sur le dépôt tc39/proposal-object-values-entries ou sur le dépôt es-shims/Object.values.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-object.values', 'Object.values')}}{{Spec2('ESDraft')}} 
{{SpecName('ES8', '#sec-object.values', 'Object.values')}}{{Spec2('ES8')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Object.values")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/parsefloat/index.html b/files/fr/web/javascript/reference/global_objects/parsefloat/index.html deleted file mode 100644 index f904aaf99e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/parsefloat/index.html +++ /dev/null @@ -1,147 +0,0 @@ ---- -title: parseFloat() -slug: Web/JavaScript/Reference/Global_Objects/parseFloat -tags: - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/parseFloat -original_slug: Web/JavaScript/Reference/Objets_globaux/parseFloat ---- -
{{jsSidebar("Objects")}}
- -

La fonction parseFloat() permet de transformer une chaîne de caractères en un nombre flottant après avoir analysée celle-ci (parsing).

- -
{{EmbedInteractiveExample("pages/js/globalprops-parsefloat.html")}}
- -

Syntaxe

- -
parseFloat(string)
- -

Paramètres

- -
-
string
-
Une chaîne de caractères la valeur qu'on souhaite analyser et transformer en un nombre flottant.
-
- -

Valeur de retour

- -

Un nombre flottant obtenu à partir de l'analyse de la chaîne de caractères. Si le premier caractère ne permet pas d'obtenir un nombre, ce sera la valeur {{jsxref("NaN")}} qui sera renvoyée.

- -

Description

- -

parseFloat est une fonction non associée à un objet, disponible au plus haut niveau de l'environnement JavaScript.

- -

parseFloat analyse l'argument fourni sous la forme d'une chaîne de caractères et renvoie un nombre flottant correspondant. L'analyse de la chaîne s'arrête dès qu'un caractère qui n'est pas +,-, un chiffre, un point ou un exposant. Ce caractère, ainsi que les suivants, seront ignorés. Les blancs en début et en fin de chaîne sont autorisés.

- -
-

Note : Si on souhaite avoir un outil de conversion plus strict, on pourra utiliser {{jsxref("Number", "Number(valeur)")}} qui utilise une analyse plus stricte et qui fournit {{jsxref("NaN")}} pour les valeurs qui contiennent des caractères invalides, quelle que soit leur position.

-
- -

Si le premier caractère de la chaîne ne peut pas être converti en un nombre, parseFloat() renverra NaN.

- -

Pour des raisons arithmétiques, la valeur NaN n'est jamais un nombre, quelle que soit la base considérée. On peut utiliser la méthode {{jsxref("isNaN")}} afin de déterminer si le résultat obtenu par parseFloat() est NaN. Si NaN est passé comme valeur lors d'opérations arithmétiques, ces opérations renverront également NaN comme résultat.

- -

parseFloat() peut également analyser et renvoyer la valeur {{jsxref("Infinity")}} qui représente l'infini numérique. Ici, on pourra utiliser la fonction {{jsxref("isFinite()")}} afin de déterminer si le résultat obtenu est un nombre fini (c'est-à-dire qui n'est ni Infinity, ni -Infinity, ni NaN).

- -

parseFloat() peut également analyser un objet si celui-ci implémente la méthode toString() ou valueOf(). La valeur renvoyée par parseFloat() le résultat de parseFloat() appliqué à la valeur renvoyée par toString() ou valueOf() .

- -

parseFloat() convertit une valeur {{jsxref("BigInt")}} en une valeur {{jsxref("Number")}} et perd ainsi en précision car toutes les valeurs BigInt ne sont pas représentables en Number.

- -

Exemples

- -

Utiliser parseFloat() pour renvoyer un nombre

- -

Les instructions suivantes renvoient toutes la valeur 3.14 :

- -
parseFloat("3.14");
-parseFloat("314e-2");
-parseFloat("0.0314E+2");
-parseFloat("3.14d'autres caractères non numériques");
-
-var titi = Object.create(null);
-titi.valueOf = function () { return "3.14"; };
-parseFloat(titi);​​​​​
-
- -

Utiliser parseFloat() pour renvoyer NaN

- -

Dans cet exemple, le résultat obtenu est {{jsxref("NaN")}} :

- -
parseFloat("FF2");
-
- -

parseFloat et BigInt

- -
parseFloat(900719925474099267n);
-// 900719925474099300
- -

Une fonction plus stricte

- -

Si on souhaite éviter de convertir des chaînes qui contiennent des caractères non numériques, on pourra utiliser une expression rationnelle pour filtrer ces valeurs (et obtenir une fonction plus stricte que parseFloat()) :

- -
var filterFloat = function (value) {
-    if (/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
-      .test(value))
-      return Number(value);
-  return NaN;
-}
-
-console.log(filterFloat('421'));               // 421
-console.log(filterFloat('-421'));              // -421
-console.log(filterFloat('+421'));              // 421
-console.log(filterFloat('Infinity'));          // Infinity
-console.log(filterFloat('1.61803398875'));     // 1.61803398875
-console.log(filterFloat('421e+0'));            // NaN
-console.log(filterFloat('421hop'));            // NaN
-console.log(filterFloat('hop1.61803398875'));  // NaN
-
-
- -

Attention : ce code n'est qu'un exemple et renverra NaN pour des valeurs pourtant valides comme 1. ou .5.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.3', 'parseFloat')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-parsefloat-string', 'parseFloat')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-parsefloat-string', 'parseFloat')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/parsefloat/index.md b/files/fr/web/javascript/reference/global_objects/parsefloat/index.md new file mode 100644 index 0000000000..f904aaf99e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/parsefloat/index.md @@ -0,0 +1,147 @@ +--- +title: parseFloat() +slug: Web/JavaScript/Reference/Global_Objects/parseFloat +tags: + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/parseFloat +original_slug: Web/JavaScript/Reference/Objets_globaux/parseFloat +--- +
{{jsSidebar("Objects")}}
+ +

La fonction parseFloat() permet de transformer une chaîne de caractères en un nombre flottant après avoir analysée celle-ci (parsing).

+ +
{{EmbedInteractiveExample("pages/js/globalprops-parsefloat.html")}}
+ +

Syntaxe

+ +
parseFloat(string)
+ +

Paramètres

+ +
+
string
+
Une chaîne de caractères la valeur qu'on souhaite analyser et transformer en un nombre flottant.
+
+ +

Valeur de retour

+ +

Un nombre flottant obtenu à partir de l'analyse de la chaîne de caractères. Si le premier caractère ne permet pas d'obtenir un nombre, ce sera la valeur {{jsxref("NaN")}} qui sera renvoyée.

+ +

Description

+ +

parseFloat est une fonction non associée à un objet, disponible au plus haut niveau de l'environnement JavaScript.

+ +

parseFloat analyse l'argument fourni sous la forme d'une chaîne de caractères et renvoie un nombre flottant correspondant. L'analyse de la chaîne s'arrête dès qu'un caractère qui n'est pas +,-, un chiffre, un point ou un exposant. Ce caractère, ainsi que les suivants, seront ignorés. Les blancs en début et en fin de chaîne sont autorisés.

+ +
+

Note : Si on souhaite avoir un outil de conversion plus strict, on pourra utiliser {{jsxref("Number", "Number(valeur)")}} qui utilise une analyse plus stricte et qui fournit {{jsxref("NaN")}} pour les valeurs qui contiennent des caractères invalides, quelle que soit leur position.

+
+ +

Si le premier caractère de la chaîne ne peut pas être converti en un nombre, parseFloat() renverra NaN.

+ +

Pour des raisons arithmétiques, la valeur NaN n'est jamais un nombre, quelle que soit la base considérée. On peut utiliser la méthode {{jsxref("isNaN")}} afin de déterminer si le résultat obtenu par parseFloat() est NaN. Si NaN est passé comme valeur lors d'opérations arithmétiques, ces opérations renverront également NaN comme résultat.

+ +

parseFloat() peut également analyser et renvoyer la valeur {{jsxref("Infinity")}} qui représente l'infini numérique. Ici, on pourra utiliser la fonction {{jsxref("isFinite()")}} afin de déterminer si le résultat obtenu est un nombre fini (c'est-à-dire qui n'est ni Infinity, ni -Infinity, ni NaN).

+ +

parseFloat() peut également analyser un objet si celui-ci implémente la méthode toString() ou valueOf(). La valeur renvoyée par parseFloat() le résultat de parseFloat() appliqué à la valeur renvoyée par toString() ou valueOf() .

+ +

parseFloat() convertit une valeur {{jsxref("BigInt")}} en une valeur {{jsxref("Number")}} et perd ainsi en précision car toutes les valeurs BigInt ne sont pas représentables en Number.

+ +

Exemples

+ +

Utiliser parseFloat() pour renvoyer un nombre

+ +

Les instructions suivantes renvoient toutes la valeur 3.14 :

+ +
parseFloat("3.14");
+parseFloat("314e-2");
+parseFloat("0.0314E+2");
+parseFloat("3.14d'autres caractères non numériques");
+
+var titi = Object.create(null);
+titi.valueOf = function () { return "3.14"; };
+parseFloat(titi);​​​​​
+
+ +

Utiliser parseFloat() pour renvoyer NaN

+ +

Dans cet exemple, le résultat obtenu est {{jsxref("NaN")}} :

+ +
parseFloat("FF2");
+
+ +

parseFloat et BigInt

+ +
parseFloat(900719925474099267n);
+// 900719925474099300
+ +

Une fonction plus stricte

+ +

Si on souhaite éviter de convertir des chaînes qui contiennent des caractères non numériques, on pourra utiliser une expression rationnelle pour filtrer ces valeurs (et obtenir une fonction plus stricte que parseFloat()) :

+ +
var filterFloat = function (value) {
+    if (/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
+      .test(value))
+      return Number(value);
+  return NaN;
+}
+
+console.log(filterFloat('421'));               // 421
+console.log(filterFloat('-421'));              // -421
+console.log(filterFloat('+421'));              // 421
+console.log(filterFloat('Infinity'));          // Infinity
+console.log(filterFloat('1.61803398875'));     // 1.61803398875
+console.log(filterFloat('421e+0'));            // NaN
+console.log(filterFloat('421hop'));            // NaN
+console.log(filterFloat('hop1.61803398875'));  // NaN
+
+
+ +

Attention : ce code n'est qu'un exemple et renverra NaN pour des valeurs pourtant valides comme 1. ou .5.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.3', 'parseFloat')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-parsefloat-string', 'parseFloat')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-parsefloat-string', 'parseFloat')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/parseint/index.html b/files/fr/web/javascript/reference/global_objects/parseint/index.html deleted file mode 100644 index b8fa350598..0000000000 --- a/files/fr/web/javascript/reference/global_objects/parseint/index.html +++ /dev/null @@ -1,203 +0,0 @@ ---- -title: parseInt() -slug: Web/JavaScript/Reference/Global_Objects/parseInt -tags: - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/parseInt -original_slug: Web/JavaScript/Reference/Objets_globaux/parseInt ---- -
{{jsSidebar("Objects")}}
- -

La fonction parseInt() analyse une chaîne de caractère fournie en argument et renvoie un entier exprimé dans une base donnée.

- -
{{EmbedInteractiveExample("pages/js/globalprops-parseint.html")}}
- - - -
-

Attention : On veillera à bien utiliser le second paramètre de la fonction pour éviter toute ambiguité sur la base numérique utilisée.

-
- -

Syntaxe

- -
parseInt(string, base);
- -

Paramètres

- -
-
string
-
La valeur qu'on souhaite analyser et convertir. Si l'argument string n'est pas une chaîne de caractères, elle sera convertie en une chaîne (grâce à l'opération abstraite ToString) . Les blancs contenus au début de l'argument sont ignorés.
-
base
-
-

Un entier compris entre 2 et 36 qui représente la base utilisée pour la valeur représentée dans la chaîne. La base communément utilisée est la base décimale et on utilisera donc 10 dans ce cas pour ce paramètre.

- -

Attention :La base par défaut n'est pas 10. Ce paramètre doit toujours être utilisé, en effet s'il n'est pas spécifié, le comportement de la fonction n'est pas garanti et peut varier d'une plate-forme à une autre.

- -

Voir cependant la description ci-après qui explicite le comportement par défaut attendu.

-
-
- -

Valeur de retour

- -

Un entier obtenu à partir de l'analyse de la chaîne de caractères. Si le premier caractère ne permet d'obtenir un nombre d'après la base fournie, ce sera {{jsxref("NaN")}} qui sera renvoyé.

- -

Description

- -

La fonction parseInt() convertit le premier argument en une chaîne, l'analyse et renvoie un entier ou NaN. Si la valeur renvoyée n'est pas NaN, ce sera l'entier représentant le nombre contenu dans la chaîne dans la base donnée. Une base 10 est utilisée pour la base décimale, 8 pour la base octale, 16 pour la base hexadécimale. Pour les bases supérieures à 10, les lettres de l'alphabet latin seront utilisées pour représenter les chiffres supérieurs à 9. Par exemple, pour la base hexadécimale, on utilisera les lettres A à F.

- -

Si, lors de l'analyse de la chaîne, parseInt() rencontre un caractère qui n'est pas un chiffre dans la base donnée, ce caractère, ainsi que les suivants seront ignorés. parseInt() tronque les nombres fournies en valeurs entières (attention donc lorsque les chaînes utilisent une notation scientifique : "4e2" donnera la valeur 4 en base 10 et pas 400). Les espaces en début et en fin de chaîne sont autorisés.

- -

Si la base fournie vaut {{jsxref("undefined")}} ou 0 (ou si elle n'est pas utilisée comme paramètre), le moteur JavaScript procèdera comme suit :

- - - -

Si le premier caractère de la chaîne de caractères ne peut pas être converti, parseInt() renverra NaN.

- -

Pour des raisons arithmétiques, la valeur {{jsxref("NaN")}} n'est un nombre pour aucune base. La fonction {{jsxref("Objets_globaux/isNaN", "isNaN()")}} peut être utilisée pour déterminer si le résultat obtenu par parseInt() vaut NaN. Si NaN est utilisé dans une opération arithmétique, le résultat de cette opération sera aussi NaN (on dit que NaN est une valeur « toxique »).

- -

Pour convertir un nombre en une chaîne de caractères dans une base donnée, on utilisera monEntier.toString(base).

- -

parseInt convertira les valeurs {{jsxref("BigInt")}} en {{jsxref("Number")}} et de la précision sera perdue lors de ce traitement.

- -

Exemples

- -

Les exemples suivants renvoient tous 15 :

- -
parseInt("0xF", 16);
-parseInt("F", 16);
-parseInt("17", 8);
-parseInt(021, 8);
-parseInt("015", 10); // attention parseInt(015, 10); renvoie 13
-parseInt(15.99, 10);
-parseInt("15,123", 10);
-parseInt("FXX123", 16);
-parseInt("1111", 2);
-parseInt("15*3", 10);
-parseInt("15e2", 10);
-parseInt("15px", 10);
-parseInt("12", 13);
-
- -

Les exemples suivants renvoient NaN :

- -
parseInt("Coucou", 8); // Ce sont des lettres et pas des chiffres
-parseInt("546", 2);    // Ces chiffres ne sont pas valides pour une représentation
-                       // binaire
-
- -

Les exemples suivants renvoient tous -15 :

- -
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);
-
- -

Les exemples suivants renvoient tous 4 :

- -
parseInt("4e2", 10);
-parseInt("4.7", 10);
- -

L'exemple suivant renvoie  224 :

- -
parseInt("0e0", 16);
-
- -

On perdra en précision si on manipule un grand entier ({{jsxref("BigInt")}}) :

- -
parseInt(900719925474099267n); // 900719925474099300
- -

Interpréter une base octale quand aucun paramètre de base n'est fourni

- -

Bien que cela soit fortement déconseillé par ECMAScript 3 et que cela soit interdit par ECMAScript 5, de nombreuses implémentations interprètent une chaîne numérique qui commence par 0 comme une valeur exprimée dans la base octale. Les instructions qui suivent peuvent avoir un résultat octal ou décimal selon les implémentations. Pour cette raison, il faut toujours définir une base lorsqu'on utilise cette fonction.

- -
parseInt("0e0"); // 0
-parseInt("08");  // 0, '8' n'est pas un chiffre octal.
-
- -

ECMAScript 5 supprime l'interprétation octale

- -

La spécification ECMAScript 5 indique, au sujet de la fonction parseInt(), que les valeurs commençant par 0 ne doivent plus être considérées comme des valeurs octales. ECMAScript 5 indique :

- -

La fonction parseInt produit une valeur entière définie par le contenu de la chaîne selon la base fournie. Les blancs en début de chaîne sont ignorés. Si la base spécifiée est 0, la base décimale sera prise en compte sauf si le nombre représenté commence par la paire de caractères 0x ou 0X auquel cas la base 16 sera prise en compte.

- -

Sur cet aspect, ECMAScript 3 diffère car il permet l'interprétation octale (bien qu'il la déconseille).

- -

De nombreuses implémentations n'ont pas adopté ce comportement en 2013. Pour cette raison (les anciens environnements et navigateurs doivent être supportés), il faut toujours définir le paramètre pour la base.

- -

Une fonction plus stricte

- -

Il est parfois utile d'avoir une fonction de conversion plus stricte. Pour cela, on peut utiliser une expression rationnelle :

- -
filterInt = function (value) {
-  if (/^(-|\+)?(\d+|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
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.2', 'parseInt')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-parseint-string-radix', 'parseInt')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-parseint-string-radix', 'parseInt')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/parseint/index.md b/files/fr/web/javascript/reference/global_objects/parseint/index.md new file mode 100644 index 0000000000..b8fa350598 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/parseint/index.md @@ -0,0 +1,203 @@ +--- +title: parseInt() +slug: Web/JavaScript/Reference/Global_Objects/parseInt +tags: + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/parseInt +original_slug: Web/JavaScript/Reference/Objets_globaux/parseInt +--- +
{{jsSidebar("Objects")}}
+ +

La fonction parseInt() analyse une chaîne de caractère fournie en argument et renvoie un entier exprimé dans une base donnée.

+ +
{{EmbedInteractiveExample("pages/js/globalprops-parseint.html")}}
+ + + +
+

Attention : On veillera à bien utiliser le second paramètre de la fonction pour éviter toute ambiguité sur la base numérique utilisée.

+
+ +

Syntaxe

+ +
parseInt(string, base);
+ +

Paramètres

+ +
+
string
+
La valeur qu'on souhaite analyser et convertir. Si l'argument string n'est pas une chaîne de caractères, elle sera convertie en une chaîne (grâce à l'opération abstraite ToString) . Les blancs contenus au début de l'argument sont ignorés.
+
base
+
+

Un entier compris entre 2 et 36 qui représente la base utilisée pour la valeur représentée dans la chaîne. La base communément utilisée est la base décimale et on utilisera donc 10 dans ce cas pour ce paramètre.

+ +

Attention :La base par défaut n'est pas 10. Ce paramètre doit toujours être utilisé, en effet s'il n'est pas spécifié, le comportement de la fonction n'est pas garanti et peut varier d'une plate-forme à une autre.

+ +

Voir cependant la description ci-après qui explicite le comportement par défaut attendu.

+
+
+ +

Valeur de retour

+ +

Un entier obtenu à partir de l'analyse de la chaîne de caractères. Si le premier caractère ne permet d'obtenir un nombre d'après la base fournie, ce sera {{jsxref("NaN")}} qui sera renvoyé.

+ +

Description

+ +

La fonction parseInt() convertit le premier argument en une chaîne, l'analyse et renvoie un entier ou NaN. Si la valeur renvoyée n'est pas NaN, ce sera l'entier représentant le nombre contenu dans la chaîne dans la base donnée. Une base 10 est utilisée pour la base décimale, 8 pour la base octale, 16 pour la base hexadécimale. Pour les bases supérieures à 10, les lettres de l'alphabet latin seront utilisées pour représenter les chiffres supérieurs à 9. Par exemple, pour la base hexadécimale, on utilisera les lettres A à F.

+ +

Si, lors de l'analyse de la chaîne, parseInt() rencontre un caractère qui n'est pas un chiffre dans la base donnée, ce caractère, ainsi que les suivants seront ignorés. parseInt() tronque les nombres fournies en valeurs entières (attention donc lorsque les chaînes utilisent une notation scientifique : "4e2" donnera la valeur 4 en base 10 et pas 400). Les espaces en début et en fin de chaîne sont autorisés.

+ +

Si la base fournie vaut {{jsxref("undefined")}} ou 0 (ou si elle n'est pas utilisée comme paramètre), le moteur JavaScript procèdera comme suit :

+ + + +

Si le premier caractère de la chaîne de caractères ne peut pas être converti, parseInt() renverra NaN.

+ +

Pour des raisons arithmétiques, la valeur {{jsxref("NaN")}} n'est un nombre pour aucune base. La fonction {{jsxref("Objets_globaux/isNaN", "isNaN()")}} peut être utilisée pour déterminer si le résultat obtenu par parseInt() vaut NaN. Si NaN est utilisé dans une opération arithmétique, le résultat de cette opération sera aussi NaN (on dit que NaN est une valeur « toxique »).

+ +

Pour convertir un nombre en une chaîne de caractères dans une base donnée, on utilisera monEntier.toString(base).

+ +

parseInt convertira les valeurs {{jsxref("BigInt")}} en {{jsxref("Number")}} et de la précision sera perdue lors de ce traitement.

+ +

Exemples

+ +

Les exemples suivants renvoient tous 15 :

+ +
parseInt("0xF", 16);
+parseInt("F", 16);
+parseInt("17", 8);
+parseInt(021, 8);
+parseInt("015", 10); // attention parseInt(015, 10); renvoie 13
+parseInt(15.99, 10);
+parseInt("15,123", 10);
+parseInt("FXX123", 16);
+parseInt("1111", 2);
+parseInt("15*3", 10);
+parseInt("15e2", 10);
+parseInt("15px", 10);
+parseInt("12", 13);
+
+ +

Les exemples suivants renvoient NaN :

+ +
parseInt("Coucou", 8); // Ce sont des lettres et pas des chiffres
+parseInt("546", 2);    // Ces chiffres ne sont pas valides pour une représentation
+                       // binaire
+
+ +

Les exemples suivants renvoient tous -15 :

+ +
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);
+
+ +

Les exemples suivants renvoient tous 4 :

+ +
parseInt("4e2", 10);
+parseInt("4.7", 10);
+ +

L'exemple suivant renvoie  224 :

+ +
parseInt("0e0", 16);
+
+ +

On perdra en précision si on manipule un grand entier ({{jsxref("BigInt")}}) :

+ +
parseInt(900719925474099267n); // 900719925474099300
+ +

Interpréter une base octale quand aucun paramètre de base n'est fourni

+ +

Bien que cela soit fortement déconseillé par ECMAScript 3 et que cela soit interdit par ECMAScript 5, de nombreuses implémentations interprètent une chaîne numérique qui commence par 0 comme une valeur exprimée dans la base octale. Les instructions qui suivent peuvent avoir un résultat octal ou décimal selon les implémentations. Pour cette raison, il faut toujours définir une base lorsqu'on utilise cette fonction.

+ +
parseInt("0e0"); // 0
+parseInt("08");  // 0, '8' n'est pas un chiffre octal.
+
+ +

ECMAScript 5 supprime l'interprétation octale

+ +

La spécification ECMAScript 5 indique, au sujet de la fonction parseInt(), que les valeurs commençant par 0 ne doivent plus être considérées comme des valeurs octales. ECMAScript 5 indique :

+ +

La fonction parseInt produit une valeur entière définie par le contenu de la chaîne selon la base fournie. Les blancs en début de chaîne sont ignorés. Si la base spécifiée est 0, la base décimale sera prise en compte sauf si le nombre représenté commence par la paire de caractères 0x ou 0X auquel cas la base 16 sera prise en compte.

+ +

Sur cet aspect, ECMAScript 3 diffère car il permet l'interprétation octale (bien qu'il la déconseille).

+ +

De nombreuses implémentations n'ont pas adopté ce comportement en 2013. Pour cette raison (les anciens environnements et navigateurs doivent être supportés), il faut toujours définir le paramètre pour la base.

+ +

Une fonction plus stricte

+ +

Il est parfois utile d'avoir une fonction de conversion plus stricte. Pour cela, on peut utiliser une expression rationnelle :

+ +
filterInt = function (value) {
+  if (/^(-|\+)?(\d+|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
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.1.2.2', 'parseInt')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-parseint-string-radix', 'parseInt')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-parseint-string-radix', 'parseInt')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/all/index.html b/files/fr/web/javascript/reference/global_objects/promise/all/index.html deleted file mode 100644 index 1f62847df2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/all/index.html +++ /dev/null @@ -1,223 +0,0 @@ ---- -title: Promise.all() -slug: Web/JavaScript/Reference/Global_Objects/Promise/all -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Promise - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/all ---- -
{{JSRef}}
- -

La méthode Promise.all() renvoie une promesse ({{jsxref("Promise")}}) qui est résolue lorsque l'ensemble des promesses contenues dans l'itérable passé en argument ont été résolues ou qui échoue avec la raison de la première promesse qui échoue au sein de l'itérable.

- -
{{EmbedInteractiveExample("pages/js/promise-all.html")}}
- -

Syntaxe

- -
Promise.all(iterable);
- -

Paramètres

- -
-
iterable
-
Un objet itérable (tel qu'un tableau ({{jsxref("Array")}})) contenant des promesses.
-
- -

Valeur de retour

- -

Un objet {{jsxref("Promise")}} qui est

- - - -

Description

- -

Cette méthode peut être utile lorsqu'on souhaite agréger le résultat de plusieurs promesses.

- -
-
Valeur de résolution
-
Si toutes les promesses de l'itérable sont tenues, Promise.all est tenue et la valeur de résolution est un tableau qui contient les valeurs de résolution respectives des promesses de l'itérable (dans le même ordre). Si l'argument utilisé est un tableau vide, la méthode résoud la promesse immédiatement et de façon synchrone.
-
Valeur d'échec
-
Si l'une des promesses de l'itérable échoue, Promise.all échoue immédiatement et utilise la raison de l'échec (que les autres promesses aient été résolues ou non).
-
- -

Exemples

- -

Utiliser Promise.all()

- -

Promise.all() attend que l'ensemble des promesses soient tenues ou qu'une promesse soit rompue :

- -
var p1 = Promise.resolve(3);
-var p2 = 1337;
-var p3 = new Promise((resolve, reject) => {
-  setTimeout(resolve, 100, 'foo');
-});
-
-Promise.all([p1, p2, p3]).then(values => {
-  console.log(values); // [3, 1337, "foo"]
-});
- -

Promise.all(), un échec rapide

- -

La promesse créée par Promise.all() échoue immédiatement si l'une des promesses échoue. Dans l'exemple suivant, on fournit quatre promesses qui sont résolues après une certaine durée et une autre promesse qui est rompue immédiatement : on peut alors voir que la promesse créée par Promise.all() est rompue immédiatement.

- -
var p1 = new Promise((resolve, reject) => {
-  setTimeout(resolve, 1000, 'un');
-});
-var p2 = new Promise((resolve, reject) => {
-  setTimeout(resolve, 2000, 'deux');
-});
-var p3 = new Promise((resolve, reject) => {
-  setTimeout(resolve, 3000, 'trois');
-});
-var p4 = new Promise((resolve, reject) => {
-  setTimeout(resolve, 4000, 'quatre');
-});
-var p5 = new Promise((resolve, reject) => {
-  reject('rejet');
-});
-
-Promise.all([p1, p2, p3, p4, p5]).then(values => {
-  console.log(values);
-}, reason => {
-  console.log(reason)
-});
-
-// Dans la console :
-// "rejet"
-
-//On peut aussi employer .catch
-Promise.all([p1, p2, p3, p4, p5]).then(values => {
-  console.log(values);
-}).catch(reason => {
-  console.log(reason)
-});
-
-// Dans la console :
-// "rejet"
-
-
- -

Il est possible de modifier ce comportement en gérant les éventuels échecs :

- -
var p1 = new Promise((resolve, reject) => {
-  setTimeout(resolve, 1000, 'p1_resolution_retardee');
-});
-
-var p2 = new Promise((resolve, reject) => {
-  reject(new Error('p2_rejet_immediat'));
-});
-
-Promise.all([
-  p1.catch(error => { return error }),
-  p2.catch(error => { return error }),
-]).then(values => {
-  console.log(values[0]); // "p1_resolution_retardee"
-  console.log(values[1]); // "Error: p2_rejet_immediat"
-})
-
- -

Caractère asynchrone de Promise.all()

- -

Dans l'exemple qui suit, on illustre le caractère asynchrone de Promise.all() (et son caractère synchrone quand l'itérable passé en argument est vide) :

- -
// On passe un tableau de promesses déjà résolues
-// afin de déclencher Promise.all dès que possible
-var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
-
-var p = Promise.all(resolvedPromisesArray);
-// on affiche la valeur de p dans la console
-console.log(p);
-
-// on utilise la méthode setTimeout pour exécuter
-// du code dès que la pile est vide
-setTimeout(function() {
-    console.log('La pile est vide');
-    console.log(p);
-});
-
-// Cela affichera dans la console (et dans cet ordre) :
-// Promise { <state>: "pending" }
-// La pile est vide
-// Promise { <state>: "fulfilled", <value>: Array[2] }
-
- -

On aura le même comportement si Promise.all produit une promesse rompue :

- -
var mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
-var p = Promise.all(mixedPromisesArray);
-console.log(p);
-setTimeout(function() {
-    console.log('La pile est vide');
-    console.log(p);
-});
-
-// Affichera :
-// Promise { <state>: "pending" }
-// La pile est vide
-// Promise { <state>: "rejected", <reason>: 44 }
-
- -

En revanche, Promise.all produit une promesse résolue de façon synchrone si et seulement si l'itérable est vide :

- -
var p = Promise.all([]); // immédiatement résolue
-
-// les valeurs qui ne sont pas des promesses
-// seront ignorées mais l'évaluation sera effectuée
-// de façon asynchrone
-var p2 = Promise.all([1337, "hi"]);
-console.log(p);
-console.log(p2)
-setTimeout(function() {
-    console.log('La pile est vide');
-    console.log(p2);
-});
-
-// Affichera :
-// Promise { <state>: "fulfilled", <value>: Array[0] }
-// Promise { <state>: "pending" }
-// La pile est vide
-// Promise { <state>: "fulfilled", <value>: Array[2] }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.all', 'Promise.all')}}{{Spec2('ES2015')}}Définition initiale dans un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.all")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/all/index.md b/files/fr/web/javascript/reference/global_objects/promise/all/index.md new file mode 100644 index 0000000000..1f62847df2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/all/index.md @@ -0,0 +1,223 @@ +--- +title: Promise.all() +slug: Web/JavaScript/Reference/Global_Objects/Promise/all +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/all +--- +
{{JSRef}}
+ +

La méthode Promise.all() renvoie une promesse ({{jsxref("Promise")}}) qui est résolue lorsque l'ensemble des promesses contenues dans l'itérable passé en argument ont été résolues ou qui échoue avec la raison de la première promesse qui échoue au sein de l'itérable.

+ +
{{EmbedInteractiveExample("pages/js/promise-all.html")}}
+ +

Syntaxe

+ +
Promise.all(iterable);
+ +

Paramètres

+ +
+
iterable
+
Un objet itérable (tel qu'un tableau ({{jsxref("Array")}})) contenant des promesses.
+
+ +

Valeur de retour

+ +

Un objet {{jsxref("Promise")}} qui est

+ + + +

Description

+ +

Cette méthode peut être utile lorsqu'on souhaite agréger le résultat de plusieurs promesses.

+ +
+
Valeur de résolution
+
Si toutes les promesses de l'itérable sont tenues, Promise.all est tenue et la valeur de résolution est un tableau qui contient les valeurs de résolution respectives des promesses de l'itérable (dans le même ordre). Si l'argument utilisé est un tableau vide, la méthode résoud la promesse immédiatement et de façon synchrone.
+
Valeur d'échec
+
Si l'une des promesses de l'itérable échoue, Promise.all échoue immédiatement et utilise la raison de l'échec (que les autres promesses aient été résolues ou non).
+
+ +

Exemples

+ +

Utiliser Promise.all()

+ +

Promise.all() attend que l'ensemble des promesses soient tenues ou qu'une promesse soit rompue :

+ +
var p1 = Promise.resolve(3);
+var p2 = 1337;
+var p3 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 100, 'foo');
+});
+
+Promise.all([p1, p2, p3]).then(values => {
+  console.log(values); // [3, 1337, "foo"]
+});
+ +

Promise.all(), un échec rapide

+ +

La promesse créée par Promise.all() échoue immédiatement si l'une des promesses échoue. Dans l'exemple suivant, on fournit quatre promesses qui sont résolues après une certaine durée et une autre promesse qui est rompue immédiatement : on peut alors voir que la promesse créée par Promise.all() est rompue immédiatement.

+ +
var p1 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 1000, 'un');
+});
+var p2 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 2000, 'deux');
+});
+var p3 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 3000, 'trois');
+});
+var p4 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 4000, 'quatre');
+});
+var p5 = new Promise((resolve, reject) => {
+  reject('rejet');
+});
+
+Promise.all([p1, p2, p3, p4, p5]).then(values => {
+  console.log(values);
+}, reason => {
+  console.log(reason)
+});
+
+// Dans la console :
+// "rejet"
+
+//On peut aussi employer .catch
+Promise.all([p1, p2, p3, p4, p5]).then(values => {
+  console.log(values);
+}).catch(reason => {
+  console.log(reason)
+});
+
+// Dans la console :
+// "rejet"
+
+
+ +

Il est possible de modifier ce comportement en gérant les éventuels échecs :

+ +
var p1 = new Promise((resolve, reject) => {
+  setTimeout(resolve, 1000, 'p1_resolution_retardee');
+});
+
+var p2 = new Promise((resolve, reject) => {
+  reject(new Error('p2_rejet_immediat'));
+});
+
+Promise.all([
+  p1.catch(error => { return error }),
+  p2.catch(error => { return error }),
+]).then(values => {
+  console.log(values[0]); // "p1_resolution_retardee"
+  console.log(values[1]); // "Error: p2_rejet_immediat"
+})
+
+ +

Caractère asynchrone de Promise.all()

+ +

Dans l'exemple qui suit, on illustre le caractère asynchrone de Promise.all() (et son caractère synchrone quand l'itérable passé en argument est vide) :

+ +
// On passe un tableau de promesses déjà résolues
+// afin de déclencher Promise.all dès que possible
+var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
+
+var p = Promise.all(resolvedPromisesArray);
+// on affiche la valeur de p dans la console
+console.log(p);
+
+// on utilise la méthode setTimeout pour exécuter
+// du code dès que la pile est vide
+setTimeout(function() {
+    console.log('La pile est vide');
+    console.log(p);
+});
+
+// Cela affichera dans la console (et dans cet ordre) :
+// Promise { <state>: "pending" }
+// La pile est vide
+// Promise { <state>: "fulfilled", <value>: Array[2] }
+
+ +

On aura le même comportement si Promise.all produit une promesse rompue :

+ +
var mixedPromisesArray = [Promise.resolve(33), Promise.reject(44)];
+var p = Promise.all(mixedPromisesArray);
+console.log(p);
+setTimeout(function() {
+    console.log('La pile est vide');
+    console.log(p);
+});
+
+// Affichera :
+// Promise { <state>: "pending" }
+// La pile est vide
+// Promise { <state>: "rejected", <reason>: 44 }
+
+ +

En revanche, Promise.all produit une promesse résolue de façon synchrone si et seulement si l'itérable est vide :

+ +
var p = Promise.all([]); // immédiatement résolue
+
+// les valeurs qui ne sont pas des promesses
+// seront ignorées mais l'évaluation sera effectuée
+// de façon asynchrone
+var p2 = Promise.all([1337, "hi"]);
+console.log(p);
+console.log(p2)
+setTimeout(function() {
+    console.log('La pile est vide');
+    console.log(p2);
+});
+
+// Affichera :
+// Promise { <state>: "fulfilled", <value>: Array[0] }
+// Promise { <state>: "pending" }
+// La pile est vide
+// Promise { <state>: "fulfilled", <value>: Array[2] }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.all', 'Promise.all')}}{{Spec2('ES2015')}}Définition initiale dans un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.all")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/allsettled/index.html b/files/fr/web/javascript/reference/global_objects/promise/allsettled/index.html deleted file mode 100644 index 0c3a050b1f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/allsettled/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Promise.allSettled() -slug: Web/JavaScript/Reference/Global_Objects/Promise/allSettled -tags: - - JavaScript - - Méthode - - Promise - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/allSettled -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/allSettled ---- -

{{JSRef}}

- -

La méthode Promise.allSettled() renvoie une promesse qui est résolue une fois que l'ensemble des promesses de l'itérable passée en argument sont réussies ou rejetées. La valeur de résolution de cette promesse est un tableau d'objets dont chacun est le résultat de chaque promesse de l'itérable.

- -
{{EmbedInteractiveExample("pages/js/promise-allsettled.html")}}
- -

Syntaxe

- -
p.allSettled(iterable);
- -

Paramètres

- -
-
iterable
-
Un objet itérable tel qu'un tableau ({{jsxref("Array")}}) dont chaque élément est une promesse ({{jsxref("Promise")}}.
-
- -

Valeur de retour

- -

Une promesse ({{jsxref("Promise")}}) en cours qui sera résolue de façon asynchrone une fois que chaque promesse de l'itérable a été résolue (tenue/réussie ou rejetée/échouée). Le gestionnaire passé à la promesse retournée recevra comme argument un tableau de valeur dont chacune est le résultat de chaque promesse de l'itérable initial.

- -

Pour chaque objet contenu dans ce tableau, il y aura une propriété status qui est une chaîne de caractères. Si status vaut fulfilled, alors on aura une propriété value. Si status vaut rejected, alors une propriété reason sera présente. La valeur (ou la raison) reflète la valeur de résolution de la promesse.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Promise.allSettled() (Brouillon TC39 au niveau 4){{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.allSettled")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/allsettled/index.md b/files/fr/web/javascript/reference/global_objects/promise/allsettled/index.md new file mode 100644 index 0000000000..0c3a050b1f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/allsettled/index.md @@ -0,0 +1,65 @@ +--- +title: Promise.allSettled() +slug: Web/JavaScript/Reference/Global_Objects/Promise/allSettled +tags: + - JavaScript + - Méthode + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/allSettled +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/allSettled +--- +

{{JSRef}}

+ +

La méthode Promise.allSettled() renvoie une promesse qui est résolue une fois que l'ensemble des promesses de l'itérable passée en argument sont réussies ou rejetées. La valeur de résolution de cette promesse est un tableau d'objets dont chacun est le résultat de chaque promesse de l'itérable.

+ +
{{EmbedInteractiveExample("pages/js/promise-allsettled.html")}}
+ +

Syntaxe

+ +
p.allSettled(iterable);
+ +

Paramètres

+ +
+
iterable
+
Un objet itérable tel qu'un tableau ({{jsxref("Array")}}) dont chaque élément est une promesse ({{jsxref("Promise")}}.
+
+ +

Valeur de retour

+ +

Une promesse ({{jsxref("Promise")}}) en cours qui sera résolue de façon asynchrone une fois que chaque promesse de l'itérable a été résolue (tenue/réussie ou rejetée/échouée). Le gestionnaire passé à la promesse retournée recevra comme argument un tableau de valeur dont chacune est le résultat de chaque promesse de l'itérable initial.

+ +

Pour chaque objet contenu dans ce tableau, il y aura une propriété status qui est une chaîne de caractères. Si status vaut fulfilled, alors on aura une propriété value. Si status vaut rejected, alors une propriété reason sera présente. La valeur (ou la raison) reflète la valeur de résolution de la promesse.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Promise.allSettled() (Brouillon TC39 au niveau 4){{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.allSettled")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/any/index.html b/files/fr/web/javascript/reference/global_objects/promise/any/index.html deleted file mode 100644 index a7ac089348..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/any/index.html +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: Promise.any() -slug: Web/JavaScript/Reference/Global_Objects/Promise/any -tags: - - JavaScript - - Method - - Méthode - - Promise - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/any ---- -
{{JSRef}}
- -

La méthode Promise.any() prend comme argument un itérable contenant des objets {{JSxRef("Promise")}} et, dès qu'une des promesses de cet itérable est tenue, renvoie une unique promesse résolue avec la valeur de la promesse résolue. Si aucune promesse de l'itérable n'est tenue (c'est-à-dire si toutes les promesses sont rejetées), la promesse renvoyée est rompue avec un objet {{JSxRef("Objets_globaux/AggregateError", "AggregateError")}} (une nouvelle sous-classe de {{JSxRef("Error")}} qui regroupe un ensemble d'erreurs). Cette méthode fait essentiellement le contraire de {{JSxRef("Promise.all()")}} (qui renvoie une promesse tenue uniquement si toutes les promesses de l'itérable passé en argument ont été tenues).

- -

{{EmbedInteractiveExample("pages/js/promise-any.html")}}

- -

Syntaxe

- -
Promise.any(iterable);
- -

Paramètres

- -
-
iterable
-
Un objet itérable tel qu'un tableau ({{JSxRef("Array")}}) contenant des promesses ({{jsxref("Promise")}}).
-
- -

Valeur de retour

- - - -

Description

- -

Cette méthode est utile afin de renvoyer la première promesse tenue d'un ensemble de promesse. Elle permet de court-circuiter dès qu'une promesse est tenue, sans attendre que les autres promesses soient résolues. Contrairement à {{JSxRef("Promise.all()")}} qui renvoie un tableau avec les valeurs de résolution des promesses, on a ici une seule valeur de résolution (celle de la première promesse tenue). Ce peut être bénéfique lorsqu'on a un ensemble de promesses et qu'on ne souhaite en résoudre qu'une sans se soucier de savoir laquelle des promesses a été tenue en premier.

- -

À la différence de {{JSxRef("Promise.race()")}} qui renvoie la valeur de la première promesse résolue (qu'elle ait été tenue ou rompue), Promise.any() renvoie une promesse avec la valeur de la première promesse tenue. Cette méthode ignore les promesses qui sont rompues jusqu'à obtenir une promesse tenue.

- -

Une des promesses est tenue

- -

La promesse renvoyée par Promise.any() est résolue avec la première valeur résolue de l'itérable, qu'il s'agisse d'une promesse ou non, et que les autres promesses de l'itérable aient échoué ou non.

- - - -

Toutes les promesses sont rompues

- -

Si toutes les promesses de l'itérable échouent, Promise.any() échoue de asynchrone avec pour valeur d'échec un objet {{JSxRef("Objets_globaux/AggregateError", "AggregateError")}}, qui étend {{JSxRef("Error")}}, et contient une propriété errors qui est un tableau contenant l'ensemble des valeurs d'échec des différentes promesses de l'itérable.

- - - -

Exemples

- -

Première résolue

- -

Promise.any() prend pour valeur de résolution celle de la première promesse résolue, et ce même si une des promesses de l'itérable a échoué avant. Ce comportement est différent de ce {{JSxRef("Promise.race()")}}, qui s'arrête à la première promesse qui se termine avec sa valeur de résolution ou d'échec.

- -
const pErr = new Promise((resolve, reject) => {
-  reject("J'échoue toujours");
-});
-
-const pLente = new Promise((resolve, reject) => {
-  setTimeout(resolve, 500, "Éventuellement résolue");
-});
-
-const pRapide = new Promise((resolve, reject) => {
-  setTimeout(resolve, 100, "Rapidement résolue");
-});
-
-Promise.any([pErr, pLente, pRapide]).then((valeur) => {
-  console.log(valeur);
-  // pRapide s'est résolue en premier
-});
-// résultat attendu : "Rapidement résolue"
- -

Échec avec AggregateError

- -

Promise.any() échoue avec un objet {{JSxRef("AggregateError")}} si aucun des promesses n'est résolue.

- -
const pErr = new Promise((resolve, reject) => {
-  reject("J'échoue toujours");
-});
-
-Promise.any([pErr]).catch((err) => {
-  console.log(err);
-})
-// résultat attendu : "AggregateError: No Promise in Promise.any was resolved"
- -

Afficher la première image chargée

- -

Dans cet exemple, nous avons une fonction qui requête une image et retourne un Blob. Nous utilisons Promise.any() pour requêter plusieurs images et afficher la première qui nous sera disponible (c'est-à-dire dont la promesse sera résolue).

- -
function fetchAndDecode(url) {
-  return fetch(url).then(réponse => {
-    if (!réponse.ok)
-      throw new Error(`Erreur HTTP ! état : ${response.status}`);
-    else
-      return réponse.blob();
-  })
-}
-
-let café = fetchAndDecode('coffee.jpg');
-let thé = fetchAndDecode('tea.jpg');
-
-Promise.any([café, thé]).then(valeur => {
-  let URLobjet = URL.createObjectURL(valeur);
-  let image = document.createElement('img');
-  image.src = URLobjet;
-  document.body.appendChild(image);
-})
-.catch(e => {
-  console.log(e.message);
-});
- -

Spécifications

- - - - - - - - - - -
Spécification
{{SpecName('Promise.any')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.any")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/any/index.md b/files/fr/web/javascript/reference/global_objects/promise/any/index.md new file mode 100644 index 0000000000..a7ac089348 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/any/index.md @@ -0,0 +1,146 @@ +--- +title: Promise.any() +slug: Web/JavaScript/Reference/Global_Objects/Promise/any +tags: + - JavaScript + - Method + - Méthode + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/any +--- +
{{JSRef}}
+ +

La méthode Promise.any() prend comme argument un itérable contenant des objets {{JSxRef("Promise")}} et, dès qu'une des promesses de cet itérable est tenue, renvoie une unique promesse résolue avec la valeur de la promesse résolue. Si aucune promesse de l'itérable n'est tenue (c'est-à-dire si toutes les promesses sont rejetées), la promesse renvoyée est rompue avec un objet {{JSxRef("Objets_globaux/AggregateError", "AggregateError")}} (une nouvelle sous-classe de {{JSxRef("Error")}} qui regroupe un ensemble d'erreurs). Cette méthode fait essentiellement le contraire de {{JSxRef("Promise.all()")}} (qui renvoie une promesse tenue uniquement si toutes les promesses de l'itérable passé en argument ont été tenues).

+ +

{{EmbedInteractiveExample("pages/js/promise-any.html")}}

+ +

Syntaxe

+ +
Promise.any(iterable);
+ +

Paramètres

+ +
+
iterable
+
Un objet itérable tel qu'un tableau ({{JSxRef("Array")}}) contenant des promesses ({{jsxref("Promise")}}).
+
+ +

Valeur de retour

+ + + +

Description

+ +

Cette méthode est utile afin de renvoyer la première promesse tenue d'un ensemble de promesse. Elle permet de court-circuiter dès qu'une promesse est tenue, sans attendre que les autres promesses soient résolues. Contrairement à {{JSxRef("Promise.all()")}} qui renvoie un tableau avec les valeurs de résolution des promesses, on a ici une seule valeur de résolution (celle de la première promesse tenue). Ce peut être bénéfique lorsqu'on a un ensemble de promesses et qu'on ne souhaite en résoudre qu'une sans se soucier de savoir laquelle des promesses a été tenue en premier.

+ +

À la différence de {{JSxRef("Promise.race()")}} qui renvoie la valeur de la première promesse résolue (qu'elle ait été tenue ou rompue), Promise.any() renvoie une promesse avec la valeur de la première promesse tenue. Cette méthode ignore les promesses qui sont rompues jusqu'à obtenir une promesse tenue.

+ +

Une des promesses est tenue

+ +

La promesse renvoyée par Promise.any() est résolue avec la première valeur résolue de l'itérable, qu'il s'agisse d'une promesse ou non, et que les autres promesses de l'itérable aient échoué ou non.

+ + + +

Toutes les promesses sont rompues

+ +

Si toutes les promesses de l'itérable échouent, Promise.any() échoue de asynchrone avec pour valeur d'échec un objet {{JSxRef("Objets_globaux/AggregateError", "AggregateError")}}, qui étend {{JSxRef("Error")}}, et contient une propriété errors qui est un tableau contenant l'ensemble des valeurs d'échec des différentes promesses de l'itérable.

+ + + +

Exemples

+ +

Première résolue

+ +

Promise.any() prend pour valeur de résolution celle de la première promesse résolue, et ce même si une des promesses de l'itérable a échoué avant. Ce comportement est différent de ce {{JSxRef("Promise.race()")}}, qui s'arrête à la première promesse qui se termine avec sa valeur de résolution ou d'échec.

+ +
const pErr = new Promise((resolve, reject) => {
+  reject("J'échoue toujours");
+});
+
+const pLente = new Promise((resolve, reject) => {
+  setTimeout(resolve, 500, "Éventuellement résolue");
+});
+
+const pRapide = new Promise((resolve, reject) => {
+  setTimeout(resolve, 100, "Rapidement résolue");
+});
+
+Promise.any([pErr, pLente, pRapide]).then((valeur) => {
+  console.log(valeur);
+  // pRapide s'est résolue en premier
+});
+// résultat attendu : "Rapidement résolue"
+ +

Échec avec AggregateError

+ +

Promise.any() échoue avec un objet {{JSxRef("AggregateError")}} si aucun des promesses n'est résolue.

+ +
const pErr = new Promise((resolve, reject) => {
+  reject("J'échoue toujours");
+});
+
+Promise.any([pErr]).catch((err) => {
+  console.log(err);
+})
+// résultat attendu : "AggregateError: No Promise in Promise.any was resolved"
+ +

Afficher la première image chargée

+ +

Dans cet exemple, nous avons une fonction qui requête une image et retourne un Blob. Nous utilisons Promise.any() pour requêter plusieurs images et afficher la première qui nous sera disponible (c'est-à-dire dont la promesse sera résolue).

+ +
function fetchAndDecode(url) {
+  return fetch(url).then(réponse => {
+    if (!réponse.ok)
+      throw new Error(`Erreur HTTP ! état : ${response.status}`);
+    else
+      return réponse.blob();
+  })
+}
+
+let café = fetchAndDecode('coffee.jpg');
+let thé = fetchAndDecode('tea.jpg');
+
+Promise.any([café, thé]).then(valeur => {
+  let URLobjet = URL.createObjectURL(valeur);
+  let image = document.createElement('img');
+  image.src = URLobjet;
+  document.body.appendChild(image);
+})
+.catch(e => {
+  console.log(e.message);
+});
+ +

Spécifications

+ + + + + + + + + + +
Spécification
{{SpecName('Promise.any')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.any")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/catch/index.html b/files/fr/web/javascript/reference/global_objects/promise/catch/index.html deleted file mode 100644 index eccaacb0cc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/catch/index.html +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Promise.prototype.catch() -slug: Web/JavaScript/Reference/Global_Objects/Promise/catch -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Promise - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/catch ---- -
{{JSRef}}
- -

La méthode catch() renvoie un objet {{jsxref("Promise")}} et ne traite que des cas où la promesse initiale est rejetée. Elle a le même effet qu'un appel à {{jsxref("Promise.then", "Promise.prototype.then(undefined, siRejetée)")}} (c'est en fait ce qui se passe dans le moteur, obj.catch(onRejected) est traduit en obj.then(undefined, onRejected)). Cela signifie qu'il est nécessaire de fournir une fonction onRejected, même si on souhaite avoir une valeur de secours qui est undefined (par exemple avec obj.catch(() => {}).

- -
{{EmbedInteractiveExample("pages/js/promise-catch.html")}}
- -

Syntaxe

- -
p.catch(siRejetée);
-
-p.catch(function(raison) {
-   // rejet
-});
-
- -

Paramètres

- -
-
siRejetée
-
Une {{jsxref("Function","fonction","",1)}} à appeler si la Promise est rejetée (i.e. n'est pas tenue). Cette fonction possède un argument : -
-
raison
-
Une chaîne de caractères qui indique pourquoi la promesse n'est pas tenue.
-
- -

La promesse renvoyée par la méthode catch() est rompue si siRejetée lève une erreur ou si elle renvoie une promesse rompue. Dans les autres cas, elle est tenue.

-
-
- -

Valeur de retour

- -

Une promesse ({{jsxref("Promise")}}).

- -

Description

- -

La méthode catch() est utile pour gérer les cas d'erreur en cas de compositions de plusieurs promesses. Elle renvoie elle-même une promesse et peut donc être utilisée lorsqu'on chaîne des promesses, à l'instar de la méthode sœur qu'est {{jsxref("Promise.prototype.then()")}}.

- -

Exemples

- -

Utilisation de la méthode catch

- -
var p1 = new Promise(function(resolve, reject) {
-  resolve("Succès");
-});
-
-p1.then(function(value) {
-  console.log(value); // "Succès!"
-  throw new Error("zut !");
-}).catch(function(e) {
-  console.error(e.message); // "zut !"
-}).then(function(e) {
-   console.log('après le catch, la chaîne est restaurée');
-});
-
-// Le code qui suit est équivalent :
-p1.then(function(value) {
-  console.log(value); // "Succès!"
-  return Promise.reject('zut !');
-}).catch(function(e) {
-  console.log(e); // "zut !"
-}).then(function(e){
-  console.log('après le catch, la chaîne est restaurée');
-});
-
- -

Les promesses n'interceptent pas les exceptions levées de façon asynchrone

- -
var p1 = new Promise(function(resolve, reject) {
-  throw new Error('Oh oh!');
-});
-
-p1.catch(function(e) {
-  console.log(e.message); // "Oh oh!"
-});
-
-var p2 = new Promise(function(resolve, reject) {
-  setTimeout(function() {
-    throw new Error('Exception invisible !');
-  }, 1000);
-});
-
-p2.catch(function(e) {
-  console.log(e.message); // Cela n'est jamais appelé
-});
- -

Démonstration de l'appel interne à then

- -
// On surcharge Promise.prototype.then/catch
-// pour y ajouter des logs
-(function(Promise){
-    var originalThen = Promise.prototype.then;
-    var originalCatch = Promise.prototype.catch;
-
-    Promise.prototype.then = function(){
-        console.log('> > > > > > appel de .then sur %o avec les arguments: %o', this, arguments);
-        return originalThen.apply(this, arguments);
-    };
-    Promise.prototype.catch = function(){
-        console.log('> > > > > > appel de .catch sur %o avec les arguments: %o', this, arguments);
-        return originalCatch.apply(this, arguments);
-    };
-
-})(this.Promise);
-
-
-
-// On appelle catch sur une promesse déjà résolue
-Promise.resolve().catch(function XXX(){});
-
-// Dans la console, on aura :
-// > > > > > > appel de .catch sur Promise{} avec les arguments: Arguments{1} [0: function XXX()]
-// > > > > > > appel de .then sur Promise{} avec les arguments: Arguments{2} [0: undefined, 1: function XXX()]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.catch")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/catch/index.md b/files/fr/web/javascript/reference/global_objects/promise/catch/index.md new file mode 100644 index 0000000000..eccaacb0cc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/catch/index.md @@ -0,0 +1,161 @@ +--- +title: Promise.prototype.catch() +slug: Web/JavaScript/Reference/Global_Objects/Promise/catch +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Promise + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/catch +--- +
{{JSRef}}
+ +

La méthode catch() renvoie un objet {{jsxref("Promise")}} et ne traite que des cas où la promesse initiale est rejetée. Elle a le même effet qu'un appel à {{jsxref("Promise.then", "Promise.prototype.then(undefined, siRejetée)")}} (c'est en fait ce qui se passe dans le moteur, obj.catch(onRejected) est traduit en obj.then(undefined, onRejected)). Cela signifie qu'il est nécessaire de fournir une fonction onRejected, même si on souhaite avoir une valeur de secours qui est undefined (par exemple avec obj.catch(() => {}).

+ +
{{EmbedInteractiveExample("pages/js/promise-catch.html")}}
+ +

Syntaxe

+ +
p.catch(siRejetée);
+
+p.catch(function(raison) {
+   // rejet
+});
+
+ +

Paramètres

+ +
+
siRejetée
+
Une {{jsxref("Function","fonction","",1)}} à appeler si la Promise est rejetée (i.e. n'est pas tenue). Cette fonction possède un argument : +
+
raison
+
Une chaîne de caractères qui indique pourquoi la promesse n'est pas tenue.
+
+ +

La promesse renvoyée par la méthode catch() est rompue si siRejetée lève une erreur ou si elle renvoie une promesse rompue. Dans les autres cas, elle est tenue.

+
+
+ +

Valeur de retour

+ +

Une promesse ({{jsxref("Promise")}}).

+ +

Description

+ +

La méthode catch() est utile pour gérer les cas d'erreur en cas de compositions de plusieurs promesses. Elle renvoie elle-même une promesse et peut donc être utilisée lorsqu'on chaîne des promesses, à l'instar de la méthode sœur qu'est {{jsxref("Promise.prototype.then()")}}.

+ +

Exemples

+ +

Utilisation de la méthode catch

+ +
var p1 = new Promise(function(resolve, reject) {
+  resolve("Succès");
+});
+
+p1.then(function(value) {
+  console.log(value); // "Succès!"
+  throw new Error("zut !");
+}).catch(function(e) {
+  console.error(e.message); // "zut !"
+}).then(function(e) {
+   console.log('après le catch, la chaîne est restaurée');
+});
+
+// Le code qui suit est équivalent :
+p1.then(function(value) {
+  console.log(value); // "Succès!"
+  return Promise.reject('zut !');
+}).catch(function(e) {
+  console.log(e); // "zut !"
+}).then(function(e){
+  console.log('après le catch, la chaîne est restaurée');
+});
+
+ +

Les promesses n'interceptent pas les exceptions levées de façon asynchrone

+ +
var p1 = new Promise(function(resolve, reject) {
+  throw new Error('Oh oh!');
+});
+
+p1.catch(function(e) {
+  console.log(e.message); // "Oh oh!"
+});
+
+var p2 = new Promise(function(resolve, reject) {
+  setTimeout(function() {
+    throw new Error('Exception invisible !');
+  }, 1000);
+});
+
+p2.catch(function(e) {
+  console.log(e.message); // Cela n'est jamais appelé
+});
+ +

Démonstration de l'appel interne à then

+ +
// On surcharge Promise.prototype.then/catch
+// pour y ajouter des logs
+(function(Promise){
+    var originalThen = Promise.prototype.then;
+    var originalCatch = Promise.prototype.catch;
+
+    Promise.prototype.then = function(){
+        console.log('> > > > > > appel de .then sur %o avec les arguments: %o', this, arguments);
+        return originalThen.apply(this, arguments);
+    };
+    Promise.prototype.catch = function(){
+        console.log('> > > > > > appel de .catch sur %o avec les arguments: %o', this, arguments);
+        return originalCatch.apply(this, arguments);
+    };
+
+})(this.Promise);
+
+
+
+// On appelle catch sur une promesse déjà résolue
+Promise.resolve().catch(function XXX(){});
+
+// Dans la console, on aura :
+// > > > > > > appel de .catch sur Promise{} avec les arguments: Arguments{1} [0: function XXX()]
+// > > > > > > appel de .then sur Promise{} avec les arguments: Arguments{2} [0: undefined, 1: function XXX()]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.catch")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/finally/index.html b/files/fr/web/javascript/reference/global_objects/promise/finally/index.html deleted file mode 100644 index 36892e1148..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/finally/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Promise.prototype.finally() -slug: Web/JavaScript/Reference/Global_Objects/Promise/finally -tags: - - JavaScript - - Méthode - - Promises - - Reference - - finally -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/finally ---- -
{{JSRef}}
- -

La méthode finally() renvoie un objet Promise et accepte en argument une fonction de callback qui est appelée lorsque la promesse a été résolue (qu'elle ait été tenue ou rejetée). Cela permet d'exécuter du code une fois que la promesse a été traitée, quel que soit le résultat. On évite ainsi de dupliquer du code entre les gestionnaires {{jsxref("Promise.then", "then()")}} et {{jsxref("Promise.catch", "catch()")}}.

- -

Syntaxe

- -
p.finally(onFinally);
-
-p.finally(function() {
-   // appelée dans tous les
-   // cas de terminaison
-});
-
- -

Paramètres

- -
-
onFinally
-
Une fonction (objet {{jsxref("Function")}}) appelé lorsque la promesse courante est résolue.
-
- -

Valeur de retour

- -

Cette méthode renvoie un objet {{jsxref("Promise")}}.

- -

Description

- -

La méthode finally peut être utile si on souhaite effectuer un traitement ou du nettoyage (fermetures de flux, libération de ressources, etc.) une fois qu'une promesse est résolue, quel que soit l'état de la résolution (tenue ou rejetée).

- -

La méthode finally est similaire à l'utilisation de la forme .then(onFinally, onFinally), on notera toutefois quelques différences :

- - - -
-

Note : Toutefois, on notera qu'utiliser throw (ou que renvoyer une promesse rompue) dans le callback finally rejettera la promesse avec l'exception indiquée dans l'appel à throw.

-
- -

Exemples

- -
let isLoading = true;
-
-fetch(myRequest).then(function(response) {
-    var contentType = response.headers.get("content-type");
-    if(contentType && contentType.includes("application/json")) {
-      return response.json();
-    }
-    throw new TypeError("Oups, ceci n'est pas du JSON !");
-  })
-  .then(function(json) { /* traiter le JSON */ })
-  .catch(function(error) { console.log(error);
-       /* La ligne précédent peut aussi déclencher une
-          erreur (si console vaut {} par exemple) */
-   })
-  .finally(function() { isLoading = false; });
-
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-promise.prototype.finally', 'Promise.prototype.finally')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.finally")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/finally/index.md b/files/fr/web/javascript/reference/global_objects/promise/finally/index.md new file mode 100644 index 0000000000..36892e1148 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/finally/index.md @@ -0,0 +1,105 @@ +--- +title: Promise.prototype.finally() +slug: Web/JavaScript/Reference/Global_Objects/Promise/finally +tags: + - JavaScript + - Méthode + - Promises + - Reference + - finally +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/finally +--- +
{{JSRef}}
+ +

La méthode finally() renvoie un objet Promise et accepte en argument une fonction de callback qui est appelée lorsque la promesse a été résolue (qu'elle ait été tenue ou rejetée). Cela permet d'exécuter du code une fois que la promesse a été traitée, quel que soit le résultat. On évite ainsi de dupliquer du code entre les gestionnaires {{jsxref("Promise.then", "then()")}} et {{jsxref("Promise.catch", "catch()")}}.

+ +

Syntaxe

+ +
p.finally(onFinally);
+
+p.finally(function() {
+   // appelée dans tous les
+   // cas de terminaison
+});
+
+ +

Paramètres

+ +
+
onFinally
+
Une fonction (objet {{jsxref("Function")}}) appelé lorsque la promesse courante est résolue.
+
+ +

Valeur de retour

+ +

Cette méthode renvoie un objet {{jsxref("Promise")}}.

+ +

Description

+ +

La méthode finally peut être utile si on souhaite effectuer un traitement ou du nettoyage (fermetures de flux, libération de ressources, etc.) une fois qu'une promesse est résolue, quel que soit l'état de la résolution (tenue ou rejetée).

+ +

La méthode finally est similaire à l'utilisation de la forme .then(onFinally, onFinally), on notera toutefois quelques différences :

+ + + +
+

Note : Toutefois, on notera qu'utiliser throw (ou que renvoyer une promesse rompue) dans le callback finally rejettera la promesse avec l'exception indiquée dans l'appel à throw.

+
+ +

Exemples

+ +
let isLoading = true;
+
+fetch(myRequest).then(function(response) {
+    var contentType = response.headers.get("content-type");
+    if(contentType && contentType.includes("application/json")) {
+      return response.json();
+    }
+    throw new TypeError("Oups, ceci n'est pas du JSON !");
+  })
+  .then(function(json) { /* traiter le JSON */ })
+  .catch(function(error) { console.log(error);
+       /* La ligne précédent peut aussi déclencher une
+          erreur (si console vaut {} par exemple) */
+   })
+  .finally(function() { isLoading = false; });
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-promise.prototype.finally', 'Promise.prototype.finally')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.finally")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/index.html b/files/fr/web/javascript/reference/global_objects/promise/index.html deleted file mode 100644 index 2399e3eebd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/index.html +++ /dev/null @@ -1,234 +0,0 @@ ---- -title: Promise -slug: Web/JavaScript/Reference/Global_Objects/Promise -tags: - - ECMAScript 2015 - - JavaScript - - Promise - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise ---- -
{{JSRef}}
- -

L'objet Promise (pour « promesse ») est utilisé pour réaliser des traitements de façon asynchrone. Une promesse représente une valeur qui peut être disponible maintenant, dans le futur voire jamais.

- -
-

Note : Cet article décrit le constructeur Promise. Pour en savoir plus sur les promesses en général, nous vous conseillons de lire l'article Utiliser les promesses. Le constructeur Promise est principalement utilisé pour envelopper des fonctions qui ne prennent pas en charge les promesses.

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

Syntaxe

- -
new Promise( /* exécuteur */ function(resolve, reject) { ... } );
- -

Paramètres

- -
-
exécuteur
-
Une fonction à laquelle on passera deux arguments : resolve et reject. Cette fonction est exécutée immédiatement par l'implémentation de Promise qui fournit les fonctions resolve et reject (elle est exécutée avant que le constructeur Promise ait renvoyé l'objet créé). Les fonctions resolve et reject, lorsqu'elles sont appelées, permettent respectivement de tenir ou de rompre la promesse. On attend de l'exécuteur qu'il démarre un travail asynchrone puis, une fois le travail terminé, appelle la fonction resolve (si tout s'est bien passé) ou la fonction reject (lorsqu'il y a eu un problème) pour définir l'état final de la promesse.
- Si une erreur est générée par l'exécuteur, la promesse est rompue et la valeur de retour de l'exécuteur est ignorée.
-
- -

Description

- -

L'interface Promise représente un intermédiaire (proxy) vers une valeur qui n'est pas nécessairement connue au moment de sa création. Cela permet d'associer des gestionnaires au succès éventuel d'une action asynchrone et à la raison d'une erreur. Ainsi, des méthodes asynchrones renvoient des valeurs comme les méthodes synchrones, la seule différence est que la valeur retournée par la méthode asynchrone est une promesse (d'avoir une valeur plus tard).

- -

Une Promise est dans un de ces états :

- - - -

Une promesse en attente peut être tenue avec une valeur ou rompue avec une raison (erreur). Quand on arrive à l'une des deux situations, les gestionnaires associés lors de l'appel de la méthode then sont alors appelés. (Si la promesse a déjà été tenue ou rompue lorsque le gestionnaire est attaché à la promesse, le gestionnaire est appelé. Cela permet qu'il n'y ait pas de situation de compétition entre une opération asynchrone en cours et les gestionnaires ajoutés).

- -

Les méthodes {{jsxref("Promise.then","Promise.prototype.then()")}} et {{jsxref("Promise.catch","Promise.prototype.catch()")}} renvoient des promesses et peuvent ainsi être chaînées. C'est ce qu'on appelle une composition.

- -

- -
-

Note : Une promesse est dans l'état settled (acquittée) qu'elle soit tenue ou rompue mais plus en attente. Le terme resolved (résolue) est aussi utilisé concernant les promesses — cela signifie que la promesse est acquittée ou bien enfermée dans une chaine de promesse. Le billet de Domenic Denicola, States and fates (en anglais), contient de plus amples détails sur la terminologie utilisée.

-
- -
-

Attention : D'autres langages utilisent des mécanismes d'évaluation à la volée (lazy evaluation) et de déport des calculs (deferring computations). Ces mécanismes sont également intitulés promesses (promises). En JavaScript, les promesses correspondent à des processus déjà lancés et qui peuvent être chaînés avec des fonctions de retour. Si vous cherchez à retarder l'évaluation, vous pouvez utiliser les fonctions fléchées sans arguments (ex. f = () => expression) afin de créer une expression à évaluer plus tard et utiliser f() pour l'évaluer au moment voulu.

-
- -

Propriétés

- -
-
Promise.length
-
Une propriété de longueur qui vaut 1 (le nombre d'arguments pour le constructeur).
-
{{jsxref("Promise.prototype")}}
-
Cette propriété représente le prototype du constructeur Promise.
-
- -

Méthodes

- -
-
{{jsxref("Promise.all", "Promise.all(iterable)")}}
-
Renvoie une promesse tenue lorsque toutes les promesses de l'argument itérable sont tenues ou une promesse rompue dès qu'une promesse de l'argument itérable est rompue. Si la promesse est tenue, elle est résolue avec un tableau contenant les valeurs de résolution des différentes promesses contenues dans l'itérable (dans le même ordre que celui-ci). Si la promesse est rompue, elle contient la raison de la rupture de la part de la promesse en cause, contenue dans l'itérable. Cette méthode est utile pour agréger les résultats de plusieurs promesses tous ensemble.
-
{{jsxref("Promise.allSettled", "Promise.allSettled(iterable)")}}
-
Attend que l'ensemble des promesses aient été acquittées (tenues ou rompues) et renvoie une promesse qui est résolue après que chaque promesse ait été tenue ou rompue. La valeur de résolution de la promesse renvoyée est un tableau dont chaque élément est le résultat des promesses initiales.
-
{{jsxref("Promise.race", "Promise.race(iterable)")}}
-
Renvoie une promesse qui est tenue ou rompue dès que l'une des promesses de l'itérable est tenue ou rompue avec la valeur ou la raison correspondante.
-
{{jsxref("Promise.reject", "Promise.reject(raison)")}}
-
Renvoie un objet Promise qui est rompue avec la raison donnée.
-
{{jsxref("Promise.resolve", "Promise.resolve(valeur)")}}
-
Renvoie un objet Promise qui est tenue (résolue) avec la valeur donnée. Si la valeur possède une méthode then, la promesse renvoyée « suivra » cette méthode pour arriver dans son état, sinon la promesse renvoyée sera tenue avec la valeur fournie. Généralement, quand on veut savoir si une valeur est une promesse, on utilisera {{jsxref("Promise.resolve","Promise.resolve(valeur)")}} et on travaillera avec la valeur de retour en tant que promesse.
-
- -

Prototype pour Promise

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise/prototype','Propriétés')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise/prototype','Méthodes')}}

- -

Exemples

- -

Créer une promesse

- -

Pour créer une promesse, on utilise l'opérateur new et le constructeur. Celui-ci prend en argument une fonction qui prend deux fonctions en paramètres. La première est appelée quand la tâche asynchrone est correctement terminée et la seconde est appelée quand la tâche échoue :

- -
const maPremierePromesse = new Promise((resolve, reject) => {
-  // réaliser une tâche asynchrone et appeler :
-
-  // resolve(uneValeur); // si la promesse est tenue
-  // ou
-  // reject("raison d'echec"); // si elle est rompue
-});
-
- -

On peut ainsi obtenir des fonctions asynchrones en renvoyant une promesse :

- -
function maFonctionAsynchrone(url) {
-  return new Promise((resolve, reject) => {
-    const xhr = new XMLHttpRequest();
-    xhr.open("GET", url);
-    xhr.onload = () => resolve(xhr.responseText);
-    xhr.onerror = () => reject(xhr.statusText);
-    xhr.send();
-  });
-}
- -

Exemple interactif

- -
<button id="btn" type="button">Créer un objet Promise !</button>
-<div id="log"></div>
-
- -

Dans le court exemple qui suit, on illustre le mécanisme d'une Promise. La méthode testPromise() est appelée chaque fois qu'on clique sur l'élément {{HTMLElement("button")}}. Cette méthode crée une promesse qui sera tenue grâce à la fonction {{domxref("window.setTimeout()")}}, et avec la valeur comptePromesse (nombre commançant à 1) après 1s à 3s (aléatoire). Le constructeur Promise() est utilisé pour créer la promesse.

- -

Le fait que la promesse soit tenue est simplement enregistré via un callback sur p1.then(). Quelques indicateurs illustrent la manière dont la partie synchrone est découplée de la partie asynchrone.

- -
'use strict';
-var comptePromesse = 0;
-
-function testPromise() {
-  var thisComptePromesse = ++comptePromesse;
-
-  var log = document.getElementById('log');
-  log.insertAdjacentHTML('beforeend', thisComptePromesse +
-      ') Started (<small>Début du code synchrone</small>)<br/>');
-
-  // on crée une nouvelle promesse :
-  var p1 = new Promise(
-    // La fonction de résolution est appelée avec la capacité de
-    // tenir ou de rompre la promesse
-    function(resolve, reject) {
-      log.insertAdjacentHTML('beforeend', thisComptePromesse +
-          ') Promise started (<small>Début du code asynchrone</small>)<br/>');
-
-      // Voici un exemple simple pour créer un code asynchrone
-      window.setTimeout(
-        function() {
-          // On tient la promesse !
-          resolve(thisComptePromesse);
-        }, Math.random() * 2000 + 1000);
-    });
-
-  // On définit ce qui se passe quand la promesse est tenue
-  // et ce qu'on appelle (uniquement) dans ce cas
-  // La méthode catch() définit le traitement à effectuer
-  // quand la promesse est rompue.
-  p1.then(
-    // On affiche un message avec la valeur
-    function(val) {
-      log.insertAdjacentHTML('beforeend', val +
-          ') Promise fulfilled (<small>Fin du code asynchrone</small>)<br/>');
-    }).catch(
-      // Promesse rejetée
-      function() {
-        console.log("promesse rompue");
-      });
-
-  log.insertAdjacentHTML('beforeend', thisComptePromesse +
-      ') Promise made (<small>Fin du code synchrone</small>)<br/>');
-}
-
- -
if ("Promise" in window) {
-  var btn = document.getElementById("btn");
-  btn.addEventListener("click", testPromise);
- } else {
-  log = document.getElementById('log');
-  log.innerHTML = "L'exemple live n'est pas disponible pour votre navigateur car celui-ci ne supporte pas l'interface <code>Promise<code>.";
-}
- -

L'exemple s'exécute lorsqu'on clique sur le bouton. Pour tester cet exemple, il est nécessaire d'utiliser un navigateur qui supporte les objets Promise. En cliquant plusieurs fois sur le bouton en peu de temps, on verra qu'il y a plusieurs promesses tenues les une après les autres.

- -

{{EmbedLiveSample('Exemple_interactif', '500', '200')}}

- -

Charger une image en XHR

- -

Un autre exemple simple utilisant Promise et {{domxref("XMLHttpRequest")}} afin de charger une image est disponible sur le dépôt GitHub MDN js-examples. Vous pouvez également voir le résultat. Chaque étape est commentée afin de vous permettre de suivre l'état de la promesse et l'architecture utilisée avec XHR.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise-objects', 'Promise')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise-objects', 'Promise')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/index.md b/files/fr/web/javascript/reference/global_objects/promise/index.md new file mode 100644 index 0000000000..2399e3eebd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/index.md @@ -0,0 +1,234 @@ +--- +title: Promise +slug: Web/JavaScript/Reference/Global_Objects/Promise +tags: + - ECMAScript 2015 + - JavaScript + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise +--- +
{{JSRef}}
+ +

L'objet Promise (pour « promesse ») est utilisé pour réaliser des traitements de façon asynchrone. Une promesse représente une valeur qui peut être disponible maintenant, dans le futur voire jamais.

+ +
+

Note : Cet article décrit le constructeur Promise. Pour en savoir plus sur les promesses en général, nous vous conseillons de lire l'article Utiliser les promesses. Le constructeur Promise est principalement utilisé pour envelopper des fonctions qui ne prennent pas en charge les promesses.

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

Syntaxe

+ +
new Promise( /* exécuteur */ function(resolve, reject) { ... } );
+ +

Paramètres

+ +
+
exécuteur
+
Une fonction à laquelle on passera deux arguments : resolve et reject. Cette fonction est exécutée immédiatement par l'implémentation de Promise qui fournit les fonctions resolve et reject (elle est exécutée avant que le constructeur Promise ait renvoyé l'objet créé). Les fonctions resolve et reject, lorsqu'elles sont appelées, permettent respectivement de tenir ou de rompre la promesse. On attend de l'exécuteur qu'il démarre un travail asynchrone puis, une fois le travail terminé, appelle la fonction resolve (si tout s'est bien passé) ou la fonction reject (lorsqu'il y a eu un problème) pour définir l'état final de la promesse.
+ Si une erreur est générée par l'exécuteur, la promesse est rompue et la valeur de retour de l'exécuteur est ignorée.
+
+ +

Description

+ +

L'interface Promise représente un intermédiaire (proxy) vers une valeur qui n'est pas nécessairement connue au moment de sa création. Cela permet d'associer des gestionnaires au succès éventuel d'une action asynchrone et à la raison d'une erreur. Ainsi, des méthodes asynchrones renvoient des valeurs comme les méthodes synchrones, la seule différence est que la valeur retournée par la méthode asynchrone est une promesse (d'avoir une valeur plus tard).

+ +

Une Promise est dans un de ces états :

+ + + +

Une promesse en attente peut être tenue avec une valeur ou rompue avec une raison (erreur). Quand on arrive à l'une des deux situations, les gestionnaires associés lors de l'appel de la méthode then sont alors appelés. (Si la promesse a déjà été tenue ou rompue lorsque le gestionnaire est attaché à la promesse, le gestionnaire est appelé. Cela permet qu'il n'y ait pas de situation de compétition entre une opération asynchrone en cours et les gestionnaires ajoutés).

+ +

Les méthodes {{jsxref("Promise.then","Promise.prototype.then()")}} et {{jsxref("Promise.catch","Promise.prototype.catch()")}} renvoient des promesses et peuvent ainsi être chaînées. C'est ce qu'on appelle une composition.

+ +

+ +
+

Note : Une promesse est dans l'état settled (acquittée) qu'elle soit tenue ou rompue mais plus en attente. Le terme resolved (résolue) est aussi utilisé concernant les promesses — cela signifie que la promesse est acquittée ou bien enfermée dans une chaine de promesse. Le billet de Domenic Denicola, States and fates (en anglais), contient de plus amples détails sur la terminologie utilisée.

+
+ +
+

Attention : D'autres langages utilisent des mécanismes d'évaluation à la volée (lazy evaluation) et de déport des calculs (deferring computations). Ces mécanismes sont également intitulés promesses (promises). En JavaScript, les promesses correspondent à des processus déjà lancés et qui peuvent être chaînés avec des fonctions de retour. Si vous cherchez à retarder l'évaluation, vous pouvez utiliser les fonctions fléchées sans arguments (ex. f = () => expression) afin de créer une expression à évaluer plus tard et utiliser f() pour l'évaluer au moment voulu.

+
+ +

Propriétés

+ +
+
Promise.length
+
Une propriété de longueur qui vaut 1 (le nombre d'arguments pour le constructeur).
+
{{jsxref("Promise.prototype")}}
+
Cette propriété représente le prototype du constructeur Promise.
+
+ +

Méthodes

+ +
+
{{jsxref("Promise.all", "Promise.all(iterable)")}}
+
Renvoie une promesse tenue lorsque toutes les promesses de l'argument itérable sont tenues ou une promesse rompue dès qu'une promesse de l'argument itérable est rompue. Si la promesse est tenue, elle est résolue avec un tableau contenant les valeurs de résolution des différentes promesses contenues dans l'itérable (dans le même ordre que celui-ci). Si la promesse est rompue, elle contient la raison de la rupture de la part de la promesse en cause, contenue dans l'itérable. Cette méthode est utile pour agréger les résultats de plusieurs promesses tous ensemble.
+
{{jsxref("Promise.allSettled", "Promise.allSettled(iterable)")}}
+
Attend que l'ensemble des promesses aient été acquittées (tenues ou rompues) et renvoie une promesse qui est résolue après que chaque promesse ait été tenue ou rompue. La valeur de résolution de la promesse renvoyée est un tableau dont chaque élément est le résultat des promesses initiales.
+
{{jsxref("Promise.race", "Promise.race(iterable)")}}
+
Renvoie une promesse qui est tenue ou rompue dès que l'une des promesses de l'itérable est tenue ou rompue avec la valeur ou la raison correspondante.
+
{{jsxref("Promise.reject", "Promise.reject(raison)")}}
+
Renvoie un objet Promise qui est rompue avec la raison donnée.
+
{{jsxref("Promise.resolve", "Promise.resolve(valeur)")}}
+
Renvoie un objet Promise qui est tenue (résolue) avec la valeur donnée. Si la valeur possède une méthode then, la promesse renvoyée « suivra » cette méthode pour arriver dans son état, sinon la promesse renvoyée sera tenue avec la valeur fournie. Généralement, quand on veut savoir si une valeur est une promesse, on utilisera {{jsxref("Promise.resolve","Promise.resolve(valeur)")}} et on travaillera avec la valeur de retour en tant que promesse.
+
+ +

Prototype pour Promise

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise/prototype','Propriétés')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise/prototype','Méthodes')}}

+ +

Exemples

+ +

Créer une promesse

+ +

Pour créer une promesse, on utilise l'opérateur new et le constructeur. Celui-ci prend en argument une fonction qui prend deux fonctions en paramètres. La première est appelée quand la tâche asynchrone est correctement terminée et la seconde est appelée quand la tâche échoue :

+ +
const maPremierePromesse = new Promise((resolve, reject) => {
+  // réaliser une tâche asynchrone et appeler :
+
+  // resolve(uneValeur); // si la promesse est tenue
+  // ou
+  // reject("raison d'echec"); // si elle est rompue
+});
+
+ +

On peut ainsi obtenir des fonctions asynchrones en renvoyant une promesse :

+ +
function maFonctionAsynchrone(url) {
+  return new Promise((resolve, reject) => {
+    const xhr = new XMLHttpRequest();
+    xhr.open("GET", url);
+    xhr.onload = () => resolve(xhr.responseText);
+    xhr.onerror = () => reject(xhr.statusText);
+    xhr.send();
+  });
+}
+ +

Exemple interactif

+ +
<button id="btn" type="button">Créer un objet Promise !</button>
+<div id="log"></div>
+
+ +

Dans le court exemple qui suit, on illustre le mécanisme d'une Promise. La méthode testPromise() est appelée chaque fois qu'on clique sur l'élément {{HTMLElement("button")}}. Cette méthode crée une promesse qui sera tenue grâce à la fonction {{domxref("window.setTimeout()")}}, et avec la valeur comptePromesse (nombre commançant à 1) après 1s à 3s (aléatoire). Le constructeur Promise() est utilisé pour créer la promesse.

+ +

Le fait que la promesse soit tenue est simplement enregistré via un callback sur p1.then(). Quelques indicateurs illustrent la manière dont la partie synchrone est découplée de la partie asynchrone.

+ +
'use strict';
+var comptePromesse = 0;
+
+function testPromise() {
+  var thisComptePromesse = ++comptePromesse;
+
+  var log = document.getElementById('log');
+  log.insertAdjacentHTML('beforeend', thisComptePromesse +
+      ') Started (<small>Début du code synchrone</small>)<br/>');
+
+  // on crée une nouvelle promesse :
+  var p1 = new Promise(
+    // La fonction de résolution est appelée avec la capacité de
+    // tenir ou de rompre la promesse
+    function(resolve, reject) {
+      log.insertAdjacentHTML('beforeend', thisComptePromesse +
+          ') Promise started (<small>Début du code asynchrone</small>)<br/>');
+
+      // Voici un exemple simple pour créer un code asynchrone
+      window.setTimeout(
+        function() {
+          // On tient la promesse !
+          resolve(thisComptePromesse);
+        }, Math.random() * 2000 + 1000);
+    });
+
+  // On définit ce qui se passe quand la promesse est tenue
+  // et ce qu'on appelle (uniquement) dans ce cas
+  // La méthode catch() définit le traitement à effectuer
+  // quand la promesse est rompue.
+  p1.then(
+    // On affiche un message avec la valeur
+    function(val) {
+      log.insertAdjacentHTML('beforeend', val +
+          ') Promise fulfilled (<small>Fin du code asynchrone</small>)<br/>');
+    }).catch(
+      // Promesse rejetée
+      function() {
+        console.log("promesse rompue");
+      });
+
+  log.insertAdjacentHTML('beforeend', thisComptePromesse +
+      ') Promise made (<small>Fin du code synchrone</small>)<br/>');
+}
+
+ +
if ("Promise" in window) {
+  var btn = document.getElementById("btn");
+  btn.addEventListener("click", testPromise);
+ } else {
+  log = document.getElementById('log');
+  log.innerHTML = "L'exemple live n'est pas disponible pour votre navigateur car celui-ci ne supporte pas l'interface <code>Promise<code>.";
+}
+ +

L'exemple s'exécute lorsqu'on clique sur le bouton. Pour tester cet exemple, il est nécessaire d'utiliser un navigateur qui supporte les objets Promise. En cliquant plusieurs fois sur le bouton en peu de temps, on verra qu'il y a plusieurs promesses tenues les une après les autres.

+ +

{{EmbedLiveSample('Exemple_interactif', '500', '200')}}

+ +

Charger une image en XHR

+ +

Un autre exemple simple utilisant Promise et {{domxref("XMLHttpRequest")}} afin de charger une image est disponible sur le dépôt GitHub MDN js-examples. Vous pouvez également voir le résultat. Chaque étape est commentée afin de vous permettre de suivre l'état de la promesse et l'architecture utilisée avec XHR.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise-objects', 'Promise')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise-objects', 'Promise')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/race/index.html b/files/fr/web/javascript/reference/global_objects/promise/race/index.html deleted file mode 100644 index ddb0475694..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/race/index.html +++ /dev/null @@ -1,188 +0,0 @@ ---- -title: Promise.race() -slug: Web/JavaScript/Reference/Global_Objects/Promise/race -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Promise - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/race ---- -
{{JSRef}}
- -

La méthode Promise.race() renvoie une promesse qui est résolue ou rejetée dès qu'une des promesses de l'itérable passé en argument est résolue ou rejetée. La valeur (dans le cas de la résolution) ou la raison (dans le cas d'un échec) utilisée est celle de la promesse de l'itérable qui est resolue/qui échoue.

- -
{{EmbedInteractiveExample("pages/js/promise-race.html")}}
- -

Syntaxe

- -
Promise.race(itérable);
- -

Paramètres

- -
-
itérable
-
Un objet itérable, par exemple un {{jsxref("Array")}}. Voir la page itérable.
-
- -

Valeur de retour

- -

Une promesse ({{jsxref("Promise")}}) à résoudre qui est résolue de façon asynchrone dès que l'une des promesses de l'itérable est tenue ou rompue.

- -

Description

- -

La fonction race renvoie une Promise qui est résolue/rejetée de la même façon que la première promesse de l'itérable à être résolue/rejetée.

- -

Si l'itérable passé en argument est vide, la promesse sera continuellement en attente.

- -

Si l'itérable contient une ou plusieurs valeurs qui ne sont pas des promesses ou une promesse déjà résolue, Promise.race fournira une promesse résolue avec la première de ces valeurs trouvées dans l'itérable.

- -

Exemples

- -

Caractère asynchrone de Promise.race()

- -

L'exemple qui suit illuste le caractère asynchrone de Promise.race:

- -
// On passe un tableau de promesses déjà résolues
-// en argument afin de déclencher Promise.race
-// dès que possible
-var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
-
-var p = Promise.race(resolvedPromisesArray);
-// On affiche immédiatement la valeur p dans la console
-console.log(p);
-
-// Avec setTimeout on peut exécuter du code
-// une fois que la pile est vide
-setTimeout(function(){
-    console.log('La pile est désormais vide');
-    console.log(p);
-});
-
-// affichera, dans cet ordre :
-// Promise { <state>: "pending" }
-// La pile est désormais vide
-// Promise { <state>: "fulfilled", <value>: 33 }
- -

Un itérable vide renverra une promesse qui restera en attente :

- -
var foreverPendingPromise = Promise.race([]);
-console.log(foreverPendingPromise);
-setTimeout(function(){
-    console.log('La pile est désormais vide');
-    console.log(foreverPendingPromise);
-});
-
-// affichera, dans cet ordre :
-// Promise { <state>: "pending" }
-// La pile est désormais vide
-// Promise { <state>: "pending" }
-
- -

Si l'itérable contient une ou plusieurs valeurs qui ne sont pas des promesses ou des promesses déjà résolues, Promise.race considèrera la première valeur ainsi trouvée dans l'itérable :

- -
var foreverPendingPromise = Promise.race([]);
-var alreadyResolvedProm = Promise.resolve(666);
-
-var arr = [foreverPendingPromise, alreadyResolvedProm, "non-Promise value"];
-var arr2 = [foreverPendingPromise, "non-Promise value", Promise.resolve(666)];
-var p = Promise.race(arr);
-var p2 = Promise.race(arr2);
-
-console.log(p);
-console.log(p2);
-setTimeout(function(){
-    console.log('the stack is now empty');
-    console.log(p);
-    console.log(p2);
-});
-
-// affichera dans l'ordre :
-// Promise { <state>: "pending" }
-// Promise { <state>: "pending" }
-// the stack is now empty
-// Promise { <state>: "fulfilled", <value>: 666 }
-// Promise { <state>: "fulfilled", <value>: "non-Promise value" }
-
- -

Utilisation de Promise.race – exemples avec setTimeout

- -
var p1 = new Promise(function(resolve, reject) {
-    setTimeout(resolve, 500, "un");
-});
-var p2 = new Promise(function(resolve, reject) {
-    setTimeout(resolve, 100, "deux");
-});
-
-Promise.race([p1, p2]).then(function(value) {
-  console.log(value); // "deux"
-  // Les deux promesses sont résolues mais p2 est plus rapide
-});
-
-var p3 = new Promise(function(resolve, reject) {
-    setTimeout(resolve, 100, "trois");
-});
-var p4 = new Promise(function(resolve, reject) {
-    setTimeout(reject, 500, "quatre");
-});
-
-Promise.race([p3, p4]).then(function(value) {
-  console.log(value); // "trois"
-  // p3 est plus rapide et entraîne la résolution de la promesse de compétition
-}, function(reason) {
-  // N'est pas appelée
-});
-
-var p5 = new Promise(function(resolve, reject) {
-    setTimeout(resolve, 500, "cinq");
-});
-var p6 = new Promise(function(resolve, reject) {
-    setTimeout(reject, 100, "six");
-});
-
-Promise.race([p5, p6]).then(function(value) {
-  // N'est pas appelée
-}, function(reason) {
-  console.log(reason); // "six"
-  // p6 est plus rapide et rejète la promesse de compétition
-});
-
- -
-

Note : voir la documentation sur setTimeout.

-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.race', 'Promise.race')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.race")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/race/index.md b/files/fr/web/javascript/reference/global_objects/promise/race/index.md new file mode 100644 index 0000000000..ddb0475694 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/race/index.md @@ -0,0 +1,188 @@ +--- +title: Promise.race() +slug: Web/JavaScript/Reference/Global_Objects/Promise/race +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/race +--- +
{{JSRef}}
+ +

La méthode Promise.race() renvoie une promesse qui est résolue ou rejetée dès qu'une des promesses de l'itérable passé en argument est résolue ou rejetée. La valeur (dans le cas de la résolution) ou la raison (dans le cas d'un échec) utilisée est celle de la promesse de l'itérable qui est resolue/qui échoue.

+ +
{{EmbedInteractiveExample("pages/js/promise-race.html")}}
+ +

Syntaxe

+ +
Promise.race(itérable);
+ +

Paramètres

+ +
+
itérable
+
Un objet itérable, par exemple un {{jsxref("Array")}}. Voir la page itérable.
+
+ +

Valeur de retour

+ +

Une promesse ({{jsxref("Promise")}}) à résoudre qui est résolue de façon asynchrone dès que l'une des promesses de l'itérable est tenue ou rompue.

+ +

Description

+ +

La fonction race renvoie une Promise qui est résolue/rejetée de la même façon que la première promesse de l'itérable à être résolue/rejetée.

+ +

Si l'itérable passé en argument est vide, la promesse sera continuellement en attente.

+ +

Si l'itérable contient une ou plusieurs valeurs qui ne sont pas des promesses ou une promesse déjà résolue, Promise.race fournira une promesse résolue avec la première de ces valeurs trouvées dans l'itérable.

+ +

Exemples

+ +

Caractère asynchrone de Promise.race()

+ +

L'exemple qui suit illuste le caractère asynchrone de Promise.race:

+ +
// On passe un tableau de promesses déjà résolues
+// en argument afin de déclencher Promise.race
+// dès que possible
+var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
+
+var p = Promise.race(resolvedPromisesArray);
+// On affiche immédiatement la valeur p dans la console
+console.log(p);
+
+// Avec setTimeout on peut exécuter du code
+// une fois que la pile est vide
+setTimeout(function(){
+    console.log('La pile est désormais vide');
+    console.log(p);
+});
+
+// affichera, dans cet ordre :
+// Promise { <state>: "pending" }
+// La pile est désormais vide
+// Promise { <state>: "fulfilled", <value>: 33 }
+ +

Un itérable vide renverra une promesse qui restera en attente :

+ +
var foreverPendingPromise = Promise.race([]);
+console.log(foreverPendingPromise);
+setTimeout(function(){
+    console.log('La pile est désormais vide');
+    console.log(foreverPendingPromise);
+});
+
+// affichera, dans cet ordre :
+// Promise { <state>: "pending" }
+// La pile est désormais vide
+// Promise { <state>: "pending" }
+
+ +

Si l'itérable contient une ou plusieurs valeurs qui ne sont pas des promesses ou des promesses déjà résolues, Promise.race considèrera la première valeur ainsi trouvée dans l'itérable :

+ +
var foreverPendingPromise = Promise.race([]);
+var alreadyResolvedProm = Promise.resolve(666);
+
+var arr = [foreverPendingPromise, alreadyResolvedProm, "non-Promise value"];
+var arr2 = [foreverPendingPromise, "non-Promise value", Promise.resolve(666)];
+var p = Promise.race(arr);
+var p2 = Promise.race(arr2);
+
+console.log(p);
+console.log(p2);
+setTimeout(function(){
+    console.log('the stack is now empty');
+    console.log(p);
+    console.log(p2);
+});
+
+// affichera dans l'ordre :
+// Promise { <state>: "pending" }
+// Promise { <state>: "pending" }
+// the stack is now empty
+// Promise { <state>: "fulfilled", <value>: 666 }
+// Promise { <state>: "fulfilled", <value>: "non-Promise value" }
+
+ +

Utilisation de Promise.race – exemples avec setTimeout

+ +
var p1 = new Promise(function(resolve, reject) {
+    setTimeout(resolve, 500, "un");
+});
+var p2 = new Promise(function(resolve, reject) {
+    setTimeout(resolve, 100, "deux");
+});
+
+Promise.race([p1, p2]).then(function(value) {
+  console.log(value); // "deux"
+  // Les deux promesses sont résolues mais p2 est plus rapide
+});
+
+var p3 = new Promise(function(resolve, reject) {
+    setTimeout(resolve, 100, "trois");
+});
+var p4 = new Promise(function(resolve, reject) {
+    setTimeout(reject, 500, "quatre");
+});
+
+Promise.race([p3, p4]).then(function(value) {
+  console.log(value); // "trois"
+  // p3 est plus rapide et entraîne la résolution de la promesse de compétition
+}, function(reason) {
+  // N'est pas appelée
+});
+
+var p5 = new Promise(function(resolve, reject) {
+    setTimeout(resolve, 500, "cinq");
+});
+var p6 = new Promise(function(resolve, reject) {
+    setTimeout(reject, 100, "six");
+});
+
+Promise.race([p5, p6]).then(function(value) {
+  // N'est pas appelée
+}, function(reason) {
+  console.log(reason); // "six"
+  // p6 est plus rapide et rejète la promesse de compétition
+});
+
+ +
+

Note : voir la documentation sur setTimeout.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.race', 'Promise.race')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.race")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/reject/index.html b/files/fr/web/javascript/reference/global_objects/promise/reject/index.html deleted file mode 100644 index e8fbfe5b5c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/reject/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Promise.reject() -slug: Web/JavaScript/Reference/Global_Objects/Promise/reject -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Promise - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/reject ---- -
{{JSRef}}
- -

La méthode Promise.reject(raison) renvoie un objet Promise qui est rejeté (la promesse n'est pas tenue) à cause d'une raison donnée.

- -
{{EmbedInteractiveExample("pages/js/promise-reject.html")}}
- -

Syntaxe

- -
Promise.reject(raison);
- -

Paramètres

- -
-
raison
-
La raison pour laquelle la Promise n'a pas été tenue.
-
- -

Valeur de retour

- -

Une promesse ({{jsxref("Promise")}}) qui est rompue avec la raison passée en argument.

- -

Description

- -

La fonction statique Promise.reject renvoie une Promise qui est rejetée. Pour faciliter le débogage (comprendre plus rapidement le problème et sélectionner une erreur précise), il peut être utile que l'argument raison soit une instance d'{{jsxref("Error")}}.

- -

Exemples

- -
Promise.reject(new Error("échec")).then(function() {
-  // n'est pas appelée
-}, function(erreur) {
-  console.log(erreur); // Analyse de la pile d'appels
-});
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.reject")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/reject/index.md b/files/fr/web/javascript/reference/global_objects/promise/reject/index.md new file mode 100644 index 0000000000..e8fbfe5b5c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/reject/index.md @@ -0,0 +1,76 @@ +--- +title: Promise.reject() +slug: Web/JavaScript/Reference/Global_Objects/Promise/reject +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/reject +--- +
{{JSRef}}
+ +

La méthode Promise.reject(raison) renvoie un objet Promise qui est rejeté (la promesse n'est pas tenue) à cause d'une raison donnée.

+ +
{{EmbedInteractiveExample("pages/js/promise-reject.html")}}
+ +

Syntaxe

+ +
Promise.reject(raison);
+ +

Paramètres

+ +
+
raison
+
La raison pour laquelle la Promise n'a pas été tenue.
+
+ +

Valeur de retour

+ +

Une promesse ({{jsxref("Promise")}}) qui est rompue avec la raison passée en argument.

+ +

Description

+ +

La fonction statique Promise.reject renvoie une Promise qui est rejetée. Pour faciliter le débogage (comprendre plus rapidement le problème et sélectionner une erreur précise), il peut être utile que l'argument raison soit une instance d'{{jsxref("Error")}}.

+ +

Exemples

+ +
Promise.reject(new Error("échec")).then(function() {
+  // n'est pas appelée
+}, function(erreur) {
+  console.log(erreur); // Analyse de la pile d'appels
+});
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.reject")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/resolve/index.html b/files/fr/web/javascript/reference/global_objects/promise/resolve/index.html deleted file mode 100644 index 7f9e6d1ea9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/resolve/index.html +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Promise.resolve() -slug: Web/JavaScript/Reference/Global_Objects/Promise/resolve -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Promise - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/resolve ---- -
{{JSRef}}
- -

La méthode Promise.resolve(valeur) renvoie un objet {{jsxref("Promise")}} qui est résolu avec la valeur donnée. Si cette valeur est une promesse, la promesse est renvoyée, si la valeur possède une méthode {{jsxref("Promise.then","then")}}, la promesse renvoyée « suivra » cette méthode et prendra son état ; sinon, la promesse renvoyée sera tenue avec la valeur.

- -
{{EmbedInteractiveExample("pages/js/promise-resolve.html")}}
- -
-

Attention : Promise.resolve() ne doit pas être appelée sur un objet thenable qui se résout en lui-même. Cela provoquera une récursion infinie et resolve() tentera d'aplatir ce qui ressemble à une promesse imbriquée à l'infini.

-
- -

Syntaxe

- -
Promise.resolve(valeur);
-Promise.resolve(promesse);
-Promise.resolve(suivant);
-
- -

Paramètres

- -
-
valeur
-
L'argument qu'on souhaite résoudre avec cette promesse (Promise). Cet argument peut être un objet Promise ou un objet avec une méthode then à résoudre à la suite.
-
- -

Valeur de retour

- -

Une promesse ({{jsxref("Promise")}}) qui est résolue avec la valeur indiquée en argument ou la promesse passée en argument si celui-ci est une promesse.

- -

Description

- -

La fonction statique Promise.resolve renvoie un objet Promise qui est résolu.

- -

Exemples

- -

Utilisation de la méthode statique Promise.resolve

- -
Promise.resolve("Succès").then(function(valeur) {
-  console.log(valeur); // "Succès"
-}, function(valeur) {
-  // n'est pas appelée
-});
-
- -

Résoudre un tableau

- -
var p = Promise.resolve([1,2,3]);
-p.then(function(v) {
-  console.log(v[0]); // 1
-});
-
- -

Résoudre une autre Promise

- -
var original = Promise.resolve(33);
-var cast = Promise.resolve(original);
-cast.then(function(value) {
-  console.log("value: " + value);
-});
-console.log("original === cast ? " + (original === cast));
-
-// affiche ceci dans la console (dans cet ordre) :
-// original === cast ? true
-// value: 33
-
- -

L'ordre des traces dans la console est dû au fait que les gestionnaires then() sont appelés de façon asynchrone (plus de détails sur then dans cet article).

- -

Résoudre des objets avec then et renvoyer des erreurs

- -
// Résoudre un objet avec then
-var p1 = Promise.resolve({
-  then: function(onFulfill, onReject) { onFulfill("tenue !"); }
-});
-console.log(p1 instanceof Promise) // true, l'objet est transformée en une Promise
-
-p1.then(function(v) {
-    console.log(v); // "tenue !"
-  }, function(e) {
-    // n'est pas appelée
-});
-
-// L'objet avec then renvoie une erreur avant le callback
-// La promesse n'est pas tenue
-var thenable = { then: function(resolve) {
-  throw new TypeError("Renvoi d'erreur");
-  resolve("Résolution ");
-}};
-
-var p2 = Promise.resolve(thenable);
-p2.then(function(v) {
-  // n'est pas appelée
-}, function(e) {
-  console.log(e); // TypeError : Renvoi d'erreur
-});
-
-// L'objet avec then renvoie une erreur après le callback
-// La promesse est tenue
-var thenable = { then: function(resolve) {
-  resolve("Résolue");
-  throw new TypeError("Erreur");
-}};
-
-var p3 = Promise.resolve(thenable);
-p3.then(function(v) {
-  console.log(v); // "Résolue"
-}, function(e) {
-  // n'est pas appelée
-});
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.resolve', 'Promise.resolve')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.resolve")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/resolve/index.md b/files/fr/web/javascript/reference/global_objects/promise/resolve/index.md new file mode 100644 index 0000000000..7f9e6d1ea9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/resolve/index.md @@ -0,0 +1,153 @@ +--- +title: Promise.resolve() +slug: Web/JavaScript/Reference/Global_Objects/Promise/resolve +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Promise + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/resolve +--- +
{{JSRef}}
+ +

La méthode Promise.resolve(valeur) renvoie un objet {{jsxref("Promise")}} qui est résolu avec la valeur donnée. Si cette valeur est une promesse, la promesse est renvoyée, si la valeur possède une méthode {{jsxref("Promise.then","then")}}, la promesse renvoyée « suivra » cette méthode et prendra son état ; sinon, la promesse renvoyée sera tenue avec la valeur.

+ +
{{EmbedInteractiveExample("pages/js/promise-resolve.html")}}
+ +
+

Attention : Promise.resolve() ne doit pas être appelée sur un objet thenable qui se résout en lui-même. Cela provoquera une récursion infinie et resolve() tentera d'aplatir ce qui ressemble à une promesse imbriquée à l'infini.

+
+ +

Syntaxe

+ +
Promise.resolve(valeur);
+Promise.resolve(promesse);
+Promise.resolve(suivant);
+
+ +

Paramètres

+ +
+
valeur
+
L'argument qu'on souhaite résoudre avec cette promesse (Promise). Cet argument peut être un objet Promise ou un objet avec une méthode then à résoudre à la suite.
+
+ +

Valeur de retour

+ +

Une promesse ({{jsxref("Promise")}}) qui est résolue avec la valeur indiquée en argument ou la promesse passée en argument si celui-ci est une promesse.

+ +

Description

+ +

La fonction statique Promise.resolve renvoie un objet Promise qui est résolu.

+ +

Exemples

+ +

Utilisation de la méthode statique Promise.resolve

+ +
Promise.resolve("Succès").then(function(valeur) {
+  console.log(valeur); // "Succès"
+}, function(valeur) {
+  // n'est pas appelée
+});
+
+ +

Résoudre un tableau

+ +
var p = Promise.resolve([1,2,3]);
+p.then(function(v) {
+  console.log(v[0]); // 1
+});
+
+ +

Résoudre une autre Promise

+ +
var original = Promise.resolve(33);
+var cast = Promise.resolve(original);
+cast.then(function(value) {
+  console.log("value: " + value);
+});
+console.log("original === cast ? " + (original === cast));
+
+// affiche ceci dans la console (dans cet ordre) :
+// original === cast ? true
+// value: 33
+
+ +

L'ordre des traces dans la console est dû au fait que les gestionnaires then() sont appelés de façon asynchrone (plus de détails sur then dans cet article).

+ +

Résoudre des objets avec then et renvoyer des erreurs

+ +
// Résoudre un objet avec then
+var p1 = Promise.resolve({
+  then: function(onFulfill, onReject) { onFulfill("tenue !"); }
+});
+console.log(p1 instanceof Promise) // true, l'objet est transformée en une Promise
+
+p1.then(function(v) {
+    console.log(v); // "tenue !"
+  }, function(e) {
+    // n'est pas appelée
+});
+
+// L'objet avec then renvoie une erreur avant le callback
+// La promesse n'est pas tenue
+var thenable = { then: function(resolve) {
+  throw new TypeError("Renvoi d'erreur");
+  resolve("Résolution ");
+}};
+
+var p2 = Promise.resolve(thenable);
+p2.then(function(v) {
+  // n'est pas appelée
+}, function(e) {
+  console.log(e); // TypeError : Renvoi d'erreur
+});
+
+// L'objet avec then renvoie une erreur après le callback
+// La promesse est tenue
+var thenable = { then: function(resolve) {
+  resolve("Résolue");
+  throw new TypeError("Erreur");
+}};
+
+var p3 = Promise.resolve(thenable);
+p3.then(function(v) {
+  console.log(v); // "Résolue"
+}, function(e) {
+  // n'est pas appelée
+});
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.reject', 'Promise.reject')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.resolve', 'Promise.resolve')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.resolve")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/promise/then/index.html b/files/fr/web/javascript/reference/global_objects/promise/then/index.html deleted file mode 100644 index cf5990f1ea..0000000000 --- a/files/fr/web/javascript/reference/global_objects/promise/then/index.html +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: Promise.prototype.then() -slug: Web/JavaScript/Reference/Global_Objects/Promise/then -tags: - - ECMAScript6 - - JavaScript - - Méthode - - Promise - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then -original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/then ---- -
{{JSRef}}
- -

La méthode then() renvoie un objet {{jsxref("Promise")}}. Elle peut prendre jusqu'à deux arguments qui sont deux fonctions callback à utiliser en cas de complétion ou d'échec de la Promise.

- -
{{EmbedInteractiveExample("pages/js/promise-then.html")}}
- - - -
-

Note : Si aucun des deux arguments n'est utilisé ou que les objets fournis ne sont pas des fonctions, une nouvelle promesse est créée sans autre gestionnaire supplémentaire. Si le premier argument est absent ou qu'un objet qui n'est pas une fonction est passé, la nouvelle promesse utilisera la fonction de réussite de la promesse originelle. De même, si le deuxième argument n'est pas passé ou que ce n'est pas une fonction, la nouvelle promesse créée utilisera la fonction de rejet de la promesse appelante.

-
- -

Syntaxe

- -
p.then(siTenue);
-p.then(siTenue, siRejetée);
-
-p.then((valeur) => {
-    // Promesse tenue
-  }, (raison) => {
-    // Rejet de la promesse
-});
-
- -

Paramètres

- - - -
-
siTenue
-
Une {{jsxref("Function","fonction","",1)}} appelée lorsque la Promise est tenue. Cette fonction a un seul argument, la valeur qui a permis de résoudre la promesse. Si siTenue n'est pas une fonction, elle est implicitement remplacée par une fonction « identité » qui renvoie l'argument tel quel.
-
siRejetée {{optional_inline}}
-
Une {{jsxref("Function","fonction","",1)}} appelée lorsque la Promise est rejetée. Cette fonction a un seul argument, la raison pour laquelle la promesse a été rejetée. Si siRejetée n'est pas une fonction, elle est implicitement remplacée par une fonction qui lève une erreur avec la raison passée en argument.
-
- -

Valeur de retour

- -

La méthode then() renvoie une promesse ({{jsxref("Promise")}}) en attente de résolution et dont la valeur est déterminée selon les deux fonctions passées en arguments et qui seront appelées de façon asynchrone :

- - - -

Description

- -

Comme les méthodes then() et {{jsxref("Promise.prototype.catch()")}} renvoient des promesses, on peut enchaîner ces opérations (c'est ce qu'on appelle la composition de promesses, voir l'exemple ci-après).

- -

Exemples

- -

Utilisation de la méthode then()

- -
var p1 = new Promise(function(resolve, reject) {
-  resolve("Succès !");
-  // ou
-  // reject("Erreur !");
-});
-
-p1.then((valeur) => {
-  console.log(valeur); // Succès !
-  }, (raison) => {
-  console.log(raison); // Erreur !
-});
-
- -

Composition - Chaînage

- -

La méthode then() renvoie un objet Promise, ce qui permet d'enchaîner les opération. On peut passer une fonction lambda à then puis utiliser la promesse obtenue pour la passer à la méthode suivante. Dans l'exemple ci-après, on simule un code asynchrone avec la fonction setTimeout.

- -
Promise.resolve("toto")
-  // 1. Première étape, on reçoit "toto" et on le concatène avec
-  //    "truc", ce qui résoud la première étape puis on passe au
-  //    deuxième then
-  .then(function(string) {
-    return new Promise(function(resolve, reject) {
-      setTimeout(function() {
-        string += 'truc';
-        resolve(string);
-      }, 1);
-    });
-  })
-  // 2. Deuxième étape, on reçoit "tototruc" et on enregistre une
-  //    fonction de rappel pour manipuler cette chaîne puis l'imprimer
-  //    dans la console. Avant cela, on passe la chaîne intacte au
-  //    prochain then
-  .then(function(string) {
-    setTimeout(function() {
-      string += 'baz';
-      console.log(string);
-    }, 1)
-    return string;
-  })
-  // 3. On affiche un message sur le code, celui-ci sera affiché
-  //    avant que la chaîne soit traitée dans le bloc précédent
-  //    qui agit comme un bloc asynchrone.
-  .then(function(string) {
-    console.log("Et voilà la dernière, qui risque d'arriver avant la 2e");
-
-    // Ici, la chaîne n'aura pas le morceau 'baz' car la fonction
-    // setTimeout retarde l'exécution du code.
-    console.log(string);
-});
-
- -

Lorsqu'une valeur est simplement renvoyée depuis une fonction lambda then, celle-ci renverra Promise.resolve(<la valeur renvoyée par le gestionnaire appelé>).

- -
var p2 = new Promise(function(resolve, reject) {
-  resolve(1);
-});
-
-p2.then(function(valeur) {
-  console.log(valeur); // 1
-  return valeur + 1;
-  }).then(function(valeur) {
-  console.log(valeur + "- cette utilisation synchrone est un peu inutile");
-  // 2- cette utilisation synchrone est un peu inutile
-});
-
-p2.then(function(valeur) {
-  console.log(valeur); // 1
-});
-
- -

Appeler then() renverra une promesse rompue si la fonction lève une exception ou si elle renvoie une promesse rompue.

- -
Promise.resolve()
-  .then( () => {
-    // Ici .then() lève une exception
-    throw 'Oh zut :( !';
-  })
-  .then( () => {
-    console.log( "Ceci n'est pas appelé." );
-  }, raison => {
-    console.error( 'la fonction siRompue est appelée : ' + raison );
-});
- -

Dans tous les autres cas, un promesse de résolution est renvoyée. Dans l'exemple qui suit, le premier then() renvoie 42 même si la promesse précédente a été rompue :

- -
Promise.reject()
-  .then( () => 99, () => 42 ) // la valeur 42 est renvoyée dans une promesse
-  .then( solution => console.log( 'Résolue avec ' + solution ) ); // Résolue avec 42
- -

En pratique, il est souvent préférable d'attraper les promesses rompues plutôt que d'utiliser la syntaxe de then() avec deux fonctions :

- -
Promise.resolve()
-  .then( () => {
-    // .then() renvoie une promesse rompue
-    throw 'Oh zut !';
-  })
-  .catch( raison => {
-    console.error( 'fonction siRompue appelée : ' + raison );
-  })
-  .then( () => {
-    console.log("Je suis toujours appelée, même si il y a un souci avant");
-  });
- -

Le chaînage peut également être utilisé pour implémenter une fonction utilisant une API basée sur les promesses et encapsuler une autre fonction :

- -
function fetch_current_data() {
-  // L'API fetch renvoie une promesse. Cette fonction
-  // expose une API similaire mais lorsque la promesse
-  // est tenue, on effectue plus de tâches
-  return fetch("current-data.json").then((response) => {
-    if (response.headers.get("content-type") != "application/json") {
-      throw new TypeError();
-    }
-    var j = response.json();
-    // on peut ici manipuler j si besoin
-    return j; // la valeur fournie à l'utilisateur de
-              // fetch_current_data().then()
-  });
-}
-
- -

Si le gestionnaire siTenue renvoie une promesse, la valeur de retour de then() sera alors résolue/rompue par cette promesse.

- -
function resoudrePlusTard(resolve, reject) {
-  setTimeout(function () {
-    resolve(10);
-  }, 1000);
-}
-function romprePlusTard(resolve, reject) {
-  setTimeout(function () {
-    reject(20);
-  }, 1000);
-}
-
-var p1 = Promise.resolve("toto");
-var p2 = p1.then(function() {
-  // On renvoie une nouvelle promesse
-  // qui sera résolue avec la valeur 10
-  // au bout d'une seconde
-  return new Promise(resoudrePlusTard);
-});
-p2.then(function(v) {
-  console.log("tenue", v);
-  // "tenue", 10
-}, function(e) {
-  // ceci n'est pas appelé
-  console.log("rompue", e);
-});
-
-var p3 = p1.then(function() {
-  // Ici, on renvoie une promesse
-  // qui sera rompue avec la valeur
-  // 20 au bout d'une seconde
-  return new Promise(romprePlusTard);
-});
-p3.then(function(v) {
-  // ceci n'est pas appelé
-  console.log("tenue", v);
-}, function(e) {
-  console.log("rompue", e);
-  // "rompue", 20
-});
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.prototype.then', 'Promise.prototype.then')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.prototype.then', 'Promise.prototype.then')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Promise.then")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/promise/then/index.md b/files/fr/web/javascript/reference/global_objects/promise/then/index.md new file mode 100644 index 0000000000..cf5990f1ea --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/promise/then/index.md @@ -0,0 +1,264 @@ +--- +title: Promise.prototype.then() +slug: Web/JavaScript/Reference/Global_Objects/Promise/then +tags: + - ECMAScript6 + - JavaScript + - Méthode + - Promise + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then +original_slug: Web/JavaScript/Reference/Objets_globaux/Promise/then +--- +
{{JSRef}}
+ +

La méthode then() renvoie un objet {{jsxref("Promise")}}. Elle peut prendre jusqu'à deux arguments qui sont deux fonctions callback à utiliser en cas de complétion ou d'échec de la Promise.

+ +
{{EmbedInteractiveExample("pages/js/promise-then.html")}}
+ + + +
+

Note : Si aucun des deux arguments n'est utilisé ou que les objets fournis ne sont pas des fonctions, une nouvelle promesse est créée sans autre gestionnaire supplémentaire. Si le premier argument est absent ou qu'un objet qui n'est pas une fonction est passé, la nouvelle promesse utilisera la fonction de réussite de la promesse originelle. De même, si le deuxième argument n'est pas passé ou que ce n'est pas une fonction, la nouvelle promesse créée utilisera la fonction de rejet de la promesse appelante.

+
+ +

Syntaxe

+ +
p.then(siTenue);
+p.then(siTenue, siRejetée);
+
+p.then((valeur) => {
+    // Promesse tenue
+  }, (raison) => {
+    // Rejet de la promesse
+});
+
+ +

Paramètres

+ + + +
+
siTenue
+
Une {{jsxref("Function","fonction","",1)}} appelée lorsque la Promise est tenue. Cette fonction a un seul argument, la valeur qui a permis de résoudre la promesse. Si siTenue n'est pas une fonction, elle est implicitement remplacée par une fonction « identité » qui renvoie l'argument tel quel.
+
siRejetée {{optional_inline}}
+
Une {{jsxref("Function","fonction","",1)}} appelée lorsque la Promise est rejetée. Cette fonction a un seul argument, la raison pour laquelle la promesse a été rejetée. Si siRejetée n'est pas une fonction, elle est implicitement remplacée par une fonction qui lève une erreur avec la raison passée en argument.
+
+ +

Valeur de retour

+ +

La méthode then() renvoie une promesse ({{jsxref("Promise")}}) en attente de résolution et dont la valeur est déterminée selon les deux fonctions passées en arguments et qui seront appelées de façon asynchrone :

+ + + +

Description

+ +

Comme les méthodes then() et {{jsxref("Promise.prototype.catch()")}} renvoient des promesses, on peut enchaîner ces opérations (c'est ce qu'on appelle la composition de promesses, voir l'exemple ci-après).

+ +

Exemples

+ +

Utilisation de la méthode then()

+ +
var p1 = new Promise(function(resolve, reject) {
+  resolve("Succès !");
+  // ou
+  // reject("Erreur !");
+});
+
+p1.then((valeur) => {
+  console.log(valeur); // Succès !
+  }, (raison) => {
+  console.log(raison); // Erreur !
+});
+
+ +

Composition - Chaînage

+ +

La méthode then() renvoie un objet Promise, ce qui permet d'enchaîner les opération. On peut passer une fonction lambda à then puis utiliser la promesse obtenue pour la passer à la méthode suivante. Dans l'exemple ci-après, on simule un code asynchrone avec la fonction setTimeout.

+ +
Promise.resolve("toto")
+  // 1. Première étape, on reçoit "toto" et on le concatène avec
+  //    "truc", ce qui résoud la première étape puis on passe au
+  //    deuxième then
+  .then(function(string) {
+    return new Promise(function(resolve, reject) {
+      setTimeout(function() {
+        string += 'truc';
+        resolve(string);
+      }, 1);
+    });
+  })
+  // 2. Deuxième étape, on reçoit "tototruc" et on enregistre une
+  //    fonction de rappel pour manipuler cette chaîne puis l'imprimer
+  //    dans la console. Avant cela, on passe la chaîne intacte au
+  //    prochain then
+  .then(function(string) {
+    setTimeout(function() {
+      string += 'baz';
+      console.log(string);
+    }, 1)
+    return string;
+  })
+  // 3. On affiche un message sur le code, celui-ci sera affiché
+  //    avant que la chaîne soit traitée dans le bloc précédent
+  //    qui agit comme un bloc asynchrone.
+  .then(function(string) {
+    console.log("Et voilà la dernière, qui risque d'arriver avant la 2e");
+
+    // Ici, la chaîne n'aura pas le morceau 'baz' car la fonction
+    // setTimeout retarde l'exécution du code.
+    console.log(string);
+});
+
+ +

Lorsqu'une valeur est simplement renvoyée depuis une fonction lambda then, celle-ci renverra Promise.resolve(<la valeur renvoyée par le gestionnaire appelé>).

+ +
var p2 = new Promise(function(resolve, reject) {
+  resolve(1);
+});
+
+p2.then(function(valeur) {
+  console.log(valeur); // 1
+  return valeur + 1;
+  }).then(function(valeur) {
+  console.log(valeur + "- cette utilisation synchrone est un peu inutile");
+  // 2- cette utilisation synchrone est un peu inutile
+});
+
+p2.then(function(valeur) {
+  console.log(valeur); // 1
+});
+
+ +

Appeler then() renverra une promesse rompue si la fonction lève une exception ou si elle renvoie une promesse rompue.

+ +
Promise.resolve()
+  .then( () => {
+    // Ici .then() lève une exception
+    throw 'Oh zut :( !';
+  })
+  .then( () => {
+    console.log( "Ceci n'est pas appelé." );
+  }, raison => {
+    console.error( 'la fonction siRompue est appelée : ' + raison );
+});
+ +

Dans tous les autres cas, un promesse de résolution est renvoyée. Dans l'exemple qui suit, le premier then() renvoie 42 même si la promesse précédente a été rompue :

+ +
Promise.reject()
+  .then( () => 99, () => 42 ) // la valeur 42 est renvoyée dans une promesse
+  .then( solution => console.log( 'Résolue avec ' + solution ) ); // Résolue avec 42
+ +

En pratique, il est souvent préférable d'attraper les promesses rompues plutôt que d'utiliser la syntaxe de then() avec deux fonctions :

+ +
Promise.resolve()
+  .then( () => {
+    // .then() renvoie une promesse rompue
+    throw 'Oh zut !';
+  })
+  .catch( raison => {
+    console.error( 'fonction siRompue appelée : ' + raison );
+  })
+  .then( () => {
+    console.log("Je suis toujours appelée, même si il y a un souci avant");
+  });
+ +

Le chaînage peut également être utilisé pour implémenter une fonction utilisant une API basée sur les promesses et encapsuler une autre fonction :

+ +
function fetch_current_data() {
+  // L'API fetch renvoie une promesse. Cette fonction
+  // expose une API similaire mais lorsque la promesse
+  // est tenue, on effectue plus de tâches
+  return fetch("current-data.json").then((response) => {
+    if (response.headers.get("content-type") != "application/json") {
+      throw new TypeError();
+    }
+    var j = response.json();
+    // on peut ici manipuler j si besoin
+    return j; // la valeur fournie à l'utilisateur de
+              // fetch_current_data().then()
+  });
+}
+
+ +

Si le gestionnaire siTenue renvoie une promesse, la valeur de retour de then() sera alors résolue/rompue par cette promesse.

+ +
function resoudrePlusTard(resolve, reject) {
+  setTimeout(function () {
+    resolve(10);
+  }, 1000);
+}
+function romprePlusTard(resolve, reject) {
+  setTimeout(function () {
+    reject(20);
+  }, 1000);
+}
+
+var p1 = Promise.resolve("toto");
+var p2 = p1.then(function() {
+  // On renvoie une nouvelle promesse
+  // qui sera résolue avec la valeur 10
+  // au bout d'une seconde
+  return new Promise(resoudrePlusTard);
+});
+p2.then(function(v) {
+  console.log("tenue", v);
+  // "tenue", 10
+}, function(e) {
+  // ceci n'est pas appelé
+  console.log("rompue", e);
+});
+
+var p3 = p1.then(function() {
+  // Ici, on renvoie une promesse
+  // qui sera rompue avec la valeur
+  // 20 au bout d'une seconde
+  return new Promise(romprePlusTard);
+});
+p3.then(function(v) {
+  // ceci n'est pas appelé
+  console.log("tenue", v);
+}, function(e) {
+  console.log("rompue", e);
+  // "rompue", 20
+});
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-promise.prototype.then', 'Promise.prototype.then')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-promise.prototype.then', 'Promise.prototype.then')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Promise.then")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/index.html b/files/fr/web/javascript/reference/global_objects/proxy/index.html deleted file mode 100644 index d02e303881..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/index.html +++ /dev/null @@ -1,406 +0,0 @@ ---- -title: Proxy -slug: Web/JavaScript/Reference/Global_Objects/Proxy -tags: - - ECMAScript 2015 - - JavaScript - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy ---- -
{{JSRef}}
- -

L'objet Proxy est utilisé afin de définir un comportement sur mesure pour certaines opérations fondamentales (par exemple, l'accès aux propriétés, les affectations, les énumérations, les appels de fonctions, etc.).

- -

Terminologie

- -
-
gestionnaire (handler)
-
Un objet qui contient les trappes qui intercepteront les opérations.
-
trappes
-
Les méthodes qui fournissent l'accès aux propriétés. Ce concept est analogue aux trappes utilisées dans les systèmes d'exploitations.
-
cible
-
L'objet virtualisé par le proxy. Il est souvent utilisé comme objet de stockage. Les invariants (c'est-à-dire les éléments de sémantique qui restent inchangés) relatifs à la non-extensibilité et au caractère non-configurable des propriétés sont vérifiés par rapport à la cible.
-
- -

Syntaxe

- -
var p = new Proxy(cible, gestionnaire);
-
- -

Paramètres

- -
-
cible
-
Une cible (qui peut être n'importe quel objet, un tableau, une fonction, ou même un autre proxy) qu'on souhaite envelopper dans un Proxy.
-
gestionnaire
-
Un objet dont les propriétés sont des fonctions qui définissent le comportement du proxy lorsqu'on utilise une opération sur celui-ci.
-
- -

Méthodes

- -
-
{{jsxref("Proxy.revocable()")}}
-
Permet de créer un objet Proxy révocable.
-
- -

Méthodes pour le gestionnaire

- -

L'objet utilisé comme gestionnaire regroupe les différentes fonctions « trappes » pour le Proxy.

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy/handler', 'Méthodes') }}
- -

Exemples

- -

Exemple simple

- -

Dans ce court exemple, on renvoie le nombre 37 comme valeur par défaut lorsque la propriété nommée n'est pas présente dans l'objet. Pour cela, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/get","get")}}.

- -
var handler = {
-    get: function(obj, prop){
-        return prop in obj?
-            obj[prop] :
-            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
-
- -

Proxy « invisible »

- -

Dans cet exemple, le proxy transfère toutes les opérations qui sont appliquées à l'objet cible.

- -
var cible = {};
-var p = new Proxy(cible, {});
-
-p.a = 37; // L'opération est transmise à la cible par le proxy
-
-console.log(cible.a); // 37. L'opération a bien été transmise
-
- -

Validation

- -

En utilisant un Proxy, il devient simple de valider les valeurs passées à un objet. Dans cet exemple, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

- -
let validateur = {
-  set: function(obj, prop, valeur) {
-    if (prop === 'âge') {
-      if (!Number.isInteger(valeur)) {
-        throw new TypeError('Cet âge n\'est pas un entier.');
-      }
-      if (valeur > 200) {
-        throw new RangeError('Cet âge semble invalide.');
-      }
-    }
-
-    // Le comportement par défaut : enregistrer la valeur
-    obj[prop] = valeur;
-
-    // On indique le succès de l'opération
-    return true;
-  }
-};
-
-let personne = new Proxy({}, validateur);
-
-personne.âge = 100;
-console.log(personne.âge); // 100
-personne.âge = 'jeune';    // lève une exception
-personne.âge = 300;        // lève une exception
-
- -

Étendre un constructeur

- -

En utilisant une fonction proxy, on peut étendre un constructeur avec un nouveau constructeur. Dans cet exemple, on utilise les gestionnaires correspondants à {{jsxref("Objets_globaux/Proxy/handler/construct","construct")}} et {{jsxref("Objets_globaux/Proxy/handler/apply","apply")}}.

- -
function étendre(sup,base) {
-  var descripteur = Object.getOwnPropertyDescriptor(
-    base.prototype, "constructor"
-  );
-  base.prototype = Object.create(sup.prototype);
-  var gestionnaire = {
-    construct: function(cible, args) {
-      var obj = Object.create(base.prototype);
-      this.apply(cible,obj,args);
-      return obj;
-    },
-    apply: function(cible, that, args) {
-      sup.apply(that,args);
-      base.apply(that,args);
-    }
-  };
-  var proxy = new Proxy(base,gestionnaire);
-  descripteur.value = proxy;
-  Object.defineProperty(base.prototype, "constructor", descripteur);
-  return proxy;
-}
-
-var Personne = function(nom){
-  this.nom = nom;
-};
-
-var Garçon = étendre(Personne, function(nom, âge) {
-  this.âge = âge;
-});
-
-Garçon.prototype.genre = "M";
-
-var Pierre = new Garçon("Pierre", 13);
-console.log(Pierre.genre);  // "M"
-console.log(Pierre.nom);  // "Pierre"
-console.log(Pierre.âge);  // 13
- -

Manipuler les nœuds DOM

- -

Parfois, on veut passer un attribut ou un nom de classe entre deux éléments différents. Dans cet exemple, on utilise le gestionnaire lié à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

- -
let vue = new Proxy({
-  selected: null
-},
-{
-  set: function(obj, prop, nouvelleValeur) {
-    let ancienneValeur = obj[prop];
-
-    if (prop === 'selected') {
-      if (ancienneValeur) {
-        ancienneValeur.setAttribute('aria-selected', 'false');
-      }
-      if (nouvelleValeur) {
-        nouvelleValeur.setAttribute('aria-selected', 'true');
-      }
-    }
-
-    // Le comportement par défaut : enregistrer la valeur
-    obj[prop] = nouvelleValeur;
-
-    // On indique le succès de l'opération
-    return true;
-  }
-});
-
-let i1 = vue.selected = document.getElementById('item-1');
-console.log(i1.getAttribute('aria-selected')); // 'true'
-
-let i2 = vue.selected = document.getElementById('item-2');
-console.log(i1.getAttribute('aria-selected')); // 'false'
-console.log(i2.getAttribute('aria-selected')); // 'true'
-
- -

Corriger une valeur et ajouter une propriété supplémentaire

- -

Dans l'exemple qui suit, le proxy produits évalue la valeur passée et la convertit en tableau si besoin. L'objet supporte également la propriété supplémentaire dernierNavigateur à la fois comme accesseur et mutateur.

- -
let produits = new Proxy({
-  navigateurs: ['Internet Explorer', 'Netscape']
-},
-{
-  get: function(obj, prop) {
-    // Une propriété supplémentaire
-    if (prop === 'dernierNavigateur') {
-      return obj.navigateurs[obj.navigateurs.length - 1];
-    }
-
-    // Le comportement par défaut : renvoyer la valeur
-    return obj[prop];
-  },
-  set: function(obj, prop, valeur) {
-    // Une propriété supplémentaire
-    if (prop === 'dernierNavigateur') {
-      obj.navigateurs.push(valeur);
-      return true;
-    }
-
-    // on convertit la valeur si ce n'est pas un tableau
-    if (typeof valeur === 'string') {
-      valeur = [valeur];
-    }
-
-    // Le comportement par défaut : enregistrer la valeur
-    obj[prop] = valeur;
-
-    // On indique le succès de l'opération
-    return true;
-  }
-});
-
-console.log(produits.navigateurs); // ['Internet Explorer', 'Netscape']
-produits.navigateurs = 'Firefox'; // on passe une chaîne
-console.log(produits.navigateurs); // ['Firefox'] <- pas de problème, elle est convertie en tableau
-
-produits.dernierNavigateur = 'Chrome';
-console.log(produits.navigateurs); // ['Firefox', 'Chrome']
-console.log(produits.dernierNavigateur); // 'Chrome'
-
- -

Trouver un élément dans un tableau grâce à sa propriété

- -

Dans cet exemple, ce proxy étend le tableau avec des fonctionnalités supplémentaires. Ici, on définit des propriétés sans utiliser {{jsxref("Objets_globaux/Object/defineProperties","Object.defineProperties")}}. Cet exemple pourrait être adapté pour trouver la ligne d'un tableau à partir d'une de ces cellules (la cible serait alors table.rows).

- -
let produits = new Proxy([
-  { nom: 'Firefox', type: 'navigateur' },
-  { nom: 'SeaMonkey', type: 'navigateur' },
-  { nom: 'Thunderbird', type: 'client mail' }
-],
-{
-  get: function(obj, prop) {
-    // Le comportement par défaut : on renvoie la valeur
-    // prop est généralement un entier
-    if (prop in obj) {
-      return obj[prop];
-    }
-
-    // On obtient le nombre de produits
-    // un alias pour products.length
-    if (prop === 'nombre') {
-      return obj.length;
-    }
-
-    let résultat, types = {};
-
-    for (let produit of obj) {
-      if (produit.nom === prop) {
-        résultat = produit;
-      }
-      if (types[produit.type]) {
-        types[produit.type].push(produit);
-      } else {
-        types[produit.type] = [produit];
-      }
-    }
-
-    // Obtenir un produit grâce à un nom
-    if (résultat) {
-      return résultat;
-    }
-
-    // Obtenir un produit par type
-    if (prop in types) {
-      return types[prop];
-    }
-
-    // Obtenir les types de produits
-    if (prop === 'types') {
-      return Object.keys(types);
-    }
-
-    return undefined;
-  }
-});
-
-console.log(produits[0]); // { nom: 'Firefox', type: 'navigateur' }
-console.log(produits['Firefox']); // { nom: 'Firefox', type: 'navigateur' }
-console.log(produits['Chrome']); // undefined
-console.log(produits.navigateur); // [{ nom: 'Firefox', type: 'navigateur' }, { nom: 'SeaMonkey', type: 'navigateur' }]
-console.log(produits.types); // ['navigateur', 'client mail']
-console.log(produits.nombre); // 3
-
- -

Un exemple avec toutes les trappes

- -

Pour illustrer l'ensemble des trappes, on tente de « proxifier » un objet non natif : l'objet global docCookies créé grâce à cet exemple.

- -
/*
-  var docCookies = ... définir l'objet "docCookies" grâce à
-  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();
-  },
-  "ownKeys": function (oTarget, sKey) {
-    return oTarget.keys();
-  },
-  "has": function (oTarget, sKey) {
-    return sKey in oTarget || oTarget.hasItem(sKey);
-  },
-  "defineProperty": function (oTarget, sKey, oDesc) {
-    if (oDesc && "value" in oDesc) { oTarget.setItem(sKey, oDesc.value); }
-    return oTarget;
-  },
-  "getOwnPropertyDescriptor": function (oTarget, sKey) {
-    var vValue = oTarget.getItem(sKey);
-    return vValue ? {
-      "value": vValue,
-      "writable": true,
-      "enumerable": true,
-      "configurable": false
-    } : undefined;
-  },
-});
-
-/* Cookies test */
-
-console.log(docCookies.mon_cookie1 = "Première valeur");
-console.log(docCookies.getItem("mon_cookie1"));
-
-docCookies.setItem("mon_cookie1", "Valeur modifiée");
-console.log(docCookies.mon_cookie1);
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2016')}}
{{SpecName('ES2017', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2017')}}
{{SpecName('ESDraft', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy", 2)}}

- -

Voir aussi

- - - -

Notes de licence

- -

Certains composants de cette page (texte, exemples) ont été copiés ou adaptés du Wiki ECMAScript dont le contenu est sous licence CC 2.0 BY-NC-SA.

diff --git a/files/fr/web/javascript/reference/global_objects/proxy/index.md b/files/fr/web/javascript/reference/global_objects/proxy/index.md new file mode 100644 index 0000000000..d02e303881 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/index.md @@ -0,0 +1,406 @@ +--- +title: Proxy +slug: Web/JavaScript/Reference/Global_Objects/Proxy +tags: + - ECMAScript 2015 + - JavaScript + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy +--- +
{{JSRef}}
+ +

L'objet Proxy est utilisé afin de définir un comportement sur mesure pour certaines opérations fondamentales (par exemple, l'accès aux propriétés, les affectations, les énumérations, les appels de fonctions, etc.).

+ +

Terminologie

+ +
+
gestionnaire (handler)
+
Un objet qui contient les trappes qui intercepteront les opérations.
+
trappes
+
Les méthodes qui fournissent l'accès aux propriétés. Ce concept est analogue aux trappes utilisées dans les systèmes d'exploitations.
+
cible
+
L'objet virtualisé par le proxy. Il est souvent utilisé comme objet de stockage. Les invariants (c'est-à-dire les éléments de sémantique qui restent inchangés) relatifs à la non-extensibilité et au caractère non-configurable des propriétés sont vérifiés par rapport à la cible.
+
+ +

Syntaxe

+ +
var p = new Proxy(cible, gestionnaire);
+
+ +

Paramètres

+ +
+
cible
+
Une cible (qui peut être n'importe quel objet, un tableau, une fonction, ou même un autre proxy) qu'on souhaite envelopper dans un Proxy.
+
gestionnaire
+
Un objet dont les propriétés sont des fonctions qui définissent le comportement du proxy lorsqu'on utilise une opération sur celui-ci.
+
+ +

Méthodes

+ +
+
{{jsxref("Proxy.revocable()")}}
+
Permet de créer un objet Proxy révocable.
+
+ +

Méthodes pour le gestionnaire

+ +

L'objet utilisé comme gestionnaire regroupe les différentes fonctions « trappes » pour le Proxy.

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy/handler', 'Méthodes') }}
+ +

Exemples

+ +

Exemple simple

+ +

Dans ce court exemple, on renvoie le nombre 37 comme valeur par défaut lorsque la propriété nommée n'est pas présente dans l'objet. Pour cela, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/get","get")}}.

+ +
var handler = {
+    get: function(obj, prop){
+        return prop in obj?
+            obj[prop] :
+            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
+
+ +

Proxy « invisible »

+ +

Dans cet exemple, le proxy transfère toutes les opérations qui sont appliquées à l'objet cible.

+ +
var cible = {};
+var p = new Proxy(cible, {});
+
+p.a = 37; // L'opération est transmise à la cible par le proxy
+
+console.log(cible.a); // 37. L'opération a bien été transmise
+
+ +

Validation

+ +

En utilisant un Proxy, il devient simple de valider les valeurs passées à un objet. Dans cet exemple, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

+ +
let validateur = {
+  set: function(obj, prop, valeur) {
+    if (prop === 'âge') {
+      if (!Number.isInteger(valeur)) {
+        throw new TypeError('Cet âge n\'est pas un entier.');
+      }
+      if (valeur > 200) {
+        throw new RangeError('Cet âge semble invalide.');
+      }
+    }
+
+    // Le comportement par défaut : enregistrer la valeur
+    obj[prop] = valeur;
+
+    // On indique le succès de l'opération
+    return true;
+  }
+};
+
+let personne = new Proxy({}, validateur);
+
+personne.âge = 100;
+console.log(personne.âge); // 100
+personne.âge = 'jeune';    // lève une exception
+personne.âge = 300;        // lève une exception
+
+ +

Étendre un constructeur

+ +

En utilisant une fonction proxy, on peut étendre un constructeur avec un nouveau constructeur. Dans cet exemple, on utilise les gestionnaires correspondants à {{jsxref("Objets_globaux/Proxy/handler/construct","construct")}} et {{jsxref("Objets_globaux/Proxy/handler/apply","apply")}}.

+ +
function étendre(sup,base) {
+  var descripteur = Object.getOwnPropertyDescriptor(
+    base.prototype, "constructor"
+  );
+  base.prototype = Object.create(sup.prototype);
+  var gestionnaire = {
+    construct: function(cible, args) {
+      var obj = Object.create(base.prototype);
+      this.apply(cible,obj,args);
+      return obj;
+    },
+    apply: function(cible, that, args) {
+      sup.apply(that,args);
+      base.apply(that,args);
+    }
+  };
+  var proxy = new Proxy(base,gestionnaire);
+  descripteur.value = proxy;
+  Object.defineProperty(base.prototype, "constructor", descripteur);
+  return proxy;
+}
+
+var Personne = function(nom){
+  this.nom = nom;
+};
+
+var Garçon = étendre(Personne, function(nom, âge) {
+  this.âge = âge;
+});
+
+Garçon.prototype.genre = "M";
+
+var Pierre = new Garçon("Pierre", 13);
+console.log(Pierre.genre);  // "M"
+console.log(Pierre.nom);  // "Pierre"
+console.log(Pierre.âge);  // 13
+ +

Manipuler les nœuds DOM

+ +

Parfois, on veut passer un attribut ou un nom de classe entre deux éléments différents. Dans cet exemple, on utilise le gestionnaire lié à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

+ +
let vue = new Proxy({
+  selected: null
+},
+{
+  set: function(obj, prop, nouvelleValeur) {
+    let ancienneValeur = obj[prop];
+
+    if (prop === 'selected') {
+      if (ancienneValeur) {
+        ancienneValeur.setAttribute('aria-selected', 'false');
+      }
+      if (nouvelleValeur) {
+        nouvelleValeur.setAttribute('aria-selected', 'true');
+      }
+    }
+
+    // Le comportement par défaut : enregistrer la valeur
+    obj[prop] = nouvelleValeur;
+
+    // On indique le succès de l'opération
+    return true;
+  }
+});
+
+let i1 = vue.selected = document.getElementById('item-1');
+console.log(i1.getAttribute('aria-selected')); // 'true'
+
+let i2 = vue.selected = document.getElementById('item-2');
+console.log(i1.getAttribute('aria-selected')); // 'false'
+console.log(i2.getAttribute('aria-selected')); // 'true'
+
+ +

Corriger une valeur et ajouter une propriété supplémentaire

+ +

Dans l'exemple qui suit, le proxy produits évalue la valeur passée et la convertit en tableau si besoin. L'objet supporte également la propriété supplémentaire dernierNavigateur à la fois comme accesseur et mutateur.

+ +
let produits = new Proxy({
+  navigateurs: ['Internet Explorer', 'Netscape']
+},
+{
+  get: function(obj, prop) {
+    // Une propriété supplémentaire
+    if (prop === 'dernierNavigateur') {
+      return obj.navigateurs[obj.navigateurs.length - 1];
+    }
+
+    // Le comportement par défaut : renvoyer la valeur
+    return obj[prop];
+  },
+  set: function(obj, prop, valeur) {
+    // Une propriété supplémentaire
+    if (prop === 'dernierNavigateur') {
+      obj.navigateurs.push(valeur);
+      return true;
+    }
+
+    // on convertit la valeur si ce n'est pas un tableau
+    if (typeof valeur === 'string') {
+      valeur = [valeur];
+    }
+
+    // Le comportement par défaut : enregistrer la valeur
+    obj[prop] = valeur;
+
+    // On indique le succès de l'opération
+    return true;
+  }
+});
+
+console.log(produits.navigateurs); // ['Internet Explorer', 'Netscape']
+produits.navigateurs = 'Firefox'; // on passe une chaîne
+console.log(produits.navigateurs); // ['Firefox'] <- pas de problème, elle est convertie en tableau
+
+produits.dernierNavigateur = 'Chrome';
+console.log(produits.navigateurs); // ['Firefox', 'Chrome']
+console.log(produits.dernierNavigateur); // 'Chrome'
+
+ +

Trouver un élément dans un tableau grâce à sa propriété

+ +

Dans cet exemple, ce proxy étend le tableau avec des fonctionnalités supplémentaires. Ici, on définit des propriétés sans utiliser {{jsxref("Objets_globaux/Object/defineProperties","Object.defineProperties")}}. Cet exemple pourrait être adapté pour trouver la ligne d'un tableau à partir d'une de ces cellules (la cible serait alors table.rows).

+ +
let produits = new Proxy([
+  { nom: 'Firefox', type: 'navigateur' },
+  { nom: 'SeaMonkey', type: 'navigateur' },
+  { nom: 'Thunderbird', type: 'client mail' }
+],
+{
+  get: function(obj, prop) {
+    // Le comportement par défaut : on renvoie la valeur
+    // prop est généralement un entier
+    if (prop in obj) {
+      return obj[prop];
+    }
+
+    // On obtient le nombre de produits
+    // un alias pour products.length
+    if (prop === 'nombre') {
+      return obj.length;
+    }
+
+    let résultat, types = {};
+
+    for (let produit of obj) {
+      if (produit.nom === prop) {
+        résultat = produit;
+      }
+      if (types[produit.type]) {
+        types[produit.type].push(produit);
+      } else {
+        types[produit.type] = [produit];
+      }
+    }
+
+    // Obtenir un produit grâce à un nom
+    if (résultat) {
+      return résultat;
+    }
+
+    // Obtenir un produit par type
+    if (prop in types) {
+      return types[prop];
+    }
+
+    // Obtenir les types de produits
+    if (prop === 'types') {
+      return Object.keys(types);
+    }
+
+    return undefined;
+  }
+});
+
+console.log(produits[0]); // { nom: 'Firefox', type: 'navigateur' }
+console.log(produits['Firefox']); // { nom: 'Firefox', type: 'navigateur' }
+console.log(produits['Chrome']); // undefined
+console.log(produits.navigateur); // [{ nom: 'Firefox', type: 'navigateur' }, { nom: 'SeaMonkey', type: 'navigateur' }]
+console.log(produits.types); // ['navigateur', 'client mail']
+console.log(produits.nombre); // 3
+
+ +

Un exemple avec toutes les trappes

+ +

Pour illustrer l'ensemble des trappes, on tente de « proxifier » un objet non natif : l'objet global docCookies créé grâce à cet exemple.

+ +
/*
+  var docCookies = ... définir l'objet "docCookies" grâce à
+  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();
+  },
+  "ownKeys": function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  "has": function (oTarget, sKey) {
+    return sKey in oTarget || oTarget.hasItem(sKey);
+  },
+  "defineProperty": function (oTarget, sKey, oDesc) {
+    if (oDesc && "value" in oDesc) { oTarget.setItem(sKey, oDesc.value); }
+    return oTarget;
+  },
+  "getOwnPropertyDescriptor": function (oTarget, sKey) {
+    var vValue = oTarget.getItem(sKey);
+    return vValue ? {
+      "value": vValue,
+      "writable": true,
+      "enumerable": true,
+      "configurable": false
+    } : undefined;
+  },
+});
+
+/* Cookies test */
+
+console.log(docCookies.mon_cookie1 = "Première valeur");
+console.log(docCookies.getItem("mon_cookie1"));
+
+docCookies.setItem("mon_cookie1", "Valeur modifiée");
+console.log(docCookies.mon_cookie1);
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2016')}}
{{SpecName('ES2017', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2017')}}
{{SpecName('ESDraft', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy", 2)}}

+ +

Voir aussi

+ + + +

Notes de licence

+ +

Certains composants de cette page (texte, exemples) ont été copiés ou adaptés du Wiki ECMAScript dont le contenu est sous licence CC 2.0 BY-NC-SA.

diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html deleted file mode 100644 index 55606feb4e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: handler.apply() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/apply ---- -
{{JSRef}}
- -

La méthode handler.apply() représente une trappe pour un appel de fonctions.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-apply.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  apply: function(cible, thisArg, listeArguments) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode apply. Ici, this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
thisArg
-
L'argument {{jsxref("Opérateurs/L_opérateur_this","this")}} pour cet appel.
-
listeArguments
-
La liste d'arguments pour l'appel.
-
- -

Valeur de retour

- -

La méthode apply peut renvoyer n'importe quelle valeur.

- -

Description

- -

La méthode handler.apply est une trappe pour l'appel à une fonction.

- -

Interceptions

- -

Cette trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception TypeError :

- - - -

Exemples

- -

Dans l'exemple ci-dessous, on piège un appel de fonction.

- -
var 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
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.apply")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md new file mode 100644 index 0000000000..55606feb4e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md @@ -0,0 +1,115 @@ +--- +title: handler.apply() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/apply +--- +
{{JSRef}}
+ +

La méthode handler.apply() représente une trappe pour un appel de fonctions.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-apply.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  apply: function(cible, thisArg, listeArguments) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode apply. Ici, this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
thisArg
+
L'argument {{jsxref("Opérateurs/L_opérateur_this","this")}} pour cet appel.
+
listeArguments
+
La liste d'arguments pour l'appel.
+
+ +

Valeur de retour

+ +

La méthode apply peut renvoyer n'importe quelle valeur.

+ +

Description

+ +

La méthode handler.apply est une trappe pour l'appel à une fonction.

+ +

Interceptions

+ +

Cette trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception TypeError :

+ + + +

Exemples

+ +

Dans l'exemple ci-dessous, on piège un appel de fonction.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.apply")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html deleted file mode 100644 index dcb569142e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: handler.construct() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/construct ---- -
{{JSRef}}
- -

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Afin que l'opération new puisse être valide sur le proxy correspondant, la cible utilisée doit avoir une méthode interne [[Construct]] (autrement dit, l'instruction new cible doit être valide).

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-construct.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  construct: function(cible, listeArguments, newTarget) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode constructthis est ici lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible.
-
listeArguments
-
La liste des arguments passés au constructeur.
-
newTarget
-
Le constructeur originellement appelé.
-
- -

Valeur de retour

- -

La méthode construct doit renvoyer un objet.

- -

Description

- -

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

- -

Interceptions

- -

Ce trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on piège l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

- -
var p = new Proxy(function() {}, {
-  construct: function(target, argumentsList) {
-    console.log("called: " + argumentsList.join(", "));
-    return { value: argumentsList[0] * 10 };
-  }
-});
-
-console.log(new p(1).value); // "appel sur : 1"
-                             // 10
-
- -

Dans cette version, on ne respecte pas la contrainte d'invariance :

- -
var p = new Proxy(function() {}, {
-  construct: function(target, argumentsList) {
-    return 1;
-  }
-});
-
-new p(); // Une exception TypeError est levée
-
- -

Dans le code qui suit, le proxy n'est pas correctement initialisé. La cible du proxy doit être un constructeur valide qui puisse être utilisé avec new.

- -
var p = new Proxy({}, {
-  construct: function(target, argumentsList, newTarget){
-    return {};
-  }
-});
-
-new p(); // TypeError: p is not a constructor
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.construct")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md new file mode 100644 index 0000000000..dcb569142e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md @@ -0,0 +1,134 @@ +--- +title: handler.construct() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/construct +--- +
{{JSRef}}
+ +

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Afin que l'opération new puisse être valide sur le proxy correspondant, la cible utilisée doit avoir une méthode interne [[Construct]] (autrement dit, l'instruction new cible doit être valide).

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-construct.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  construct: function(cible, listeArguments, newTarget) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode constructthis est ici lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible.
+
listeArguments
+
La liste des arguments passés au constructeur.
+
newTarget
+
Le constructeur originellement appelé.
+
+ +

Valeur de retour

+ +

La méthode construct doit renvoyer un objet.

+ +

Description

+ +

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

+ +

Interceptions

+ +

Ce trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on piège l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

+ +
var p = new Proxy(function() {}, {
+  construct: function(target, argumentsList) {
+    console.log("called: " + argumentsList.join(", "));
+    return { value: argumentsList[0] * 10 };
+  }
+});
+
+console.log(new p(1).value); // "appel sur : 1"
+                             // 10
+
+ +

Dans cette version, on ne respecte pas la contrainte d'invariance :

+ +
var p = new Proxy(function() {}, {
+  construct: function(target, argumentsList) {
+    return 1;
+  }
+});
+
+new p(); // Une exception TypeError est levée
+
+ +

Dans le code qui suit, le proxy n'est pas correctement initialisé. La cible du proxy doit être un constructeur valide qui puisse être utilisé avec new.

+ +
var p = new Proxy({}, {
+  construct: function(target, argumentsList, newTarget){
+    return {};
+  }
+});
+
+new p(); // TypeError: p is not a constructor
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.construct")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html deleted file mode 100644 index f5bdab1aa2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: handler.defineProperty() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/defineProperty ---- -
{{JSRef}}
- -

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-defineproperty.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  defineProperty: function(cible, propriété, descripteur) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode defineProperty. this est ici lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut modifier la description.
-
descripteur
-
Le descripteur de la propriété qui est à modifier ou à définir.
-
- -

Valeur de retour

- -

La méthode defineProperty() doit renvoyer un booléen qui indique si la propriété a correctement été définie sur la cible.

- -

Description

- -

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

- -

Interceptions

- -

Cette trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les contraintes d'invariances suivantes ne sont pas respectées, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans le code suivant, on piège l'appel à {{jsxref("Object.defineProperty()")}}.

- -
var p = new Proxy({}, {
-  defineProperty: function(target, prop, descriptor) {
-    console.log("appelé avec : " + prop);
-  }
-});
-
-var desc = { configurable: true, enumerable: true, value: 10 };
-Object.defineProperty(p, "a", desc); // "appelé avec : a"
-
- -

Lorsqu'on appelle {{jsxref("Object.defineProperty()")}} ou {{jsxref("Reflect.defineProperty()")}}, le descripteur passé à la trappe defineProperty doit respecter une contrainte : seules les propriétés suivants sont utilisables, les propriétés non-standards seront ignorées :

- - - -
var p = new Proxy({}, {
-  defineProperty(target, prop, descriptor) {
-    console.log(descriptor);
-    return Reflect.defineProperty(target, prop, descriptor);
-  }
-});
-
-Object.defineProperty(p, "name, {
-  value: "proxy",
-  type: "custom"
-});
-// { value: "proxy" }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.defineProperty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md new file mode 100644 index 0000000000..f5bdab1aa2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md @@ -0,0 +1,141 @@ +--- +title: handler.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/defineProperty +--- +
{{JSRef}}
+ +

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-defineproperty.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  defineProperty: function(cible, propriété, descripteur) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode defineProperty. this est ici lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut modifier la description.
+
descripteur
+
Le descripteur de la propriété qui est à modifier ou à définir.
+
+ +

Valeur de retour

+ +

La méthode defineProperty() doit renvoyer un booléen qui indique si la propriété a correctement été définie sur la cible.

+ +

Description

+ +

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

+ +

Interceptions

+ +

Cette trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les contraintes d'invariances suivantes ne sont pas respectées, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans le code suivant, on piège l'appel à {{jsxref("Object.defineProperty()")}}.

+ +
var p = new Proxy({}, {
+  defineProperty: function(target, prop, descriptor) {
+    console.log("appelé avec : " + prop);
+  }
+});
+
+var desc = { configurable: true, enumerable: true, value: 10 };
+Object.defineProperty(p, "a", desc); // "appelé avec : a"
+
+ +

Lorsqu'on appelle {{jsxref("Object.defineProperty()")}} ou {{jsxref("Reflect.defineProperty()")}}, le descripteur passé à la trappe defineProperty doit respecter une contrainte : seules les propriétés suivants sont utilisables, les propriétés non-standards seront ignorées :

+ + + +
var p = new Proxy({}, {
+  defineProperty(target, prop, descriptor) {
+    console.log(descriptor);
+    return Reflect.defineProperty(target, prop, descriptor);
+  }
+});
+
+Object.defineProperty(p, "name, {
+  value: "proxy",
+  type: "custom"
+});
+// { value: "proxy" }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.defineProperty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html deleted file mode 100644 index 517b27ca31..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: handler.deleteProperty() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/deleteProperty ---- -
{{JSRef}}
- -

La méthode handler.deleteProperty() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-deleteproperty.html","taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  deleteProperty: function(cible, propriété) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode deleteProperty. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à supprimer.
-
- -

Valeur de retour

- -

La méthode deleteProperty() doit renvoyer un booléen qui indique si oui ou non la propriété a été supprimée.

- -

Description

- -

La méthode handler.deleteProperty() est une trappe permettant d'intercepter les opérations de l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

- -

Interceptions

- -

Cette trappe peut intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invarians suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte les opérations de {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

- -
var p = new Proxy({}, {
-  deleteProperty: function(cible, prop) {
-    console.log("appelée sur : " + prop);
-    return true;
-  }
-});
-
-delete p.a; // "appelée sur : a"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.deleteProperty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md new file mode 100644 index 0000000000..517b27ca31 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md @@ -0,0 +1,110 @@ +--- +title: handler.deleteProperty() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/deleteProperty +--- +
{{JSRef}}
+ +

La méthode handler.deleteProperty() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-deleteproperty.html","taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  deleteProperty: function(cible, propriété) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode deleteProperty. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à supprimer.
+
+ +

Valeur de retour

+ +

La méthode deleteProperty() doit renvoyer un booléen qui indique si oui ou non la propriété a été supprimée.

+ +

Description

+ +

La méthode handler.deleteProperty() est une trappe permettant d'intercepter les opérations de l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

+ +

Interceptions

+ +

Cette trappe peut intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invarians suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte les opérations de {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

+ +
var p = new Proxy({}, {
+  deleteProperty: function(cible, prop) {
+    console.log("appelée sur : " + prop);
+    return true;
+  }
+});
+
+delete p.a; // "appelée sur : a"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.deleteProperty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html deleted file mode 100644 index e8c3fa93d2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: handler.get() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/get ---- -
{{JSRef}}
- -

La méthode handler.get() est une trappe pour intercepter l'accès à la valeur d'une propriété.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-get.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  get: function(cible, propriété, récepteur) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode get. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété qu'on souhaite obtenir.
-
récepteur
-
Le proxy ou un objet qui hérite du proxy.
-
- -

Valeur de retour

- -

La méthode get peut renvoyer n'importe quelle valeur.

- -

Description

- -

La méthode handler.get est une trappe pour intercepter l'accès à une propriété.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple suivant, on intercepte les accès aux propriétés :

- -
var p = new Proxy({}, {
-  get: function(cible, propriété, récepteur) {
-    console.log("appelée : " + propriété);
-    return 10;
-  }
-});
-
-console.log(p.a); // "appelée : a"
-                  // 10
-
- -

Le code suivant ne respecte pas l'invariant :

- -
var obj = {};
-Object.defineProperty(obj, "a", {
-  configurable: false,
-  enumerable: false,
-  value: 10,
-  writable: false
-});
-
-var p = new Proxy(obj, {
-  get: function(cible, propriété) {
-    return 20;
-  }
-});
-
-p.a; // exception TypeError levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ESDraft')}} 
- -

Compatiblité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.get")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md new file mode 100644 index 0000000000..e8c3fa93d2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md @@ -0,0 +1,133 @@ +--- +title: handler.get() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/get +--- +
{{JSRef}}
+ +

La méthode handler.get() est une trappe pour intercepter l'accès à la valeur d'une propriété.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-get.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  get: function(cible, propriété, récepteur) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode get. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété qu'on souhaite obtenir.
+
récepteur
+
Le proxy ou un objet qui hérite du proxy.
+
+ +

Valeur de retour

+ +

La méthode get peut renvoyer n'importe quelle valeur.

+ +

Description

+ +

La méthode handler.get est une trappe pour intercepter l'accès à une propriété.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple suivant, on intercepte les accès aux propriétés :

+ +
var p = new Proxy({}, {
+  get: function(cible, propriété, récepteur) {
+    console.log("appelée : " + propriété);
+    return 10;
+  }
+});
+
+console.log(p.a); // "appelée : a"
+                  // 10
+
+ +

Le code suivant ne respecte pas l'invariant :

+ +
var obj = {};
+Object.defineProperty(obj, "a", {
+  configurable: false,
+  enumerable: false,
+  value: 10,
+  writable: false
+});
+
+var p = new Proxy(obj, {
+  get: function(cible, propriété) {
+    return 20;
+  }
+});
+
+p.a; // exception TypeError levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ESDraft')}} 
+ +

Compatiblité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.get")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html deleted file mode 100644 index 06de12e833..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: handler.getOwnPropertyDescriptor() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getOwnPropertyDescriptor ---- -
{{JSRef}}
- -

La méthode handler.getOwnPropertyDescriptor() est une trappe pour intercepter {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-getownpropertydescriptor.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  getOwnPropertyDescriptor: function(cible, prop) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode getOwnPropertyDescriptor. this est ici lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible
-
prop
-
Le nom de la propriété dont on souhaite obtenir le descripteur.
-
- -

Valeur de retour

- -

La méthode getOwnPropertyDescriptor doit renvoyer un objet ou undefined.

- -

Description

- -

La méthode handler.getOwnPropertyDescriptor() est une trappe pour un proxy afin d'intercepter les opérations effectuées avec {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -
var p = new Proxy({ a: 20 }, {
-  getOwnPropertyDescriptor: function(cible, prop) {
-    console.log("appelée : " + prop);
-    return { configurable: true, enumerable: true, value: 10 };
-  }
-});
-
-console.log(Object.getOwnPropertyDescriptor(p, "a").value); // "appelée : a"
-                                                            // 10
-
- -

L'exemple suivant ne respecte pas un invariant :

- -
var obj = { a: 10 };
-Object.preventExtensions(obj);
-var p = new Proxy(obj, {
-  getOwnPropertyDescriptor: function(cible, prop) {
-    return undefined;
-  }
-});
-
-Object.getOwnPropertyDescriptor(p, "a"); // Une exception TypeError est renvoyée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.getOwnPropertyDescriptor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md new file mode 100644 index 0000000000..06de12e833 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md @@ -0,0 +1,129 @@ +--- +title: handler.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

La méthode handler.getOwnPropertyDescriptor() est une trappe pour intercepter {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-getownpropertydescriptor.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  getOwnPropertyDescriptor: function(cible, prop) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode getOwnPropertyDescriptor. this est ici lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible
+
prop
+
Le nom de la propriété dont on souhaite obtenir le descripteur.
+
+ +

Valeur de retour

+ +

La méthode getOwnPropertyDescriptor doit renvoyer un objet ou undefined.

+ +

Description

+ +

La méthode handler.getOwnPropertyDescriptor() est une trappe pour un proxy afin d'intercepter les opérations effectuées avec {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +
var p = new Proxy({ a: 20 }, {
+  getOwnPropertyDescriptor: function(cible, prop) {
+    console.log("appelée : " + prop);
+    return { configurable: true, enumerable: true, value: 10 };
+  }
+});
+
+console.log(Object.getOwnPropertyDescriptor(p, "a").value); // "appelée : a"
+                                                            // 10
+
+ +

L'exemple suivant ne respecte pas un invariant :

+ +
var obj = { a: 10 };
+Object.preventExtensions(obj);
+var p = new Proxy(obj, {
+  getOwnPropertyDescriptor: function(cible, prop) {
+    return undefined;
+  }
+});
+
+Object.getOwnPropertyDescriptor(p, "a"); // Une exception TypeError est renvoyée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.getOwnPropertyDescriptor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html deleted file mode 100644 index 8df39ee357..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: handler.getPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getPrototypeOf ---- -
{{JSRef}}
- -

La méthode handler.getPrototypeOf() représente une trappe pour la méthode interne [[GetPrototypeOf]].

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-getprototypeof.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(obj, {
-  getPrototypeOf(cible) {
-  ...
-  }
-});
-
- -

Paramètres

- -

Le paramètre suivant est passé à la méthode getPrototypeOf. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode getPrototypeOf doit renvoyer un objet ou null.

- -

Description

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivant ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Utilisation simple

- -
var obj = {};
-var proto = {};
-var gestionnaire = {
-    getPrototypeOf(cible) {
-        console.log(cible === obj);   // true
-        console.log(this === gestionnaire); // true
-        return proto;
-    }
-};
-
-var p = new Proxy(obj, gestionnaire);
-console.log(Object.getPrototypeOf(p) === proto);    // true
-
- -

Cinq façons de déclencher la trappe getPrototypeOf

- -
var obj = {};
-var p = new Proxy(obj, {
-    getPrototypeOf(cible) {
-        return Array.prototype;
-    }
-});
-console.log(
-    Object.getPrototypeOf(p) === Array.prototype,  // true
-    Reflect.getPrototypeOf(p) === Array.prototype, // true
-    p.__proto__ === Array.prototype,               // true
-    Array.prototype.isPrototypeOf(p),              // true
-    p instanceof Array                             // true
-);
-
- -

Deux types d'exceptions

- -
var obj = {};
-var p = new Proxy(obj, {
-    getPrototypeOf(cible) {
-        return "toto";
-    }
-});
-Object.getPrototypeOf(p); // TypeError : "toto" n'est pas un objet ou null
-
-var obj = Object.preventExtensions({});
-var p = new Proxy(obj, {
-    getPrototypeOf(cible) {
-        return {};
-    }
-});
-Object.getPrototypeOf(p); // TypeError : on attend la même valeur pour le prototype
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.getPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md new file mode 100644 index 0000000000..8df39ee357 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md @@ -0,0 +1,151 @@ +--- +title: handler.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getPrototypeOf +--- +
{{JSRef}}
+ +

La méthode handler.getPrototypeOf() représente une trappe pour la méthode interne [[GetPrototypeOf]].

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-getprototypeof.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(obj, {
+  getPrototypeOf(cible) {
+  ...
+  }
+});
+
+ +

Paramètres

+ +

Le paramètre suivant est passé à la méthode getPrototypeOf. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode getPrototypeOf doit renvoyer un objet ou null.

+ +

Description

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivant ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Utilisation simple

+ +
var obj = {};
+var proto = {};
+var gestionnaire = {
+    getPrototypeOf(cible) {
+        console.log(cible === obj);   // true
+        console.log(this === gestionnaire); // true
+        return proto;
+    }
+};
+
+var p = new Proxy(obj, gestionnaire);
+console.log(Object.getPrototypeOf(p) === proto);    // true
+
+ +

Cinq façons de déclencher la trappe getPrototypeOf

+ +
var obj = {};
+var p = new Proxy(obj, {
+    getPrototypeOf(cible) {
+        return Array.prototype;
+    }
+});
+console.log(
+    Object.getPrototypeOf(p) === Array.prototype,  // true
+    Reflect.getPrototypeOf(p) === Array.prototype, // true
+    p.__proto__ === Array.prototype,               // true
+    Array.prototype.isPrototypeOf(p),              // true
+    p instanceof Array                             // true
+);
+
+ +

Deux types d'exceptions

+ +
var obj = {};
+var p = new Proxy(obj, {
+    getPrototypeOf(cible) {
+        return "toto";
+    }
+});
+Object.getPrototypeOf(p); // TypeError : "toto" n'est pas un objet ou null
+
+var obj = Object.preventExtensions({});
+var p = new Proxy(obj, {
+    getPrototypeOf(cible) {
+        return {};
+    }
+});
+Object.getPrototypeOf(p); // TypeError : on attend la même valeur pour le prototype
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.getPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html deleted file mode 100644 index 89861b997d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: handler.has() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/has ---- -
{{JSRef}}
- -

La méthode handler.has() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-has.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  has: function(cible, prop) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode has. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
prop
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut connaître l'existence.
-
- -

Valeur de retour

- -

La méthode has doit renvoyer une valeur booléenne.

- -

Description

- -

La méthode handler.has est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}} :

- -
var p = new Proxy({}, {
-  has: function(cible, prop) {
-    console.log("appelée : " + prop);
-    return true;
-  }
-});
-
-console.log("a" in p); // "appelée : a"
-                       // true
-
- -

L'exemple suivant ne respecte pas un invariant :

- -
var obj = { a: 10 };
-Object.preventExtensions(obj);
-var p = new Proxy(obj, {
-  has: function(cible, prop) {
-    return false;
-  }
-});
-
-"a" in p; // TypeError levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.has")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md new file mode 100644 index 0000000000..89861b997d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md @@ -0,0 +1,127 @@ +--- +title: handler.has() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/has +--- +
{{JSRef}}
+ +

La méthode handler.has() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-has.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  has: function(cible, prop) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode has. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
prop
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut connaître l'existence.
+
+ +

Valeur de retour

+ +

La méthode has doit renvoyer une valeur booléenne.

+ +

Description

+ +

La méthode handler.has est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}} :

+ +
var p = new Proxy({}, {
+  has: function(cible, prop) {
+    console.log("appelée : " + prop);
+    return true;
+  }
+});
+
+console.log("a" in p); // "appelée : a"
+                       // true
+
+ +

L'exemple suivant ne respecte pas un invariant :

+ +
var obj = { a: 10 };
+Object.preventExtensions(obj);
+var p = new Proxy(obj, {
+  has: function(cible, prop) {
+    return false;
+  }
+});
+
+"a" in p; // TypeError levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.has")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html deleted file mode 100644 index fb508680e1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Gestionnaire de Proxy (handler) -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy -tags: - - ECMAScript 2015 - - JavaScript - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy -translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler ---- -
{{JSRef}}
- -

L'objet gestionnaire d'un proxy est un objet qui contient les trappes de captures (traps) pour le  {{jsxref("Proxy", "proxy", "", 1)}}.

- -

Méthodes

- -

Toutes ces trappes sont optionnelles. Si une trappe n'a pas été définie, le comportement par défaut sera de transmettre l'opération à la cible.

- -
-
{{jsxref("Objets_globaux/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
-
Une trappe pour {{jsxref("Object.getPrototypeOf")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
-
Une trappe pour {{jsxref("Object.setPrototypeOf")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/isExtensible", "handler.isExtensible()")}}
-
Une trappe pour {{jsxref("Object.isExtensible")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
-
Une trappe pour {{jsxref("Object.preventExtensions")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
-
Une trappe pour {{jsxref("Object.getOwnPropertyDescriptor")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/defineProperty", "handler.defineProperty()")}}
-
Une trappe pour {{jsxref("Object.defineProperty")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/has", "handler.has()")}}
-
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/get", "handler.get()")}}
-
Une trappe pour l'accès aux valeurs des propriétés.
-
{{jsxref("Objets_globaux/Proxy/handler/set", "handler.set()")}}
-
Une trappe pour la définition des valeurs des propriétés.
-
{{jsxref("Objets_globaux/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
-
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/ownKeys", "handler.ownKeys()")}}
-
Une trappe pour {{jsxref("Object.getOwnPropertyNames")}} et {{jsxref("Object.getOwnPropertySymbols")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/apply", "handler.apply()")}}
-
Une trappe pour l'appel d'une fonction.
-
{{jsxref("Objets_globaux/Proxy/handler/construct", "handler.construct()")}}
-
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.
-
- -

Certaines trappes non standards sont désormais obsolètes et ont été supprimées.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ESDraft')}}La trappe pour enumerate a été retirée.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md new file mode 100644 index 0000000000..fb508680e1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md @@ -0,0 +1,82 @@ +--- +title: Gestionnaire de Proxy (handler) +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +tags: + - ECMAScript 2015 + - JavaScript + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler +--- +
{{JSRef}}
+ +

L'objet gestionnaire d'un proxy est un objet qui contient les trappes de captures (traps) pour le  {{jsxref("Proxy", "proxy", "", 1)}}.

+ +

Méthodes

+ +

Toutes ces trappes sont optionnelles. Si une trappe n'a pas été définie, le comportement par défaut sera de transmettre l'opération à la cible.

+ +
+
{{jsxref("Objets_globaux/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
+
Une trappe pour {{jsxref("Object.getPrototypeOf")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
+
Une trappe pour {{jsxref("Object.setPrototypeOf")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/isExtensible", "handler.isExtensible()")}}
+
Une trappe pour {{jsxref("Object.isExtensible")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
+
Une trappe pour {{jsxref("Object.preventExtensions")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
+
Une trappe pour {{jsxref("Object.getOwnPropertyDescriptor")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/defineProperty", "handler.defineProperty()")}}
+
Une trappe pour {{jsxref("Object.defineProperty")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/has", "handler.has()")}}
+
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/get", "handler.get()")}}
+
Une trappe pour l'accès aux valeurs des propriétés.
+
{{jsxref("Objets_globaux/Proxy/handler/set", "handler.set()")}}
+
Une trappe pour la définition des valeurs des propriétés.
+
{{jsxref("Objets_globaux/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
+
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/ownKeys", "handler.ownKeys()")}}
+
Une trappe pour {{jsxref("Object.getOwnPropertyNames")}} et {{jsxref("Object.getOwnPropertySymbols")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/apply", "handler.apply()")}}
+
Une trappe pour l'appel d'une fonction.
+
{{jsxref("Objets_globaux/Proxy/handler/construct", "handler.construct()")}}
+
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.
+
+ +

Certaines trappes non standards sont désormais obsolètes et ont été supprimées.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ESDraft')}}La trappe pour enumerate a été retirée.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html deleted file mode 100644 index c7fd6613ec..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: handler.isExtensible() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/isExtensible ---- -
{{JSRef}}
- -

La méthode handler.isExtensible() est une trappe pour intercepter les opérations de {{jsxref("Object.isExtensible()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-isextensible.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  isExtensible: function(cible) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode isExtensible. this est ici lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode isExtensible doit renvoyer une valeur booléenne.

- -

Description

- -

La méthode handler.isExtensible() est une trappe pour intercepter {{jsxref("Object.isExtensible()")}}.

- -

Interceptions

- -

Cette trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception  {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte {{jsxref("Object.isExtensible()")}}.

- -
var p = new Proxy({}, {
-  isExtensible: function(cible) {
-    console.log("appelée");
-    return true;
-  }
-});
-
-console.log(Object.isExtensible(p)); // "appelée"
-                                     // true
-
- -

Le code suivante ne respecte pas l'invariant et entraîne donc une exception.

- -
var p = new Proxy({}, {
-  isExtensible: function(cible) {
-    return false;
-  }
-});
-
-Object.isExtensible(p); // TypeError est levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.isExtensible")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md new file mode 100644 index 0000000000..c7fd6613ec --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md @@ -0,0 +1,120 @@ +--- +title: handler.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/isExtensible +--- +
{{JSRef}}
+ +

La méthode handler.isExtensible() est une trappe pour intercepter les opérations de {{jsxref("Object.isExtensible()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-isextensible.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  isExtensible: function(cible) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode isExtensible. this est ici lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode isExtensible doit renvoyer une valeur booléenne.

+ +

Description

+ +

La méthode handler.isExtensible() est une trappe pour intercepter {{jsxref("Object.isExtensible()")}}.

+ +

Interceptions

+ +

Cette trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception  {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte {{jsxref("Object.isExtensible()")}}.

+ +
var p = new Proxy({}, {
+  isExtensible: function(cible) {
+    console.log("appelée");
+    return true;
+  }
+});
+
+console.log(Object.isExtensible(p)); // "appelée"
+                                     // true
+
+ +

Le code suivante ne respecte pas l'invariant et entraîne donc une exception.

+ +
var p = new Proxy({}, {
+  isExtensible: function(cible) {
+    return false;
+  }
+});
+
+Object.isExtensible(p); // TypeError est levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.isExtensible")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html deleted file mode 100644 index 45365d9401..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: handler.ownKeys() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/ownKeys ---- -
{{JSRef}}
- -

La méthode handler.ownKeys() est une trappe pour {{jsxref("Object.getOwnPropertyNames()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-ownkeys.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  ownKeys: function(cible) {
-  }
-});
-
- -

Paramètres

- -

Le paramètre suivant est passé à la méthode ownKeys. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode ownKeys doit renvoyer un objet énumérable.

- -

Description

- -

La méthode handler.ownKeys() est une trappe pour intercepter les opérations de {{jsxref("Object.getOwnPropertyNames()")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple suivant, on intercepte l'action de {{jsxref("Object.getOwnPropertyNames()")}}.

- -
var p = new Proxy({}, {
-  ownKeys: function(target) {
-    console.log("appelée");
-    return ["a", "b", "c"];
-  }
-});
-
-console.log(Object.getOwnPropertyNames(p)); // "appelée"
-                                            // [ "a", "b", "c"]
-
- -

L'exemple suivant ne respecte pas l'ensemble des invariants :

- -
var obj = {};
-Object.defineProperty(obj, "a", {
-  configurable: false,
-  enumerable: true,
-  value: 10 }
-);
-
-var p = new Proxy(obj, {
-  ownKeys: function(cible) {
-    return [123, 12.5, true, false, undefined, null, {}, []];
-  }
-});
-
-console.log(Object.getOwnPropertyNames(p));
-// TypeError est levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.ownKeys")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md new file mode 100644 index 0000000000..45365d9401 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md @@ -0,0 +1,133 @@ +--- +title: handler.ownKeys() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/ownKeys +--- +
{{JSRef}}
+ +

La méthode handler.ownKeys() est une trappe pour {{jsxref("Object.getOwnPropertyNames()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-ownkeys.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  ownKeys: function(cible) {
+  }
+});
+
+ +

Paramètres

+ +

Le paramètre suivant est passé à la méthode ownKeys. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode ownKeys doit renvoyer un objet énumérable.

+ +

Description

+ +

La méthode handler.ownKeys() est une trappe pour intercepter les opérations de {{jsxref("Object.getOwnPropertyNames()")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple suivant, on intercepte l'action de {{jsxref("Object.getOwnPropertyNames()")}}.

+ +
var p = new Proxy({}, {
+  ownKeys: function(target) {
+    console.log("appelée");
+    return ["a", "b", "c"];
+  }
+});
+
+console.log(Object.getOwnPropertyNames(p)); // "appelée"
+                                            // [ "a", "b", "c"]
+
+ +

L'exemple suivant ne respecte pas l'ensemble des invariants :

+ +
var obj = {};
+Object.defineProperty(obj, "a", {
+  configurable: false,
+  enumerable: true,
+  value: 10 }
+);
+
+var p = new Proxy(obj, {
+  ownKeys: function(cible) {
+    return [123, 12.5, true, false, undefined, null, {}, []];
+  }
+});
+
+console.log(Object.getOwnPropertyNames(p));
+// TypeError est levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.ownKeys")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html deleted file mode 100644 index 0add4d9608..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: handler.preventExtensions() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/preventExtensions ---- -
{{JSRef}}
- -

La méthode handler.preventExtensions() est une trappe pour {{jsxref("Object.preventExtensions()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-preventextensions.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  preventExtensions: function(cible) {
-  }
-});
-
- -

Paramètres

- -

Le paramètre suivant est passé à la méthode preventExtensions. this est lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode preventExtensions doit renvoyer une valeur booléenne.

- -

Description

- -

La méthode handler.preventExtensions() est une trappe pour intercepter {{jsxref("Object.preventExtensions()")}}.

- -

Interceptions

- -

Cette trappe peut intercepter les opérations de :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une execption {{jsxref("TypeError")}} :

- - - -

Exemples

- -

On intercepte l'appel à {{jsxref("Object.preventExtensions()")}} dans l'exemple suivant :

- -
var p = new Proxy({}, {
-  preventExtensions: function(cible) {
-    console.log("appelé");
-    Object.preventExtensions(cible);
-    return true;
-  }
-});
-
-console.log(Object.preventExtensions(p)); // "appelé"
-                                          // true
-
- -

Le code suivant ne respecte pas l'invariant :

- -
var p = new Proxy({}, {
-  preventExtensions: function(cible) {
-    return true;
-  }
-});
-
-Object.preventExtensions(p); // TypeError est levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.preventExtensions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md new file mode 100644 index 0000000000..0add4d9608 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md @@ -0,0 +1,121 @@ +--- +title: handler.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/preventExtensions +--- +
{{JSRef}}
+ +

La méthode handler.preventExtensions() est une trappe pour {{jsxref("Object.preventExtensions()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-preventextensions.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  preventExtensions: function(cible) {
+  }
+});
+
+ +

Paramètres

+ +

Le paramètre suivant est passé à la méthode preventExtensions. this est lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode preventExtensions doit renvoyer une valeur booléenne.

+ +

Description

+ +

La méthode handler.preventExtensions() est une trappe pour intercepter {{jsxref("Object.preventExtensions()")}}.

+ +

Interceptions

+ +

Cette trappe peut intercepter les opérations de :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une execption {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

On intercepte l'appel à {{jsxref("Object.preventExtensions()")}} dans l'exemple suivant :

+ +
var p = new Proxy({}, {
+  preventExtensions: function(cible) {
+    console.log("appelé");
+    Object.preventExtensions(cible);
+    return true;
+  }
+});
+
+console.log(Object.preventExtensions(p)); // "appelé"
+                                          // true
+
+ +

Le code suivant ne respecte pas l'invariant :

+ +
var p = new Proxy({}, {
+  preventExtensions: function(cible) {
+    return true;
+  }
+});
+
+Object.preventExtensions(p); // TypeError est levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.preventExtensions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html deleted file mode 100644 index 543e1b4640..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: handler.set() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/set ---- -
{{JSRef}}
- -

La méthode handler.set() est une trappe permettant d'intercepter les opérations visant à définir ou modifier la valeur d'une propriété.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-set.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  set: function(cible, propriété, valeur, récepteur) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode set. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à définir.
-
valeur
-
La nouvelle valeur à définir pour la propriété.
-
récepteur
-
L'objet intialement visé par l'affectation. Généralement ce sera le proxy lui-même. Le gestionnaire set peut également être appelé indirectement, via la chaîne de prototypes ou d'autres façons. Par exemple, si on exécute l'instruction obj.nom = "Jean", et qu'obj n'est pas un proxy ni ne possède de propriété nom mais s'il possède un proxy dans sa chaîne de prototypes, le gestionnaire set sera appelé et obj sera passé en tant que récepteur.
-
- -

Valeur de retour

- -

La méthode set doit renvoyer une valeur booléenne. Elle renvoie true pour indiquer que l'affectation a réussi. Si la méthode set renvoie false et que l'affectation était exécutée dans du code en mode strict, une exception {{jsxref("TypeError")}} sera levée.

- -

Description

- -

La méthode handler.set est une trappe qui permet d'intercepter les opérations qui sont utilisées pour définir ou modifier la valeur d'une propriété.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte la définition d'une nouvelle propriété.

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.set")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md new file mode 100644 index 0000000000..543e1b4640 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md @@ -0,0 +1,121 @@ +--- +title: handler.set() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/set +--- +
{{JSRef}}
+ +

La méthode handler.set() est une trappe permettant d'intercepter les opérations visant à définir ou modifier la valeur d'une propriété.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-set.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  set: function(cible, propriété, valeur, récepteur) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode set. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à définir.
+
valeur
+
La nouvelle valeur à définir pour la propriété.
+
récepteur
+
L'objet intialement visé par l'affectation. Généralement ce sera le proxy lui-même. Le gestionnaire set peut également être appelé indirectement, via la chaîne de prototypes ou d'autres façons. Par exemple, si on exécute l'instruction obj.nom = "Jean", et qu'obj n'est pas un proxy ni ne possède de propriété nom mais s'il possède un proxy dans sa chaîne de prototypes, le gestionnaire set sera appelé et obj sera passé en tant que récepteur.
+
+ +

Valeur de retour

+ +

La méthode set doit renvoyer une valeur booléenne. Elle renvoie true pour indiquer que l'affectation a réussi. Si la méthode set renvoie false et que l'affectation était exécutée dans du code en mode strict, une exception {{jsxref("TypeError")}} sera levée.

+ +

Description

+ +

La méthode handler.set est une trappe qui permet d'intercepter les opérations qui sont utilisées pour définir ou modifier la valeur d'une propriété.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte la définition d'une nouvelle propriété.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.set")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html deleted file mode 100644 index e12a4e6f90..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: handler.setPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/setPrototypeOf ---- -
{{JSRef}}
- -

La méthode handler.setPrototypeOf() est une trappe pour intercepter {{jsxref("Object.setPrototypeOf()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-setprototypeof.html", "taller", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  setPrototypeOf: function(cible, prototype) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode setPrototypeOf. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
prototype
-
Le nouveau prototype de l'objet ou null.
-
- -

Valeur de retour

- -

La méthode setPrototypeOf renvoie true si la propriété interne [[Prototype]] a bien été modifiée et false sinon.

- -

Description

- -

La méthode handler.setPrototypeOf est une trappe utilisée pour intercepter les opérations de {{jsxref("Object.setPrototypeOf()")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Si on souhaite interdire la définition d'un nouveau prototype pour un objet, on peut utiliser une méthode setPrototypeOf qui renvoie false ou qui génère une exception.

- -

Avec cette première approche, toute opération qui voudra modifier le prototype génèrera une exception. On aura par exemple {{jsxref("Object.setPrototypeOf()")}} qui créera et lèvera l'exception TypeError. Si la modification est effectuée par une opération qui ne génère pas d'exception en cas d'échec (comme  {{jsxref("Reflect.setPrototypeOf()")}}), aucune exception ne sera générée.

- -
var handlerReturnsFalse = {
-    setPrototypeOf(target, newProto) {
-        return false;
-    }
-};
-
-var newProto = {}, target = {};
-
-var p1 = new Proxy(target, handlerReturnsFalse);
-Object.setPrototypeOf(p1, newProto);
-// lève une TypeError
-Reflect.setPrototypeOf(p1, newProto);
-// renvoie false
-
- -

Avec cette seconde approche, toute tentative de modification génèrera une exception. On utilisera celle-ci lorsqu'on souhaite qu'une erreur se produisent, y compris pour les opérations qui ne génèrent habituellement pas d'exception ou si on souhaite générer une exception sur mesure.

- -
var handlerThrows = {
-    setPrototypeOf(target, newProto) {
-        throw new Error("erreur custom");
-    }
-};
-
-var newProto = {}, target = {};
-
-var p2 = new Proxy(target, handlerThrows);
-Object.setPrototypeOf(p2, newProto);
-// lève une exception new Error("erreur custom")
-Reflect.setPrototypeOf(p2, newProto);
-// lève une exception new Error("erreur custom")
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.setPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md new file mode 100644 index 0000000000..e12a4e6f90 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md @@ -0,0 +1,133 @@ +--- +title: handler.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/setPrototypeOf +--- +
{{JSRef}}
+ +

La méthode handler.setPrototypeOf() est une trappe pour intercepter {{jsxref("Object.setPrototypeOf()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-setprototypeof.html", "taller", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  setPrototypeOf: function(cible, prototype) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode setPrototypeOf. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
prototype
+
Le nouveau prototype de l'objet ou null.
+
+ +

Valeur de retour

+ +

La méthode setPrototypeOf renvoie true si la propriété interne [[Prototype]] a bien été modifiée et false sinon.

+ +

Description

+ +

La méthode handler.setPrototypeOf est une trappe utilisée pour intercepter les opérations de {{jsxref("Object.setPrototypeOf()")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Si on souhaite interdire la définition d'un nouveau prototype pour un objet, on peut utiliser une méthode setPrototypeOf qui renvoie false ou qui génère une exception.

+ +

Avec cette première approche, toute opération qui voudra modifier le prototype génèrera une exception. On aura par exemple {{jsxref("Object.setPrototypeOf()")}} qui créera et lèvera l'exception TypeError. Si la modification est effectuée par une opération qui ne génère pas d'exception en cas d'échec (comme  {{jsxref("Reflect.setPrototypeOf()")}}), aucune exception ne sera générée.

+ +
var handlerReturnsFalse = {
+    setPrototypeOf(target, newProto) {
+        return false;
+    }
+};
+
+var newProto = {}, target = {};
+
+var p1 = new Proxy(target, handlerReturnsFalse);
+Object.setPrototypeOf(p1, newProto);
+// lève une TypeError
+Reflect.setPrototypeOf(p1, newProto);
+// renvoie false
+
+ +

Avec cette seconde approche, toute tentative de modification génèrera une exception. On utilisera celle-ci lorsqu'on souhaite qu'une erreur se produisent, y compris pour les opérations qui ne génèrent habituellement pas d'exception ou si on souhaite générer une exception sur mesure.

+ +
var handlerThrows = {
+    setPrototypeOf(target, newProto) {
+        throw new Error("erreur custom");
+    }
+};
+
+var newProto = {}, target = {};
+
+var p2 = new Proxy(target, handlerThrows);
+Object.setPrototypeOf(p2, newProto);
+// lève une exception new Error("erreur custom")
+Reflect.setPrototypeOf(p2, newProto);
+// lève une exception new Error("erreur custom")
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.setPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html b/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html deleted file mode 100644 index de489f2172..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Proxy.revocable() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/revocable -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/revocable ---- -
{{JSRef}}
- -

La méthode Proxy.revocable() est utilisée afin de créer un objet {{jsxref("Proxy")}} révocable.

- -

Syntaxe

- -
Proxy.revocable(cible, gestionnaire);
-
- -

Paramètres

- -
{{Page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy", "Paramètres")}}
- -

Valeur de retour

- -

Un nouvel objet Proxy révocable est renvoyé par la méthode.

- -

Description

- -

Un Proxy révocable est un objet qui possède les propriétés suivantes : {proxy: proxy, revoke: revoke}.

- -
-
proxy
-
Un proxy crée avec un appel à new Proxy(cible, gestionnaire).
-
revoke
-
Une fonction sans argument qui permet de désactiver le proxy.
-
- -

Si la fonction revoke() est appelée, le proxy devient inutilisable et toutes les trappes définies via un gestionnaire lèveront une exception {{jsxref("TypeError")}}. Une fois que le proxy est révoqué, il conserve cet état et peut être traité par le ramasse-miettes. D'éventuels appels suivants à revoke() n'auront aucun effet.

- -

Exemples

- -
var révocable = Proxy.revocable({}, {
-  get: function(cible, nom) {
-    return "[[" + nom + "]]";
-  }
-});
-var proxy = révocable.proxy;
-console.log(proxy.toto); // "[[toto]]"
-
-révocable.revoke();
-
-console.log(proxy.toto); // TypeError est levée
-proxy.toto = 1           // TypeError à nouveau
-delete proxy.toto        // TypeError toujours
-typeof proxy             // "object", typeof ne déclenche aucune trappe
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.revocable")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md b/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md new file mode 100644 index 0000000000..de489f2172 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md @@ -0,0 +1,91 @@ +--- +title: Proxy.revocable() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/revocable +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/revocable +--- +
{{JSRef}}
+ +

La méthode Proxy.revocable() est utilisée afin de créer un objet {{jsxref("Proxy")}} révocable.

+ +

Syntaxe

+ +
Proxy.revocable(cible, gestionnaire);
+
+ +

Paramètres

+ +
{{Page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy", "Paramètres")}}
+ +

Valeur de retour

+ +

Un nouvel objet Proxy révocable est renvoyé par la méthode.

+ +

Description

+ +

Un Proxy révocable est un objet qui possède les propriétés suivantes : {proxy: proxy, revoke: revoke}.

+ +
+
proxy
+
Un proxy crée avec un appel à new Proxy(cible, gestionnaire).
+
revoke
+
Une fonction sans argument qui permet de désactiver le proxy.
+
+ +

Si la fonction revoke() est appelée, le proxy devient inutilisable et toutes les trappes définies via un gestionnaire lèveront une exception {{jsxref("TypeError")}}. Une fois que le proxy est révoqué, il conserve cet état et peut être traité par le ramasse-miettes. D'éventuels appels suivants à revoke() n'auront aucun effet.

+ +

Exemples

+ +
var révocable = Proxy.revocable({}, {
+  get: function(cible, nom) {
+    return "[[" + nom + "]]";
+  }
+});
+var proxy = révocable.proxy;
+console.log(proxy.toto); // "[[toto]]"
+
+révocable.revoke();
+
+console.log(proxy.toto); // TypeError est levée
+proxy.toto = 1           // TypeError à nouveau
+delete proxy.toto        // TypeError toujours
+typeof proxy             // "object", typeof ne déclenche aucune trappe
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.revocable")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/rangeerror/index.html b/files/fr/web/javascript/reference/global_objects/rangeerror/index.html deleted file mode 100644 index c1ab8a2d00..0000000000 --- a/files/fr/web/javascript/reference/global_objects/rangeerror/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: RangeError -slug: Web/JavaScript/Reference/Global_Objects/RangeError -tags: - - Error - - JavaScript - - RangeError - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/RangeError -original_slug: Web/JavaScript/Reference/Objets_globaux/RangeError ---- -
{{JSRef}}
- -

L'objet RangeError permet d'indiquer une erreur lorsqu'une valeur fournie n'appartient pas à l'intervalle autorisé.

- -

Syntaxe

- -
new RangeError([message[, nomFichier[, numLigne]]])
- -

Paramètres

- -
-
message
-
Paramètre optionnel. Une description lisible (humainement) de l'erreur.
-
nomFichier {{non-standard_inline}}
-
Paramètre optionnel. Le nom du fichier contenant le code à l'origine de cette exception.
-
numLigne {{non-standard_inline}}
-
Paramètre optionnel. Le numéro de la ligne du code à l'origine de cette exception.
-
- -

Description

- -

Une exception RangeError est levée lorsqu'une valeur est passée comme argument à une fonction qui n'accepte pas de valeurs dans cet intervalle. Par exemple, cela peut être le cas quand on souhaite créer un tableau avec une longueur illégale via {{jsxref("Array")}} ou lorsqu'on passe des valeurs incorrectes aux méthodes {{jsxref("Number.toExponential()")}}, {{jsxref("Number.toFixed()")}} ou {{jsxref("Number.toPrecision()")}}. Cette exception n'est pas limitée aux problèmes d'intervalles numériques et peuvent également se produire lorsqu'on passe une valeur non autorisée à {{jsxref("String.prototype.normalize()")}}.

- -

Propriétés

- -
-
{{jsxref("RangeError.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à toutes les instances de RangeError.
-
- -

Méthodes

- -

L'objet global RangeError ne contient pas de méthodes propres mais héritent de certaines méthodes via la chaîne de prototypes.

- -

Instances de RangeError

- -

Propriétés

- -

{{ page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/RangeError/prototype','Properties') }}

- -

Méthodes

- -

{{ page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/RangeError/prototype','Methods') }}

- -

Exemples

- -

Utiliser RangeError

- -
var MIN = 200;
-var MAX = 300;
-var vérifier = function( num ) {
-  if( num < MIN || num > MAX ) {
-    throw new RangeError( "Le paramètre doit être compris entre " + MIN + " et " + MAX );
-  }
-};
-
-try {
-  vérifier(500);
-}
-catch (e) {
-  if (e instanceof RangeError ){
-    // On gère ce qui se passe en cas d'erreur
-  }
-}
- -

Utiliser RangeError avec des valeurs non-numériques

- -
function verifier(valeur){
-  if(["pomme", "banane", "carotte"].includes(valeur) === false){
-    throw new RangeError("L'argument n'est pas un fruit parmi pomme / banane ou carotte.");
-  }
-}
-
-try {
-  verifier("chou");
-}
-catch(erreur) {
-  if(erreur instanceof RangeError){
-    //On gère ce qui se passe en cas d'erreur
-  }
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.2', 'RangeError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-rangeerror', 'RangeError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-rangeerror', 'RangeError')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/rangeerror/index.md b/files/fr/web/javascript/reference/global_objects/rangeerror/index.md new file mode 100644 index 0000000000..c1ab8a2d00 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/rangeerror/index.md @@ -0,0 +1,141 @@ +--- +title: RangeError +slug: Web/JavaScript/Reference/Global_Objects/RangeError +tags: + - Error + - JavaScript + - RangeError + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/RangeError +original_slug: Web/JavaScript/Reference/Objets_globaux/RangeError +--- +
{{JSRef}}
+ +

L'objet RangeError permet d'indiquer une erreur lorsqu'une valeur fournie n'appartient pas à l'intervalle autorisé.

+ +

Syntaxe

+ +
new RangeError([message[, nomFichier[, numLigne]]])
+ +

Paramètres

+ +
+
message
+
Paramètre optionnel. Une description lisible (humainement) de l'erreur.
+
nomFichier {{non-standard_inline}}
+
Paramètre optionnel. Le nom du fichier contenant le code à l'origine de cette exception.
+
numLigne {{non-standard_inline}}
+
Paramètre optionnel. Le numéro de la ligne du code à l'origine de cette exception.
+
+ +

Description

+ +

Une exception RangeError est levée lorsqu'une valeur est passée comme argument à une fonction qui n'accepte pas de valeurs dans cet intervalle. Par exemple, cela peut être le cas quand on souhaite créer un tableau avec une longueur illégale via {{jsxref("Array")}} ou lorsqu'on passe des valeurs incorrectes aux méthodes {{jsxref("Number.toExponential()")}}, {{jsxref("Number.toFixed()")}} ou {{jsxref("Number.toPrecision()")}}. Cette exception n'est pas limitée aux problèmes d'intervalles numériques et peuvent également se produire lorsqu'on passe une valeur non autorisée à {{jsxref("String.prototype.normalize()")}}.

+ +

Propriétés

+ +
+
{{jsxref("RangeError.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à toutes les instances de RangeError.
+
+ +

Méthodes

+ +

L'objet global RangeError ne contient pas de méthodes propres mais héritent de certaines méthodes via la chaîne de prototypes.

+ +

Instances de RangeError

+ +

Propriétés

+ +

{{ page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/RangeError/prototype','Properties') }}

+ +

Méthodes

+ +

{{ page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/RangeError/prototype','Methods') }}

+ +

Exemples

+ +

Utiliser RangeError

+ +
var MIN = 200;
+var MAX = 300;
+var vérifier = function( num ) {
+  if( num < MIN || num > MAX ) {
+    throw new RangeError( "Le paramètre doit être compris entre " + MIN + " et " + MAX );
+  }
+};
+
+try {
+  vérifier(500);
+}
+catch (e) {
+  if (e instanceof RangeError ){
+    // On gère ce qui se passe en cas d'erreur
+  }
+}
+ +

Utiliser RangeError avec des valeurs non-numériques

+ +
function verifier(valeur){
+  if(["pomme", "banane", "carotte"].includes(valeur) === false){
+    throw new RangeError("L'argument n'est pas un fruit parmi pomme / banane ou carotte.");
+  }
+}
+
+try {
+  verifier("chou");
+}
+catch(erreur) {
+  if(erreur instanceof RangeError){
+    //On gère ce qui se passe en cas d'erreur
+  }
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.2', 'RangeError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-rangeerror', 'RangeError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-rangeerror', 'RangeError')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/referenceerror/index.html b/files/fr/web/javascript/reference/global_objects/referenceerror/index.html deleted file mode 100644 index 7e9f25a051..0000000000 --- a/files/fr/web/javascript/reference/global_objects/referenceerror/index.html +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: ReferenceError -slug: Web/JavaScript/Reference/Global_Objects/ReferenceError -tags: - - Error - - JavaScript - - Object - - Reference - - ReferenceError -translation_of: Web/JavaScript/Reference/Global_Objects/ReferenceError -original_slug: Web/JavaScript/Reference/Objets_globaux/ReferenceError ---- -
{{JSRef}}
- -

L'objet ReferenceError représente une erreur qui se produit lorsqu'il est fait référence à une variable qui n'existe pas.

- -

Syntaxe

- -
new ReferenceError([message[, nomFichier[, numLigne]]])
- -

Paramètres

- -
-
message
-
Paramètre optionnel. Une description de l'erreur, lisible par un être humain.
-
nomFichier {{Non-standard_inline}}
-
Paramètre optionnel. Le nom du fichier qui contient le code à l'origine de l'exception.
-
numLigne {{Non-standard_inline}}
-
Paramètre optionnel. Le numéro de ligne dans le fichier qui contient le code à l'origine de l'exception.
-
- -

Description

- -

Une exception ReferenceError est lancée quand on tente de faire référence à une variable qui n'a pas été déclarée.

- -

Propriétés

- -
-
{{jsxref("ReferenceError.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à un objet ReferenceError.
-
- -

Méthodes

- -

L'objet global ReferenceError ne contient aucune méthode qui lui soit propre. En revanche, il hérite de certaines méthodes via l'héritage et sa chaîne de prototypes.

- -

Instances de ReferenceError

- -

Propriétés

- -
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ReferenceError/prototype','Properties')}}
- -

Méthodes

- -
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ReferenceError/prototype','M.C3.A9thodes')}}
- -

Exemples

- -

Intercepter une exception ReferenceError

- -
try {
-  var a = variableNonDéfinie;
-} catch (e) {
-  console.log(e instanceof ReferenceError); // true
-  console.log(e.message);                   // "variableNonDéfinie 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"
-}
- -

Créer une exception ReferenceError

- -
try {
-  throw new ReferenceError('Bonjour', 'unFichier.js', 10);
-} catch (e) {
-  console.log(e instanceof ReferenceError); // true
-  console.log(e.message);                   // "Bonjour"
-  console.log(e.name);                      // "ReferenceError"
-  console.log(e.fileName);                  // "unFichier.js"
-  console.log(e.lineNumber);                // 10
-  console.log(e.columnNumber);              // 0
-  console.log(e.stack);                     // "@Scratchpad/2:2:9\n"
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.3', 'ReferenceError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/referenceerror/index.md b/files/fr/web/javascript/reference/global_objects/referenceerror/index.md new file mode 100644 index 0000000000..7e9f25a051 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/referenceerror/index.md @@ -0,0 +1,128 @@ +--- +title: ReferenceError +slug: Web/JavaScript/Reference/Global_Objects/ReferenceError +tags: + - Error + - JavaScript + - Object + - Reference + - ReferenceError +translation_of: Web/JavaScript/Reference/Global_Objects/ReferenceError +original_slug: Web/JavaScript/Reference/Objets_globaux/ReferenceError +--- +
{{JSRef}}
+ +

L'objet ReferenceError représente une erreur qui se produit lorsqu'il est fait référence à une variable qui n'existe pas.

+ +

Syntaxe

+ +
new ReferenceError([message[, nomFichier[, numLigne]]])
+ +

Paramètres

+ +
+
message
+
Paramètre optionnel. Une description de l'erreur, lisible par un être humain.
+
nomFichier {{Non-standard_inline}}
+
Paramètre optionnel. Le nom du fichier qui contient le code à l'origine de l'exception.
+
numLigne {{Non-standard_inline}}
+
Paramètre optionnel. Le numéro de ligne dans le fichier qui contient le code à l'origine de l'exception.
+
+ +

Description

+ +

Une exception ReferenceError est lancée quand on tente de faire référence à une variable qui n'a pas été déclarée.

+ +

Propriétés

+ +
+
{{jsxref("ReferenceError.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à un objet ReferenceError.
+
+ +

Méthodes

+ +

L'objet global ReferenceError ne contient aucune méthode qui lui soit propre. En revanche, il hérite de certaines méthodes via l'héritage et sa chaîne de prototypes.

+ +

Instances de ReferenceError

+ +

Propriétés

+ +
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ReferenceError/prototype','Properties')}}
+ +

Méthodes

+ +
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/ReferenceError/prototype','M.C3.A9thodes')}}
+ +

Exemples

+ +

Intercepter une exception ReferenceError

+ +
try {
+  var a = variableNonDéfinie;
+} catch (e) {
+  console.log(e instanceof ReferenceError); // true
+  console.log(e.message);                   // "variableNonDéfinie 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"
+}
+ +

Créer une exception ReferenceError

+ +
try {
+  throw new ReferenceError('Bonjour', 'unFichier.js', 10);
+} catch (e) {
+  console.log(e instanceof ReferenceError); // true
+  console.log(e.message);                   // "Bonjour"
+  console.log(e.name);                      // "ReferenceError"
+  console.log(e.fileName);                  // "unFichier.js"
+  console.log(e.lineNumber);                // 10
+  console.log(e.columnNumber);              // 0
+  console.log(e.stack);                     // "@Scratchpad/2:2:9\n"
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.3', 'ReferenceError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/apply/index.html b/files/fr/web/javascript/reference/global_objects/reflect/apply/index.html deleted file mode 100644 index e341856408..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/apply/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Reflect.apply() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/apply -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/apply -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/apply ---- -
{{JSRef}}
- -

La méthode statique Reflect.apply() permet d'appeler une fonction cible avec des arguments donnés.

- -
{{EmbedInteractiveExample("pages/js/reflect-apply.html")}}
- -

Syntaxe

- -
Reflect.apply(cible, argumentThis, listeArguments)
-
- -

Paramètres

- -
-
cible
-
La fonction cible à appeler.
-
argumentThis
-
La valeur fournie pour this lors de l'appel à cible.
-
listeArguments
-
Un objet semblable à un tableau qui définit les arguments à passer à cible. S'il vaut {{jsxref("null")}} ou {{jsxref("undefined")}}, aucun argument ne sera passé.
-
- -

Valeur de retour

- -

Le résultat de l'appel de la fonction cible indiquée avec la valeur this et les arguments indiqués.

- -

Exceptions levées

- -

Une exception {{jsxref("TypeError")}}, si cible ne peut pas être appelée.

- -

Description

- -

Avec ES5, on utilise généralement {{jsxref("Function.prototype.apply()")}} pour appeler une fonction avec une valeur this donnée et des arguments donnés.

- -
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
- -

Reflect.apply permet de rendre cela plus concis et facile à comprendre.

- -

Exemples

- -
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, "poneys", [3]);
-// "e"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.apply', 'Reflect.apply')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.apply', 'Reflect.apply')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.apply")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/apply/index.md b/files/fr/web/javascript/reference/global_objects/reflect/apply/index.md new file mode 100644 index 0000000000..e341856408 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/apply/index.md @@ -0,0 +1,97 @@ +--- +title: Reflect.apply() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/apply +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/apply +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/apply +--- +
{{JSRef}}
+ +

La méthode statique Reflect.apply() permet d'appeler une fonction cible avec des arguments donnés.

+ +
{{EmbedInteractiveExample("pages/js/reflect-apply.html")}}
+ +

Syntaxe

+ +
Reflect.apply(cible, argumentThis, listeArguments)
+
+ +

Paramètres

+ +
+
cible
+
La fonction cible à appeler.
+
argumentThis
+
La valeur fournie pour this lors de l'appel à cible.
+
listeArguments
+
Un objet semblable à un tableau qui définit les arguments à passer à cible. S'il vaut {{jsxref("null")}} ou {{jsxref("undefined")}}, aucun argument ne sera passé.
+
+ +

Valeur de retour

+ +

Le résultat de l'appel de la fonction cible indiquée avec la valeur this et les arguments indiqués.

+ +

Exceptions levées

+ +

Une exception {{jsxref("TypeError")}}, si cible ne peut pas être appelée.

+ +

Description

+ +

Avec ES5, on utilise généralement {{jsxref("Function.prototype.apply()")}} pour appeler une fonction avec une valeur this donnée et des arguments donnés.

+ +
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
+ +

Reflect.apply permet de rendre cela plus concis et facile à comprendre.

+ +

Exemples

+ +
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, "poneys", [3]);
+// "e"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.apply', 'Reflect.apply')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.apply', 'Reflect.apply')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.apply")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html b/files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html deleted file mode 100644 index 44b3ead149..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Comparaison entre Reflect et les méthodes d'Object -slug: >- - Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods -tags: - - Aperçu - - Intermédiaire - - JavaScript - - Object - - Reflect -translation_of: >- - Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods -original_slug: >- - Web/JavaScript/Reference/Objets_globaux/Reflect/Comparaison_entre_Reflect_et_les_méthodes_Object ---- -
{{jssidebar}}
- -

L'objet {{jsxref("Reflect")}}, introduit avec ES2015, est un objet natif fournissant des méthodes pour s'interfacer avec les objets JavaScript. Certaines fonctions statiques de Reflect ont une correspondance avec les méthodes fournies par {{jsxref("Object")}} et disponibles avant ES2015. Bien que ces méthodes aient un comportement similaire, il y a souvent de subtiles différences entre elles.

- -

Dans ce tableau, nous énumérons les différences entre les méthodes disponibles avec Object et Reflect. Si une méthode n'existe pas dans le cas indiqué, elle sera notée N/A.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nom de la méthodeObjectReflect
defineProperty(){{jsxref("Object.defineProperty()")}} renvoie l'objet qui a été passé à la fonction. Déclenche une exception TypeError si la propriété n'a pu être définie sur l'objet.{{jsxref("Reflect.defineProperty()")}} renvoie true si la propriété a été définie sur l'objet et false sinon.
defineProperties(){{jsxref("Object.defineProperties()")}} renvoie les objets passés à la fonction. Déclenche une exception TypeError si une des propriétés n'a pu être définie.N/A
set()N/A{{jsxref("Reflect.set()")}} renvoie true si la propriété a été définie sur l'objet et false sinon. Déclenche une exception TypeError si la cible n'était pas un Object.
get()N/A{{jsxref("Reflect.get()")}} renvoie la valeur de la propriété. Déclenche une exception TypeError si la cible n'était pas un Object.
deleteProperty()N/A{{jsxref("Reflect.deleteProperty()")}} renvoie true si la propriété a été supprimée de l'objet et false sinon.
getOwnPropertyDescriptor(){{jsxref("Object.getOwnPropertyDescriptor()")}} renvoie un descripteur de la propriété si elle existe sur l'objet passé en argument. Si la propriété n'existe pas, la méthode renvoie undefined. Si la valeur passée en premier argument n'est pas un objet, elle sera automatiquement convertie en un objet.{{jsxref("Reflect.getOwnPropertyDescriptor()")}} renvoie un descripteur de la propriété si elle existe sur l'objet et undefined si elle n'existe pas. Déclenche une exception TypeError si la valeur passée en premier argument n'est pas un objet.
getOwnPropertyDescriptors(){{jsxref("Object.getOwnPropertyDescriptors()")}} renvoie un objet contenant un descripteur de propriété pour chaque objet passé en argument. Renvoie un objet vide si l'objet passé en argument ne contient pas les descripteurs.N/A
getPrototypeOf(){{jsxref("Object.getPrototypeOf()")}} renvoie le prototype de l'objet fourni. Renvoie null s'il n'y a pas de propriétés héritées. En ES5, déclenche une exception TypeError pour les valeurs qui ne sont pas des objets (pour ES6 et ensuite, les valeurs sont converties en objet).{{jsxref("Reflect.getPrototypeOf()")}} renvoie le prototype de l'objet fourni. Renvoie null s'il n'y a pas de propriétés héritées et déclenche une exception TypeError pour les valeurs qui ne sont pas des objets.
setPrototypeOf(){{jsxref("Object.setPrototypeOf()")}} renvoie l'objet fourni si le prototype a pu être défini. Déclenche une exception TypeError si le prototype utilisé n'était pas un objet ou null ou si le prototype de l'objet à modifier n'est pas extensible.{{jsxref("Reflect.setPrototypeOf()")}} renvoie true si le prototype a pu être défini sur l'objet et false sinon (y compris lorsque le prototype n'est pas extensible). Déclenche une exception TypeError si la cible passée n'est pas un objet ou si le prototype à appliquer n'est pas un objet ou n'est pas null.
isExtensible(){{jsxref("Object.isExtensible()")}} renvoie true si l'objet est extensible et false sinon. En ES5, déclenche une exception TypeError si le premier argument fourni n'est pas un objet. Avec ES6 et ensuite, si l'argument fourni est une valeur primitive, il est converti en un objet non-extensible et la méthode renvoie donc false. -

{{jsxref("Reflect.isExtensible()")}} renvoie true si l'objet est extensible et false sinon. Déclenche une exception TypeError si le premier argument n'est pas un objet.

-
preventExtensions() -

{{jsxref("Object.preventExtensions()")}} renvoie l'objet qui a été rendu non-extensible. En ES5, déclenche une exception si l'argument n'est pas un objet. Avec ES6 et ensuite, si l'argument fourni est une valeur primitive, il est converti en un objet non-extensible et c'est cette valeur qui est renvoyée.

-
{{jsxref("Reflect.preventExtensions()")}} renvoie true si l'objet a été rendu non-extensible et false sinon. Déclenche une exception TypeError si l'argument n'est pas un objet.
keys(){{jsxref("Object.keys()")}} renvoie un tableau de chaînes de caractères qui sont les noms des propriétés propres (et énumérables) de l'objet. En ES5, déclenche une exception TypeError si la cible n'est pas un objet. Avec ES6 et les versions suivantes, les valeurs primitives sont converties en objets.N/A
ownKeys()N/A{{jsxref("Reflect.ownKeys()")}} renvoie un tableau des noms des propriétés pour les clés des propriétés propres de de l'objet. Déclenche une exception TypeError si la cible n'est pas un objet.
diff --git a/files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.md b/files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.md new file mode 100644 index 0000000000..44b3ead149 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/comparing_reflect_and_object_methods/index.md @@ -0,0 +1,101 @@ +--- +title: Comparaison entre Reflect et les méthodes d'Object +slug: >- + Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods +tags: + - Aperçu + - Intermédiaire + - JavaScript + - Object + - Reflect +translation_of: >- + Web/JavaScript/Reference/Global_Objects/Reflect/Comparing_Reflect_and_Object_methods +original_slug: >- + Web/JavaScript/Reference/Objets_globaux/Reflect/Comparaison_entre_Reflect_et_les_méthodes_Object +--- +
{{jssidebar}}
+ +

L'objet {{jsxref("Reflect")}}, introduit avec ES2015, est un objet natif fournissant des méthodes pour s'interfacer avec les objets JavaScript. Certaines fonctions statiques de Reflect ont une correspondance avec les méthodes fournies par {{jsxref("Object")}} et disponibles avant ES2015. Bien que ces méthodes aient un comportement similaire, il y a souvent de subtiles différences entre elles.

+ +

Dans ce tableau, nous énumérons les différences entre les méthodes disponibles avec Object et Reflect. Si une méthode n'existe pas dans le cas indiqué, elle sera notée N/A.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Nom de la méthodeObjectReflect
defineProperty(){{jsxref("Object.defineProperty()")}} renvoie l'objet qui a été passé à la fonction. Déclenche une exception TypeError si la propriété n'a pu être définie sur l'objet.{{jsxref("Reflect.defineProperty()")}} renvoie true si la propriété a été définie sur l'objet et false sinon.
defineProperties(){{jsxref("Object.defineProperties()")}} renvoie les objets passés à la fonction. Déclenche une exception TypeError si une des propriétés n'a pu être définie.N/A
set()N/A{{jsxref("Reflect.set()")}} renvoie true si la propriété a été définie sur l'objet et false sinon. Déclenche une exception TypeError si la cible n'était pas un Object.
get()N/A{{jsxref("Reflect.get()")}} renvoie la valeur de la propriété. Déclenche une exception TypeError si la cible n'était pas un Object.
deleteProperty()N/A{{jsxref("Reflect.deleteProperty()")}} renvoie true si la propriété a été supprimée de l'objet et false sinon.
getOwnPropertyDescriptor(){{jsxref("Object.getOwnPropertyDescriptor()")}} renvoie un descripteur de la propriété si elle existe sur l'objet passé en argument. Si la propriété n'existe pas, la méthode renvoie undefined. Si la valeur passée en premier argument n'est pas un objet, elle sera automatiquement convertie en un objet.{{jsxref("Reflect.getOwnPropertyDescriptor()")}} renvoie un descripteur de la propriété si elle existe sur l'objet et undefined si elle n'existe pas. Déclenche une exception TypeError si la valeur passée en premier argument n'est pas un objet.
getOwnPropertyDescriptors(){{jsxref("Object.getOwnPropertyDescriptors()")}} renvoie un objet contenant un descripteur de propriété pour chaque objet passé en argument. Renvoie un objet vide si l'objet passé en argument ne contient pas les descripteurs.N/A
getPrototypeOf(){{jsxref("Object.getPrototypeOf()")}} renvoie le prototype de l'objet fourni. Renvoie null s'il n'y a pas de propriétés héritées. En ES5, déclenche une exception TypeError pour les valeurs qui ne sont pas des objets (pour ES6 et ensuite, les valeurs sont converties en objet).{{jsxref("Reflect.getPrototypeOf()")}} renvoie le prototype de l'objet fourni. Renvoie null s'il n'y a pas de propriétés héritées et déclenche une exception TypeError pour les valeurs qui ne sont pas des objets.
setPrototypeOf(){{jsxref("Object.setPrototypeOf()")}} renvoie l'objet fourni si le prototype a pu être défini. Déclenche une exception TypeError si le prototype utilisé n'était pas un objet ou null ou si le prototype de l'objet à modifier n'est pas extensible.{{jsxref("Reflect.setPrototypeOf()")}} renvoie true si le prototype a pu être défini sur l'objet et false sinon (y compris lorsque le prototype n'est pas extensible). Déclenche une exception TypeError si la cible passée n'est pas un objet ou si le prototype à appliquer n'est pas un objet ou n'est pas null.
isExtensible(){{jsxref("Object.isExtensible()")}} renvoie true si l'objet est extensible et false sinon. En ES5, déclenche une exception TypeError si le premier argument fourni n'est pas un objet. Avec ES6 et ensuite, si l'argument fourni est une valeur primitive, il est converti en un objet non-extensible et la méthode renvoie donc false. +

{{jsxref("Reflect.isExtensible()")}} renvoie true si l'objet est extensible et false sinon. Déclenche une exception TypeError si le premier argument n'est pas un objet.

+
preventExtensions() +

{{jsxref("Object.preventExtensions()")}} renvoie l'objet qui a été rendu non-extensible. En ES5, déclenche une exception si l'argument n'est pas un objet. Avec ES6 et ensuite, si l'argument fourni est une valeur primitive, il est converti en un objet non-extensible et c'est cette valeur qui est renvoyée.

+
{{jsxref("Reflect.preventExtensions()")}} renvoie true si l'objet a été rendu non-extensible et false sinon. Déclenche une exception TypeError si l'argument n'est pas un objet.
keys(){{jsxref("Object.keys()")}} renvoie un tableau de chaînes de caractères qui sont les noms des propriétés propres (et énumérables) de l'objet. En ES5, déclenche une exception TypeError si la cible n'est pas un objet. Avec ES6 et les versions suivantes, les valeurs primitives sont converties en objets.N/A
ownKeys()N/A{{jsxref("Reflect.ownKeys()")}} renvoie un tableau des noms des propriétés pour les clés des propriétés propres de de l'objet. Déclenche une exception TypeError si la cible n'est pas un objet.
diff --git a/files/fr/web/javascript/reference/global_objects/reflect/construct/index.html b/files/fr/web/javascript/reference/global_objects/reflect/construct/index.html deleted file mode 100644 index 3a53b1c6d8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/construct/index.html +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: Reflect.construct() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/construct ---- -
{{JSRef}}
- -

La méthode statique Reflect.construct() agit comme l'opérateur new sous la forme d'une fonction. Elle est équivalente à new cible(...args) et permet d'indiquer un prototype différent.

- -
{{EmbedInteractiveExample("pages/js/reflect-construct.html")}}
- -

Syntaxe

- -
Reflect.construct(cible, listeArguments[, newCible])
-
- -

Paramètres

- -
-
cible
-
La fonction cible à appeler.
-
listeArguments
-
Un objet semblable à un tableau définissant les arguments à passer à cible lors de l'appel. Utiliser {{jsxref("null")}} ou {{jsxref("undefined")}} si aucun argument ne doit être fourni à la fonction.
-
newCible {{optional_inline}}
-
Le constructeur dont le prototype devrait être utilisé. Voir également l'opérateur new.target. Si newCible n'est pas présent, c'est cible qui sera utilisé.
-
- -

Valeur de retour

- -

Un nouvelle instance de la cible indiquée, créée en l'appelant comme un constructeur (ou en appelant newCible si elle est fournie) avec les arguments fournis.

- -

Exceptions levées

- -

Une exception {{jsxref("TypeError")}} si cible ou newCible ne sont pas des constructeurs.

- -

Description

- -

Reflect.construct() permet d'appeler un constructeur avec un nombre d'arguments variable (ce qui peut également être fait avec l'opérateur de décomposition et l'opérateur new).

- -
var obj = new Toto(...args);
-var obj = Reflect.construct(Toto, args);
- -

Exemples

- -

Utiliser Reflect.construct()

- -
var d = Reflect.construct(Date, [1776, 6, 4]);
-d instanceof Date; // true
-d.getFullYear(); // 1776
-
- -

Utiliser le paramètre newCible

- -

Pour plus d'informations sur la création de sous-classes, voir les classes et l'opérateur new.target.

- -
function unConstructeur() {}
-var résultat = Reflect.construct(Array, [], unConstructeur);
-
-Reflect.getPrototypeOf(résultat); // unConstructeur.prototype
-Array.isArray(résultat); // true
-
- -

Une comparaison entre Reflect.construct() et Object.create()

- -

Avant l'apparition de Reflect, on pouvait construire des objets avec une combinaison donnée de consttructeur et de prototype grâce à {{jsxref("Object.create()")}}.

- -
function MaClasseA() {
-  this.name = 'A';
-}
-
-function MaClasseB() {
-  this.name = 'B';
-}
-
-// Avec cette instruction :
-var obj1 = Reflect.construct(MaClasseA, args, MaClasseB);
-
-// on aura le même résultat qu'avec
-var obj2 = Object.create(MaClasseB.prototype);
-MaClasseA.apply(obj2, args);
-
-console.log(obj1.name); // 'A'
-console.log(obj2.name); // 'A'
-
-console.log(obj1 instanceof MaClasseA); // false
-console.log(obj2 instanceof MaClasseA); // false
-
-console.log(obj1 instanceof MaClasseB); // true
-console.log(obj2 instanceof MaClasseB); // true
-
- -

Toutefois, si les résultats sont identiques, il y a une différence notable. Lorsqu'on utilise Object.create() et Function.prototype.apply(), l'opérateur new.target pointe vers undefined dans la fonction utilisée comme constructeur car le mot-clé new n'est pas utilisé à la création de l'objet.

- -

Mais quand on appelle Reflect.construct(), new.target pointe vers la valeur fournie par newCible si ce dernier est fourni ou vers cible sinon.

- -
function MaClasseA() {
-  console.log('MaClasseA');
-  console.log(new.target);
-}
-function MaClasseB() {
-  console.log('MaClasseB');
-  console.log(new.target);
-}
-
-var obj1 = Reflect.construct(MaClasseA, args);
-// Résultat :
-//   MaClasseA
-//   function MaClasseA { ... }
-
-var obj2 = Reflect.construct(MaClasseA, args, MaClasseB);
-// Résultat :
-//   MaClasseA
-//   function MaClasseB { ... }
-
-var obj3 = Object.create(MaClasseB.prototype);
-MaClasseA.apply(obj3, args);
-// Résultat :
-//     MaClasseA
-//     undefined
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.construct")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/construct/index.md b/files/fr/web/javascript/reference/global_objects/reflect/construct/index.md new file mode 100644 index 0000000000..3a53b1c6d8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/construct/index.md @@ -0,0 +1,160 @@ +--- +title: Reflect.construct() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/construct +--- +
{{JSRef}}
+ +

La méthode statique Reflect.construct() agit comme l'opérateur new sous la forme d'une fonction. Elle est équivalente à new cible(...args) et permet d'indiquer un prototype différent.

+ +
{{EmbedInteractiveExample("pages/js/reflect-construct.html")}}
+ +

Syntaxe

+ +
Reflect.construct(cible, listeArguments[, newCible])
+
+ +

Paramètres

+ +
+
cible
+
La fonction cible à appeler.
+
listeArguments
+
Un objet semblable à un tableau définissant les arguments à passer à cible lors de l'appel. Utiliser {{jsxref("null")}} ou {{jsxref("undefined")}} si aucun argument ne doit être fourni à la fonction.
+
newCible {{optional_inline}}
+
Le constructeur dont le prototype devrait être utilisé. Voir également l'opérateur new.target. Si newCible n'est pas présent, c'est cible qui sera utilisé.
+
+ +

Valeur de retour

+ +

Un nouvelle instance de la cible indiquée, créée en l'appelant comme un constructeur (ou en appelant newCible si elle est fournie) avec les arguments fournis.

+ +

Exceptions levées

+ +

Une exception {{jsxref("TypeError")}} si cible ou newCible ne sont pas des constructeurs.

+ +

Description

+ +

Reflect.construct() permet d'appeler un constructeur avec un nombre d'arguments variable (ce qui peut également être fait avec l'opérateur de décomposition et l'opérateur new).

+ +
var obj = new Toto(...args);
+var obj = Reflect.construct(Toto, args);
+ +

Exemples

+ +

Utiliser Reflect.construct()

+ +
var d = Reflect.construct(Date, [1776, 6, 4]);
+d instanceof Date; // true
+d.getFullYear(); // 1776
+
+ +

Utiliser le paramètre newCible

+ +

Pour plus d'informations sur la création de sous-classes, voir les classes et l'opérateur new.target.

+ +
function unConstructeur() {}
+var résultat = Reflect.construct(Array, [], unConstructeur);
+
+Reflect.getPrototypeOf(résultat); // unConstructeur.prototype
+Array.isArray(résultat); // true
+
+ +

Une comparaison entre Reflect.construct() et Object.create()

+ +

Avant l'apparition de Reflect, on pouvait construire des objets avec une combinaison donnée de consttructeur et de prototype grâce à {{jsxref("Object.create()")}}.

+ +
function MaClasseA() {
+  this.name = 'A';
+}
+
+function MaClasseB() {
+  this.name = 'B';
+}
+
+// Avec cette instruction :
+var obj1 = Reflect.construct(MaClasseA, args, MaClasseB);
+
+// on aura le même résultat qu'avec
+var obj2 = Object.create(MaClasseB.prototype);
+MaClasseA.apply(obj2, args);
+
+console.log(obj1.name); // 'A'
+console.log(obj2.name); // 'A'
+
+console.log(obj1 instanceof MaClasseA); // false
+console.log(obj2 instanceof MaClasseA); // false
+
+console.log(obj1 instanceof MaClasseB); // true
+console.log(obj2 instanceof MaClasseB); // true
+
+ +

Toutefois, si les résultats sont identiques, il y a une différence notable. Lorsqu'on utilise Object.create() et Function.prototype.apply(), l'opérateur new.target pointe vers undefined dans la fonction utilisée comme constructeur car le mot-clé new n'est pas utilisé à la création de l'objet.

+ +

Mais quand on appelle Reflect.construct(), new.target pointe vers la valeur fournie par newCible si ce dernier est fourni ou vers cible sinon.

+ +
function MaClasseA() {
+  console.log('MaClasseA');
+  console.log(new.target);
+}
+function MaClasseB() {
+  console.log('MaClasseB');
+  console.log(new.target);
+}
+
+var obj1 = Reflect.construct(MaClasseA, args);
+// Résultat :
+//   MaClasseA
+//   function MaClasseA { ... }
+
+var obj2 = Reflect.construct(MaClasseA, args, MaClasseB);
+// Résultat :
+//   MaClasseA
+//   function MaClasseB { ... }
+
+var obj3 = Object.create(MaClasseB.prototype);
+MaClasseA.apply(obj3, args);
+// Résultat :
+//     MaClasseA
+//     undefined
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.construct")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.html b/files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.html deleted file mode 100644 index 486217295b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Reflect.defineProperty() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/defineProperty ---- -
{{JSRef}}
- -

La méthode statique Reflect.defineProperty() est semblable à {{jsxref("Object.defineProperty()")}} mais renvoie un {{jsxref("Boolean")}}.

- -
{{EmbedInteractiveExample("pages/js/reflect-defineproperty.html")}}
- -

Syntaxe

- -
Reflect.defineProperty(cible, cléPropriété, attributs)
-
- -

Paramètres

- -
-
cible
-
L'objet cible sur lequel on veut définir la propriété.
-
cléPropriété
-
Le nom de la propriété qu'on souhaite définir ou modifier.
-
attributs
-
Les attributs de de la propriété qu'on ajoute ou qu'on modifie.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la propriété a bien été définie.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.defineProperty permet d'ajouter ou de modifier finement une propriété d'un objet. Pour plus de détails, voir la méthode {{jsxref("Object.defineProperty")}} qui est très similaire. Object.defineProperty renvoie l'objet et lève une {{jsxref("TypeError")}} si la propriété n'a pas correctement été définie. Reflect.defineProperty renvoie simplement un {{jsxref("Boolean")}} qui indique si la propriété a été définie avec succès ou non.

- -

Exemples

- -

Utiliser Reflect.defineProperty()

- -
var obj = {};
-Reflect.defineProperty(obj, "x", {value: 7}); // true
-obj.x; // 7
-
- -

Vérifier si la définition de propriété a réussi

- -

{{jsxref("Object.defineProperty")}} renvoie un objet si la définition a réussi ou lève une exception {{jsxref("TypeError")}} sinon, ce qui implique d'utiliser un bloc try...catch pour attraper l'erreur. Reflect.defineProperty renvoie un booléen pour indiquer la réussite ou l'échec, un bloc if...else suffit :

- -
if (Reflect.defineProperty(cible, propriété, attributs)) {
-  // succès
-} else {
-  // échec
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.defineProperty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.md b/files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.md new file mode 100644 index 0000000000..486217295b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/defineproperty/index.md @@ -0,0 +1,97 @@ +--- +title: Reflect.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/defineProperty +--- +
{{JSRef}}
+ +

La méthode statique Reflect.defineProperty() est semblable à {{jsxref("Object.defineProperty()")}} mais renvoie un {{jsxref("Boolean")}}.

+ +
{{EmbedInteractiveExample("pages/js/reflect-defineproperty.html")}}
+ +

Syntaxe

+ +
Reflect.defineProperty(cible, cléPropriété, attributs)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible sur lequel on veut définir la propriété.
+
cléPropriété
+
Le nom de la propriété qu'on souhaite définir ou modifier.
+
attributs
+
Les attributs de de la propriété qu'on ajoute ou qu'on modifie.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la propriété a bien été définie.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.defineProperty permet d'ajouter ou de modifier finement une propriété d'un objet. Pour plus de détails, voir la méthode {{jsxref("Object.defineProperty")}} qui est très similaire. Object.defineProperty renvoie l'objet et lève une {{jsxref("TypeError")}} si la propriété n'a pas correctement été définie. Reflect.defineProperty renvoie simplement un {{jsxref("Boolean")}} qui indique si la propriété a été définie avec succès ou non.

+ +

Exemples

+ +

Utiliser Reflect.defineProperty()

+ +
var obj = {};
+Reflect.defineProperty(obj, "x", {value: 7}); // true
+obj.x; // 7
+
+ +

Vérifier si la définition de propriété a réussi

+ +

{{jsxref("Object.defineProperty")}} renvoie un objet si la définition a réussi ou lève une exception {{jsxref("TypeError")}} sinon, ce qui implique d'utiliser un bloc try...catch pour attraper l'erreur. Reflect.defineProperty renvoie un booléen pour indiquer la réussite ou l'échec, un bloc if...else suffit :

+ +
if (Reflect.defineProperty(cible, propriété, attributs)) {
+  // succès
+} else {
+  // échec
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.defineProperty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.html b/files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.html deleted file mode 100644 index dc9cf06102..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Reflect.deleteProperty() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/deleteProperty ---- -
{{JSRef}}
- -

La méthode statique Reflect.deleteProperty() permet de supprimer des propriétés. Il agit comme l'opérateur delete.

- -
{{EmbedInteractiveExample("pages/js/reflect-deleteproperty.html", "taller")}}
- -

Syntaxe

- -
Reflect.deleteProperty(cible, cléPropriété)
-
- -

Paramètres

- -
-
cible
-
L'objet cible sur lequel on souhaite supprimer la propriété.
-
cléPropriété
-
Le nom de la propriété à supprimer.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la suppression de la propriété s'est bien passée.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.deleteProperty permet de supprimer une propriété d'un objet. Elle renvoie un {{jsxref("Boolean")}} qui indique si la propriété a été supprimée correctement. Cette méthode est très proche de l'opérateur delete.

- -

Exemples

- -
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]
-
-// Renvoie true si aucune propriété correspondante n'existe
-Reflect.deleteProperty({}, "toto"); // true
-
-// Renvoie false si une propriété n'est pas configurable
-Reflect.deleteProperty(Object.freeze({toto: 1}),"toto"); // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.deleteProperty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.md b/files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.md new file mode 100644 index 0000000000..dc9cf06102 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/deleteproperty/index.md @@ -0,0 +1,93 @@ +--- +title: Reflect.deleteProperty() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/deleteProperty +--- +
{{JSRef}}
+ +

La méthode statique Reflect.deleteProperty() permet de supprimer des propriétés. Il agit comme l'opérateur delete.

+ +
{{EmbedInteractiveExample("pages/js/reflect-deleteproperty.html", "taller")}}
+ +

Syntaxe

+ +
Reflect.deleteProperty(cible, cléPropriété)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible sur lequel on souhaite supprimer la propriété.
+
cléPropriété
+
Le nom de la propriété à supprimer.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la suppression de la propriété s'est bien passée.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.deleteProperty permet de supprimer une propriété d'un objet. Elle renvoie un {{jsxref("Boolean")}} qui indique si la propriété a été supprimée correctement. Cette méthode est très proche de l'opérateur delete.

+ +

Exemples

+ +
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]
+
+// Renvoie true si aucune propriété correspondante n'existe
+Reflect.deleteProperty({}, "toto"); // true
+
+// Renvoie false si une propriété n'est pas configurable
+Reflect.deleteProperty(Object.freeze({toto: 1}),"toto"); // false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.deleteProperty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/get/index.html b/files/fr/web/javascript/reference/global_objects/reflect/get/index.html deleted file mode 100644 index cd3bde5bbc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/get/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Reflect.get() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/get -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/get -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/get ---- -
{{JSRef}}
- -

La méthode statique Reflect.get() est une fonction qui permet d'obtenir une propriété d'un objet cible. Elle fonctionne comme (cible[cléPropriété]) mais sous la forme d'une fonction.

- -
{{EmbedInteractiveExample("pages/js/reflect-get.html")}}
- -

Syntaxe

- -
Reflect.get(cible, cléPropriété[, récepteur])
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on souhaite obtenir la propriété.
-
cléPropriété
-
Le nom de la propriété qu'on souhaite obtenir.
-
récepteur {{optional_inline}}
-
La valeur de this à passer à cible si l'accesseur est utilisé. Lorsqu'on l'utilise avec {{jsxref("Proxy")}}, ce peut être un objet qui hérite de la cible.
-
- -

Valeur de retour

- -

La valeur de la propriété.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.get permet d'obtenir une propriété d'un objet. Elle est équivalent à un accesseur de propriété mais sous la forme d'une fonction.

- -

Exemples

- -
// Object
-var obj = { x: 1, y: 2 };
-Reflect.get(obj, "x"); // 1
-
-// Array
-Reflect.get(["zero", "un"], 1); // "un"
-
-// Proxy qui intercepte get
-var x = {p: 1};
-var obj = new Proxy(x, {
-  get(t, k, r) { return k + "truc"; }
-});
-Reflect.get(obj, "toto"); // "tototruc"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.get', 'Reflect.get')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-reflect.get', 'Reflect.get')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.get")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/get/index.md b/files/fr/web/javascript/reference/global_objects/reflect/get/index.md new file mode 100644 index 0000000000..cd3bde5bbc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/get/index.md @@ -0,0 +1,95 @@ +--- +title: Reflect.get() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/get +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/get +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/get +--- +
{{JSRef}}
+ +

La méthode statique Reflect.get() est une fonction qui permet d'obtenir une propriété d'un objet cible. Elle fonctionne comme (cible[cléPropriété]) mais sous la forme d'une fonction.

+ +
{{EmbedInteractiveExample("pages/js/reflect-get.html")}}
+ +

Syntaxe

+ +
Reflect.get(cible, cléPropriété[, récepteur])
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible dont on souhaite obtenir la propriété.
+
cléPropriété
+
Le nom de la propriété qu'on souhaite obtenir.
+
récepteur {{optional_inline}}
+
La valeur de this à passer à cible si l'accesseur est utilisé. Lorsqu'on l'utilise avec {{jsxref("Proxy")}}, ce peut être un objet qui hérite de la cible.
+
+ +

Valeur de retour

+ +

La valeur de la propriété.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.get permet d'obtenir une propriété d'un objet. Elle est équivalent à un accesseur de propriété mais sous la forme d'une fonction.

+ +

Exemples

+ +
// Object
+var obj = { x: 1, y: 2 };
+Reflect.get(obj, "x"); // 1
+
+// Array
+Reflect.get(["zero", "un"], 1); // "un"
+
+// Proxy qui intercepte get
+var x = {p: 1};
+var obj = new Proxy(x, {
+  get(t, k, r) { return k + "truc"; }
+});
+Reflect.get(obj, "toto"); // "tototruc"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.get', 'Reflect.get')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-reflect.get', 'Reflect.get')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.get")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html b/files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html deleted file mode 100644 index be67182701..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Reflect.getOwnPropertyDescriptor() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/getOwnPropertyDescriptor ---- -
{{JSRef}}
- -

La méthode statique Reflect.getOwnPropertyDescriptor() est similaire à {{jsxref("Object.getOwnPropertyDescriptor()")}}. Elle renvoie un descripteur de propriété pour la propriété visée si elle existe sur l'objet, sinon, elle renvoie {{jsxref("undefined")}}.

- -
{{EmbedInteractiveExample("pages/js/reflect-getownpropertydescriptor.html")}}
- -

Syntaxe

- -
Reflect.getOwnPropertyDescriptor(cible, cléPropriété)
-
- -

Paramètres

- -
-
cible
-
L'objet cible sur lequel on cherche la propriété.
-
cléPropriété
-
Le nom de la propriété dont on veut obtenir le descripteur.
-
- -

Valeur de retour

- -

Un objet qui est un descripteur de propriété si elle existe sur l'objet cible ou {{jsxref("undefined")}} dans le cas contraire.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.getOwnPropertyDescriptor renvoie un descripteur pour la propriété demandée si celle-ci existe sur l'objet, sinon, elle renvoie {{jsxref("undefined")}}. La seule différence avec {{jsxref("Object.getOwnPropertyDescriptor()")}} est la façon dont les cibles qui ne sont pas des objets sont gérées.

- -

Exemples

- -

Utiliser Reflect.getOwnPropertyDescriptor()

- -
Reflect.getOwnPropertyDescriptor({x: "coucou"}, "x");
-// {value: "coucou", writable: true, enumerable: true, configurable: true}
-
-Reflect.getOwnPropertyDescriptor({x: "coucou"}, "y");
-// undefined
-
-Reflect.getOwnPropertyDescriptor([], "length");
-// {value: 0, writable: true, enumerable: false, configurable: false}
-
- -

Différence avec Object.getOwnPropertyDescriptor()

- -

Si le premier argument passé à la méthode n'est pas un objet (autrement dit si c'est une valeur de type primitif), cela causera une exception {{jsxref("TypeError")}}. Si on utilise {{jsxref("Object.getOwnPropertyDescriptor")}}, une valeur qui n'est pas un objet sera d'abord convertie en objet.

- -
Reflect.getOwnPropertyDescriptor("toto", 0);
-// TypeError: "toto" is not non-null object
-
-Object.getOwnPropertyDescriptor("toto", 0);
-// { value: "toto", writable: false, enumerable: true, configurable: false }
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.getOwnPropertyDescriptor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.md b/files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.md new file mode 100644 index 0000000000..be67182701 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/getownpropertydescriptor/index.md @@ -0,0 +1,100 @@ +--- +title: Reflect.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

La méthode statique Reflect.getOwnPropertyDescriptor() est similaire à {{jsxref("Object.getOwnPropertyDescriptor()")}}. Elle renvoie un descripteur de propriété pour la propriété visée si elle existe sur l'objet, sinon, elle renvoie {{jsxref("undefined")}}.

+ +
{{EmbedInteractiveExample("pages/js/reflect-getownpropertydescriptor.html")}}
+ +

Syntaxe

+ +
Reflect.getOwnPropertyDescriptor(cible, cléPropriété)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible sur lequel on cherche la propriété.
+
cléPropriété
+
Le nom de la propriété dont on veut obtenir le descripteur.
+
+ +

Valeur de retour

+ +

Un objet qui est un descripteur de propriété si elle existe sur l'objet cible ou {{jsxref("undefined")}} dans le cas contraire.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.getOwnPropertyDescriptor renvoie un descripteur pour la propriété demandée si celle-ci existe sur l'objet, sinon, elle renvoie {{jsxref("undefined")}}. La seule différence avec {{jsxref("Object.getOwnPropertyDescriptor()")}} est la façon dont les cibles qui ne sont pas des objets sont gérées.

+ +

Exemples

+ +

Utiliser Reflect.getOwnPropertyDescriptor()

+ +
Reflect.getOwnPropertyDescriptor({x: "coucou"}, "x");
+// {value: "coucou", writable: true, enumerable: true, configurable: true}
+
+Reflect.getOwnPropertyDescriptor({x: "coucou"}, "y");
+// undefined
+
+Reflect.getOwnPropertyDescriptor([], "length");
+// {value: 0, writable: true, enumerable: false, configurable: false}
+
+ +

Différence avec Object.getOwnPropertyDescriptor()

+ +

Si le premier argument passé à la méthode n'est pas un objet (autrement dit si c'est une valeur de type primitif), cela causera une exception {{jsxref("TypeError")}}. Si on utilise {{jsxref("Object.getOwnPropertyDescriptor")}}, une valeur qui n'est pas un objet sera d'abord convertie en objet.

+ +
Reflect.getOwnPropertyDescriptor("toto", 0);
+// TypeError: "toto" is not non-null object
+
+Object.getOwnPropertyDescriptor("toto", 0);
+// { value: "toto", writable: false, enumerable: true, configurable: false }
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.getownpropertydescriptor', 'Reflect.getOwnPropertyDescriptor')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.getOwnPropertyDescriptor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.html deleted file mode 100644 index 9a4aef5aaf..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Reflect.getPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/getPrototypeOf ---- -
{{JSRef}}
- -

La méthode statique Reflect.getPrototypeOf() est semblable à la méthode {{jsxref("Object.getPrototypeOf()")}}. Elle renvoie le prototype (c'est-à-dire la valeur de la propriété interne [[Prototype]]) de l'objet donné.

- -
{{EmbedInteractiveExample("pages/js/reflect-getprototypeof.html")}}
- -

Syntaxe

- -
Reflect.getPrototypeOf(cible)
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on souhaite obtenir le prototype.
-
- -

Valeur de retour

- -

Le prototype de l'objet ou {{jsxref("null")}} s'il n'y a aucune propriété héritée.

- -

Exceptions levées

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.getPrototypeOf renvoie le prototype (qui correspond en réalité à la valeur de la propriété interne [[Prototype]]) de l'objet passé en argument.

- -

Exemples

- -

Utiliser Reflect.getPrototypeOf()

- -
Reflect.getPrototypeOf({}); // Object.prototype
-Reflect.getPrototypeOf(Object.prototype); // null
-Reflect.getPrototypeOf(Object.create(null)); // null
-
- -

Comparaison avec Object.getPrototypeOf()

- -
// Résultat identiques pour les objets
-Object.getPrototypeOf({});  // Object.prototype
-Reflect.getPrototypeOf({}); // Object.prototype
-
-// Exception levée avec ES5 pour les valeurs qui ne sont pas des objets
-Object.getPrototypeOf('toto');  // Throws TypeError
-Reflect.getPrototypeOf('toto'); // Throws TypeError
-
-// Avec ES2015 (ES6), seul Reflect lève une exception
-// Object convertit automatiquement les valeurs en objets
-Object.getPrototypeOf('toto');  // String.prototype
-Reflect.getPrototypeOf('toto'); // Throws TypeError
-
-// Pour obtenir le même effet qu'avec Object en ES2015, il
-// faut ajouter une opération de conversion explicite
-Reflect.getPrototypeOf(Object('toto')); // String.prototype
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.getprototypeof', 'Reflect.getPrototypeOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.getprototypeof', 'Reflect.getPrototypeOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.getPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.md new file mode 100644 index 0000000000..9a4aef5aaf --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/getprototypeof/index.md @@ -0,0 +1,103 @@ +--- +title: Reflect.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/getPrototypeOf +--- +
{{JSRef}}
+ +

La méthode statique Reflect.getPrototypeOf() est semblable à la méthode {{jsxref("Object.getPrototypeOf()")}}. Elle renvoie le prototype (c'est-à-dire la valeur de la propriété interne [[Prototype]]) de l'objet donné.

+ +
{{EmbedInteractiveExample("pages/js/reflect-getprototypeof.html")}}
+ +

Syntaxe

+ +
Reflect.getPrototypeOf(cible)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible dont on souhaite obtenir le prototype.
+
+ +

Valeur de retour

+ +

Le prototype de l'objet ou {{jsxref("null")}} s'il n'y a aucune propriété héritée.

+ +

Exceptions levées

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.getPrototypeOf renvoie le prototype (qui correspond en réalité à la valeur de la propriété interne [[Prototype]]) de l'objet passé en argument.

+ +

Exemples

+ +

Utiliser Reflect.getPrototypeOf()

+ +
Reflect.getPrototypeOf({}); // Object.prototype
+Reflect.getPrototypeOf(Object.prototype); // null
+Reflect.getPrototypeOf(Object.create(null)); // null
+
+ +

Comparaison avec Object.getPrototypeOf()

+ +
// Résultat identiques pour les objets
+Object.getPrototypeOf({});  // Object.prototype
+Reflect.getPrototypeOf({}); // Object.prototype
+
+// Exception levée avec ES5 pour les valeurs qui ne sont pas des objets
+Object.getPrototypeOf('toto');  // Throws TypeError
+Reflect.getPrototypeOf('toto'); // Throws TypeError
+
+// Avec ES2015 (ES6), seul Reflect lève une exception
+// Object convertit automatiquement les valeurs en objets
+Object.getPrototypeOf('toto');  // String.prototype
+Reflect.getPrototypeOf('toto'); // Throws TypeError
+
+// Pour obtenir le même effet qu'avec Object en ES2015, il
+// faut ajouter une opération de conversion explicite
+Reflect.getPrototypeOf(Object('toto')); // String.prototype
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.getprototypeof', 'Reflect.getPrototypeOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.getprototypeof', 'Reflect.getPrototypeOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.getPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/has/index.html b/files/fr/web/javascript/reference/global_objects/reflect/has/index.html deleted file mode 100644 index 934408cf86..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/has/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Reflect.has() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/has -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/has -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/has ---- -
{{JSRef}}
- -

La méthode statique Reflect.has() fonctionne comme l'opérateur in mais sous forme d'une fonction.

- -
{{EmbedInteractiveExample("pages/js/reflect-has.html")}}
- -

Syntaxe

- -
Reflect.has(cible, cléPropriété)
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on souhaite savoir s'il contient la propriété donnée.
-
cléPropriété
-
Le nom de la propriété dont on souhaite vérifier la présence.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la propriété recherchée est présente sur l'objet cible.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.has vous permet de vérifier si une propriété est présente sur un objet. C'est une fonction qui agit comme l'opérateur in.

- -

Exemples

- -
Reflect.has({x: 0}, "x"); // true
-Reflect.has({x: 0}, "y"); // false
-
-// renvoie true pour les propriétés présentes
-// grâce à la chaîne de prototypes
-Reflect.has({x: 0}, "toString");
-
-// Proxy avec la méthode .has()
-obj = new Proxy({}, {
-  has(t, k) { return k.startsWith("bou"); }
-});
-Reflect.has(obj, "bouchon"); // true
-Reflect.has(obj, "bonbon");  // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.has', 'Reflect.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.has', 'Reflect.has')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.has")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/has/index.md b/files/fr/web/javascript/reference/global_objects/reflect/has/index.md new file mode 100644 index 0000000000..934408cf86 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/has/index.md @@ -0,0 +1,93 @@ +--- +title: Reflect.has() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/has +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/has +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/has +--- +
{{JSRef}}
+ +

La méthode statique Reflect.has() fonctionne comme l'opérateur in mais sous forme d'une fonction.

+ +
{{EmbedInteractiveExample("pages/js/reflect-has.html")}}
+ +

Syntaxe

+ +
Reflect.has(cible, cléPropriété)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible dont on souhaite savoir s'il contient la propriété donnée.
+
cléPropriété
+
Le nom de la propriété dont on souhaite vérifier la présence.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la propriété recherchée est présente sur l'objet cible.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.has vous permet de vérifier si une propriété est présente sur un objet. C'est une fonction qui agit comme l'opérateur in.

+ +

Exemples

+ +
Reflect.has({x: 0}, "x"); // true
+Reflect.has({x: 0}, "y"); // false
+
+// renvoie true pour les propriétés présentes
+// grâce à la chaîne de prototypes
+Reflect.has({x: 0}, "toString");
+
+// Proxy avec la méthode .has()
+obj = new Proxy({}, {
+  has(t, k) { return k.startsWith("bou"); }
+});
+Reflect.has(obj, "bouchon"); // true
+Reflect.has(obj, "bonbon");  // false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.has', 'Reflect.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.has', 'Reflect.has')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.has")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/index.html b/files/fr/web/javascript/reference/global_objects/reflect/index.html deleted file mode 100644 index b61cb63280..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Reflect -slug: Web/JavaScript/Reference/Global_Objects/Reflect -tags: - - ECMAScript 2015 - - JavaScript - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect ---- -
{{JSRef}}
- -

Reflect est un objet natif qui fournit des méthodes pour les opérations qui peuvent être interceptées en JavaScript (via les proxies). Les méthodes de cet objet sont les mêmes que celles des gestionnaires de proxy. Reflect n'est pas une fonction (y compris pour construire un objet).

- -

Description

- -

Contrairement à la plupart des objets globaux, Reflect n'est pas un constructeur. Il ne peut pas être utilisé avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new","new")}} ou être invoqué comme une fonction. Les propriétés et méthodes de Reflect sont statiques (comme pour celles de l'objet {{jsxref("Math")}}).

- -

Méthodes

- -

L'objet Reflect fournit des fonctions statiques qui ont les mêmes noms que les méthodes des gestionnaires de proxy et dont certaines correspondent, avec quelques différences, à celles d'{{jsxref("Object")}} :

- -
-
{{jsxref("Reflect.apply()")}}
-
Appelle une fonction cible avec les arguments définis par le paramètres args. Voir aussi {{jsxref("Function.prototype.apply()")}}.
-
{{jsxref("Reflect.construct()")}}
-
 L'opérateur {{jsxref("Opérateurs/L_opérateur_new","new")}} comme fonction. C'est équivalent à new cible(...args). Cette méthode permet également d'indiquer un prototype différent.
-
{{jsxref("Reflect.defineProperty()")}}
-
Semblable à {{jsxref("Object.defineProperty()")}}. Renvoie un {{jsxref("Boolean")}}.
-
{{jsxref("Reflect.deleteProperty()")}}
-
L'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}} comme fonction. C'est équivalent à delete cible[nom].
-
{{jsxref("Reflect.get()")}}
-
Une fonction qui renvoie la valeur d'une propriété.
-
{{jsxref("Reflect.getOwnPropertyDescriptor()")}}
-
Semblable à {{jsxref("Object.getOwnPropertyDescriptor()")}}. Renvoie un descripteur de propriété si la propriété existe sur l'objet, {{jsxref("undefined")}} sinon.
-
{{jsxref("Reflect.getPrototypeOf()")}}
-
Identique à {{jsxref("Object.getPrototypeOf()")}}.
-
{{jsxref("Reflect.has()")}}
-
L'opérateur {{jsxref("Opérateurs/L_opérateur_in","in")}} comme fonction. Renvoie un booléen qui indique si une telle propriété existe pour l'objet (qu'elle soit directement rattachée ou héritée).
-
{{jsxref("Reflect.isExtensible()")}}
-
La même fonction que {{jsxref("Object.isExtensible()")}}.
-
{{jsxref("Reflect.ownKeys()")}}
-
Renvoie un tableau de chaînes de caractères qui correspondent aux noms des propriétés propres (celles qui ne sont pas héritées) de l'objet.
-
{{jsxref("Reflect.preventExtensions()")}}
-
Semblable à {{jsxref("Object.preventExtensions()")}}. Renvoie un {{jsxref("Boolean")}}.
-
{{jsxref("Reflect.set()")}}
-
Une fonction qui affecte des valeurs à des propriétés. Renvoie un {{jsxref("Boolean")}} qui vaut true si la mise à jour a bien été effectuée.
-
{{jsxref("Reflect.setPrototypeOf()")}}
-
Une fonction qui permet de définir le prototype d'un objet.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect-object', 'Reflect')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect-object', 'Reflect')}}{{Spec2('ESDraft')}}Retrait de Reflect.enumerate
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/index.md b/files/fr/web/javascript/reference/global_objects/reflect/index.md new file mode 100644 index 0000000000..b61cb63280 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/index.md @@ -0,0 +1,84 @@ +--- +title: Reflect +slug: Web/JavaScript/Reference/Global_Objects/Reflect +tags: + - ECMAScript 2015 + - JavaScript + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect +--- +
{{JSRef}}
+ +

Reflect est un objet natif qui fournit des méthodes pour les opérations qui peuvent être interceptées en JavaScript (via les proxies). Les méthodes de cet objet sont les mêmes que celles des gestionnaires de proxy. Reflect n'est pas une fonction (y compris pour construire un objet).

+ +

Description

+ +

Contrairement à la plupart des objets globaux, Reflect n'est pas un constructeur. Il ne peut pas être utilisé avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new","new")}} ou être invoqué comme une fonction. Les propriétés et méthodes de Reflect sont statiques (comme pour celles de l'objet {{jsxref("Math")}}).

+ +

Méthodes

+ +

L'objet Reflect fournit des fonctions statiques qui ont les mêmes noms que les méthodes des gestionnaires de proxy et dont certaines correspondent, avec quelques différences, à celles d'{{jsxref("Object")}} :

+ +
+
{{jsxref("Reflect.apply()")}}
+
Appelle une fonction cible avec les arguments définis par le paramètres args. Voir aussi {{jsxref("Function.prototype.apply()")}}.
+
{{jsxref("Reflect.construct()")}}
+
 L'opérateur {{jsxref("Opérateurs/L_opérateur_new","new")}} comme fonction. C'est équivalent à new cible(...args). Cette méthode permet également d'indiquer un prototype différent.
+
{{jsxref("Reflect.defineProperty()")}}
+
Semblable à {{jsxref("Object.defineProperty()")}}. Renvoie un {{jsxref("Boolean")}}.
+
{{jsxref("Reflect.deleteProperty()")}}
+
L'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}} comme fonction. C'est équivalent à delete cible[nom].
+
{{jsxref("Reflect.get()")}}
+
Une fonction qui renvoie la valeur d'une propriété.
+
{{jsxref("Reflect.getOwnPropertyDescriptor()")}}
+
Semblable à {{jsxref("Object.getOwnPropertyDescriptor()")}}. Renvoie un descripteur de propriété si la propriété existe sur l'objet, {{jsxref("undefined")}} sinon.
+
{{jsxref("Reflect.getPrototypeOf()")}}
+
Identique à {{jsxref("Object.getPrototypeOf()")}}.
+
{{jsxref("Reflect.has()")}}
+
L'opérateur {{jsxref("Opérateurs/L_opérateur_in","in")}} comme fonction. Renvoie un booléen qui indique si une telle propriété existe pour l'objet (qu'elle soit directement rattachée ou héritée).
+
{{jsxref("Reflect.isExtensible()")}}
+
La même fonction que {{jsxref("Object.isExtensible()")}}.
+
{{jsxref("Reflect.ownKeys()")}}
+
Renvoie un tableau de chaînes de caractères qui correspondent aux noms des propriétés propres (celles qui ne sont pas héritées) de l'objet.
+
{{jsxref("Reflect.preventExtensions()")}}
+
Semblable à {{jsxref("Object.preventExtensions()")}}. Renvoie un {{jsxref("Boolean")}}.
+
{{jsxref("Reflect.set()")}}
+
Une fonction qui affecte des valeurs à des propriétés. Renvoie un {{jsxref("Boolean")}} qui vaut true si la mise à jour a bien été effectuée.
+
{{jsxref("Reflect.setPrototypeOf()")}}
+
Une fonction qui permet de définir le prototype d'un objet.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect-object', 'Reflect')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect-object', 'Reflect')}}{{Spec2('ESDraft')}}Retrait de Reflect.enumerate
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.html b/files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.html deleted file mode 100644 index 8e62fcea08..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Reflect.isExtensible() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/isExtensible ---- -
{{JSRef}}
- -

La méthode statique Reflect.isExtensible() permet de déterminer si un objet est extensible (i.e. si on peut lui ajouter de nouvelles propriétés). Elle est semblable à la méthode {{jsxref("Object.isExtensible()")}} (modulo quelques différences).

- -
{{EmbedInteractiveExample("pages/js/reflect-isextensible.html", "taller")}}
- -

Syntaxe

- -
Reflect.isExtensible(cible)
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on souhaite savoir s'il est extensible.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen", "",1)}} qui indique si la cible est extensible ou non.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.isExtensible permet de déterminer si un objet est extensible (autrement dit si on peut lui ajouter de nouvelles propriétés). Cette méthode est semblable à la méthode {{jsxref("Object.isExtensible()")}}.

- -

Exemples

- -

Utiliser Reflect.isExtensible()

- -

Voir aussi {{jsxref("Object.isExtensible()")}}.

- -
// Les nouveaux objets sont extensibles.
-var vide = {};
-Reflect.isExtensible(vide); // true
-
-// ...mais ça peut être changé.
-Reflect.preventExtensions(vide);
-Reflect.isExtensible(vide); // false
-
-// Par définition, les objets scellés
-// ne sont pas extensibles.
-var scellé = Object.seal({});
-Reflect.isExtensible(scellé); // false
-
-// Par définition, les objets gelés sont
-// également non-extensibles.
-var gelé = Object.freeze({});
-Reflect.isExtensible(gelé); // false
-
- -

Différence avec Object.isExtensible()

- -

Si le premier argument passé à la méthode n'est pas un objet (autrement dit si la valeur est une valeur primitive), cela provoquera une exception {{jsxref("TypeError")}}. La méthode {{jsxref("Object.isExtensible()")}} aurait commencé par convertir l'argument en un objet.

- -
Reflect.isExtensible(1);
-// TypeError: 1 is not an object
-
-Object.isExtensible(1);
-// false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.isExtensible")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.md b/files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.md new file mode 100644 index 0000000000..8e62fcea08 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/isextensible/index.md @@ -0,0 +1,110 @@ +--- +title: Reflect.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/isExtensible +--- +
{{JSRef}}
+ +

La méthode statique Reflect.isExtensible() permet de déterminer si un objet est extensible (i.e. si on peut lui ajouter de nouvelles propriétés). Elle est semblable à la méthode {{jsxref("Object.isExtensible()")}} (modulo quelques différences).

+ +
{{EmbedInteractiveExample("pages/js/reflect-isextensible.html", "taller")}}
+ +

Syntaxe

+ +
Reflect.isExtensible(cible)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible dont on souhaite savoir s'il est extensible.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen", "",1)}} qui indique si la cible est extensible ou non.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.isExtensible permet de déterminer si un objet est extensible (autrement dit si on peut lui ajouter de nouvelles propriétés). Cette méthode est semblable à la méthode {{jsxref("Object.isExtensible()")}}.

+ +

Exemples

+ +

Utiliser Reflect.isExtensible()

+ +

Voir aussi {{jsxref("Object.isExtensible()")}}.

+ +
// Les nouveaux objets sont extensibles.
+var vide = {};
+Reflect.isExtensible(vide); // true
+
+// ...mais ça peut être changé.
+Reflect.preventExtensions(vide);
+Reflect.isExtensible(vide); // false
+
+// Par définition, les objets scellés
+// ne sont pas extensibles.
+var scellé = Object.seal({});
+Reflect.isExtensible(scellé); // false
+
+// Par définition, les objets gelés sont
+// également non-extensibles.
+var gelé = Object.freeze({});
+Reflect.isExtensible(gelé); // false
+
+ +

Différence avec Object.isExtensible()

+ +

Si le premier argument passé à la méthode n'est pas un objet (autrement dit si la valeur est une valeur primitive), cela provoquera une exception {{jsxref("TypeError")}}. La méthode {{jsxref("Object.isExtensible()")}} aurait commencé par convertir l'argument en un objet.

+ +
Reflect.isExtensible(1);
+// TypeError: 1 is not an object
+
+Object.isExtensible(1);
+// false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.isextensible', 'Reflect.isExtensible')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.isExtensible")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.html b/files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.html deleted file mode 100644 index 88d1747eff..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Reflect.ownKeys() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/ownKeys ---- -

{{JSRef}}

- -

La méthode statique Reflect.ownKeys() renvoie un tableau qui contient les clés des propriétés propres (non héritées) de l'objet  cible.

- -
{{EmbedInteractiveExample("pages/js/reflect-ownkeys.html")}}
- -

Syntaxe

- -
Reflect.ownKeys(cible)
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on souhaite obtenir les noms et symboles des propriétés propres.
-
- -

Valeur de retour

- -

Un objet {{jsxref("Array")}} qui contient les clés des propriétés propres de cible.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.ownKeys renvoie un tableau dont les éléments sont les clés des propriétés propres de l'objet cible. Sa valeur de retour est équivalente à {{jsxref("Object.getOwnPropertyNames", "Object.getOwnPropertyNames(target)", "", 1)}}.concat({{jsxref("Object.getOwnPropertySymbols", "Object.getOwnPropertySymbols(target)", "", 1)}}).

- -

Exemples

- -
Reflect.ownKeys({z: 3, y: 2, x: 1}); // [ "z", "y", "x" ]
-Reflect.ownKeys([]); // ["length"]
-
-var sym = Symbol.for("comète");
-var sym2 = Symbol.for("météore");
-var obj = {[sym]: 0, "str1": 0, "773": 0, "0": 0,
-           [sym2]: 0, "-1": 0, "8": 0, "seconde str": 0};
-Reflect.ownKeys(obj);
-// [ "0", "8", "773", "str1", "-1", "seconde str", Symbol(comète), Symbol(météore) ]
-// Indices dans l'ordre numérique
-// Chaînes de caractères dans l'ordre d'insertion
-// Symboles dans l'ordre d'insertion
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.ownKeys")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.md b/files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.md new file mode 100644 index 0000000000..88d1747eff --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/ownkeys/index.md @@ -0,0 +1,90 @@ +--- +title: Reflect.ownKeys() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/ownKeys +--- +

{{JSRef}}

+ +

La méthode statique Reflect.ownKeys() renvoie un tableau qui contient les clés des propriétés propres (non héritées) de l'objet  cible.

+ +
{{EmbedInteractiveExample("pages/js/reflect-ownkeys.html")}}
+ +

Syntaxe

+ +
Reflect.ownKeys(cible)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible dont on souhaite obtenir les noms et symboles des propriétés propres.
+
+ +

Valeur de retour

+ +

Un objet {{jsxref("Array")}} qui contient les clés des propriétés propres de cible.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.ownKeys renvoie un tableau dont les éléments sont les clés des propriétés propres de l'objet cible. Sa valeur de retour est équivalente à {{jsxref("Object.getOwnPropertyNames", "Object.getOwnPropertyNames(target)", "", 1)}}.concat({{jsxref("Object.getOwnPropertySymbols", "Object.getOwnPropertySymbols(target)", "", 1)}}).

+ +

Exemples

+ +
Reflect.ownKeys({z: 3, y: 2, x: 1}); // [ "z", "y", "x" ]
+Reflect.ownKeys([]); // ["length"]
+
+var sym = Symbol.for("comète");
+var sym2 = Symbol.for("météore");
+var obj = {[sym]: 0, "str1": 0, "773": 0, "0": 0,
+           [sym2]: 0, "-1": 0, "8": 0, "seconde str": 0};
+Reflect.ownKeys(obj);
+// [ "0", "8", "773", "str1", "-1", "seconde str", Symbol(comète), Symbol(météore) ]
+// Indices dans l'ordre numérique
+// Chaînes de caractères dans l'ordre d'insertion
+// Symboles dans l'ordre d'insertion
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.ownKeys")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.html b/files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.html deleted file mode 100644 index b0f644aa98..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Reflect.preventExtensions() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/preventExtensions ---- -
{{JSRef}}
- -

La méthode statique Reflect.preventExtensions() permet d'empêcher d'ajouter de nouvelles propriétés à un objet. Cette méthode est semblable à la méthode {{jsxref("Object.preventExtensions()")}} (modulo quelques différences).

- -
{{EmbedInteractiveExample("pages/js/reflect-preventextensions.html")}}
- -

Syntaxe

- -
Reflect.preventExtensions(cible)
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on veut empêcher l'ajout d'autres propriétés.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} qui indique si l'interdiction a bien été mise en place sur l'objet cible.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.preventExtensions permet d'empêcher l'ajout de nouvelles propriétés sur un objet. Cette méthode est semblable à {{jsxref("Object.preventExtensions()")}}.

- -

Exemples

- -

Utiliser Reflect.preventExtensions()

- -

Voir aussi {{jsxref("Object.preventExtensions()")}}.

- -
// Par défaut les objets sont extensibles
-var vide = {};
-Reflect.isExtensible(vide); // === true
-
-// ...mais cela peut être modifié
-Reflect.preventExtensions(vide);
-Reflect.isExtensible(vide); // === false
-
- -

Différences avec Object.preventExtensions()

- -

Si le premier argument de cette méthode n'est pas un objet (autrement dit c'est une valeur primitive), cela provoquera une {{jsxref("TypeError")}}. {{jsxref("Object.preventExtensions()")}}, quant à elle, convertira l'argument passé en un objet.

- -
Reflect.preventExtensions(1);
-// TypeError: 1 is not an object
-
-Object.preventExtensions(1);
-// 1
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.preventExtensions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.md b/files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.md new file mode 100644 index 0000000000..b0f644aa98 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/preventextensions/index.md @@ -0,0 +1,100 @@ +--- +title: Reflect.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/preventExtensions +--- +
{{JSRef}}
+ +

La méthode statique Reflect.preventExtensions() permet d'empêcher d'ajouter de nouvelles propriétés à un objet. Cette méthode est semblable à la méthode {{jsxref("Object.preventExtensions()")}} (modulo quelques différences).

+ +
{{EmbedInteractiveExample("pages/js/reflect-preventextensions.html")}}
+ +

Syntaxe

+ +
Reflect.preventExtensions(cible)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible dont on veut empêcher l'ajout d'autres propriétés.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} qui indique si l'interdiction a bien été mise en place sur l'objet cible.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.preventExtensions permet d'empêcher l'ajout de nouvelles propriétés sur un objet. Cette méthode est semblable à {{jsxref("Object.preventExtensions()")}}.

+ +

Exemples

+ +

Utiliser Reflect.preventExtensions()

+ +

Voir aussi {{jsxref("Object.preventExtensions()")}}.

+ +
// Par défaut les objets sont extensibles
+var vide = {};
+Reflect.isExtensible(vide); // === true
+
+// ...mais cela peut être modifié
+Reflect.preventExtensions(vide);
+Reflect.isExtensible(vide); // === false
+
+ +

Différences avec Object.preventExtensions()

+ +

Si le premier argument de cette méthode n'est pas un objet (autrement dit c'est une valeur primitive), cela provoquera une {{jsxref("TypeError")}}. {{jsxref("Object.preventExtensions()")}}, quant à elle, convertira l'argument passé en un objet.

+ +
Reflect.preventExtensions(1);
+// TypeError: 1 is not an object
+
+Object.preventExtensions(1);
+// 1
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.preventextensions', 'Reflect.preventExtensions')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.preventExtensions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/set/index.html b/files/fr/web/javascript/reference/global_objects/reflect/set/index.html deleted file mode 100644 index 4a5280f0ac..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/set/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: Reflect.set() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/set -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/set -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/set ---- -
{{JSRef}}
- -

La méthode statique Reflect.set() permet de définir ou de modifier une propriété sur un objet.

- -
{{EmbedInteractiveExample("pages/js/reflect-set.html")}}
- -

Syntaxe

- -
Reflect.set(cible, cléPropriété, valeur[, récepteur])
-
- -

Paramètres

- -
-
cible
-
L'objet cible sur lequel on veut définir ou modifier la propriété.
-
cléPropriété
-
Le nom de la propriété à définir ou à modifier.
-
valeur
-
La valeur pour la propriété.
-
récepteur{{optional_inline}}
-
La valeur de this pour l'appel à cible si un mutateur (setter) est utilisé.
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la définition/modification de la propriété a réussi.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

- -

Description

- -

La méthode Reflect.set permet de définir une propriété sur un objet. Elle effectue une affectation de propriété et est semblable à la syntaxe pour accéder à un propriété mais sous la forme d'une fonction.

- -

Exemples

- -

Utiliser Reflect.set()

- -
// Object
-var obj = {};
-Reflect.set(obj, "prop", "value"); // true
-obj.prop; // "value"
-
-// Array
-var arr = ["canard", "canard", "canard"];
-Reflect.set(arr, 2, "oie"); // true
-arr[2]; // "oie"
-
-// On peut l'utiliser pour tronquer un tableau
-Reflect.set(arr, "length", 1); // true
-arr; // ["canard"];
-
-// Avec un seul argument
-// cléPropriété et valeur valent "undefined".
-var obj = {};
-Reflect.set(obj); // true
-Reflect.getOwnPropertyDescriptor(obj, "undefined");
-// { value: undefined, writable: true, enumerable: true, configurable: true }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.set', 'Reflect.set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.set', 'Reflect.set')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.set")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/set/index.md b/files/fr/web/javascript/reference/global_objects/reflect/set/index.md new file mode 100644 index 0000000000..4a5280f0ac --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/set/index.md @@ -0,0 +1,106 @@ +--- +title: Reflect.set() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/set +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/set +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/set +--- +
{{JSRef}}
+ +

La méthode statique Reflect.set() permet de définir ou de modifier une propriété sur un objet.

+ +
{{EmbedInteractiveExample("pages/js/reflect-set.html")}}
+ +

Syntaxe

+ +
Reflect.set(cible, cléPropriété, valeur[, récepteur])
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible sur lequel on veut définir ou modifier la propriété.
+
cléPropriété
+
Le nom de la propriété à définir ou à modifier.
+
valeur
+
La valeur pour la propriété.
+
récepteur{{optional_inline}}
+
La valeur de this pour l'appel à cible si un mutateur (setter) est utilisé.
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} qui indique si la définition/modification de la propriété a réussi.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}}.

+ +

Description

+ +

La méthode Reflect.set permet de définir une propriété sur un objet. Elle effectue une affectation de propriété et est semblable à la syntaxe pour accéder à un propriété mais sous la forme d'une fonction.

+ +

Exemples

+ +

Utiliser Reflect.set()

+ +
// Object
+var obj = {};
+Reflect.set(obj, "prop", "value"); // true
+obj.prop; // "value"
+
+// Array
+var arr = ["canard", "canard", "canard"];
+Reflect.set(arr, 2, "oie"); // true
+arr[2]; // "oie"
+
+// On peut l'utiliser pour tronquer un tableau
+Reflect.set(arr, "length", 1); // true
+arr; // ["canard"];
+
+// Avec un seul argument
+// cléPropriété et valeur valent "undefined".
+var obj = {};
+Reflect.set(obj); // true
+Reflect.getOwnPropertyDescriptor(obj, "undefined");
+// { value: undefined, writable: true, enumerable: true, configurable: true }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.set', 'Reflect.set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.set', 'Reflect.set')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.set")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.html deleted file mode 100644 index 2cb34af8fa..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Reflect.setPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/setPrototypeOf ---- -
{{JSRef}}
- -

la méthode statique Reflect.setPrototypeOf() est semblable à la méthode {{jsxref("Object.setPrototypeOf()")}} (exception faite de la valeur de retour). Elle permet de définir le prototype (c'est-à-dire la propriété interne [[Prototype]]) d'un objet donné avec un autre objet ou {{jsxref("null")}}. Cette méthode renvoie true si l'opération a réussi et false sinon.

- -
{{EmbedInteractiveExample("pages/js/reflect-setprototypeof.html")}}
- -

Syntaxe

- -
Reflect.setPrototypeOf(cible, prototype)
-
- -

Paramètres

- -
-
cible
-
L'objet cible dont on souhaite modifier le prototype.
-
prototype
-
Le nouveau prototype à appliquer à l'objet cible (ça peut être un objet ou {{jsxref("null")}}).
-
- -

Valeur de retour

- -

Un {{jsxref("Boolean","booléen","",1)}} qui indique si le prototype a correctement été modifié.

- -

Exceptions

- -

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}} ou si prototype n'est ni un objet ni {{jsxref("null")}}.

- -

Description

- -

La méthode Reflect.setPrototypeOf permet de modifier le prototype (qui est la valeur de la propriété interne [[Prototype]]) d'un objet donné.

- -

Exemples

- -

Utiliser Reflect.setPrototypeOf()

- -
Reflect.setPrototypeOf({}, Object.prototype); // true
-
-// On peut modifier le [[Prototype]] d'un objet
-// pour que celui-ci soit null.
-Reflect.setPrototypeOf({}, null); // true
-
-// La méthode renvoie false si la cible
-// n'est pas extensible.
-Reflect.setPrototypeOf(Object.freeze({}), null); // false
-
-// La méthode renvoie false si l'affectation
-// entraîne un cycle dans la chaîne de prototypes.
-var target = {};
-var proto = Object.create(target);
-Reflect.setPrototypeOf(target, proto); // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.setprototypeof', 'Reflect.setPrototypeOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.setprototypeof', 'Reflect.setPrototypeOf')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.setPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.md new file mode 100644 index 0000000000..2cb34af8fa --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/setprototypeof/index.md @@ -0,0 +1,97 @@ +--- +title: Reflect.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/setPrototypeOf +--- +
{{JSRef}}
+ +

la méthode statique Reflect.setPrototypeOf() est semblable à la méthode {{jsxref("Object.setPrototypeOf()")}} (exception faite de la valeur de retour). Elle permet de définir le prototype (c'est-à-dire la propriété interne [[Prototype]]) d'un objet donné avec un autre objet ou {{jsxref("null")}}. Cette méthode renvoie true si l'opération a réussi et false sinon.

+ +
{{EmbedInteractiveExample("pages/js/reflect-setprototypeof.html")}}
+ +

Syntaxe

+ +
Reflect.setPrototypeOf(cible, prototype)
+
+ +

Paramètres

+ +
+
cible
+
L'objet cible dont on souhaite modifier le prototype.
+
prototype
+
Le nouveau prototype à appliquer à l'objet cible (ça peut être un objet ou {{jsxref("null")}}).
+
+ +

Valeur de retour

+ +

Un {{jsxref("Boolean","booléen","",1)}} qui indique si le prototype a correctement été modifié.

+ +

Exceptions

+ +

Une erreur {{jsxref("TypeError")}} si cible n'est pas un {{jsxref("Object")}} ou si prototype n'est ni un objet ni {{jsxref("null")}}.

+ +

Description

+ +

La méthode Reflect.setPrototypeOf permet de modifier le prototype (qui est la valeur de la propriété interne [[Prototype]]) d'un objet donné.

+ +

Exemples

+ +

Utiliser Reflect.setPrototypeOf()

+ +
Reflect.setPrototypeOf({}, Object.prototype); // true
+
+// On peut modifier le [[Prototype]] d'un objet
+// pour que celui-ci soit null.
+Reflect.setPrototypeOf({}, null); // true
+
+// La méthode renvoie false si la cible
+// n'est pas extensible.
+Reflect.setPrototypeOf(Object.freeze({}), null); // false
+
+// La méthode renvoie false si l'affectation
+// entraîne un cycle dans la chaîne de prototypes.
+var target = {};
+var proto = Object.create(target);
+Reflect.setPrototypeOf(target, proto); // false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.setprototypeof', 'Reflect.setPrototypeOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.setprototypeof', 'Reflect.setPrototypeOf')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.setPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@match/index.html b/files/fr/web/javascript/reference/global_objects/regexp/@@match/index.html deleted file mode 100644 index 9d3c824406..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/@@match/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: RegExp.prototype[@@match]() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@match -tags: - - Expressions rationnelles - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@match -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@match ---- -
{{JSRef}}
- -

La méthode [@@match]() permet de récupérer les correspondances obtenues lorsqu'on teste une chaîne de caractères par rapport à une expression rationnelle (regexp).

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@match.html")}}
- -

Syntaxe

- -
regexp[Symbol.match](str)
- -

Paramètres

- -
-
str
-
La chaîne de caractères ({{jsxref("String")}}) sur laquelle on veut chercher des correspondances.
-
- -

Valeur de retour

- -

Un tableau ({{jsxref("Array")}}) qui contient les résultats des correspondances et les groupes capturés grâce aux parenthèse. S'il n'y a aucune correspondance, ce sera {{jsxref("null")}}.

- -

Description

- -

Cette méthode est appelée de façon interne lorsqu'on utilise {{jsxref("String.prototype.match()")}}. Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :

- -
'abc'.match(/a/);
-
-/a/[Symbol.match]('abc');
- -

Cette méthode existe afin de permettre d'adapter le comportement de la recherche des correspondances pour les sous-classes de RegExp.

- -

Exemples

- -

Appel direct

- -

Cette méthode peut être utilisée comme {{jsxref("String.prototype.match()")}} mais avec un objet this différent et un ordre des paramètres également différent.

- -
var re = /[0-9]+/g;
-var str = '2016-01-02';
-var résultat = re[Symbol.match](str);
-console.log(résultat);  // ["2016", "01", "02"]
-
- -

Utilisation de @@match avec une sous-classe

- -

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger la méthode [@@match]() afin de modifier le comportement.

- -
class MaRegExp extends RegExp {
-  [Symbol.match](str) {
-    var résultat = RegExp.prototype[Symbol.match].call(this, str);
-    if (!résultat) return null;
-    return {
-      group(n) {
-        return résultat[n];
-      }
-    };
-  }
-}
-
-var re = new MaRegExp('([0-9]+)-([0-9]+)-([0-9]+)');
-var str = '2016-01-02';
-var résultat = str.match(re); // String.prototype.match appelle re[@@match].
-console.log(résultat.group(1)); // 2016
-console.log(résultat.group(2)); // 01
-console.log(résultat.group(3)); // 02
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@match', 'RegExp.prototype[@@match]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@match', 'RegExp.prototype[@@match]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.@@match")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@match/index.md b/files/fr/web/javascript/reference/global_objects/regexp/@@match/index.md new file mode 100644 index 0000000000..9d3c824406 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/@@match/index.md @@ -0,0 +1,116 @@ +--- +title: RegExp.prototype[@@match]() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@match +tags: + - Expressions rationnelles + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@match +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@match +--- +
{{JSRef}}
+ +

La méthode [@@match]() permet de récupérer les correspondances obtenues lorsqu'on teste une chaîne de caractères par rapport à une expression rationnelle (regexp).

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@match.html")}}
+ +

Syntaxe

+ +
regexp[Symbol.match](str)
+ +

Paramètres

+ +
+
str
+
La chaîne de caractères ({{jsxref("String")}}) sur laquelle on veut chercher des correspondances.
+
+ +

Valeur de retour

+ +

Un tableau ({{jsxref("Array")}}) qui contient les résultats des correspondances et les groupes capturés grâce aux parenthèse. S'il n'y a aucune correspondance, ce sera {{jsxref("null")}}.

+ +

Description

+ +

Cette méthode est appelée de façon interne lorsqu'on utilise {{jsxref("String.prototype.match()")}}. Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :

+ +
'abc'.match(/a/);
+
+/a/[Symbol.match]('abc');
+ +

Cette méthode existe afin de permettre d'adapter le comportement de la recherche des correspondances pour les sous-classes de RegExp.

+ +

Exemples

+ +

Appel direct

+ +

Cette méthode peut être utilisée comme {{jsxref("String.prototype.match()")}} mais avec un objet this différent et un ordre des paramètres également différent.

+ +
var re = /[0-9]+/g;
+var str = '2016-01-02';
+var résultat = re[Symbol.match](str);
+console.log(résultat);  // ["2016", "01", "02"]
+
+ +

Utilisation de @@match avec une sous-classe

+ +

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger la méthode [@@match]() afin de modifier le comportement.

+ +
class MaRegExp extends RegExp {
+  [Symbol.match](str) {
+    var résultat = RegExp.prototype[Symbol.match].call(this, str);
+    if (!résultat) return null;
+    return {
+      group(n) {
+        return résultat[n];
+      }
+    };
+  }
+}
+
+var re = new MaRegExp('([0-9]+)-([0-9]+)-([0-9]+)');
+var str = '2016-01-02';
+var résultat = str.match(re); // String.prototype.match appelle re[@@match].
+console.log(résultat.group(1)); // 2016
+console.log(résultat.group(2)); // 01
+console.log(résultat.group(3)); // 02
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@match', 'RegExp.prototype[@@match]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@match', 'RegExp.prototype[@@match]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.@@match")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.html b/files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.html deleted file mode 100644 index 303390a68c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: RegExp.prototype[@@matchAll]() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@matchAll ---- -

{{JSRef}}

- -

La méthode [@@matchAll] renvoie l'ensemble des correspondances d'une expression rationnelle sur une chaîne de caractères.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@matchall.html")}}
- -

Syntaxe

- -
regexp[Symbol.matchAll](str)
- -

Paramètres

- -
-
str
-
Une chaîne de caractères ({{jsxref("String")}}) dont on souhaite trouver les correspondances.
-
- -

Valeur de retour

- -

Un itérateur.

- -

Description

- -

Cette méthode est appelée, en interne, par le moteur JavaScript, pendant l'exécution {{jsxref("String.prototype.matchAll()")}}. Les deux lignes qui suivent renverront donc le même résultat.

- -
'abc'.matchAll(/a/);
-
-/a/[Symbol.matchAll]('abc');
- -

Cette méthode existe afin de personnaliser le comportement des correspondances pour les sous-classes de RegExp.

- -

Exemples

- -

Appel direct

- -

Cette méthode peut être utilisée de façon semblable à {{jsxref("String.prototype.matchAll()")}} mais l'objet this et l'ordre des arguments seront différents.

- -
var re = /[0-9]+/g;
-var str = '2016-01-02';
-var resultat = re[Symbol.matchAll](str);
-
-console.log(Array.from(resultat, x => x[0]));
-// ["2016", "01", "02"]
-
- -

Utiliser @@matchAll dans une sous-classe

- -

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger la méthode [@@matchAll]() afin de modifier le comportement par défaut (par exemple pour renvoyer un tableau ({{jsxref("Array")}}) plutôt qu'un itérateur).

- -
class MaRegExp extends RegExp {
-  [Symbol.matchAll](str) {
-    var resultat = RegExp.prototype[Symbol.matchAll].call(this, str);
-    if (!resultat) {
-      return null;
-    } else {
-      return Array.from(resultat);
-    }
-  }
-}
-
-var re = new MaRegExp('([0-9]+)-([0-9]+)-([0-9]+)', 'g');
-var str = '2016-01-02|2019-03-07';
-var resultat = str.matchAll(re);
-console.log(resultat[0]); // [ "2016-01-02", "2016", "01", "02" ]
-console.log(resultat[1]); // [ "2019-03-07", "2019", "03", "07" ]
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-regexp-prototype-matchall', 'RegExp.prototype[@@matchAll]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.@@matchAll")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.md b/files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.md new file mode 100644 index 0000000000..303390a68c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/@@matchall/index.md @@ -0,0 +1,106 @@ +--- +title: RegExp.prototype[@@matchAll]() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@matchAll +--- +

{{JSRef}}

+ +

La méthode [@@matchAll] renvoie l'ensemble des correspondances d'une expression rationnelle sur une chaîne de caractères.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@matchall.html")}}
+ +

Syntaxe

+ +
regexp[Symbol.matchAll](str)
+ +

Paramètres

+ +
+
str
+
Une chaîne de caractères ({{jsxref("String")}}) dont on souhaite trouver les correspondances.
+
+ +

Valeur de retour

+ +

Un itérateur.

+ +

Description

+ +

Cette méthode est appelée, en interne, par le moteur JavaScript, pendant l'exécution {{jsxref("String.prototype.matchAll()")}}. Les deux lignes qui suivent renverront donc le même résultat.

+ +
'abc'.matchAll(/a/);
+
+/a/[Symbol.matchAll]('abc');
+ +

Cette méthode existe afin de personnaliser le comportement des correspondances pour les sous-classes de RegExp.

+ +

Exemples

+ +

Appel direct

+ +

Cette méthode peut être utilisée de façon semblable à {{jsxref("String.prototype.matchAll()")}} mais l'objet this et l'ordre des arguments seront différents.

+ +
var re = /[0-9]+/g;
+var str = '2016-01-02';
+var resultat = re[Symbol.matchAll](str);
+
+console.log(Array.from(resultat, x => x[0]));
+// ["2016", "01", "02"]
+
+ +

Utiliser @@matchAll dans une sous-classe

+ +

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger la méthode [@@matchAll]() afin de modifier le comportement par défaut (par exemple pour renvoyer un tableau ({{jsxref("Array")}}) plutôt qu'un itérateur).

+ +
class MaRegExp extends RegExp {
+  [Symbol.matchAll](str) {
+    var resultat = RegExp.prototype[Symbol.matchAll].call(this, str);
+    if (!resultat) {
+      return null;
+    } else {
+      return Array.from(resultat);
+    }
+  }
+}
+
+var re = new MaRegExp('([0-9]+)-([0-9]+)-([0-9]+)', 'g');
+var str = '2016-01-02|2019-03-07';
+var resultat = str.matchAll(re);
+console.log(resultat[0]); // [ "2016-01-02", "2016", "01", "02" ]
+console.log(resultat[1]); // [ "2019-03-07", "2019", "03", "07" ]
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-regexp-prototype-matchall', 'RegExp.prototype[@@matchAll]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.@@matchAll")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.html b/files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.html deleted file mode 100644 index 699bb1ad11..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: RegExp.prototype[@@replace]() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@replace ---- -
{{JSRef}}
- -

La méthode [@@replace]() remplace toutes ou certaines correspondances d'un motif this dans une chaîne de caractère avec un outil de remplacement. La valeur renvoyée est la nouvelle chaîne ainsi créée. Cet outil de remplacement peut être une chaîne de caractère ou une fonction appelée pour chacune des correspondances.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@replace.html")}}
- -

Syntaxe

- -
regexp[Symbol.replace](str, newSubStr|function)
- -

Paramètres

- -
-
str
-
Une chaîne de caractères ({{jsxref("String")}}) pour laquelle on souhaite effectuer des remplacement.
-
newSubStr (replacement)
-
La chaîne de caractères qui remplace les correspondances trouvées. On peut effectuer le remplacement sur un nombre donné de correspondances (cf. la section {{jsxref("String.prototype.replace", "Utiliser une chaîne de caractères comme paramètre", "#Utiliser_une_chaîne_de_caractère_comme_paramètre", 1)}} de la page {{jsxref("String.prototype.replace()")}}).
-
function (replacement)
-
Une fonction qui est appelée pour créer la sous-chaîne de remplacement. Les arguments fournis à cette fonction sont décrits dans la section {{jsxref("String.prototype.replace", "Utiliser une chaîne de caractères comme paramètre", "#Utiliser_une_chaîne_de_caractère_comme_paramètre", 1)}} de la page {{jsxref("String.prototype.replace()")}}.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères pour laquelle les correspondances (toutes ou une partie) ont été remplacées.

- -

Description

- -

Cette méthode est appelée de façon interne par la méthode {{jsxref("String.prototype.replace()")}} lorsque l'arugment pattern argument est un objet {{jsxref("RegExp")}}. Les deux lignes de code qui suivent sont équivalentes et la seconde est la version interne de la première :

- -
'abc'.replace(/a/, 'A');
-
-/a/[Symbol.replace]('abc', 'A');
- -

Cette méthode existe afin de pouvoir personnaliser le comportement du remplacement pour les classes filles de RegExp.

- -

Si l'argument décrivant le motif n'est pas un objet {{jsxref("RegExp")}}, {{jsxref("String.prototype.replace()")}} n'appellera pas cette méthode et ne créera pas d'objet {{jsxref("RegExp")}}.

- -

Exemples

- -

Appel direct

- -

Cette méthode peut être utilisée comme {{jsxref("String.prototype.replace()")}}, aux différences près que l'objet this est différent et que l'ordre des arguments change :

- -
var re = /-/g;
-var str = '2016-01-01';
-var newstr = re[Symbol.replace](str, '.');
-console.log(newstr);  // 2016.01.01
-
- -

Utiliser @@replace dans une sous-classe

- -

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger la méthode [@@replace]() pour modifier le comportement.

- -
class MaRegExp extends RegExp {
-  constructor(pattern, flags, count) {
-    super(pattern, flags);
-    this.count = count;
-  }
-  [Symbol.replace](str, replacement) {
-    // Applique @@replace |count| fois.
-    var result = str;
-    for (var i = 0; i < this.count; i++) {
-      result = RegExp.prototype[Symbol.replace].call(this, result, replacement);
-    }
-    return result;
-  }
-}
-
-var re = new MaRegExp('\\d', '', 3);
-var str = '01234567';
-var newstr = str.replace(re, '#'); // String.prototype.replace appelle re[@@replace].
-console.log(newstr); // ###34567
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@replace', 'RegExp.prototype[@@replace]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@replace', 'RegExp.prototype[@@replace]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.@@replace")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.md b/files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.md new file mode 100644 index 0000000000..699bb1ad11 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/@@replace/index.md @@ -0,0 +1,121 @@ +--- +title: RegExp.prototype[@@replace]() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@replace +--- +
{{JSRef}}
+ +

La méthode [@@replace]() remplace toutes ou certaines correspondances d'un motif this dans une chaîne de caractère avec un outil de remplacement. La valeur renvoyée est la nouvelle chaîne ainsi créée. Cet outil de remplacement peut être une chaîne de caractère ou une fonction appelée pour chacune des correspondances.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@replace.html")}}
+ +

Syntaxe

+ +
regexp[Symbol.replace](str, newSubStr|function)
+ +

Paramètres

+ +
+
str
+
Une chaîne de caractères ({{jsxref("String")}}) pour laquelle on souhaite effectuer des remplacement.
+
newSubStr (replacement)
+
La chaîne de caractères qui remplace les correspondances trouvées. On peut effectuer le remplacement sur un nombre donné de correspondances (cf. la section {{jsxref("String.prototype.replace", "Utiliser une chaîne de caractères comme paramètre", "#Utiliser_une_chaîne_de_caractère_comme_paramètre", 1)}} de la page {{jsxref("String.prototype.replace()")}}).
+
function (replacement)
+
Une fonction qui est appelée pour créer la sous-chaîne de remplacement. Les arguments fournis à cette fonction sont décrits dans la section {{jsxref("String.prototype.replace", "Utiliser une chaîne de caractères comme paramètre", "#Utiliser_une_chaîne_de_caractère_comme_paramètre", 1)}} de la page {{jsxref("String.prototype.replace()")}}.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères pour laquelle les correspondances (toutes ou une partie) ont été remplacées.

+ +

Description

+ +

Cette méthode est appelée de façon interne par la méthode {{jsxref("String.prototype.replace()")}} lorsque l'arugment pattern argument est un objet {{jsxref("RegExp")}}. Les deux lignes de code qui suivent sont équivalentes et la seconde est la version interne de la première :

+ +
'abc'.replace(/a/, 'A');
+
+/a/[Symbol.replace]('abc', 'A');
+ +

Cette méthode existe afin de pouvoir personnaliser le comportement du remplacement pour les classes filles de RegExp.

+ +

Si l'argument décrivant le motif n'est pas un objet {{jsxref("RegExp")}}, {{jsxref("String.prototype.replace()")}} n'appellera pas cette méthode et ne créera pas d'objet {{jsxref("RegExp")}}.

+ +

Exemples

+ +

Appel direct

+ +

Cette méthode peut être utilisée comme {{jsxref("String.prototype.replace()")}}, aux différences près que l'objet this est différent et que l'ordre des arguments change :

+ +
var re = /-/g;
+var str = '2016-01-01';
+var newstr = re[Symbol.replace](str, '.');
+console.log(newstr);  // 2016.01.01
+
+ +

Utiliser @@replace dans une sous-classe

+ +

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger la méthode [@@replace]() pour modifier le comportement.

+ +
class MaRegExp extends RegExp {
+  constructor(pattern, flags, count) {
+    super(pattern, flags);
+    this.count = count;
+  }
+  [Symbol.replace](str, replacement) {
+    // Applique @@replace |count| fois.
+    var result = str;
+    for (var i = 0; i < this.count; i++) {
+      result = RegExp.prototype[Symbol.replace].call(this, result, replacement);
+    }
+    return result;
+  }
+}
+
+var re = new MaRegExp('\\d', '', 3);
+var str = '01234567';
+var newstr = str.replace(re, '#'); // String.prototype.replace appelle re[@@replace].
+console.log(newstr); // ###34567
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@replace', 'RegExp.prototype[@@replace]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@replace', 'RegExp.prototype[@@replace]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.@@replace")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@search/index.html b/files/fr/web/javascript/reference/global_objects/regexp/@@search/index.html deleted file mode 100644 index 0865f313ed..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/@@search/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: RegExp.prototype[@@search]() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search -tags: - - Expressions rationnelles - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@search ---- -
{{JSRef}}
- -

La méthode [@@search]() recherche une correspondance entre une expression rationnelle décrite par this et une chaîne de caractères donnée.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@search.html")}}
- -

Syntaxe

- -
regexp[Symbol.search](str)
- -

Paramètres

- -
-
str
-
Une chaîne de caractères ({{jsxref("String")}}) sur laquelle on veut rechercher une correspondance.
-
- -

Valeur de retour

- -
-
entier
-
Si la recherche réussit, [@@search]() renvoie la position de la première correspondance de l'expression rationnelle au sein de la chaîne, sinon elle renvoie -1.
-
- -

Description

- -

Cette méthode est appelée en interne lors de l'utilisation de {{jsxref("String.prototype.search()")}}. Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :

- -
'abc'.search(/a/);
-
-/a/[Symbol.search]('abc');
- -

Cette méthode existe afin de pouvoir adapter le comportement de la recherche pour les sous-classes de RegExp.

- -

Exemples

- -

Appel direct

- -

Cette méthode peut être utilisée comme {{jsxref("String.prototype.search()")}}, elle utilise simplement un objet this différent et un ordre de paramètres différent :

- -
var re = /-/g;
-var str = '2016-01-02';
-var résultat = re[Symbol.search](str);
-console.log(résultat);  // 4
-
- -

Utiliser @@search avec une sous-classe

- -

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger [@@search]() afin de modifier le comportement obtenu :

- -
class MaRegExp extends RegExp {
-  constructor(str) {
-    super(str)
-    this.pattern = str;
-  }
-  [Symbol.search](str) {
-    return str.indexOf(this.pattern);
-  }
-}
-
-var re = new MaRegExp('a+b');
-var str = 'ab a+b';
-var résultat = str.search(re); // String.prototype.search appelle re[@@search].
-console.log(résultat); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.@@search")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@search/index.md b/files/fr/web/javascript/reference/global_objects/regexp/@@search/index.md new file mode 100644 index 0000000000..0865f313ed --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/@@search/index.md @@ -0,0 +1,115 @@ +--- +title: RegExp.prototype[@@search]() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search +tags: + - Expressions rationnelles + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@search +--- +
{{JSRef}}
+ +

La méthode [@@search]() recherche une correspondance entre une expression rationnelle décrite par this et une chaîne de caractères donnée.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@search.html")}}
+ +

Syntaxe

+ +
regexp[Symbol.search](str)
+ +

Paramètres

+ +
+
str
+
Une chaîne de caractères ({{jsxref("String")}}) sur laquelle on veut rechercher une correspondance.
+
+ +

Valeur de retour

+ +
+
entier
+
Si la recherche réussit, [@@search]() renvoie la position de la première correspondance de l'expression rationnelle au sein de la chaîne, sinon elle renvoie -1.
+
+ +

Description

+ +

Cette méthode est appelée en interne lors de l'utilisation de {{jsxref("String.prototype.search()")}}. Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :

+ +
'abc'.search(/a/);
+
+/a/[Symbol.search]('abc');
+ +

Cette méthode existe afin de pouvoir adapter le comportement de la recherche pour les sous-classes de RegExp.

+ +

Exemples

+ +

Appel direct

+ +

Cette méthode peut être utilisée comme {{jsxref("String.prototype.search()")}}, elle utilise simplement un objet this différent et un ordre de paramètres différent :

+ +
var re = /-/g;
+var str = '2016-01-02';
+var résultat = re[Symbol.search](str);
+console.log(résultat);  // 4
+
+ +

Utiliser @@search avec une sous-classe

+ +

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger [@@search]() afin de modifier le comportement obtenu :

+ +
class MaRegExp extends RegExp {
+  constructor(str) {
+    super(str)
+    this.pattern = str;
+  }
+  [Symbol.search](str) {
+    return str.indexOf(this.pattern);
+  }
+}
+
+var re = new MaRegExp('a+b');
+var str = 'ab a+b';
+var résultat = str.search(re); // String.prototype.search appelle re[@@search].
+console.log(résultat); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.@@search")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@species/index.html b/files/fr/web/javascript/reference/global_objects/regexp/@@species/index.html deleted file mode 100644 index 22f0fbb375..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/@@species/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: get RegExp[@@species] -slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@species -tags: - - Expressions rationnelles - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@species -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@species ---- -
{{JSRef}}
- -

La propriété accesseur RegExp[@@species] renvoie le constructeur RegExp.

- -
{{EmbedInteractiveExample("pages/js/regexp-getregexp-@@species.html")}}
- -

Syntaxe

- -
RegExp[Symbol.species]
-
- -

Description

- -

L'accesseur species renvoie le constructeur par défaut pour les objets RegExp. Les constructeurs des sous-classes peuvent surcharger ce symbole afin de modifier l'affectation du constructeur.

- -

Exemples

- -

La propriété species renvoie le constructeur par défaut, dans le cas des objets RegExp, c'est le constructeur RegExp :

- -
RegExp[Symbol.species]; // function RegExp()
- -

Pour les objets dérivés (par exemple, une classe MaRegExp), la valeur de species sera le constructeur MaRegExp. Il est possible de surcharger ce comportement afin de renvoyer le constructeur parent RegExp :

- -
class MaRegExp extends RegExp {
-  // On surcharge species pour renvoyer
-  // le constructeur parent RegExp
-  static get [Symbol.species]() { return RegExp; }
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-regexp-@@species', 'get RegExp [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp-@@species', 'get RegExp [ @@species ]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.@@species")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@species/index.md b/files/fr/web/javascript/reference/global_objects/regexp/@@species/index.md new file mode 100644 index 0000000000..22f0fbb375 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/@@species/index.md @@ -0,0 +1,74 @@ +--- +title: get RegExp[@@species] +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@species +tags: + - Expressions rationnelles + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@species +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@species +--- +
{{JSRef}}
+ +

La propriété accesseur RegExp[@@species] renvoie le constructeur RegExp.

+ +
{{EmbedInteractiveExample("pages/js/regexp-getregexp-@@species.html")}}
+ +

Syntaxe

+ +
RegExp[Symbol.species]
+
+ +

Description

+ +

L'accesseur species renvoie le constructeur par défaut pour les objets RegExp. Les constructeurs des sous-classes peuvent surcharger ce symbole afin de modifier l'affectation du constructeur.

+ +

Exemples

+ +

La propriété species renvoie le constructeur par défaut, dans le cas des objets RegExp, c'est le constructeur RegExp :

+ +
RegExp[Symbol.species]; // function RegExp()
+ +

Pour les objets dérivés (par exemple, une classe MaRegExp), la valeur de species sera le constructeur MaRegExp. Il est possible de surcharger ce comportement afin de renvoyer le constructeur parent RegExp :

+ +
class MaRegExp extends RegExp {
+  // On surcharge species pour renvoyer
+  // le constructeur parent RegExp
+  static get [Symbol.species]() { return RegExp; }
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-regexp-@@species', 'get RegExp [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp-@@species', 'get RegExp [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.@@species")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@split/index.html b/files/fr/web/javascript/reference/global_objects/regexp/@@split/index.html deleted file mode 100644 index 99fcaf30d4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/@@split/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: RegExp.prototype[@@split]() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@split -tags: - - Expressions rationnelles - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@split -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@split ---- -
{{JSRef}}
- -

La méthode [@@split]() permet de découper une chaîne de caractères ({{jsxref("String")}}) en un tableau de sous-chaînes.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@split.html")}}
- -

Syntaxe

- -
regexp[Symbol.split](str[, limite])
- -

Paramètres

- -
-
str
-
La chaîne de caractères qu'on souhaite découper.
-
limite
-
-

Paramètre optionnel. Un entier indiquant le nombre maximal de sous-chaînes à trouver. La méthode [@@split]() découpe la chaîne pour chaque correspondance de l'expression rationnelle this jusqu'à ce que le nombre d'éléments obtenus atteigne cette limite ou que la chaîne n'ait plus de correspondances.

-
-
- -

Valeur de retour

- -

Un tableau ({{jsxref("Array")}}) dont les éléments sont les sous-chaînes de caractères issues de la découpe.

- -

Description

- -

Cette méthode est appelée de façon interne par la méthode {{jsxref("String.prototype.split()")}} lorsque l'argument str est un objet {{jsxref("RegExp")}}. Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :

- -
'a-b-c'.split(/-/);
-
-/-/[Symbol.split]('a-b-c');
- -

Cette méthode existe afin de pouvoir adapter le fonctionnement de la découpe pour les sous-classes de RegExp.

- -

Si le séparateur n'est pas un objet {{jsxref("RegExp")}}, la méthode {{jsxref("String.prototype.split()")}} n'appellera pas cette méthode et ne créera pas d'objet {{jsxref("RegExp")}}.

- -

Exemples

- -

Appel direct

- -

Cette méthode peut être utilisée comme  {{jsxref("String.prototype.split()")}}, l'objet this est différent et l'ordre des arguments également.

- -
var re = /-/g;
-var str = '2016-01-02';
-var résultat = re[Symbol.split](str);
-console.log(résultat);  // ["2016", "01", "02"]
-
- -

Utiliser @@split avec une sous-classe

- -

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger  [@@split]() afin de modifier le comportement de la découpe :

- -
class MaRegExp extends RegExp {
-  [Symbol.split](str, limit) {
-    var résultat = RegExp.prototype[Symbol.split].call(this, str, limit);
-    return résultat.map(x => "(" + x + ")");
-  }
-}
-
-var re = new MaRegExp('-');
-var str = '2016-01-02';
-var résultat = str.split(re); // String.prototype.split appelle re[@@split].
-console.log(résultat); // ["(2016)", "(01)", "(02)"]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@split', 'RegExp.prototype[@@split]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@split', 'RegExp.prototype[@@split]')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.@@split")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/@@split/index.md b/files/fr/web/javascript/reference/global_objects/regexp/@@split/index.md new file mode 100644 index 0000000000..99fcaf30d4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/@@split/index.md @@ -0,0 +1,115 @@ +--- +title: RegExp.prototype[@@split]() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@split +tags: + - Expressions rationnelles + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@split +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@split +--- +
{{JSRef}}
+ +

La méthode [@@split]() permet de découper une chaîne de caractères ({{jsxref("String")}}) en un tableau de sous-chaînes.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-@@split.html")}}
+ +

Syntaxe

+ +
regexp[Symbol.split](str[, limite])
+ +

Paramètres

+ +
+
str
+
La chaîne de caractères qu'on souhaite découper.
+
limite
+
+

Paramètre optionnel. Un entier indiquant le nombre maximal de sous-chaînes à trouver. La méthode [@@split]() découpe la chaîne pour chaque correspondance de l'expression rationnelle this jusqu'à ce que le nombre d'éléments obtenus atteigne cette limite ou que la chaîne n'ait plus de correspondances.

+
+
+ +

Valeur de retour

+ +

Un tableau ({{jsxref("Array")}}) dont les éléments sont les sous-chaînes de caractères issues de la découpe.

+ +

Description

+ +

Cette méthode est appelée de façon interne par la méthode {{jsxref("String.prototype.split()")}} lorsque l'argument str est un objet {{jsxref("RegExp")}}. Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :

+ +
'a-b-c'.split(/-/);
+
+/-/[Symbol.split]('a-b-c');
+ +

Cette méthode existe afin de pouvoir adapter le fonctionnement de la découpe pour les sous-classes de RegExp.

+ +

Si le séparateur n'est pas un objet {{jsxref("RegExp")}}, la méthode {{jsxref("String.prototype.split()")}} n'appellera pas cette méthode et ne créera pas d'objet {{jsxref("RegExp")}}.

+ +

Exemples

+ +

Appel direct

+ +

Cette méthode peut être utilisée comme  {{jsxref("String.prototype.split()")}}, l'objet this est différent et l'ordre des arguments également.

+ +
var re = /-/g;
+var str = '2016-01-02';
+var résultat = re[Symbol.split](str);
+console.log(résultat);  // ["2016", "01", "02"]
+
+ +

Utiliser @@split avec une sous-classe

+ +

Les sous-classes de {{jsxref("RegExp")}} peuvent surcharger  [@@split]() afin de modifier le comportement de la découpe :

+ +
class MaRegExp extends RegExp {
+  [Symbol.split](str, limit) {
+    var résultat = RegExp.prototype[Symbol.split].call(this, str, limit);
+    return résultat.map(x => "(" + x + ")");
+  }
+}
+
+var re = new MaRegExp('-');
+var str = '2016-01-02';
+var résultat = str.split(re); // String.prototype.split appelle re[@@split].
+console.log(résultat); // ["(2016)", "(01)", "(02)"]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-regexp.prototype-@@split', 'RegExp.prototype[@@split]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@split', 'RegExp.prototype[@@split]')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.@@split")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/compile/index.html b/files/fr/web/javascript/reference/global_objects/regexp/compile/index.html deleted file mode 100644 index d6002f1ba0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/compile/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: RegExp.prototype.compile() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/compile -tags: - - Deprecated - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/compile -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/compile ---- -
{{JSRef}} {{deprecated_header}}
- -

La méthode dépréciée compile() est utilisée afin de (re)compiler une expression rationnelle lors de l'exécution d'un script. Cette méthode effectue essentiellement les mêmes actions que le constructeur RegExp.

- -

Syntaxe

- -
regexObj.compile(motif, flags)
- -

Paramètres

- -
-
motif
-
Le texte de l'expression rationnelle.
-
flags
-
-

S'ils sont utilisés, les drapeaux (flags) peuvent être combinés avec les valeurs suivantes :

- -
-
g
-
correspondance globale
-
i
-
ignorer la casse
-
m
-
multiligne : on traite les caractères de début et de fin (^ et $) de façon à travailler sur plusieurs lignes (ils correspondent au début et à la fin de chaque ligne et non au début ou à la fin de la chaîne entière)
-
y
-
adhérence : ne recherche les correspondances qu'à partir de l'indice fourni par la propriété lastIndex de l'expression rationnelle dans la chaîne cible (la recherche n'est pas effectuée pour les indices suivants).
-
-
-
- -

Description

- -

La méthode compile est dépréciée. Pour obtenir le même effet, on utilisera le constructeur RegExp.

- -

Exemples

- -

Dans l'exemple qui suit, on voit comment réinitialiser le motif et les drapeaux d'une expression rationnelle grâce à  la méthode compile().

- -
var regexObj = new RegExp("toto", "gi");
-regexObj.compile("nouveau toto", "g");
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-regexp.prototype.compile', 'RegExp.prototype.compile')}}{{Spec2('ES6')}}Définition initiale dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-regexp.prototype.compile', 'RegExp.prototype.compile')}}{{Spec2('ESDraft')}}Définition initiale dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.compile")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/compile/index.md b/files/fr/web/javascript/reference/global_objects/regexp/compile/index.md new file mode 100644 index 0000000000..d6002f1ba0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/compile/index.md @@ -0,0 +1,86 @@ +--- +title: RegExp.prototype.compile() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/compile +tags: + - Deprecated + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/compile +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/compile +--- +
{{JSRef}} {{deprecated_header}}
+ +

La méthode dépréciée compile() est utilisée afin de (re)compiler une expression rationnelle lors de l'exécution d'un script. Cette méthode effectue essentiellement les mêmes actions que le constructeur RegExp.

+ +

Syntaxe

+ +
regexObj.compile(motif, flags)
+ +

Paramètres

+ +
+
motif
+
Le texte de l'expression rationnelle.
+
flags
+
+

S'ils sont utilisés, les drapeaux (flags) peuvent être combinés avec les valeurs suivantes :

+ +
+
g
+
correspondance globale
+
i
+
ignorer la casse
+
m
+
multiligne : on traite les caractères de début et de fin (^ et $) de façon à travailler sur plusieurs lignes (ils correspondent au début et à la fin de chaque ligne et non au début ou à la fin de la chaîne entière)
+
y
+
adhérence : ne recherche les correspondances qu'à partir de l'indice fourni par la propriété lastIndex de l'expression rationnelle dans la chaîne cible (la recherche n'est pas effectuée pour les indices suivants).
+
+
+
+ +

Description

+ +

La méthode compile est dépréciée. Pour obtenir le même effet, on utilisera le constructeur RegExp.

+ +

Exemples

+ +

Dans l'exemple qui suit, on voit comment réinitialiser le motif et les drapeaux d'une expression rationnelle grâce à  la méthode compile().

+ +
var regexObj = new RegExp("toto", "gi");
+regexObj.compile("nouveau toto", "g");
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-regexp.prototype.compile', 'RegExp.prototype.compile')}}{{Spec2('ES6')}}Définition initiale dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-regexp.prototype.compile', 'RegExp.prototype.compile')}}{{Spec2('ESDraft')}}Définition initiale dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.compile")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/dotall/index.html b/files/fr/web/javascript/reference/global_objects/regexp/dotall/index.html deleted file mode 100644 index d3942bbb9a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/dotall/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: RegExp.prototype.dotAll -slug: Web/JavaScript/Reference/Global_Objects/RegExp/dotAll -tags: - - Draft - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/dotAll -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/dotAll ---- -

{{JSRef}}{{Draft}}

- -

La propriété dotAll indique si le marqueur "s" est utilisé pour l'expression rationnelle. dotAll est une propriété en lecture seule et qui renseigne à propos de l'expression rationnelle courante.

- -

{{JS_Property_Attributes(0, 0, 1)}}

- -

Description

- -

dotAll est un booléen qui vaut true si le marqueur "s" a été utilisé pour l'expression et false sinon. Le marqueur "s" indique que le caractère spécial point (".") doit également correspondre aux caractères de saut de ligne (et pour lesquels il ne correspondrait pas s'il n'était pas activé) :

- - - -

Cela signifie ainsi que le point peut correspondre à n'importe quel caractère du plan multilingue de base Unicode (ou Basic Multilingual Plane (BMP)). Si on souhaite également cibler les caractères des plans astraux, il faudra utiliser le marqueur "u" (unicode). En utilisant les deux marqueurs simultanément, on peut alors cibler n'importe quel caractère Unicode.

- -

Cette propriété est uniquement accessible en lecture et ne peut pas être modifiée.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.dotAll")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/dotall/index.md b/files/fr/web/javascript/reference/global_objects/regexp/dotall/index.md new file mode 100644 index 0000000000..d3942bbb9a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/dotall/index.md @@ -0,0 +1,49 @@ +--- +title: RegExp.prototype.dotAll +slug: Web/JavaScript/Reference/Global_Objects/RegExp/dotAll +tags: + - Draft + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/dotAll +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/dotAll +--- +

{{JSRef}}{{Draft}}

+ +

La propriété dotAll indique si le marqueur "s" est utilisé pour l'expression rationnelle. dotAll est une propriété en lecture seule et qui renseigne à propos de l'expression rationnelle courante.

+ +

{{JS_Property_Attributes(0, 0, 1)}}

+ +

Description

+ +

dotAll est un booléen qui vaut true si le marqueur "s" a été utilisé pour l'expression et false sinon. Le marqueur "s" indique que le caractère spécial point (".") doit également correspondre aux caractères de saut de ligne (et pour lesquels il ne correspondrait pas s'il n'était pas activé) :

+ + + +

Cela signifie ainsi que le point peut correspondre à n'importe quel caractère du plan multilingue de base Unicode (ou Basic Multilingual Plane (BMP)). Si on souhaite également cibler les caractères des plans astraux, il faudra utiliser le marqueur "u" (unicode). En utilisant les deux marqueurs simultanément, on peut alors cibler n'importe quel caractère Unicode.

+ +

Cette propriété est uniquement accessible en lecture et ne peut pas être modifiée.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.dotAll")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/exec/index.html b/files/fr/web/javascript/reference/global_objects/regexp/exec/index.html deleted file mode 100644 index 3245c98358..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/exec/index.html +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: RegExp.prototype.exec() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/exec -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/exec ---- -
{{JSRef}}
- -

La méthode exec() exécute la recherche d'une correspondance sur une chaîne de caractères donnée. Elle renvoie un tableau contenant les résultats ou {{jsxref("null")}}.

- -

Si on souhaite uniquement savoir s'il y a une correspondance, on utilisera la méthode {{jsxref("RegExp.prototype.test()")}} ou la méthode {{jsxref("String.prototype.search()")}}.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-exec.html")}}
- - - -

Les objets représentant des expressions rationnelles gardent un état en mémoire lorsqu'ils utilisent les marqueurs {{jsxref("RegExp.global", "global")}} ou {{jsxref("RegExp.sticky", "sticky")}} et ils gardent notamment en mémoire {{jsxref("RegExp.lastIndex", "lastIndex")}} à partir de la correspondance précédemment trouvée. Ainsi, exec() peut être utilisée afin de parcourir plusieurs correspondances dans un texte (avec des groupes capturants) (contrairement à {{jsxref("String.prototype.match()")}}).

- -

Syntaxe

- -
regexObj.exec(chaîne)
- -

Paramètres

- -
-
chaîne
-
La chaîne de caractères dans laquelle on recherche la correspondance décrite par l'expression rationnelle.
-
- -

Valeur de retour

- -

S'il y a une correspondance, la méthode exec() renvoie un tableau (contenant des éléments et deux propriétés index et values, cf. ci-après) et met à jour les propriétés de l'objet représentant l'expression rationnelle (notamment {{jsxref("RegExp.lastIndex", "lastIndex")}}). Le tableau renvoyé contient le texte qui correspond dans le premier élément puis un élément pour chaque groupe capturé dans les parenthèses capturantes.

- -

S'il n'y a aucune correspondance, la méthode exec() renvoie {{jsxref("null")}} et la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} reçoit la valeur 0.

- -

Description

- -

Si on a l'exemple suivant :

- -
// On a une correspondance si on a "quick brown" suivi par "jumps", on ignore les caractères entre
-// On garde en mémoire "brown" et "jumps"
-// On ignore la casse
-var re = /quick\s(brown).+?(jumps)/ig;
-var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
-
- -

Le tableau suivant montre l'état résultant suite à ce script :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ObjetPropriété/IndexDescriptionExemple
result[0]La chaîne complète des caractères qui correspondent."Quick Brown Fox Jumps"
[1], ...[n ]Les sous-chaînes correspondantes aux groupes capturants s'il y en a. Le nombre de groupes de parenthèses capturantes est illimité.result[1] === "Brown"
- result[2] === "Jumps"
indexL'indice (compté à partir de 0) de la correspondance dans la chaîne.4
inputLa chaîne de caractères utilisée en entrée."The Quick Brown Fox Jumps Over The Lazy Dog"
relastIndexL'indice à partir duquel chercher la prochaine correspondance. Lorsque le drapeau "g" est absent, cette propriété sera 0.25
ignoreCaseIndique si le drapeau "i" a été utilisé pour ignorer la casse.true
globalIndique si le drapeau "g" a été utilisé pour la correspondance globale.true
multilineIndique si le drapeau "m" a été utilisé pour chercher une correspondance sur plusieurs lignes.false
sourceLe texte du motif."quick\s(brown).+?(jumps)"
- -

Exemples

- -

Trouver des correspondances successives

- -

Si on utilise le drapeau "g" dans l'expression rationnelle, on peut utiliser la méthode exec() plusieurs fois afin de trouver les correspondances successives dans la chaîne. Lorsqu'on procède ainsi, la recherche reprend à la position indiquée par la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ({{jsxref("RegExp.prototype.test()", "test()")}} fera également progresser la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}}).

- -

On notera que la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ne sera pas réinitialisée lors de la recherche sur une autre chaîne de caractères, c'est la valeur existante de {{jsxref("RegExp.lastIndex", "lastIndex")}} qui sera utilisée.

- -

Par exemple, si on utilise le fragment de code suivant :

- -
var maRegex = /ab*/g;
-var str = 'abbcdefabh';
-var monTableau;
-while ((monTableau = maRegex.exec(str)) !== null) {
-  var msg = 'Trouvé ' + monTableau[0] + '. ';
-  msg += 'Prochaine correspondance à partir de ' + maRegex.lastIndex;
-  console.log(msg);
-}
-
- -

Le script affichera alors :

- -
Trouvé abb. Prochaine correspondance à partir de 3
-Trouvé ab. Prochaine correspondance à partir de 9
-
- -
-

Attention : Il ne faut pas placer un littéral d'expression rationnelle (ou le constructeur {{jsxref("RegExp")}}) au sein de la condition while car cela créerait un boucle infinie s'il y a une correspondance car la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} serait redéfinie à chaque itération. Il faut également s'assurer que le drapeau global est défini sinon on aura également une boucle.

-
- -

Utiliser exec() avec des littéraux

- -

Il est aussi possible d'utiliser exec() sans créer d'objet {{jsxref("RegExp")}} explicite :

- -
var matches = /(coucou \S+)/.exec('Ceci est un coucou monde !');
-console.log(matches[1]);
-
- -

Cela affichera 'coucou monde !'.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.exec")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/exec/index.md b/files/fr/web/javascript/reference/global_objects/regexp/exec/index.md new file mode 100644 index 0000000000..3245c98358 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/exec/index.md @@ -0,0 +1,199 @@ +--- +title: RegExp.prototype.exec() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/exec +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/exec +--- +
{{JSRef}}
+ +

La méthode exec() exécute la recherche d'une correspondance sur une chaîne de caractères donnée. Elle renvoie un tableau contenant les résultats ou {{jsxref("null")}}.

+ +

Si on souhaite uniquement savoir s'il y a une correspondance, on utilisera la méthode {{jsxref("RegExp.prototype.test()")}} ou la méthode {{jsxref("String.prototype.search()")}}.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-exec.html")}}
+ + + +

Les objets représentant des expressions rationnelles gardent un état en mémoire lorsqu'ils utilisent les marqueurs {{jsxref("RegExp.global", "global")}} ou {{jsxref("RegExp.sticky", "sticky")}} et ils gardent notamment en mémoire {{jsxref("RegExp.lastIndex", "lastIndex")}} à partir de la correspondance précédemment trouvée. Ainsi, exec() peut être utilisée afin de parcourir plusieurs correspondances dans un texte (avec des groupes capturants) (contrairement à {{jsxref("String.prototype.match()")}}).

+ +

Syntaxe

+ +
regexObj.exec(chaîne)
+ +

Paramètres

+ +
+
chaîne
+
La chaîne de caractères dans laquelle on recherche la correspondance décrite par l'expression rationnelle.
+
+ +

Valeur de retour

+ +

S'il y a une correspondance, la méthode exec() renvoie un tableau (contenant des éléments et deux propriétés index et values, cf. ci-après) et met à jour les propriétés de l'objet représentant l'expression rationnelle (notamment {{jsxref("RegExp.lastIndex", "lastIndex")}}). Le tableau renvoyé contient le texte qui correspond dans le premier élément puis un élément pour chaque groupe capturé dans les parenthèses capturantes.

+ +

S'il n'y a aucune correspondance, la méthode exec() renvoie {{jsxref("null")}} et la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} reçoit la valeur 0.

+ +

Description

+ +

Si on a l'exemple suivant :

+ +
// On a une correspondance si on a "quick brown" suivi par "jumps", on ignore les caractères entre
+// On garde en mémoire "brown" et "jumps"
+// On ignore la casse
+var re = /quick\s(brown).+?(jumps)/ig;
+var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
+
+ +

Le tableau suivant montre l'état résultant suite à ce script :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ObjetPropriété/IndexDescriptionExemple
result[0]La chaîne complète des caractères qui correspondent."Quick Brown Fox Jumps"
[1], ...[n ]Les sous-chaînes correspondantes aux groupes capturants s'il y en a. Le nombre de groupes de parenthèses capturantes est illimité.result[1] === "Brown"
+ result[2] === "Jumps"
indexL'indice (compté à partir de 0) de la correspondance dans la chaîne.4
inputLa chaîne de caractères utilisée en entrée."The Quick Brown Fox Jumps Over The Lazy Dog"
relastIndexL'indice à partir duquel chercher la prochaine correspondance. Lorsque le drapeau "g" est absent, cette propriété sera 0.25
ignoreCaseIndique si le drapeau "i" a été utilisé pour ignorer la casse.true
globalIndique si le drapeau "g" a été utilisé pour la correspondance globale.true
multilineIndique si le drapeau "m" a été utilisé pour chercher une correspondance sur plusieurs lignes.false
sourceLe texte du motif."quick\s(brown).+?(jumps)"
+ +

Exemples

+ +

Trouver des correspondances successives

+ +

Si on utilise le drapeau "g" dans l'expression rationnelle, on peut utiliser la méthode exec() plusieurs fois afin de trouver les correspondances successives dans la chaîne. Lorsqu'on procède ainsi, la recherche reprend à la position indiquée par la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ({{jsxref("RegExp.prototype.test()", "test()")}} fera également progresser la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}}).

+ +

On notera que la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ne sera pas réinitialisée lors de la recherche sur une autre chaîne de caractères, c'est la valeur existante de {{jsxref("RegExp.lastIndex", "lastIndex")}} qui sera utilisée.

+ +

Par exemple, si on utilise le fragment de code suivant :

+ +
var maRegex = /ab*/g;
+var str = 'abbcdefabh';
+var monTableau;
+while ((monTableau = maRegex.exec(str)) !== null) {
+  var msg = 'Trouvé ' + monTableau[0] + '. ';
+  msg += 'Prochaine correspondance à partir de ' + maRegex.lastIndex;
+  console.log(msg);
+}
+
+ +

Le script affichera alors :

+ +
Trouvé abb. Prochaine correspondance à partir de 3
+Trouvé ab. Prochaine correspondance à partir de 9
+
+ +
+

Attention : Il ne faut pas placer un littéral d'expression rationnelle (ou le constructeur {{jsxref("RegExp")}}) au sein de la condition while car cela créerait un boucle infinie s'il y a une correspondance car la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} serait redéfinie à chaque itération. Il faut également s'assurer que le drapeau global est défini sinon on aura également une boucle.

+
+ +

Utiliser exec() avec des littéraux

+ +

Il est aussi possible d'utiliser exec() sans créer d'objet {{jsxref("RegExp")}} explicite :

+ +
var matches = /(coucou \S+)/.exec('Ceci est un coucou monde !');
+console.log(matches[1]);
+
+ +

Cela affichera 'coucou monde !'.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.exec")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/flags/index.html b/files/fr/web/javascript/reference/global_objects/regexp/flags/index.html deleted file mode 100644 index f03a085b92..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/flags/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: RegExp.prototype.flags -slug: Web/JavaScript/Reference/Global_Objects/RegExp/flags -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/flags -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/flags ---- -
{{JSRef}}
- -

La propriété flags renvoie une chaîne de caractères contenant les drapeaux (flags) de l'objet {{jsxref("RegExp")}} auquel elle appartient.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-flags.html")}}
- - - -
{{js_property_attributes(0, 0, 1)}}
- -

Description

- -

Les drapeaux de la propriété flags sont rangés par ordre alphabétique de gauche à droite.

- -

Exemples

- -

Utiliser flags

- -
/toto/ig.flags;   // "gi"
-/truc/myu.flags;  // "muy"
-
- -

Prothèse d'émulation (polyfill)

- -
if (RegExp.prototype.flags === undefined) {
-  Object.defineProperty(RegExp.prototype, 'flags', {
-    configurable: true,
-    get: function() {
-      return this.toString().match(/[gimuy]*$/)[0];
-    }
-  });
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-regexp.prototype.flags', 'RegExp.prototype.flags')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.flags', 'RegExp.prototype.flags')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.flags")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/flags/index.md b/files/fr/web/javascript/reference/global_objects/regexp/flags/index.md new file mode 100644 index 0000000000..f03a085b92 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/flags/index.md @@ -0,0 +1,79 @@ +--- +title: RegExp.prototype.flags +slug: Web/JavaScript/Reference/Global_Objects/RegExp/flags +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/flags +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/flags +--- +
{{JSRef}}
+ +

La propriété flags renvoie une chaîne de caractères contenant les drapeaux (flags) de l'objet {{jsxref("RegExp")}} auquel elle appartient.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-flags.html")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

Description

+ +

Les drapeaux de la propriété flags sont rangés par ordre alphabétique de gauche à droite.

+ +

Exemples

+ +

Utiliser flags

+ +
/toto/ig.flags;   // "gi"
+/truc/myu.flags;  // "muy"
+
+ +

Prothèse d'émulation (polyfill)

+ +
if (RegExp.prototype.flags === undefined) {
+  Object.defineProperty(RegExp.prototype, 'flags', {
+    configurable: true,
+    get: function() {
+      return this.toString().match(/[gimuy]*$/)[0];
+    }
+  });
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-regexp.prototype.flags', 'RegExp.prototype.flags')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.flags', 'RegExp.prototype.flags')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.flags")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/global/index.html b/files/fr/web/javascript/reference/global_objects/regexp/global/index.html deleted file mode 100644 index 7702ec1769..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/global/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: RegExp.prototype.global -slug: Web/JavaScript/Reference/Global_Objects/RegExp/global -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/global -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/global ---- -
{{JSRef}}
- -

La propriété global indique si le marqueur (flag) "g" est utilisé pour l'expression rationnelle. global est une propriété accessible en lecture seule pour une expression rationnelle donnée.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-global.html")}}
- - - -
{{js_property_attributes(0,0,1)}}
- -

Description

- -

La valeur de global est un booléen. Elle vaut true si le flag "g" a été utilisé, false sinon. Le flag "g" indique que l'expression rationnelle recherchera toutes les correspondances possibles d'une chaîne de caractères. Lorsqu'une expression rationnelle utilise à la fois les marqueurs global et sticky (respectivement "g" et "y"), elle ignorera le marqueur global.

- -

Cette propriété ne peut pas être modifiée directement.

- -

Exemples

- -
var regex = new RegExp("toto", "g");
-
-console.log(regex.global); // true
-
-var str = 'totoexempletoto';
-var str1 = str.replace(regex, '');
-
-console.log(str1);  // affichera "exemple" dans la console
-
-var regex1 = new RegExp('toto');
-var str2 = str.replace(regex1, '');
-
-console.log(str2);  // affichera "exempletoto" dans la console
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : global est une propriété d'une instance de {{jsxref("RegExp")}} et non une propriété de l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.2', 'RegExp.prototype.global')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-get-regexp.prototype.global', 'RegExp.prototype.global')}}{{Spec2('ES6')}}global est désormais un accesseur lié au prototype plutôt qu'une propriété de données liée à l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.global', 'RegExp.prototype.global')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.global")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/global/index.md b/files/fr/web/javascript/reference/global_objects/regexp/global/index.md new file mode 100644 index 0000000000..7702ec1769 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/global/index.md @@ -0,0 +1,89 @@ +--- +title: RegExp.prototype.global +slug: Web/JavaScript/Reference/Global_Objects/RegExp/global +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/global +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/global +--- +
{{JSRef}}
+ +

La propriété global indique si le marqueur (flag) "g" est utilisé pour l'expression rationnelle. global est une propriété accessible en lecture seule pour une expression rationnelle donnée.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-global.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

Description

+ +

La valeur de global est un booléen. Elle vaut true si le flag "g" a été utilisé, false sinon. Le flag "g" indique que l'expression rationnelle recherchera toutes les correspondances possibles d'une chaîne de caractères. Lorsqu'une expression rationnelle utilise à la fois les marqueurs global et sticky (respectivement "g" et "y"), elle ignorera le marqueur global.

+ +

Cette propriété ne peut pas être modifiée directement.

+ +

Exemples

+ +
var regex = new RegExp("toto", "g");
+
+console.log(regex.global); // true
+
+var str = 'totoexempletoto';
+var str1 = str.replace(regex, '');
+
+console.log(str1);  // affichera "exemple" dans la console
+
+var regex1 = new RegExp('toto');
+var str2 = str.replace(regex1, '');
+
+console.log(str2);  // affichera "exempletoto" dans la console
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : global est une propriété d'une instance de {{jsxref("RegExp")}} et non une propriété de l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.2', 'RegExp.prototype.global')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-get-regexp.prototype.global', 'RegExp.prototype.global')}}{{Spec2('ES6')}}global est désormais un accesseur lié au prototype plutôt qu'une propriété de données liée à l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.global', 'RegExp.prototype.global')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.global")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.html b/files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.html deleted file mode 100644 index 22fecc736d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: RegExp.prototype.ignoreCase -slug: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/ignoreCase ---- -
{{JSRef}}
- -

La propriété ignoreCase indique si le drapeau (flag) "i" est utilisé ou non pour cette expression rationnelle. ignoreCase est une propriété accessible en lecture seule d'une instance d'expression rationnelle donnée.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-ignorecase.html")}}
- - - -
{{js_property_attributes(0,0,1)}}
- -

Description

- -

La valeur de ignoreCase est un booléen. Elle vaut true si le flag "i" a été utilisé et false sinon. Le drapeau "i" indique si la recherche de correspondances doit être sensible à la casse ou non.

- -

Cette propriété ne peut pas être modifiée directement.

- -

Exemples

- -
var regex = new RegExp("toto", "i");
-
-console.log(regex.ignoreCase); // true
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : ignoreCase est une propriété d'une instance de {{jsxref("RegExp")}} et pas une propriété de l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.3', 'RegExp.prototype.ignoreCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}{{Spec2('ES6')}}ignoreCase est désormais une propriété du prototype sous forme d'accesseur plutôt qu'une propriété directe de l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.builtins.RegExp.ignoreCase")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.md b/files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.md new file mode 100644 index 0000000000..22fecc736d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/ignorecase/index.md @@ -0,0 +1,82 @@ +--- +title: RegExp.prototype.ignoreCase +slug: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/ignoreCase +--- +
{{JSRef}}
+ +

La propriété ignoreCase indique si le drapeau (flag) "i" est utilisé ou non pour cette expression rationnelle. ignoreCase est une propriété accessible en lecture seule d'une instance d'expression rationnelle donnée.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-ignorecase.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

Description

+ +

La valeur de ignoreCase est un booléen. Elle vaut true si le flag "i" a été utilisé et false sinon. Le drapeau "i" indique si la recherche de correspondances doit être sensible à la casse ou non.

+ +

Cette propriété ne peut pas être modifiée directement.

+ +

Exemples

+ +
var regex = new RegExp("toto", "i");
+
+console.log(regex.ignoreCase); // true
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : ignoreCase est une propriété d'une instance de {{jsxref("RegExp")}} et pas une propriété de l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.3', 'RegExp.prototype.ignoreCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}{{Spec2('ES6')}}ignoreCase est désormais une propriété du prototype sous forme d'accesseur plutôt qu'une propriété directe de l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("javascript.builtins.RegExp.ignoreCase")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/index.html b/files/fr/web/javascript/reference/global_objects/regexp/index.html deleted file mode 100644 index 720207ce42..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/index.html +++ /dev/null @@ -1,240 +0,0 @@ ---- -title: RegExp -slug: Web/JavaScript/Reference/Global_Objects/RegExp -tags: - - Constructeur - - Expressions rationnelles - - JavaScript - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp ---- -
{{JSRef}}
- -

Le constructeur RegExp crée un objet expression rationnelle pour la reconnaissance d'un modèle dans un texte.

- -

Pour une introduction aux expressions rationnelles, lire le chapitre Expressions rationnelles dans le Guide JavaScript.

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

Syntaxe

- -

Les notations littérales, par constructeur ou de base sont possibles :

- -
/modèle/marqueurs
-new RegExp(modèle[, marqueurs])
-RegExp(modèle[, marqueurs])
-
- -

Paramètres

- -
-
modèle
-
Le texte de l'expression rationnelle ou, à partir d'ES5, un autre objet ou littéral RegExp à copier. Ce motif peut inclure certains caractères spéciaux pour correspondre à un ensemble de valeurs plus large (qu'une simple chaîne littérale).
-
marqueurs
-
-

Si cet argument est utilisé, il indique les marqueurs à utiliser pour l'expression rationnelle. Ces valeurs remplaceront celles de l'objet à copier si modèle est un objet RegExp (lastIndex sera réinitialisé à 0 à partir d'ECMAScript 2015 / ES6). Cet argument est une chaîne de caractères qui peut contenir une combinaison des valeurs suivantes:

- -
-
g
-
recherche globale ; retrouve toutes les correspondances plutôt que de s'arrêter après la première.
-
i
-
la casse est ignorée. Si le marqueur u est également activé, les caractères Unicode équivalents pour la casse correspondent.
-
m
-
multiligne : les caractères de début et de fin (^ et $) sont traités comme travaillant sur des lignes multiples (i.e, ils correspondent au début et à la fin de chaque ligne (délimitée par \n ou \r), pas seulement au début ou à la fin de la chaîne d'entrée complète).
-
u
-
unicode : traite le modèle comme une séquence de points de code Unicode (voir également les chaînes binaires).
-
y
-
adhérence : n'établit de correspondance qu'à partir de l'indice dans la chaîne cible indiqué par la propriété lastIndex de l'expression rationnelle (et ne cherche pas à établir de correspondance à partir d'indices au delà).
-
s
-
"dotAll" : permet d'indiquer que . peut correspondre à un saut de ligne.
-
-
-
- -

Description

- -

Il existe deux façons de créer un objet RegExp : une notation littérale ou un constructeur. La notation littérale est délimitée par des barres obliques (slashes) tandis que le constructeur utilise des apostrophes. Ainsi, les expressions suivantes créent la même expression rationnelle :

- -
/ab+c/i;                   // notation littérale
-new RegExp('ab+c', 'i');   // constructeur
-new RegExp(/ab+c/, 'i');   // notation littérale dans un constructeur
-
- -

La notation littérale effectue la compilation de l'expression rationnelle lorsque l'expression est évaluée. Utilisez la notation littérale lorsque l'expression rationnelle reste constante. Par exemple, si vous utilisez la notation littérale pour construire une expression rationnelle utilisée dans une boucle, l'expression rationnelle ne sera pas recompilée à chaque itération.

- -

Le constructeur de l'objet expression rationnelle, par exemple new RegExp('ab+c'), effectue la compilation de l'expression rationnelle au moment de l'exécution. Utilisez la fonction constructeur quand vous savez que le modèle d'une expression rationnelle sera variable, ou si vous ne connaissez pas le modèle et que vous l'obtiendrez d'une autre source, telle qu'une saisie utilisateur.

- -

À partir d'ECMAScript 6, new RegExp(/ab+c/, 'i') ne déclenche plus d'exception {{jsxref("TypeError")}} ("can't supply flags when constructing one RegExp from another") lorsque le premier argument est une RegExp et que le second argument marqueurs est présent. Une nouvelle RegExp sera créée à la place à partir des arguments.

- -

Lorsqu'on utilise le constructeur, les règles normales d'échappement de chaîne (le fait de faire précéder d'un \ les caractères spéciaux à l'intérieur d'une chaîne) sont requises. Par exemple, les définitions suivantes sont équivalentes :

- -
var re = /\w+/;
-var re = new RegExp('\\w+');
-
- -

Propriétés

- -
-
{{jsxref("RegExp.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à tous les objets qui sont des expressions rationnelles.
-
RegExp.length
-
La valeur de longueur pour le constructeur dont la valeur est 2.
-
{{jsxref("RegExp.@@species", "get RegExp[@@species]")}}
-
La fonction de construction utilisée pour créer les objets dérivés.
-
{{jsxref("RegExp.lastIndex")}}
-
L'indice à partir duquel rechercher la prochaine correspondance.
-
- -

Méthodes

- -

L'objet global RegExp ne possède pas de méthode propre. En revanche, il hérite de certaines méthodes via sa chaîne de prototypes.

- -

Le prototype de RegExp et les instances

- -

Propriétés

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/RegExp/prototype', 'Propriétés')}}
- -

Méthodes

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/RegExp/prototype', 'Méthodes')}}
- -

Exemples

- -

Utiliser une expression rationnelle pour modifier un format de données

- -

Dans le script suivant, on utilise la méthode {{jsxref("String.prototype.replace()", "replace()")}} de {{jsxref("String")}} pour effectuer une correspondance sur le prénom et le nom pour les inverser. On utilise des parenthèses capturantes pour pouvoir utiliser les correspondances dans la construction du résultat (avec $1 et $2).

- -
var re = /(\w+)\s(\w+)/;
-var chaîne = 'Alain Dupont';
-var nouvelleChaîne = chaîne.replace(re, '$2, $1');
-console.log(nouvelleChaîne);
-
- -

Cela affichera "Dupont, Alain".

- -

Utiliser une expression rationnelle pour découper des lignes avec différents sauts de ligne/fins de ligne

- -

La fin de ligne par défaut dépend de la plateforme (Unix, Windows, etc.). Cette méthode de découpage fournie permet de découper indépendamment de la plateforme utilisée.

- -
var texte = 'Un texte\net un autre\r\npuis ensuite\rla fin';
-var lignes = texte.split(/\r\n|\r|\n/);
-console.log(lignes); // affiche [ 'Un texte', 'et un autre', 'puis ensuite', 'la fin' ]
-
- -

On voit ici que l'ordre des modèles dans l'expression rationnelle importe.

- -

Utiliser une expression rationnelle sur plusieurs lignes

- -
var s = 'Et voici\nune autre ligne !';
-s.match(/voici.*ligne/);
-// Renvoie null
-s.match(/voici[^]*ligne/);
-// Renvoie ['voici\nune autre ligne']
-
- -

Utiliser une expression rationnelle avec le marqueur d'adhérence

- -

Cet exemple illustre comment on peut utiliser ce marqueur qui recherche une correspondance après {{jsxref("RegExp.prototype.lastIndex")}}.

- -
var str = '#toto#';
-var regex = /toto/y;
-
-regex.lastIndex; // 0
-regex.test(str); // true
-regex.lastIndex = 1;
-regex.test(str); // true
-regex.lastIndex = 5;
-regex.test(str); // false (lastIndex est pris en compte avec ce marqueur)
-regex.lastIndex; // 0 (réinitialisation suite à l'échec)
- -

Les expressions rationnelles et les caractères Unicode

- -

Comme mentionné ci-avant, les classes \w ou \W ne correspondent qu'à des caractères ASCII "a" à "z", "A" à "Z", "0" à "9" et "_". Pour effectuer des correspondances sur d'autres caractères (comme par exemple les caractères cyrilliques), on utilisera \uhhhh, où "hhhh" représente la valeur Unicode exprimée en hexadécimal. Cet exemple illustre comment il est possible de séparer les caractères Unicode d'un mot.

- -
var texte = 'Образец text на русском языке';
-var regex = /[\u0400-\u04FF]+/g;
-
-var corresp = regex.exec(texte);
-console.log(corresp[0]);      // affiche 'Образец'
-console.log(regex.lastIndex); // affiche '7'
-
-var corresp2 = regex.exec(texte);
-console.log(corresp2[0]);     // affiche 'на' (n'affiche pas text
-console.log(regex.lastIndex); // affiche '15'
-
-// et ainsi de suite
-
- -

Voici une ressource tierce pour obtenir les différents intervalles Unicode des différents alphabets : Regexp-unicode-block.

- -

Extraire un sous-domaine d'une URL

- -
var url = 'http://xxx.domaine.com';
-console.log(/[^.]+/.exec(url)[0].substr(7)); // affiche 'xxx'
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.10', 'RegExp')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-regexp-regular-expression-objects', 'RegExp')}}{{Spec2('ES6')}} -

Le constructeur RegExp ne renvoie plus d'exception lorsqu'il est utilisé avec un objet RegExp et que le second argument est utilisé. Ajout du marqueur d'adhérence et du marqueur Unicode.

-
{{SpecName('ESDraft', '#sec-regexp-regular-expression-objects', 'RegExp')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Notes spécifiques à Firefox

- -

À partir de Firefox 34, dans le cas où on utilise un groupe capturant avec des quantificateurs qui l'invalident, le texte correspondant au groupe est désormais undefined et non la chaîne vide :

- -
// Firefox 33 ou antérieur
-'x'.replace(/x(.)?/g, function(m, group) {
-  console.log("'group:" + group + "'");
-}); // 'group:'
-
-// Firefox 34 ou supérieur
-'x'.replace(/x(.)?/g, function(m, group) {
-  console.log("'group:" + group + "'");
-}); // 'group:undefined'
-
- -

Pour des raisons de compatibilité web, RegExp.$N renverra une chaîne vide au lieu de undefined ({{bug(1053944)}}).

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/index.md b/files/fr/web/javascript/reference/global_objects/regexp/index.md new file mode 100644 index 0000000000..720207ce42 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/index.md @@ -0,0 +1,240 @@ +--- +title: RegExp +slug: Web/JavaScript/Reference/Global_Objects/RegExp +tags: + - Constructeur + - Expressions rationnelles + - JavaScript + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp +--- +
{{JSRef}}
+ +

Le constructeur RegExp crée un objet expression rationnelle pour la reconnaissance d'un modèle dans un texte.

+ +

Pour une introduction aux expressions rationnelles, lire le chapitre Expressions rationnelles dans le Guide JavaScript.

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

Syntaxe

+ +

Les notations littérales, par constructeur ou de base sont possibles :

+ +
/modèle/marqueurs
+new RegExp(modèle[, marqueurs])
+RegExp(modèle[, marqueurs])
+
+ +

Paramètres

+ +
+
modèle
+
Le texte de l'expression rationnelle ou, à partir d'ES5, un autre objet ou littéral RegExp à copier. Ce motif peut inclure certains caractères spéciaux pour correspondre à un ensemble de valeurs plus large (qu'une simple chaîne littérale).
+
marqueurs
+
+

Si cet argument est utilisé, il indique les marqueurs à utiliser pour l'expression rationnelle. Ces valeurs remplaceront celles de l'objet à copier si modèle est un objet RegExp (lastIndex sera réinitialisé à 0 à partir d'ECMAScript 2015 / ES6). Cet argument est une chaîne de caractères qui peut contenir une combinaison des valeurs suivantes:

+ +
+
g
+
recherche globale ; retrouve toutes les correspondances plutôt que de s'arrêter après la première.
+
i
+
la casse est ignorée. Si le marqueur u est également activé, les caractères Unicode équivalents pour la casse correspondent.
+
m
+
multiligne : les caractères de début et de fin (^ et $) sont traités comme travaillant sur des lignes multiples (i.e, ils correspondent au début et à la fin de chaque ligne (délimitée par \n ou \r), pas seulement au début ou à la fin de la chaîne d'entrée complète).
+
u
+
unicode : traite le modèle comme une séquence de points de code Unicode (voir également les chaînes binaires).
+
y
+
adhérence : n'établit de correspondance qu'à partir de l'indice dans la chaîne cible indiqué par la propriété lastIndex de l'expression rationnelle (et ne cherche pas à établir de correspondance à partir d'indices au delà).
+
s
+
"dotAll" : permet d'indiquer que . peut correspondre à un saut de ligne.
+
+
+
+ +

Description

+ +

Il existe deux façons de créer un objet RegExp : une notation littérale ou un constructeur. La notation littérale est délimitée par des barres obliques (slashes) tandis que le constructeur utilise des apostrophes. Ainsi, les expressions suivantes créent la même expression rationnelle :

+ +
/ab+c/i;                   // notation littérale
+new RegExp('ab+c', 'i');   // constructeur
+new RegExp(/ab+c/, 'i');   // notation littérale dans un constructeur
+
+ +

La notation littérale effectue la compilation de l'expression rationnelle lorsque l'expression est évaluée. Utilisez la notation littérale lorsque l'expression rationnelle reste constante. Par exemple, si vous utilisez la notation littérale pour construire une expression rationnelle utilisée dans une boucle, l'expression rationnelle ne sera pas recompilée à chaque itération.

+ +

Le constructeur de l'objet expression rationnelle, par exemple new RegExp('ab+c'), effectue la compilation de l'expression rationnelle au moment de l'exécution. Utilisez la fonction constructeur quand vous savez que le modèle d'une expression rationnelle sera variable, ou si vous ne connaissez pas le modèle et que vous l'obtiendrez d'une autre source, telle qu'une saisie utilisateur.

+ +

À partir d'ECMAScript 6, new RegExp(/ab+c/, 'i') ne déclenche plus d'exception {{jsxref("TypeError")}} ("can't supply flags when constructing one RegExp from another") lorsque le premier argument est une RegExp et que le second argument marqueurs est présent. Une nouvelle RegExp sera créée à la place à partir des arguments.

+ +

Lorsqu'on utilise le constructeur, les règles normales d'échappement de chaîne (le fait de faire précéder d'un \ les caractères spéciaux à l'intérieur d'une chaîne) sont requises. Par exemple, les définitions suivantes sont équivalentes :

+ +
var re = /\w+/;
+var re = new RegExp('\\w+');
+
+ +

Propriétés

+ +
+
{{jsxref("RegExp.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à tous les objets qui sont des expressions rationnelles.
+
RegExp.length
+
La valeur de longueur pour le constructeur dont la valeur est 2.
+
{{jsxref("RegExp.@@species", "get RegExp[@@species]")}}
+
La fonction de construction utilisée pour créer les objets dérivés.
+
{{jsxref("RegExp.lastIndex")}}
+
L'indice à partir duquel rechercher la prochaine correspondance.
+
+ +

Méthodes

+ +

L'objet global RegExp ne possède pas de méthode propre. En revanche, il hérite de certaines méthodes via sa chaîne de prototypes.

+ +

Le prototype de RegExp et les instances

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/RegExp/prototype', 'Propriétés')}}
+ +

Méthodes

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/RegExp/prototype', 'Méthodes')}}
+ +

Exemples

+ +

Utiliser une expression rationnelle pour modifier un format de données

+ +

Dans le script suivant, on utilise la méthode {{jsxref("String.prototype.replace()", "replace()")}} de {{jsxref("String")}} pour effectuer une correspondance sur le prénom et le nom pour les inverser. On utilise des parenthèses capturantes pour pouvoir utiliser les correspondances dans la construction du résultat (avec $1 et $2).

+ +
var re = /(\w+)\s(\w+)/;
+var chaîne = 'Alain Dupont';
+var nouvelleChaîne = chaîne.replace(re, '$2, $1');
+console.log(nouvelleChaîne);
+
+ +

Cela affichera "Dupont, Alain".

+ +

Utiliser une expression rationnelle pour découper des lignes avec différents sauts de ligne/fins de ligne

+ +

La fin de ligne par défaut dépend de la plateforme (Unix, Windows, etc.). Cette méthode de découpage fournie permet de découper indépendamment de la plateforme utilisée.

+ +
var texte = 'Un texte\net un autre\r\npuis ensuite\rla fin';
+var lignes = texte.split(/\r\n|\r|\n/);
+console.log(lignes); // affiche [ 'Un texte', 'et un autre', 'puis ensuite', 'la fin' ]
+
+ +

On voit ici que l'ordre des modèles dans l'expression rationnelle importe.

+ +

Utiliser une expression rationnelle sur plusieurs lignes

+ +
var s = 'Et voici\nune autre ligne !';
+s.match(/voici.*ligne/);
+// Renvoie null
+s.match(/voici[^]*ligne/);
+// Renvoie ['voici\nune autre ligne']
+
+ +

Utiliser une expression rationnelle avec le marqueur d'adhérence

+ +

Cet exemple illustre comment on peut utiliser ce marqueur qui recherche une correspondance après {{jsxref("RegExp.prototype.lastIndex")}}.

+ +
var str = '#toto#';
+var regex = /toto/y;
+
+regex.lastIndex; // 0
+regex.test(str); // true
+regex.lastIndex = 1;
+regex.test(str); // true
+regex.lastIndex = 5;
+regex.test(str); // false (lastIndex est pris en compte avec ce marqueur)
+regex.lastIndex; // 0 (réinitialisation suite à l'échec)
+ +

Les expressions rationnelles et les caractères Unicode

+ +

Comme mentionné ci-avant, les classes \w ou \W ne correspondent qu'à des caractères ASCII "a" à "z", "A" à "Z", "0" à "9" et "_". Pour effectuer des correspondances sur d'autres caractères (comme par exemple les caractères cyrilliques), on utilisera \uhhhh, où "hhhh" représente la valeur Unicode exprimée en hexadécimal. Cet exemple illustre comment il est possible de séparer les caractères Unicode d'un mot.

+ +
var texte = 'Образец text на русском языке';
+var regex = /[\u0400-\u04FF]+/g;
+
+var corresp = regex.exec(texte);
+console.log(corresp[0]);      // affiche 'Образец'
+console.log(regex.lastIndex); // affiche '7'
+
+var corresp2 = regex.exec(texte);
+console.log(corresp2[0]);     // affiche 'на' (n'affiche pas text
+console.log(regex.lastIndex); // affiche '15'
+
+// et ainsi de suite
+
+ +

Voici une ressource tierce pour obtenir les différents intervalles Unicode des différents alphabets : Regexp-unicode-block.

+ +

Extraire un sous-domaine d'une URL

+ +
var url = 'http://xxx.domaine.com';
+console.log(/[^.]+/.exec(url)[0].substr(7)); // affiche 'xxx'
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.10', 'RegExp')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-regexp-regular-expression-objects', 'RegExp')}}{{Spec2('ES6')}} +

Le constructeur RegExp ne renvoie plus d'exception lorsqu'il est utilisé avec un objet RegExp et que le second argument est utilisé. Ajout du marqueur d'adhérence et du marqueur Unicode.

+
{{SpecName('ESDraft', '#sec-regexp-regular-expression-objects', 'RegExp')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes spécifiques à Firefox

+ +

À partir de Firefox 34, dans le cas où on utilise un groupe capturant avec des quantificateurs qui l'invalident, le texte correspondant au groupe est désormais undefined et non la chaîne vide :

+ +
// Firefox 33 ou antérieur
+'x'.replace(/x(.)?/g, function(m, group) {
+  console.log("'group:" + group + "'");
+}); // 'group:'
+
+// Firefox 34 ou supérieur
+'x'.replace(/x(.)?/g, function(m, group) {
+  console.log("'group:" + group + "'");
+}); // 'group:undefined'
+
+ +

Pour des raisons de compatibilité web, RegExp.$N renverra une chaîne vide au lieu de undefined ({{bug(1053944)}}).

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/input/index.html b/files/fr/web/javascript/reference/global_objects/regexp/input/index.html deleted file mode 100644 index 15935f9bd8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/input/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: RegExp.input ($_) -slug: Web/JavaScript/Reference/Global_Objects/RegExp/input -tags: - - JavaScript - - Non-standard - - Propriété - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/input -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/input ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété non-standard input est une propriété statique de l'expression rationnelle qui contient la chaîne de caractères sur laquelle est effectuée la recherche de correspondances. RegExp.$_ est un alias de cette propriété.

- -

Syntaxe

- -
RegExp.input
-RegExp.$_
-
- -

Description

- -

La propriété input est statique. Ce n'est pas la propriété d'une instance d'expression rationnelle. Cette propriété doit toujours être utilisée avec la syntaxe RegExp.input ou RegExp.$_.

- -

La valeur de la propriété input est modifiée à chaque fois que la chaîne sur laquelle on recherche est modifiée et qu'il y a une correspondance.

- -

Exemples

- -

Utiliser input et $_

- -
var re = /coucou/g;
-re.test("coucou toi !");
-RegExp.input;         // "coucou toi !"
-re.test("toto");      // nouveau test, pas de correspondance
-RegExp.$_;            // "coucou toi !"
-re.test("coucou monde !"); // nouveau test avec correspondance
-RegExp.$_;            // "coucou monde !"
-
- -

Spécifications

- -

Cette propriété n'est pas standard. Elle ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.input")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/input/index.md b/files/fr/web/javascript/reference/global_objects/regexp/input/index.md new file mode 100644 index 0000000000..15935f9bd8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/input/index.md @@ -0,0 +1,58 @@ +--- +title: RegExp.input ($_) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/input +tags: + - JavaScript + - Non-standard + - Propriété + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/input +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/input +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété non-standard input est une propriété statique de l'expression rationnelle qui contient la chaîne de caractères sur laquelle est effectuée la recherche de correspondances. RegExp.$_ est un alias de cette propriété.

+ +

Syntaxe

+ +
RegExp.input
+RegExp.$_
+
+ +

Description

+ +

La propriété input est statique. Ce n'est pas la propriété d'une instance d'expression rationnelle. Cette propriété doit toujours être utilisée avec la syntaxe RegExp.input ou RegExp.$_.

+ +

La valeur de la propriété input est modifiée à chaque fois que la chaîne sur laquelle on recherche est modifiée et qu'il y a une correspondance.

+ +

Exemples

+ +

Utiliser input et $_

+ +
var re = /coucou/g;
+re.test("coucou toi !");
+RegExp.input;         // "coucou toi !"
+re.test("toto");      // nouveau test, pas de correspondance
+RegExp.$_;            // "coucou toi !"
+re.test("coucou monde !"); // nouveau test avec correspondance
+RegExp.$_;            // "coucou monde !"
+
+ +

Spécifications

+ +

Cette propriété n'est pas standard. Elle ne fait partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.input")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.html b/files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.html deleted file mode 100644 index e5bc84ca24..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: regExp.lastIndex -slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex -tags: - - JavaScript - - Propriété - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/lastIndex ---- -
{{JSRef}}
- -

La propriété lastIndex est un entier en lecture/écriture qui permet de définir l'indice (position) à partir duquel chercher la prochaine correspondance pour une instance d'expression rationnelle donnée.

- -
{{EmbedInteractiveExample("pages/js/regexp-lastindex.html")}}
- - - -
{{js_property_attributes(1,0,0)}}
- -

Syntaxe

- -
regExpObj.lastIndex
-
- -

Description

- -

Cette propriété n'est définie que si l'instance d'expression rationnelle utilise le marqueur (flag) "g" pour effectuer une recherche globale ou le marqueur "y" afin d'effectuer une recherche adhérente. Les règles suivantes s'appliquent :

- - - -

Exemples

- -

Si on a la séquence d'instructions suivante :

- -
var re = /(hi)?/g;
-
- -

Correspond à la chaîne vide.

- -
console.log(re.exec('hi'));
-console.log(re.lastIndex);
-
- -

Renvoie ["hi", "hi"] avec lastIndex égal à 2.

- -
console.log(re.exec('hi'));
-console.log(re.lastIndex);
-
- -

Renvoie ["", undefined], un tableau dont le premier élément est la chaîne vide car lastIndex valait 2 (et vaut toujours 2) et "hi" était de longueur 2.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. JavaScript 1.5 : lastIndex est une propriété d'une instance de RegExp et n'est pas une propriété directe de RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.5', 'RegExp.lastIndex')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-properties-of-regexp-instances', 'RegExp.lastIndex')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-properties-of-regexp-instances', 'RegExp.lastIndex')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.lastIndex")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.md b/files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.md new file mode 100644 index 0000000000..e5bc84ca24 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/lastindex/index.md @@ -0,0 +1,103 @@ +--- +title: regExp.lastIndex +slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex +tags: + - JavaScript + - Propriété + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/lastIndex +--- +
{{JSRef}}
+ +

La propriété lastIndex est un entier en lecture/écriture qui permet de définir l'indice (position) à partir duquel chercher la prochaine correspondance pour une instance d'expression rationnelle donnée.

+ +
{{EmbedInteractiveExample("pages/js/regexp-lastindex.html")}}
+ + + +
{{js_property_attributes(1,0,0)}}
+ +

Syntaxe

+ +
regExpObj.lastIndex
+
+ +

Description

+ +

Cette propriété n'est définie que si l'instance d'expression rationnelle utilise le marqueur (flag) "g" pour effectuer une recherche globale ou le marqueur "y" afin d'effectuer une recherche adhérente. Les règles suivantes s'appliquent :

+ + + +

Exemples

+ +

Si on a la séquence d'instructions suivante :

+ +
var re = /(hi)?/g;
+
+ +

Correspond à la chaîne vide.

+ +
console.log(re.exec('hi'));
+console.log(re.lastIndex);
+
+ +

Renvoie ["hi", "hi"] avec lastIndex égal à 2.

+ +
console.log(re.exec('hi'));
+console.log(re.lastIndex);
+
+ +

Renvoie ["", undefined], un tableau dont le premier élément est la chaîne vide car lastIndex valait 2 (et vaut toujours 2) et "hi" était de longueur 2.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. JavaScript 1.5 : lastIndex est une propriété d'une instance de RegExp et n'est pas une propriété directe de RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.5', 'RegExp.lastIndex')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-properties-of-regexp-instances', 'RegExp.lastIndex')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-properties-of-regexp-instances', 'RegExp.lastIndex')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.lastIndex")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.html b/files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.html deleted file mode 100644 index 08e0e2ce91..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: RegExp.lastMatch ($&) -slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch -tags: - - JavaScript - - Non-standard - - Propriété - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/lastMatch ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété non-standard lastMatch est une propriété statique en lecture seule pour les expressions rationnelles qui contient les caractères de la dernière correspondance. RegExp.$& est un alias pour cette propriété.

- -

Syntaxe

- -
RegExp.lastMatch
-RegExp['$&']
-
- -

Description

- -

La propriété lastMatch est une propriété statique, ce n'est pas une propriété pour chaque objet qui représente une expression rationnelle. Cette propriété doit donc toujours être utilisée avec la syntaxe RegExp.lastMatch ou RegExp['$&'].

- -

La valeur de la propriété lastMatch n'est accessible qu'en lecture seule et est modifiée à chaque fois qu'une correspondance est trouvée.

- -

Il n'est pas possible d'utiliser l'alias avec la notation utilisant le point pour accéder à la propriété (RegExp.$&) car le parseur attend une expression avec "&" dans ce cas, ce qui provoque une exception {{jsxref("SyntaxError")}}. Pour utiliser l'alias, on prendra donc la notation utilisant les crochets.

- -

Exemples

- -

Utiliser lastMatch et $&

- -
var re = /coucou/g;
-re.test("coucou toi!");
-RegExp.lastMatch; // "coucou"
-RegExp['$&'];     // "coucou"
-
- -

Spécifications

- -

Cette propriété n'est pas standard. Elle ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.lastMatch")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.md b/files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.md new file mode 100644 index 0000000000..08e0e2ce91 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/lastmatch/index.md @@ -0,0 +1,57 @@ +--- +title: RegExp.lastMatch ($&) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch +tags: + - JavaScript + - Non-standard + - Propriété + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/lastMatch +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété non-standard lastMatch est une propriété statique en lecture seule pour les expressions rationnelles qui contient les caractères de la dernière correspondance. RegExp.$& est un alias pour cette propriété.

+ +

Syntaxe

+ +
RegExp.lastMatch
+RegExp['$&']
+
+ +

Description

+ +

La propriété lastMatch est une propriété statique, ce n'est pas une propriété pour chaque objet qui représente une expression rationnelle. Cette propriété doit donc toujours être utilisée avec la syntaxe RegExp.lastMatch ou RegExp['$&'].

+ +

La valeur de la propriété lastMatch n'est accessible qu'en lecture seule et est modifiée à chaque fois qu'une correspondance est trouvée.

+ +

Il n'est pas possible d'utiliser l'alias avec la notation utilisant le point pour accéder à la propriété (RegExp.$&) car le parseur attend une expression avec "&" dans ce cas, ce qui provoque une exception {{jsxref("SyntaxError")}}. Pour utiliser l'alias, on prendra donc la notation utilisant les crochets.

+ +

Exemples

+ +

Utiliser lastMatch et $&

+ +
var re = /coucou/g;
+re.test("coucou toi!");
+RegExp.lastMatch; // "coucou"
+RegExp['$&'];     // "coucou"
+
+ +

Spécifications

+ +

Cette propriété n'est pas standard. Elle ne fait partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.lastMatch")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.html b/files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.html deleted file mode 100644 index c2df70f393..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: RegExp.lastParen ($+) -slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastParen -tags: - - JavaScript - - Propriété - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastParen -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/lastParen ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété lastParen est une propriété statique accessible en lecture seule qui contient la dernière correspondance enregistrée dans un groupe (entre parenthèse) si jamais elle existe. RegExp.$+ est un alias pour cette propriété.

- -

Syntaxe

- -
RegExp.lastParen
-RegExp['$+']
-
- -

Description

- -

La propriété lastParen est une propriété statique, ce n'est pas une propriété liée à chaque objet. Il faut donc toujours utiliser la syntaxe RegExp.lastParen ou RegExp['$+'].

- -

La valeur de la propriété lastParen n'est accessible qu'en lecture seule et est modifiée automatiquement à chaque fois qu'il y a une correspondance.

- -

Cet alias ne peut pas être utilisé avec la notation utilisant le point pour l'accès aux propriétés (RegExp.$+). En effet, le parseur attend une expression avec "+", dans ce cas, une exception {{jsxref("SyntaxError")}} est levée. Pour utiliser cette notation raccourcie, on utilisera la notation avec les crochets.

- -

Exemples

- -

Utiliser lastParen et $+

- -
var re = /(coucou)/g;
-re.test("coucou toi !");
-RegExp.lastParen; // "coucou"
-RegExp['$+'];     // "coucou"
-
- -

Spécifications

- -

Cette propriété n'est pas standard. Elle ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.lastParen")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.md b/files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.md new file mode 100644 index 0000000000..c2df70f393 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/lastparen/index.md @@ -0,0 +1,56 @@ +--- +title: RegExp.lastParen ($+) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastParen +tags: + - JavaScript + - Propriété + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastParen +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/lastParen +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété lastParen est une propriété statique accessible en lecture seule qui contient la dernière correspondance enregistrée dans un groupe (entre parenthèse) si jamais elle existe. RegExp.$+ est un alias pour cette propriété.

+ +

Syntaxe

+ +
RegExp.lastParen
+RegExp['$+']
+
+ +

Description

+ +

La propriété lastParen est une propriété statique, ce n'est pas une propriété liée à chaque objet. Il faut donc toujours utiliser la syntaxe RegExp.lastParen ou RegExp['$+'].

+ +

La valeur de la propriété lastParen n'est accessible qu'en lecture seule et est modifiée automatiquement à chaque fois qu'il y a une correspondance.

+ +

Cet alias ne peut pas être utilisé avec la notation utilisant le point pour l'accès aux propriétés (RegExp.$+). En effet, le parseur attend une expression avec "+", dans ce cas, une exception {{jsxref("SyntaxError")}} est levée. Pour utiliser cette notation raccourcie, on utilisera la notation avec les crochets.

+ +

Exemples

+ +

Utiliser lastParen et $+

+ +
var re = /(coucou)/g;
+re.test("coucou toi !");
+RegExp.lastParen; // "coucou"
+RegExp['$+'];     // "coucou"
+
+ +

Spécifications

+ +

Cette propriété n'est pas standard. Elle ne fait partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.lastParen")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.html b/files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.html deleted file mode 100644 index e5a3bda79d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: RegExp.leftContext ($`) -slug: Web/JavaScript/Reference/Global_Objects/RegExp/leftContext -tags: - - JavaScript - - Non-standard - - Propriété - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/leftContext -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/leftContext ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété non-standard leftContext est une propriété statique accessible uniquement en lecture. Cette propriété liée aux expressions rationnelles contient la sous-chaîne qui précède la correspondance la plus récente. RegExp.$` est un alias pour cette propriété.

- -

Syntaxe

- -
RegExp.leftContext
-RegExp['$`']
-
- -

Description

- -

La propriété leftContext est une propriété statique, elle n'est donc pas distincte entre les différents objets représentants les expressions rationnelles. Il faut donc toujours utiliser la syntaxe RegExp.leftContext ou RegExp['$`'].

- -

La valeur de la propriété leftContext n'est accessible uniquement qu'en lecture. Elle est modifiée par le moteur à chaque fois qu'une nouvelle correspondance est trouvée.

- -

L'alias ne peut pas être utilisé avec la notation utilisant le point (RegExp.$`). En effet, le parseur attend un gabarit de chaîne à la suite de l'accent grave. Si on utilise le point, on aura donc une exception {{jsxref("SyntaxError")}}. Pour cet alias, on utilisera la notation à base de crochets.

- -

Exemples

- -
var re = /monde/g;
-re.test("coucou monde !");
-RegExp.leftContext; // "coucou "
-RegExp['$`'];       // "coucou "
-
- -

Spécifications

- -

Cette propriété n'est pas standard et ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.leftContext")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.md b/files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.md new file mode 100644 index 0000000000..e5a3bda79d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/leftcontext/index.md @@ -0,0 +1,55 @@ +--- +title: RegExp.leftContext ($`) +slug: Web/JavaScript/Reference/Global_Objects/RegExp/leftContext +tags: + - JavaScript + - Non-standard + - Propriété + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/leftContext +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/leftContext +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété non-standard leftContext est une propriété statique accessible uniquement en lecture. Cette propriété liée aux expressions rationnelles contient la sous-chaîne qui précède la correspondance la plus récente. RegExp.$` est un alias pour cette propriété.

+ +

Syntaxe

+ +
RegExp.leftContext
+RegExp['$`']
+
+ +

Description

+ +

La propriété leftContext est une propriété statique, elle n'est donc pas distincte entre les différents objets représentants les expressions rationnelles. Il faut donc toujours utiliser la syntaxe RegExp.leftContext ou RegExp['$`'].

+ +

La valeur de la propriété leftContext n'est accessible uniquement qu'en lecture. Elle est modifiée par le moteur à chaque fois qu'une nouvelle correspondance est trouvée.

+ +

L'alias ne peut pas être utilisé avec la notation utilisant le point (RegExp.$`). En effet, le parseur attend un gabarit de chaîne à la suite de l'accent grave. Si on utilise le point, on aura donc une exception {{jsxref("SyntaxError")}}. Pour cet alias, on utilisera la notation à base de crochets.

+ +

Exemples

+ +
var re = /monde/g;
+re.test("coucou monde !");
+RegExp.leftContext; // "coucou "
+RegExp['$`'];       // "coucou "
+
+ +

Spécifications

+ +

Cette propriété n'est pas standard et ne fait partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.leftContext")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/multiline/index.html b/files/fr/web/javascript/reference/global_objects/regexp/multiline/index.html deleted file mode 100644 index 3c6d1df46a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/multiline/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: RegExp.prototype.multiline -slug: Web/JavaScript/Reference/Global_Objects/RegExp/multiline -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/multiline -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/multiline ---- -
{{JSRef}}
- -

La propriété multiline indique si le drapeau (flag) "m" a été utilisé ou non pour l'expression rationnelle. multiline est une propriété liée à l'instance, accessible en lecture seule.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-multiline.html", "taller")}}
- - - -
{{js_property_attributes(0,0,1)}}
- -

Description

- -

La valeur de multiline est un booléen. Elle vaut true si le drapeau "m" a été utilisé et false sinon. Le flag "m" indique qu'une chaine de caractères qui s'étend sur plusieurs lignes doit être traitée comme une série de ligne. Ainsi, si "m" est utilisé, "^" et "$" ne correspondent plus au début et à la fin de la chaîne mais aux débuts et aux fins de chaque ligne de la chaîne.

- -

Cette propriété ne peut pas être modifiée directement.

- -

Exemples

- -
var regex = new RegExp("toto", "m");
-
-console.log(regex.multiline); // true
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : multiline est une propriété liée à l'instance de {{jsxref("RegExp")}} et non à l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.4', 'RegExp.prototype.multiline')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-get-regexp.prototype.multiline', 'RegExp.prototype.multiline')}}{{Spec2('ES6')}}multiline est désormais un propriété du prototype sous forme d'accesseur plutôt qu'une propriété directement liée à l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.multiline', 'RegExp.prototype.multiline')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.multiline")}}

- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/multiline/index.md b/files/fr/web/javascript/reference/global_objects/regexp/multiline/index.md new file mode 100644 index 0000000000..3c6d1df46a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/multiline/index.md @@ -0,0 +1,86 @@ +--- +title: RegExp.prototype.multiline +slug: Web/JavaScript/Reference/Global_Objects/RegExp/multiline +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/multiline +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/multiline +--- +
{{JSRef}}
+ +

La propriété multiline indique si le drapeau (flag) "m" a été utilisé ou non pour l'expression rationnelle. multiline est une propriété liée à l'instance, accessible en lecture seule.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-multiline.html", "taller")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

Description

+ +

La valeur de multiline est un booléen. Elle vaut true si le drapeau "m" a été utilisé et false sinon. Le flag "m" indique qu'une chaine de caractères qui s'étend sur plusieurs lignes doit être traitée comme une série de ligne. Ainsi, si "m" est utilisé, "^" et "$" ne correspondent plus au début et à la fin de la chaîne mais aux débuts et aux fins de chaque ligne de la chaîne.

+ +

Cette propriété ne peut pas être modifiée directement.

+ +

Exemples

+ +
var regex = new RegExp("toto", "m");
+
+console.log(regex.multiline); // true
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : multiline est une propriété liée à l'instance de {{jsxref("RegExp")}} et non à l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.4', 'RegExp.prototype.multiline')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-get-regexp.prototype.multiline', 'RegExp.prototype.multiline')}}{{Spec2('ES6')}}multiline est désormais un propriété du prototype sous forme d'accesseur plutôt qu'une propriété directement liée à l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.multiline', 'RegExp.prototype.multiline')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.multiline")}}

+ +

Notes de compatibilité

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/n/index.html b/files/fr/web/javascript/reference/global_objects/regexp/n/index.html deleted file mode 100644 index 639b98d059..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/n/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: RegExp.$1-$9 -slug: Web/JavaScript/Reference/Global_Objects/RegExp/n -tags: - - JavaScript - - Non-standard - - Propriété - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/n -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/n ---- -
{{JSRef}} {{non-standard_header}}
- -

Les propriétés non-standard $1, $2, $3, $4, $5, $6, $7, $8, $9 sont des propriétés statiques accessibles en lecture qui contiennent les différents groupes capturés par une expression rationnelle.

- -

Syntaxe

- -
RegExp.$1
-RegExp.$2
-RegExp.$3
-RegExp.$4
-RegExp.$5
-RegExp.$6
-RegExp.$7
-RegExp.$8
-RegExp.$9
-
- -

Description

- -

Les propriétés $1, ..., $9 sont des propriétés statiques. Ce ne sont pas des propriétés rattachées à une expression rationnelle donnée. Pour cette raison, on utilisera toujours la syntaxe RegExp.$1, ..., RegExp.$9.

- -

Les valeurs de ces propriétés ne sont accessibles qu'en lecture et sont modifiées par le moteur à chaque fois qu'une nouvelle correspondance est trouvée.

- -

Le nombre de groupe d'une expression rationnelle n'est pas limité. Cependant, l'objet RegExp ne contient que les neufs premiers groupes. Pour accéder à chacun des groupes liés à une expression rationnelle donnée, on pourra utiliser les indices du tableau relevant les correspondances.

- -

Ces propriétés peuvent être utilisées pour le texte de remplacement de la méthode {{jsxref("String.replace")}}. Avec cette méthode, on ne préfixera pas les valeurs par RegExp (voir l'exemple ci-après), lorsque les parenthèses groupantes ne sont pas utilisées dans l'expression, $n sera interprété littérallement (avec n un entier positif).

- -

Exemples

- -

Dans le script qui suit, on utilise {{jsxref("String.prototype.replace()", "replace()")}} d'une instance de {{jsxref("String")}} pour inverser le premier mot et le dernier et placer une virgule entre. Le script utilise $1 et $2 pour faire référence aux groupes de l'expression rationnelle :

- -
var re = /(\w+)\s(\w+)/;
-var str = 'Jean Biche';
-str.replace(re, '$2, $1'); // "Biche, Jean"
-RegExp.$1; // "Jean"
-RegExp.$2; // "Biche"
-
- -

Spécifications

- -

Ces propriétés ne sont pas standard, elles ne font partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.n")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/n/index.md b/files/fr/web/javascript/reference/global_objects/regexp/n/index.md new file mode 100644 index 0000000000..639b98d059 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/n/index.md @@ -0,0 +1,67 @@ +--- +title: RegExp.$1-$9 +slug: Web/JavaScript/Reference/Global_Objects/RegExp/n +tags: + - JavaScript + - Non-standard + - Propriété + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/n +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/n +--- +
{{JSRef}} {{non-standard_header}}
+ +

Les propriétés non-standard $1, $2, $3, $4, $5, $6, $7, $8, $9 sont des propriétés statiques accessibles en lecture qui contiennent les différents groupes capturés par une expression rationnelle.

+ +

Syntaxe

+ +
RegExp.$1
+RegExp.$2
+RegExp.$3
+RegExp.$4
+RegExp.$5
+RegExp.$6
+RegExp.$7
+RegExp.$8
+RegExp.$9
+
+ +

Description

+ +

Les propriétés $1, ..., $9 sont des propriétés statiques. Ce ne sont pas des propriétés rattachées à une expression rationnelle donnée. Pour cette raison, on utilisera toujours la syntaxe RegExp.$1, ..., RegExp.$9.

+ +

Les valeurs de ces propriétés ne sont accessibles qu'en lecture et sont modifiées par le moteur à chaque fois qu'une nouvelle correspondance est trouvée.

+ +

Le nombre de groupe d'une expression rationnelle n'est pas limité. Cependant, l'objet RegExp ne contient que les neufs premiers groupes. Pour accéder à chacun des groupes liés à une expression rationnelle donnée, on pourra utiliser les indices du tableau relevant les correspondances.

+ +

Ces propriétés peuvent être utilisées pour le texte de remplacement de la méthode {{jsxref("String.replace")}}. Avec cette méthode, on ne préfixera pas les valeurs par RegExp (voir l'exemple ci-après), lorsque les parenthèses groupantes ne sont pas utilisées dans l'expression, $n sera interprété littérallement (avec n un entier positif).

+ +

Exemples

+ +

Dans le script qui suit, on utilise {{jsxref("String.prototype.replace()", "replace()")}} d'une instance de {{jsxref("String")}} pour inverser le premier mot et le dernier et placer une virgule entre. Le script utilise $1 et $2 pour faire référence aux groupes de l'expression rationnelle :

+ +
var re = /(\w+)\s(\w+)/;
+var str = 'Jean Biche';
+str.replace(re, '$2, $1'); // "Biche, Jean"
+RegExp.$1; // "Jean"
+RegExp.$2; // "Biche"
+
+ +

Spécifications

+ +

Ces propriétés ne sont pas standard, elles ne font partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.n")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.html b/files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.html deleted file mode 100644 index 8d7aecc28e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: RegExp.rightContext ($') -slug: Web/JavaScript/Reference/Global_Objects/RegExp/rightContext -tags: - - JavaScript - - Non-standard - - Propriété - - Reference - - RegExp - - Regular Expressions -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/rightContext -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/rightContext ---- -
{{JSRef}} {{non-standard_header}}
- -

La propriété non-standard rightContext est une propriété statique, accessible uniquement en lecture, qui contient la sous-chaîne suivant la correspondance la plus récente. RegExp.$' est un alias pour cette propriété.

- -

Syntaxe

- -
RegExp.rightContext
-RegExp["$'"]
-
- -

Description

- -

La propriété rightContext est une propriété statique et n'est pas liée à une instance d'expression rationnelle. Pour cette raison, il faut toujours utiliser la syntaxe RegExp.rightContext ou RegExp["$'"].

- -

La valeur de la propriété rightContext n'est accessible qu'en lecture. Le moteur la modifie à chaque fois qu'une nouvelle correspondance est trouvée.

- -

L'alias ne peut pas être utilisé avec la syntaxe utilisant le point (RegExp.$'). En effet, l'analyseur (parser) attend un début de chaîne du fait de la simple quote, ce qui provoquerait une exception {{jsxref("SyntaxError")}}. Il faut donc utiliser la notation à base de crochets.

- -

Exemples

- -
var re = /coucou/g;
-re.test("coucou monde !");
-RegExp.rightContext; // " monde !"
-RegExp["$'"];       // " monde !"
-
- -

Spécifications

- -

Cette propriété n'est pas standard, elle ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.rightContext")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.md b/files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.md new file mode 100644 index 0000000000..8d7aecc28e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/rightcontext/index.md @@ -0,0 +1,56 @@ +--- +title: RegExp.rightContext ($') +slug: Web/JavaScript/Reference/Global_Objects/RegExp/rightContext +tags: + - JavaScript + - Non-standard + - Propriété + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/rightContext +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/rightContext +--- +
{{JSRef}} {{non-standard_header}}
+ +

La propriété non-standard rightContext est une propriété statique, accessible uniquement en lecture, qui contient la sous-chaîne suivant la correspondance la plus récente. RegExp.$' est un alias pour cette propriété.

+ +

Syntaxe

+ +
RegExp.rightContext
+RegExp["$'"]
+
+ +

Description

+ +

La propriété rightContext est une propriété statique et n'est pas liée à une instance d'expression rationnelle. Pour cette raison, il faut toujours utiliser la syntaxe RegExp.rightContext ou RegExp["$'"].

+ +

La valeur de la propriété rightContext n'est accessible qu'en lecture. Le moteur la modifie à chaque fois qu'une nouvelle correspondance est trouvée.

+ +

L'alias ne peut pas être utilisé avec la syntaxe utilisant le point (RegExp.$'). En effet, l'analyseur (parser) attend un début de chaîne du fait de la simple quote, ce qui provoquerait une exception {{jsxref("SyntaxError")}}. Il faut donc utiliser la notation à base de crochets.

+ +

Exemples

+ +
var re = /coucou/g;
+re.test("coucou monde !");
+RegExp.rightContext; // " monde !"
+RegExp["$'"];       // " monde !"
+
+ +

Spécifications

+ +

Cette propriété n'est pas standard, elle ne fait partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.rightContext")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/source/index.html b/files/fr/web/javascript/reference/global_objects/regexp/source/index.html deleted file mode 100644 index 7b5437e8cc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/source/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: RegExp.prototype.source -slug: Web/JavaScript/Reference/Global_Objects/RegExp/source -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/source -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/source ---- -
{{JSRef}}
- -

La propriété source renvoie une chaîne de caractères qui contient le texte du motif à rechercher (pattern), sans les barres obliques (slashes). C'est une propriété en lecture seule liée à l'instance. source ne contient aucun des options ou drapeaux (flags) (tels que "g", "i" ou "m") de l'expression rationnelle.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-source.html")}}
- - - -
{{js_property_attributes(0,0,1)}}
- -

Exemples

- -

Utiliser source

- -
var regex = /totoMachin/ig;
-
-console.log(regex.source); // "totoMachin"
-
- -

Les expressions ratonnelles vides et l'échappement

- -

À partir d'ECMAScript 5, la propriété source ne renvoie plus une chaîne vide pour les expressions rationnelles vides. Elle renvoie la chaîne "(?:)". De plus, les fins de lignes (telles que "\n") sont désormais échappées.

- -
new RegExp().source; // "(?:)"
-
-new RegExp('\n').source === "\n";  // true avant ES5
-new RegExp('\n').source === "\\n"; // true à partir d'ES5
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : source est une propriété de l'instance de {{jsxref("RegExp")}}, ce n'est pas une propriété de l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.1', 'RegExp.prototype.source')}}{{Spec2('ES5.1')}}source renvoie désormais "(?:)" (et non "") pour les expressions vides. La définition du comportement pour les échappements a été ajoutée.
{{SpecName('ES6', '#sec-get-regexp.prototype.source', 'RegExp.prototype.source')}}{{Spec2('ES6')}}source est désormais un accesseur lié au prototype plutôt qu'une propriété directement rattachée à l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.source', 'RegExp.prototype.source')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.source")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/source/index.md b/files/fr/web/javascript/reference/global_objects/regexp/source/index.md new file mode 100644 index 0000000000..7b5437e8cc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/source/index.md @@ -0,0 +1,81 @@ +--- +title: RegExp.prototype.source +slug: Web/JavaScript/Reference/Global_Objects/RegExp/source +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/source +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/source +--- +
{{JSRef}}
+ +

La propriété source renvoie une chaîne de caractères qui contient le texte du motif à rechercher (pattern), sans les barres obliques (slashes). C'est une propriété en lecture seule liée à l'instance. source ne contient aucun des options ou drapeaux (flags) (tels que "g", "i" ou "m") de l'expression rationnelle.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-source.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

Exemples

+ +

Utiliser source

+ +
var regex = /totoMachin/ig;
+
+console.log(regex.source); // "totoMachin"
+
+ +

Les expressions ratonnelles vides et l'échappement

+ +

À partir d'ECMAScript 5, la propriété source ne renvoie plus une chaîne vide pour les expressions rationnelles vides. Elle renvoie la chaîne "(?:)". De plus, les fins de lignes (telles que "\n") sont désormais échappées.

+ +
new RegExp().source; // "(?:)"
+
+new RegExp('\n').source === "\n";  // true avant ES5
+new RegExp('\n').source === "\\n"; // true à partir d'ES5
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2. Avec JavaScript 1.5 : source est une propriété de l'instance de {{jsxref("RegExp")}}, ce n'est pas une propriété de l'objet RegExp.
{{SpecName('ES5.1', '#sec-15.10.7.1', 'RegExp.prototype.source')}}{{Spec2('ES5.1')}}source renvoie désormais "(?:)" (et non "") pour les expressions vides. La définition du comportement pour les échappements a été ajoutée.
{{SpecName('ES6', '#sec-get-regexp.prototype.source', 'RegExp.prototype.source')}}{{Spec2('ES6')}}source est désormais un accesseur lié au prototype plutôt qu'une propriété directement rattachée à l'instance.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.source', 'RegExp.prototype.source')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.source")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/sticky/index.html b/files/fr/web/javascript/reference/global_objects/regexp/sticky/index.html deleted file mode 100644 index ab261c0d51..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/sticky/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: RegExp.prototype.sticky -slug: Web/JavaScript/Reference/Global_Objects/RegExp/sticky -tags: - - ECMAScript 2015 - - Expressions rationnelles - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/sticky -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/sticky ---- -
{{JSRef}}
- -

La propriété sticky (adhérante) permet de déterminer si la recherche s'effectue uniquement à partir de l'indice {{jsxref("RegExp.lastIndex", "lastIndex")}} lié à l'expression rationnelle ou non). sticky est une propriété accessible en lecture seule, rattachée à l'instance.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-sticky.html")}}
- - - -
{{js_property_attributes(0,0,1)}}
- -

Description

- -

La propriété sticky est un booléen qui vaut true si le marqueur (flag) "y" a été utilisé, false sinon. Ce marqueur indique que les correspondances ne sont recherchées qu'à partir de l'indice {{jsxref("RegExp.lastIndex", "lastIndex")}} au niveau de la chaîne de caractères (les correspondances à partir des autres positions ne seront pas trouvées). Lorsqu'une expression rationnelle qui utilise le marqueur sticky et le marqueur global ignorera le marqueur global.

- -

La propriété sticky ne peut pas être modifiée directement. Elle est uniquement en lecture seule.

- -

Exemples

- -

Utiliser une expression rationnelle avec le flag sticky

- -
var str = '#toto#';
-var regex = /toto/y;
-
-regex.lastIndex = 1;
-regex.test(str); // true
-regex.lastIndex = 5;
-regex.test(str); // false (lastIndex est pris en compte avec sticky)
-regex.lastIndex; // 0 (on rénitialise après un échec)
-
- -

Marqueur d'adhérence « ancré »

- -

Pendant plusieurs versions, le moteur JavaScript de Firefox, SpiderMonkey, avait un bug qui entraînait des correspondances invalides lorsqu'étaient utilisés le marqueur d'adhérence et le symbole ^ dans l'expression rationnelle. Ce bug est apparu peu après Firefox 3.6. Afin d'éviter ce bug, la spécification ES2015 indique spécifiquement que, lorsque le marqueur y est utilisé avec un motif commençant par ^, ce dernier doit correspondre au début de la chaine (ou, si multiline vaut true, au début de la ligne). Les exemples qui suivent illustrent le comportement correct :

- -
var regex = /^foo/y;
-regex.lastIndex = 2; // désactive la correspondance au début
-regex.test("..foo"); // false
-
-var regex2 = /^foo/my;
-regex2.lastIndex = 2;
-regex2.test("..foo"); // false
-regex2.lastIndex = 2;
-regex2.test(".\nfoo"); // true
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationEtatCommentaires
{{SpecName('ES2015', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.sticky")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/sticky/index.md b/files/fr/web/javascript/reference/global_objects/regexp/sticky/index.md new file mode 100644 index 0000000000..ab261c0d51 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/sticky/index.md @@ -0,0 +1,94 @@ +--- +title: RegExp.prototype.sticky +slug: Web/JavaScript/Reference/Global_Objects/RegExp/sticky +tags: + - ECMAScript 2015 + - Expressions rationnelles + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/sticky +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/sticky +--- +
{{JSRef}}
+ +

La propriété sticky (adhérante) permet de déterminer si la recherche s'effectue uniquement à partir de l'indice {{jsxref("RegExp.lastIndex", "lastIndex")}} lié à l'expression rationnelle ou non). sticky est une propriété accessible en lecture seule, rattachée à l'instance.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-sticky.html")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

Description

+ +

La propriété sticky est un booléen qui vaut true si le marqueur (flag) "y" a été utilisé, false sinon. Ce marqueur indique que les correspondances ne sont recherchées qu'à partir de l'indice {{jsxref("RegExp.lastIndex", "lastIndex")}} au niveau de la chaîne de caractères (les correspondances à partir des autres positions ne seront pas trouvées). Lorsqu'une expression rationnelle qui utilise le marqueur sticky et le marqueur global ignorera le marqueur global.

+ +

La propriété sticky ne peut pas être modifiée directement. Elle est uniquement en lecture seule.

+ +

Exemples

+ +

Utiliser une expression rationnelle avec le flag sticky

+ +
var str = '#toto#';
+var regex = /toto/y;
+
+regex.lastIndex = 1;
+regex.test(str); // true
+regex.lastIndex = 5;
+regex.test(str); // false (lastIndex est pris en compte avec sticky)
+regex.lastIndex; // 0 (on rénitialise après un échec)
+
+ +

Marqueur d'adhérence « ancré »

+ +

Pendant plusieurs versions, le moteur JavaScript de Firefox, SpiderMonkey, avait un bug qui entraînait des correspondances invalides lorsqu'étaient utilisés le marqueur d'adhérence et le symbole ^ dans l'expression rationnelle. Ce bug est apparu peu après Firefox 3.6. Afin d'éviter ce bug, la spécification ES2015 indique spécifiquement que, lorsque le marqueur y est utilisé avec un motif commençant par ^, ce dernier doit correspondre au début de la chaine (ou, si multiline vaut true, au début de la ligne). Les exemples qui suivent illustrent le comportement correct :

+ +
var regex = /^foo/y;
+regex.lastIndex = 2; // désactive la correspondance au début
+regex.test("..foo"); // false
+
+var regex2 = /^foo/my;
+regex2.lastIndex = 2;
+regex2.test("..foo"); // false
+regex2.lastIndex = 2;
+regex2.test(".\nfoo"); // true
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationEtatCommentaires
{{SpecName('ES2015', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.sticky")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/test/index.html b/files/fr/web/javascript/reference/global_objects/regexp/test/index.html deleted file mode 100644 index 039407032c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/test/index.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: RegExp.prototype.test() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/test -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/test -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/test ---- -
{{JSRef}}
- -

La méthode test() vérifie s'il y a une correspondance entre un texte et une expression rationnelle. Elle retourne true en cas de succès et false dans le cas contraire.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-test.html", "taller")}}
- -

Syntaxe

- -
regexObj.test(chaîne)
- -

Paramètres

- -
-
chaîne
-
La chaîne de caractères qu'on souhaite comparer à l'expression rationnelle.
-
- -

Valeur de retour

- -

Un booléen : true ou false selon qu'une correspondance a été trouvée entre la chaîne de caractères et la chaîne passée en argument.

- -

Description

- -

On utilisera test() dès qu'on souhaite savoir si une partie d'une chaîne de caractères correspond à une expression rationnelle (similaire à la méthode {{jsxref("String.prototype.search()")}}). Pour obtenir plus d'informations (mais une exécution moins rapide), on utilisera la méthode {{jsxref("RegExp.prototype.exec()", "exec()")}} (similaire à la méthode {{jsxref("String.prototype.match()")}}). Comme avec {{jsxref("RegExp.prototype.exec()", "exec()")}} (et même en combinant les deux), des appels successifs à test() sur une même instance d'une expression rationnelle permettent de rechercher après la dernière occurence. Cette méthode est différente de search car elle renvoie un booléen et non la position de la correspondance si elle est trouvée (ou -1 sinon).

- -

Exemples

- -

Utiliser test()

- -

Voici un exemple simple qui illustre comment détecter si la chaîne coucou est contenue au début d'une chaîne :

- -
const chaine = "coucou le monde !";
-const resultat = /^coucou/.test(chaine);
-console.log(resultat); // true
-
- -

L'exemple ci-dessous affiche un message qui dépend du succès du test :

- -
function testinput(regex, chaine){
-    var midstring;
-    if (regex.test(chaine)) {
-        midstring = " contient ";
-    } else {
-        midstring = " ne contient pas ";
-    }
-    console.log(str + midstring + re.source);
-}
-
-testinput(/^coucou/, "coucou le monde"); // coucou le monde contient coucou
-testinput(/^coucou/, "salut le monde") // salut le monde ne contient pas coucou
-
- -

Utiliser test() avec le marqueur global (/g)

- -

Si l'expression rationnelle utilise le marqueur global (g), la méthode test() avancera la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} associée à l'expression rationnelle. Ainsi, si on utilise test() ensuite, la recherche commencera à partir de la nouvelle valeur de lastIndex (de même {{jsxref("RegExp.prototype.exec()","exec()")}} fera également avancer la propriété lastIndex). On notera que la propriété lastIndex ne sera pas réinitialisée si la recherche est effectuée sur une autre chaîne de caractères.

- -
var regex = /toto/g;
-
-// regex.lastIndex se situe à 0
-regex.test("toto"); // true
-
-// regex.lastIndex se situe désormais à 4
-regex.test("toto"); // false
-
- -

Avec le même mécanisme, on peut utiliser une boucle pour compter le nombre de mots contenus dans une chaîne de caractères

- -
function compterMots(texte) {
-  for (var regex = /\w+/g, nbMots = 0; regex.test(texte); nbMots++);
-  return nbMots;
-}
-
-console.log(compterMots("Ah que coucou Bob")); // 4
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.3', 'RegExp.test')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-regexp.prototype.test', 'RegExp.test')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-regexp.prototype.test', 'RegExp.test')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.test")}}

- -

Notes spécifiques à Firefox

- -

Pour les versions antérieures à Firefox 8.0, l'implémentation de test() était erronée. Quand la méthode était appelée sans aucun paramètre, elle effectuait son test par rapport à la dernière entrée (la propriété RegExp.input) et non par rapport à la chaîne "undefined". Ce comportement a été corrigé  ; désormais /undefined/.test() retourne bien true au lieu d'une erreur.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/test/index.md b/files/fr/web/javascript/reference/global_objects/regexp/test/index.md new file mode 100644 index 0000000000..039407032c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/test/index.md @@ -0,0 +1,135 @@ +--- +title: RegExp.prototype.test() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/test +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/test +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/test +--- +
{{JSRef}}
+ +

La méthode test() vérifie s'il y a une correspondance entre un texte et une expression rationnelle. Elle retourne true en cas de succès et false dans le cas contraire.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-test.html", "taller")}}
+ +

Syntaxe

+ +
regexObj.test(chaîne)
+ +

Paramètres

+ +
+
chaîne
+
La chaîne de caractères qu'on souhaite comparer à l'expression rationnelle.
+
+ +

Valeur de retour

+ +

Un booléen : true ou false selon qu'une correspondance a été trouvée entre la chaîne de caractères et la chaîne passée en argument.

+ +

Description

+ +

On utilisera test() dès qu'on souhaite savoir si une partie d'une chaîne de caractères correspond à une expression rationnelle (similaire à la méthode {{jsxref("String.prototype.search()")}}). Pour obtenir plus d'informations (mais une exécution moins rapide), on utilisera la méthode {{jsxref("RegExp.prototype.exec()", "exec()")}} (similaire à la méthode {{jsxref("String.prototype.match()")}}). Comme avec {{jsxref("RegExp.prototype.exec()", "exec()")}} (et même en combinant les deux), des appels successifs à test() sur une même instance d'une expression rationnelle permettent de rechercher après la dernière occurence. Cette méthode est différente de search car elle renvoie un booléen et non la position de la correspondance si elle est trouvée (ou -1 sinon).

+ +

Exemples

+ +

Utiliser test()

+ +

Voici un exemple simple qui illustre comment détecter si la chaîne coucou est contenue au début d'une chaîne :

+ +
const chaine = "coucou le monde !";
+const resultat = /^coucou/.test(chaine);
+console.log(resultat); // true
+
+ +

L'exemple ci-dessous affiche un message qui dépend du succès du test :

+ +
function testinput(regex, chaine){
+    var midstring;
+    if (regex.test(chaine)) {
+        midstring = " contient ";
+    } else {
+        midstring = " ne contient pas ";
+    }
+    console.log(str + midstring + re.source);
+}
+
+testinput(/^coucou/, "coucou le monde"); // coucou le monde contient coucou
+testinput(/^coucou/, "salut le monde") // salut le monde ne contient pas coucou
+
+ +

Utiliser test() avec le marqueur global (/g)

+ +

Si l'expression rationnelle utilise le marqueur global (g), la méthode test() avancera la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} associée à l'expression rationnelle. Ainsi, si on utilise test() ensuite, la recherche commencera à partir de la nouvelle valeur de lastIndex (de même {{jsxref("RegExp.prototype.exec()","exec()")}} fera également avancer la propriété lastIndex). On notera que la propriété lastIndex ne sera pas réinitialisée si la recherche est effectuée sur une autre chaîne de caractères.

+ +
var regex = /toto/g;
+
+// regex.lastIndex se situe à 0
+regex.test("toto"); // true
+
+// regex.lastIndex se situe désormais à 4
+regex.test("toto"); // false
+
+ +

Avec le même mécanisme, on peut utiliser une boucle pour compter le nombre de mots contenus dans une chaîne de caractères

+ +
function compterMots(texte) {
+  for (var regex = /\w+/g, nbMots = 0; regex.test(texte); nbMots++);
+  return nbMots;
+}
+
+console.log(compterMots("Ah que coucou Bob")); // 4
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.3', 'RegExp.test')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-regexp.prototype.test', 'RegExp.test')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-regexp.prototype.test', 'RegExp.test')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.test")}}

+ +

Notes spécifiques à Firefox

+ +

Pour les versions antérieures à Firefox 8.0, l'implémentation de test() était erronée. Quand la méthode était appelée sans aucun paramètre, elle effectuait son test par rapport à la dernière entrée (la propriété RegExp.input) et non par rapport à la chaîne "undefined". Ce comportement a été corrigé  ; désormais /undefined/.test() retourne bien true au lieu d'une erreur.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/tosource/index.html b/files/fr/web/javascript/reference/global_objects/regexp/tosource/index.html deleted file mode 100644 index ddd032b9f2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/tosource/index.html +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: RegExp.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/toSource -tags: - - JavaScript - - Méthode - - Non-standard - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/toSource ---- -
{{JSRef}}{{non-standard_header}}
- -

La méthode toSource() permet de renvoyer une chaîne de caractères représentant le code source de l'objet.

- -

Syntaxe

- -
objetRegExp.toSource()
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant le code source de l'objet {{jsxref("RegExp")}}.

- -

Description

- -

La méthode toSource renvoie les valeurs suivantes :

- - - -

Cette méthode est généralement utilisée de façon interne au moteur JavaScript, elle n'est pas censée être utilisée dans du code JavaScript classique.

- -

Spécifications

- -

Cette méthode ne fait partie d'aucun standard. Elle a été implémentée avec JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/tosource/index.md b/files/fr/web/javascript/reference/global_objects/regexp/tosource/index.md new file mode 100644 index 0000000000..ddd032b9f2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/tosource/index.md @@ -0,0 +1,56 @@ +--- +title: RegExp.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/toSource +tags: + - JavaScript + - Méthode + - Non-standard + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/toSource +--- +
{{JSRef}}{{non-standard_header}}
+ +

La méthode toSource() permet de renvoyer une chaîne de caractères représentant le code source de l'objet.

+ +

Syntaxe

+ +
objetRegExp.toSource()
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant le code source de l'objet {{jsxref("RegExp")}}.

+ +

Description

+ +

La méthode toSource renvoie les valeurs suivantes :

+ + + +

Cette méthode est généralement utilisée de façon interne au moteur JavaScript, elle n'est pas censée être utilisée dans du code JavaScript classique.

+ +

Spécifications

+ +

Cette méthode ne fait partie d'aucun standard. Elle a été implémentée avec JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/tostring/index.html b/files/fr/web/javascript/reference/global_objects/regexp/tostring/index.html deleted file mode 100644 index d5f3e52afb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/tostring/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: RegExp.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/RegExp/toString -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - RegExp -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaîne de caractères représentant l'expression rationnelle.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-tostring.html", "taller")}}
- -

Syntaxe

- -
regexObj.toString();
- -

Valeur de retour

- -

Une chaîne de caractères représentant l'expression rationnelle appelante.

- -

Description

- -

L'objet {{jsxref("RegExp")}} surcharge la méthode toString de l'objet {{jsxref("Object")}}. Il n'hérite donc pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets RegExp, la méthode toString() renvoie une représentation de l'expression rationnelle sous la forme d'une chaîne de caractères.

- -

Exemples

- -

Utiliser toString()

- -

L'exemple qui suit affiche la chaîne correspondant à la valeur de l'objet {{jsxref("Global_Objects/RegExp", "RegExp")}} :

- -
var maRegExp = new RegExp("a+b+c");
-console.log(maRegExp.toString());  // affiche "/a+b+c/"
-
-var toto = new RegExp("truc", "g");
-console.log(toto.toString());      // affiche "/truc/g"
-
- -

Les expressions ratonnelles vides et l'échappement

- -

À partir d'ECMAScript 5, la méthode renvoie la chaîne "(?:)" pour les expressions vides. De plus, les fins de lignes (telles que "\n") sont désormais échappées.

- -
new RegExp().toString(); // "(?:)"
-
-new RegExp('\n').toString() === "/\n/";  // true avant ES5
-new RegExp('\n').toString() === "/\\n/"; // true à partir d'ES5
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.9.5.2', 'RegExp.prototype.toString')}}{{Spec2('ES5.1')}}source renvoie désormais "(?:)" (et non "") pour les expressions vides. La définition du comportement pour les échappements a été ajoutée.
{{SpecName('ES6', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/tostring/index.md b/files/fr/web/javascript/reference/global_objects/regexp/tostring/index.md new file mode 100644 index 0000000000..d5f3e52afb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/tostring/index.md @@ -0,0 +1,93 @@ +--- +title: RegExp.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/RegExp/toString +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - RegExp +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaîne de caractères représentant l'expression rationnelle.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-tostring.html", "taller")}}
+ +

Syntaxe

+ +
regexObj.toString();
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant l'expression rationnelle appelante.

+ +

Description

+ +

L'objet {{jsxref("RegExp")}} surcharge la méthode toString de l'objet {{jsxref("Object")}}. Il n'hérite donc pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets RegExp, la méthode toString() renvoie une représentation de l'expression rationnelle sous la forme d'une chaîne de caractères.

+ +

Exemples

+ +

Utiliser toString()

+ +

L'exemple qui suit affiche la chaîne correspondant à la valeur de l'objet {{jsxref("Global_Objects/RegExp", "RegExp")}} :

+ +
var maRegExp = new RegExp("a+b+c");
+console.log(maRegExp.toString());  // affiche "/a+b+c/"
+
+var toto = new RegExp("truc", "g");
+console.log(toto.toString());      // affiche "/truc/g"
+
+ +

Les expressions ratonnelles vides et l'échappement

+ +

À partir d'ECMAScript 5, la méthode renvoie la chaîne "(?:)" pour les expressions vides. De plus, les fins de lignes (telles que "\n") sont désormais échappées.

+ +
new RegExp().toString(); // "(?:)"
+
+new RegExp('\n').toString() === "/\n/";  // true avant ES5
+new RegExp('\n').toString() === "/\\n/"; // true à partir d'ES5
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.9.5.2', 'RegExp.prototype.toString')}}{{Spec2('ES5.1')}}source renvoie désormais "(?:)" (et non "") pour les expressions vides. La définition du comportement pour les échappements a été ajoutée.
{{SpecName('ES6', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/regexp/unicode/index.html b/files/fr/web/javascript/reference/global_objects/regexp/unicode/index.html deleted file mode 100644 index a15009ce4e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/regexp/unicode/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: RegExp.prototype.unicode -slug: Web/JavaScript/Reference/Global_Objects/RegExp/unicode -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Prototype - - Reference - - RegExp - - Regular Expressions -translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/unicode -original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/unicode ---- -
{{JSRef}}
- -

La propriété unicode indique si le drapeau "u" a été utilisé avec l'expression rationnelle. unicode est une propriété en lecture seule et liée à une instance d'expression rationnelle.

- -
{{EmbedInteractiveExample("pages/js/regexp-prototype-unicode.html", "taller")}}
- - - -
{{js_property_attributes(0, 0, 1)}}
- -

Description

- -

La valeur d'unicode est un {{jsxref("Boolean")}} et vaut true si le drapeau "u" a été utilisé, sinon false. Le drapeau "u" permet d'activer les fonctionnalités liées à Unicode. En utilisant le drapeau "u" toute séquence d'échappement représentant un codet Unicode sera interprétée comme telle.

- -

Cette propriété ne peut pas être modifiée directement.

- -

Exemples

- -
var regex = new RegExp('\u{61}', 'u');
-
-console.log(regex.unicode); // true
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-regexp.prototype.unicode', 'RegExp.prototype.unicode')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.unicode', 'RegExp.prototype.unicode')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.RegExp.unicode")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/regexp/unicode/index.md b/files/fr/web/javascript/reference/global_objects/regexp/unicode/index.md new file mode 100644 index 0000000000..a15009ce4e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/regexp/unicode/index.md @@ -0,0 +1,73 @@ +--- +title: RegExp.prototype.unicode +slug: Web/JavaScript/Reference/Global_Objects/RegExp/unicode +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Prototype + - Reference + - RegExp + - Regular Expressions +translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/unicode +original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/unicode +--- +
{{JSRef}}
+ +

La propriété unicode indique si le drapeau "u" a été utilisé avec l'expression rationnelle. unicode est une propriété en lecture seule et liée à une instance d'expression rationnelle.

+ +
{{EmbedInteractiveExample("pages/js/regexp-prototype-unicode.html", "taller")}}
+ + + +
{{js_property_attributes(0, 0, 1)}}
+ +

Description

+ +

La valeur d'unicode est un {{jsxref("Boolean")}} et vaut true si le drapeau "u" a été utilisé, sinon false. Le drapeau "u" permet d'activer les fonctionnalités liées à Unicode. En utilisant le drapeau "u" toute séquence d'échappement représentant un codet Unicode sera interprétée comme telle.

+ +

Cette propriété ne peut pas être modifiée directement.

+ +

Exemples

+ +
var regex = new RegExp('\u{61}', 'u');
+
+console.log(regex.unicode); // true
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-regexp.prototype.unicode', 'RegExp.prototype.unicode')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-regexp.prototype.unicode', 'RegExp.prototype.unicode')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.RegExp.unicode")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/@@iterator/index.html b/files/fr/web/javascript/reference/global_objects/set/@@iterator/index.html deleted file mode 100644 index ee03e5c7df..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/@@iterator/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: Set.prototype[@@iterator]() -slug: Web/JavaScript/Reference/Global_Objects/Set/@@iterator -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/@@iterator -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/@@iterator ---- -
{{JSRef}}
- -

La valeur initiale de la propriété @@iterator est le même objet fonction que la valeur initiale de la propriété {{jsxref("Set.prototype.values()", "Set.prototype.values")}}.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-@@iterator.html")}}
- -

Syntaxe

- -
monSet[Symbol.iterator]
- -

Valeur de retour

- -

La fonction associée au symbole @@iterator de l'objet. Par défaut, c'est la fonction {{jsxref("Set.prototype.values()","values()")}}.

- -

Exemples

- -

Utiliser [@@iterator]()

- -
const monSet = new Set();
-monSet.add("0");
-monSet.add(1);
-monSet.add({});
-
-const setIter = monSet[Symbol.iterator]();
-
-console.log(setIter.next().value); // "0"
-console.log(setIter.next().value); // 1
-console.log(setIter.next().value); // {}
-
- -

Utiliser [@@iterator]() avec une boucle for..of

- -
const monSet= new Set();
-monSet.add("0");
-monSet.add(1);
-monSet.add({});
-
-for (const v of monSet) {
-  console.log(v);
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype-@@iterator', 'Set.prototype[@@iterator]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype-@@iterator', 'Set.prototype[@@iterator]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.@@iterator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/@@iterator/index.md b/files/fr/web/javascript/reference/global_objects/set/@@iterator/index.md new file mode 100644 index 0000000000..ee03e5c7df --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/@@iterator/index.md @@ -0,0 +1,89 @@ +--- +title: Set.prototype[@@iterator]() +slug: Web/JavaScript/Reference/Global_Objects/Set/@@iterator +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/@@iterator +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/@@iterator +--- +
{{JSRef}}
+ +

La valeur initiale de la propriété @@iterator est le même objet fonction que la valeur initiale de la propriété {{jsxref("Set.prototype.values()", "Set.prototype.values")}}.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-@@iterator.html")}}
+ +

Syntaxe

+ +
monSet[Symbol.iterator]
+ +

Valeur de retour

+ +

La fonction associée au symbole @@iterator de l'objet. Par défaut, c'est la fonction {{jsxref("Set.prototype.values()","values()")}}.

+ +

Exemples

+ +

Utiliser [@@iterator]()

+ +
const monSet = new Set();
+monSet.add("0");
+monSet.add(1);
+monSet.add({});
+
+const setIter = monSet[Symbol.iterator]();
+
+console.log(setIter.next().value); // "0"
+console.log(setIter.next().value); // 1
+console.log(setIter.next().value); // {}
+
+ +

Utiliser [@@iterator]() avec une boucle for..of

+ +
const monSet= new Set();
+monSet.add("0");
+monSet.add(1);
+monSet.add({});
+
+for (const v of monSet) {
+  console.log(v);
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype-@@iterator', 'Set.prototype[@@iterator]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype-@@iterator', 'Set.prototype[@@iterator]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.@@iterator")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/@@species/index.html b/files/fr/web/javascript/reference/global_objects/set/@@species/index.html deleted file mode 100644 index 75ca5ccc31..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/@@species/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: get Set[@@species] -slug: Web/JavaScript/Reference/Global_Objects/Set/@@species -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/@@species -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/@@species ---- -
{{JSRef}}
- -

Set[@@species] renvoie le constructeur Set.

- -

Syntaxe

- -
Set[Symbol.species]
-
- -

Description

- -

L'accesseur species renvoie le constructeur par défaut pour les objets Set. Les constructeurs pour les classes filles peuvent surcharger cette propriété afin de modifier le constructeur utilisé lors de l'affectation.

- -

Exemples

- -

La propriété species renvoie la fonction utilisée comme constructeur par défaut, dans le cas des objets Set, c'est le constructeur Set :

- -
Set[Symbol.species]; // function Set()
- -

Pour les objets dérivés (par exemple une classe MonSet que vous auriez construite), la propriété species pour MonSet sera le constructeur MonSet. Cependant, si vous souhaitez surcharger ce comportement afin de renvoyer le constructeur Set dans les méthodes des classes dérivées, vous pourrez utiliser :

- -
class MonSet extends Set
-  // On surcharge la propriété species de MonSet
-  // avec le constructeur Set de la classe parente
-  static get [Symbol.species()]() { return Set;}
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-set-@@species', 'get Set [ @@species ]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-set-@@species', 'get Set [ @@species ]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.@@species")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/@@species/index.md b/files/fr/web/javascript/reference/global_objects/set/@@species/index.md new file mode 100644 index 0000000000..75ca5ccc31 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/@@species/index.md @@ -0,0 +1,71 @@ +--- +title: get Set[@@species] +slug: Web/JavaScript/Reference/Global_Objects/Set/@@species +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/@@species +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/@@species +--- +
{{JSRef}}
+ +

Set[@@species] renvoie le constructeur Set.

+ +

Syntaxe

+ +
Set[Symbol.species]
+
+ +

Description

+ +

L'accesseur species renvoie le constructeur par défaut pour les objets Set. Les constructeurs pour les classes filles peuvent surcharger cette propriété afin de modifier le constructeur utilisé lors de l'affectation.

+ +

Exemples

+ +

La propriété species renvoie la fonction utilisée comme constructeur par défaut, dans le cas des objets Set, c'est le constructeur Set :

+ +
Set[Symbol.species]; // function Set()
+ +

Pour les objets dérivés (par exemple une classe MonSet que vous auriez construite), la propriété species pour MonSet sera le constructeur MonSet. Cependant, si vous souhaitez surcharger ce comportement afin de renvoyer le constructeur Set dans les méthodes des classes dérivées, vous pourrez utiliser :

+ +
class MonSet extends Set
+  // On surcharge la propriété species de MonSet
+  // avec le constructeur Set de la classe parente
+  static get [Symbol.species()]() { return Set;}
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-set-@@species', 'get Set [ @@species ]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-set-@@species', 'get Set [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.@@species")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/add/index.html b/files/fr/web/javascript/reference/global_objects/set/add/index.html deleted file mode 100644 index 7b834fe40f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/add/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Set.prototype.add() -slug: Web/JavaScript/Reference/Global_Objects/Set/add -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/add -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/add ---- -
{{JSRef}}
- -

La méthode add() permet d'ajouter un nouvel élément ayant une valeur donnée à un ensemble Set. Cette valeur sera ajoutée à la fin de l'objet Set.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-add.html")}}
- -

Syntaxe

- -
monSet.add(valeur);
- -

Paramètres

- -
-
valeur
-
Ce paramètre est obligatoire. La valeur de l'élément qu'on souhaite ajouter à l'objet Set.
-
- -

Valeur de retour

- -

L'objet Set (ce qui permet de chaîner une suite d'instructions utilisant cette méthode).

- -

Exemples

- -
var monSet = new Set();
-
-monSet.add(1);
-monSet.add(5).add("du texte"); // ajouts en chaîne
-
-console.log(monSet);
-// Set [1, 5, "du texte"]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.add', 'Set.prototype.add')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.add', 'Set.prototype.add')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.add")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/add/index.md b/files/fr/web/javascript/reference/global_objects/set/add/index.md new file mode 100644 index 0000000000..7b834fe40f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/add/index.md @@ -0,0 +1,78 @@ +--- +title: Set.prototype.add() +slug: Web/JavaScript/Reference/Global_Objects/Set/add +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/add +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/add +--- +
{{JSRef}}
+ +

La méthode add() permet d'ajouter un nouvel élément ayant une valeur donnée à un ensemble Set. Cette valeur sera ajoutée à la fin de l'objet Set.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-add.html")}}
+ +

Syntaxe

+ +
monSet.add(valeur);
+ +

Paramètres

+ +
+
valeur
+
Ce paramètre est obligatoire. La valeur de l'élément qu'on souhaite ajouter à l'objet Set.
+
+ +

Valeur de retour

+ +

L'objet Set (ce qui permet de chaîner une suite d'instructions utilisant cette méthode).

+ +

Exemples

+ +
var monSet = new Set();
+
+monSet.add(1);
+monSet.add(5).add("du texte"); // ajouts en chaîne
+
+console.log(monSet);
+// Set [1, 5, "du texte"]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.add', 'Set.prototype.add')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.add', 'Set.prototype.add')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.add")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/clear/index.html b/files/fr/web/javascript/reference/global_objects/set/clear/index.html deleted file mode 100644 index a82d07fca4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/clear/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Set.prototype.clear() -slug: Web/JavaScript/Reference/Global_Objects/Set/clear -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/clear -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/clear ---- -
{{JSRef}}
- -

La méthode clear() permet de retirer tous les éléments d'un ensemble Set.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-clear.html")}}
- -

Syntaxe

- -
monSet.clear();
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Exemples

- -
var monSet = new Set();
-monSet.add(1);
-monSet.add("toto");
-
-monSet.size;        // 2
-monSet.has("toto"); // true
-
-monSet.clear();
-
-monSet.size;       // 0
-monSet.has("truc")  // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.clear', 'Set.prototype.clear')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.clear', 'Set.prototype.clear')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.clear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/clear/index.md b/files/fr/web/javascript/reference/global_objects/set/clear/index.md new file mode 100644 index 0000000000..a82d07fca4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/clear/index.md @@ -0,0 +1,74 @@ +--- +title: Set.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/Set/clear +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/clear +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/clear +--- +
{{JSRef}}
+ +

La méthode clear() permet de retirer tous les éléments d'un ensemble Set.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-clear.html")}}
+ +

Syntaxe

+ +
monSet.clear();
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Exemples

+ +
var monSet = new Set();
+monSet.add(1);
+monSet.add("toto");
+
+monSet.size;        // 2
+monSet.has("toto"); // true
+
+monSet.clear();
+
+monSet.size;       // 0
+monSet.has("truc")  // false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.clear', 'Set.prototype.clear')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.clear', 'Set.prototype.clear')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.clear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/delete/index.html b/files/fr/web/javascript/reference/global_objects/set/delete/index.html deleted file mode 100644 index 1e89d36e0c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/delete/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Set.prototype.delete() -slug: Web/JavaScript/Reference/Global_Objects/Set/delete -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/delete -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/delete ---- -
{{JSRef}}
- -

La méthode delete() permet de retirer un élément donné d'un objet Set.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-delete.html")}}
- -

Syntaxe

- -
monSet.delete(valeur);
- -

Paramètres

- -
-
valeur
-
Ce paramètre est obligatoire. Il représente la valeur de l'élément qu'on souhaite retirer de l'objet Set.
-
- -

Valeur de retour

- -

true si un élément de l'objet Set a été retiré lors de l'opération, false sinon.

- -

Exemples

- -

Utiliser la méthode delete()

- -
var monSet = new Set();
-monSet.add("toto");
-
-monSet.delete("truc"); // Renvoie false. Aucun élément "truc" n'a pu être supprimé.
-monSet.delete("toto"); // Renvoie true.  L'élément a pu être supprimé.
-
-monSet.has("toto");    // Renvoie false. L'élément "toto" ne fait plus partie de l'ensemble.
-
- -

Utiliser delete() avec forEach()

- -
var objetSet = new Set();
-objetSet.add({x: 10, y: 20}); // On ajoute un nouvel objet dans l'ensemble
-objetSet.add({x: 20, y: 30}); // On ajoute un nouvel objet dans l'ensemble
-
-// On supprime les points de l'ensemble pour lesquels
-// x est supérieur à 10
-objetSet.forEach(function(point){
-  if(point.x > 10){
-    objetSet.delete(point);
-  }
-});
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.delete', 'Set.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.delete', 'Set.prototype.delete')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.delete")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/delete/index.md b/files/fr/web/javascript/reference/global_objects/set/delete/index.md new file mode 100644 index 0000000000..1e89d36e0c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/delete/index.md @@ -0,0 +1,93 @@ +--- +title: Set.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/Set/delete +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/delete +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/delete +--- +
{{JSRef}}
+ +

La méthode delete() permet de retirer un élément donné d'un objet Set.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-delete.html")}}
+ +

Syntaxe

+ +
monSet.delete(valeur);
+ +

Paramètres

+ +
+
valeur
+
Ce paramètre est obligatoire. Il représente la valeur de l'élément qu'on souhaite retirer de l'objet Set.
+
+ +

Valeur de retour

+ +

true si un élément de l'objet Set a été retiré lors de l'opération, false sinon.

+ +

Exemples

+ +

Utiliser la méthode delete()

+ +
var monSet = new Set();
+monSet.add("toto");
+
+monSet.delete("truc"); // Renvoie false. Aucun élément "truc" n'a pu être supprimé.
+monSet.delete("toto"); // Renvoie true.  L'élément a pu être supprimé.
+
+monSet.has("toto");    // Renvoie false. L'élément "toto" ne fait plus partie de l'ensemble.
+
+ +

Utiliser delete() avec forEach()

+ +
var objetSet = new Set();
+objetSet.add({x: 10, y: 20}); // On ajoute un nouvel objet dans l'ensemble
+objetSet.add({x: 20, y: 30}); // On ajoute un nouvel objet dans l'ensemble
+
+// On supprime les points de l'ensemble pour lesquels
+// x est supérieur à 10
+objetSet.forEach(function(point){
+  if(point.x > 10){
+    objetSet.delete(point);
+  }
+});
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.delete', 'Set.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.delete', 'Set.prototype.delete')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.delete")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/entries/index.html b/files/fr/web/javascript/reference/global_objects/set/entries/index.html deleted file mode 100644 index 2664c6e718..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/entries/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Set.prototype.entries() -slug: Web/JavaScript/Reference/Global_Objects/Set/entries -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/entries -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/entries ---- -
{{JSRef}}
- -

La méthode entries() renvoie un nouvel objet Iterator qui contient un tableau composé de [valeur, valeur] pour chaque élément de l'objet Set, dans leur ordre d'insertion. En raison de leur structure, les objets Set n'ont pas de clé (key), à la différence des objets Map. Pour garder une structure et une API sembables à celle d'un objet Map, chaque entrée (entry) aura la même valeur pour la clé (key) et pour la valeur (value), c'est pourquoi un tableau de [valeur, valeur] est renvoyé.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-entries.html")}}
- -

Syntaxe

- -
monSet.entries()
- -

Valeur de retour

- -

Un nouvel objet Iterator qui contient un tableau de tuples [valeur, valeur] pour chaque élément de l'ensemble, dans leur ordre d'insertion.

- -

Exemples

- -
var monSet = new Set();
-monSet.add("totobidule");
-monSet.add(1);
-monSet.add("machin");
-
-var setIter = monSet.entries();
-
-console.log(setIter.next().value); // ["totobidule", "totobidule"]
-console.log(setIter.next().value); // [1, 1]
-console.log(setIter.next().value); // ["machin", "machin"]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.entries', 'Set.prototype.entries')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.entries', 'Set.prototype.entries')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.entries")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/entries/index.md b/files/fr/web/javascript/reference/global_objects/set/entries/index.md new file mode 100644 index 0000000000..2664c6e718 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/entries/index.md @@ -0,0 +1,74 @@ +--- +title: Set.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Set/entries +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/entries +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/entries +--- +
{{JSRef}}
+ +

La méthode entries() renvoie un nouvel objet Iterator qui contient un tableau composé de [valeur, valeur] pour chaque élément de l'objet Set, dans leur ordre d'insertion. En raison de leur structure, les objets Set n'ont pas de clé (key), à la différence des objets Map. Pour garder une structure et une API sembables à celle d'un objet Map, chaque entrée (entry) aura la même valeur pour la clé (key) et pour la valeur (value), c'est pourquoi un tableau de [valeur, valeur] est renvoyé.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-entries.html")}}
+ +

Syntaxe

+ +
monSet.entries()
+ +

Valeur de retour

+ +

Un nouvel objet Iterator qui contient un tableau de tuples [valeur, valeur] pour chaque élément de l'ensemble, dans leur ordre d'insertion.

+ +

Exemples

+ +
var monSet = new Set();
+monSet.add("totobidule");
+monSet.add(1);
+monSet.add("machin");
+
+var setIter = monSet.entries();
+
+console.log(setIter.next().value); // ["totobidule", "totobidule"]
+console.log(setIter.next().value); // [1, 1]
+console.log(setIter.next().value); // ["machin", "machin"]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.entries', 'Set.prototype.entries')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.entries', 'Set.prototype.entries')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.entries")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/foreach/index.html b/files/fr/web/javascript/reference/global_objects/set/foreach/index.html deleted file mode 100644 index 3db2526f8a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/foreach/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Set.prototype.forEach() -slug: Web/JavaScript/Reference/Global_Objects/Set/forEach -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/forEach -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/forEach ---- -
{{JSRef}}
- -

La méthode forEach() permet d'exécuter une fonction donnée, une fois pour chaque valeur de l'ensemble Set. L'ordre appliqué est celui dans lequel les valeurs ont été ajoutées à l'ensemble.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-foreach.html")}}
- -

Syntaxe

- -
monSet.forEach(callback[, thisArg])
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Paramètres

- -
-
callback
-
La fonction qu'on souhaite exécuter pour chaque élément et qui sera appelée avec trois arguments : -
-
valeurCourante, cléCourante
-
L'élément courant appartenant à l'ensemble Set. Un ensemble n'ayant pas de clé, c'est la même valeur qui est passée pour deux arguments de la fonction de rappel.
-
set
-
L'objet Set courant (celui sur lequel forEach() a été appelé).
-
-
-
thisArg
-
Paramètre optionnel. La valeur à utiliser comme this lors de l'exécution de callback.
-
- -

Description

- -

La méthode forEach() exécute la fonction callback fournie pour chaque valeur contenue au sein de l'objet Set. Elle n'est pas appelée pour les valeurs qui ont été supprimées. Cependant, elle est exécutée si jamais la valeur vaut undefined.

- -

callback est appelé avec trois arguments :

- - - -

Les objets Set n'ont pas de clé (key). Cependant les deux premiers arguments correspondent à la valeur contenue dans l'objet {{jsxref("Set")}}. Cela permet d'utiliser les fonctions callback de façon cohérente avec les méthodes forEach() de {{jsxref("Map.foreach", "Map")}} et {{jsxref("Array.forEach","Array")}}.

- -

Si un paramètre thisArg est fourni, il sera passé à la fonction callback lors de l'appel comme valeur this. Par défaut, la valeur {{jsxref("undefined")}} sera passée comme argument this. La valeur this effectivement reçue par la fonction callback est déterminée selon les règles usuelles de détermination de this par une fonction.

- -

Chacune des valeurs sera traitée une fois sauf si celle-ci a été supprimée puis réajoutée avant la fin de forEach. callback n'est pas appelé pour les valeurs qui sont supprimés avant le passage de la fonction. Les valeurs qui sont ajoutées avant que forEach ait parcouru l'ensemble seront traitées

- -

forEach exécute la fonction callback une fois pour chaque élément de l'objet Set. Cette méthode ne renvoie pas de valeur.

- -

Exemples

- -

Le code qui suit permet d'enregistrer une ligne pour chaque élément contenu dans l'objet Set :

- -
function logSetElements(valeur1, valeur2, set) {
-    console.log("s[" + valeur1 + "] = " + valeur2);
-}
-
-new Set(["toto", "truc", undefined]).forEach(logSetElements);
-
-// affichera :
-// "s[toto] = toto"
-// "s[truc] = truc"
-// "s[undefined] = undefined"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.forEach")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/foreach/index.md b/files/fr/web/javascript/reference/global_objects/set/foreach/index.md new file mode 100644 index 0000000000..3db2526f8a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/foreach/index.md @@ -0,0 +1,111 @@ +--- +title: Set.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/Set/forEach +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/forEach +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/forEach +--- +
{{JSRef}}
+ +

La méthode forEach() permet d'exécuter une fonction donnée, une fois pour chaque valeur de l'ensemble Set. L'ordre appliqué est celui dans lequel les valeurs ont été ajoutées à l'ensemble.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-foreach.html")}}
+ +

Syntaxe

+ +
monSet.forEach(callback[, thisArg])
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Paramètres

+ +
+
callback
+
La fonction qu'on souhaite exécuter pour chaque élément et qui sera appelée avec trois arguments : +
+
valeurCourante, cléCourante
+
L'élément courant appartenant à l'ensemble Set. Un ensemble n'ayant pas de clé, c'est la même valeur qui est passée pour deux arguments de la fonction de rappel.
+
set
+
L'objet Set courant (celui sur lequel forEach() a été appelé).
+
+
+
thisArg
+
Paramètre optionnel. La valeur à utiliser comme this lors de l'exécution de callback.
+
+ +

Description

+ +

La méthode forEach() exécute la fonction callback fournie pour chaque valeur contenue au sein de l'objet Set. Elle n'est pas appelée pour les valeurs qui ont été supprimées. Cependant, elle est exécutée si jamais la valeur vaut undefined.

+ +

callback est appelé avec trois arguments :

+ + + +

Les objets Set n'ont pas de clé (key). Cependant les deux premiers arguments correspondent à la valeur contenue dans l'objet {{jsxref("Set")}}. Cela permet d'utiliser les fonctions callback de façon cohérente avec les méthodes forEach() de {{jsxref("Map.foreach", "Map")}} et {{jsxref("Array.forEach","Array")}}.

+ +

Si un paramètre thisArg est fourni, il sera passé à la fonction callback lors de l'appel comme valeur this. Par défaut, la valeur {{jsxref("undefined")}} sera passée comme argument this. La valeur this effectivement reçue par la fonction callback est déterminée selon les règles usuelles de détermination de this par une fonction.

+ +

Chacune des valeurs sera traitée une fois sauf si celle-ci a été supprimée puis réajoutée avant la fin de forEach. callback n'est pas appelé pour les valeurs qui sont supprimés avant le passage de la fonction. Les valeurs qui sont ajoutées avant que forEach ait parcouru l'ensemble seront traitées

+ +

forEach exécute la fonction callback une fois pour chaque élément de l'objet Set. Cette méthode ne renvoie pas de valeur.

+ +

Exemples

+ +

Le code qui suit permet d'enregistrer une ligne pour chaque élément contenu dans l'objet Set :

+ +
function logSetElements(valeur1, valeur2, set) {
+    console.log("s[" + valeur1 + "] = " + valeur2);
+}
+
+new Set(["toto", "truc", undefined]).forEach(logSetElements);
+
+// affichera :
+// "s[toto] = toto"
+// "s[truc] = truc"
+// "s[undefined] = undefined"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.forEach")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/has/index.html b/files/fr/web/javascript/reference/global_objects/set/has/index.html deleted file mode 100644 index 1ada789d3e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/has/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Set.prototype.has() -slug: Web/JavaScript/Reference/Global_Objects/Set/has -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/has -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/has ---- -
{{JSRef}}
- -

La méthode has() renvoie un booléen qui indique s'il existe un élément de l'ensemble Set avec une certaine valeur.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-has.html")}}
- -

Syntaxe

- -
monSet.has(valeur);
- -

Paramètres

- -
-
valeur
-
Ce paramètre est obligatoire. C'est la valeur dont on souhaite savoir si elle est présente ou non dans l'objet Set.
-
- -

Valeur de retour

- -

Un booléen : true s'il existe un élément avec la valeur donnée au sein du Set, false sinon.

- -
-

Note : L'existence d'un élément avec la valeur testée est vérifiée avec l'algorithme d'égalité des valeurs nulles (sameValueZero).

-
- -

Exemples

- -
var monSet = new Set();
-monSet.add("toto");
-
-monSet.has("toto");  // renvoie true
-monSet.has("truc");  // renvoie false
-
-var set1 = new Set();
-var obj1 = {'cle1': 1};
-set1.add(obj1);
-
-set1.has(obj1);        // renvoie true
-set1.has({'cle1': 1}); // renvoie false car ce sont deux objets distincts
-set1.add({'cle1': 1}); // set1 contient désormais 2 éléments
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.has', 'Set.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.has', 'Set.prototype.has')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.has")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/has/index.md b/files/fr/web/javascript/reference/global_objects/set/has/index.md new file mode 100644 index 0000000000..1ada789d3e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/has/index.md @@ -0,0 +1,88 @@ +--- +title: Set.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/Set/has +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/has +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/has +--- +
{{JSRef}}
+ +

La méthode has() renvoie un booléen qui indique s'il existe un élément de l'ensemble Set avec une certaine valeur.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-has.html")}}
+ +

Syntaxe

+ +
monSet.has(valeur);
+ +

Paramètres

+ +
+
valeur
+
Ce paramètre est obligatoire. C'est la valeur dont on souhaite savoir si elle est présente ou non dans l'objet Set.
+
+ +

Valeur de retour

+ +

Un booléen : true s'il existe un élément avec la valeur donnée au sein du Set, false sinon.

+ +
+

Note : L'existence d'un élément avec la valeur testée est vérifiée avec l'algorithme d'égalité des valeurs nulles (sameValueZero).

+
+ +

Exemples

+ +
var monSet = new Set();
+monSet.add("toto");
+
+monSet.has("toto");  // renvoie true
+monSet.has("truc");  // renvoie false
+
+var set1 = new Set();
+var obj1 = {'cle1': 1};
+set1.add(obj1);
+
+set1.has(obj1);        // renvoie true
+set1.has({'cle1': 1}); // renvoie false car ce sont deux objets distincts
+set1.add({'cle1': 1}); // set1 contient désormais 2 éléments
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.has', 'Set.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set.prototype.has', 'Set.prototype.has')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.has")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/index.html b/files/fr/web/javascript/reference/global_objects/set/index.html deleted file mode 100644 index 46db53beed..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/index.html +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: Set -slug: Web/JavaScript/Reference/Global_Objects/Set -tags: - - ECMAScript 2015 - - JavaScript - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set -original_slug: Web/JavaScript/Reference/Objets_globaux/Set ---- -
{{JSRef}}
- -

L'objet Set (Ensemble en français) permet de stocker des valeurs uniques, de n'importe quel type, que ce soit des valeurs d'un {{Glossary("Primitive", "type primitif")}} ou des objets.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-constructor.html")}}
- -

Syntaxe

- -
 new Set([itérable]);
- -

Paramètres

- -
-
itérable
-
Paramètre optionnel. Si un objet itérable est donné comme argument, l'ensemble de ses éléments sera ajouté au nouvel objet Set. Si {{jsxref("null")}} est fourni comme argument ou qu'aucun argument n'est fourni, il sera traité comme {{jsxref("undefined")}}.
-
- -

Valeur de retour

- -

Un nouvel objet Set.

- -

Description

- -

Les objets Set sont des ensembles de valeurs. Il est possible d'itérer sur les éléments contenus dans l'objet Set dans leur ordre d'insertion. Une valeur donnée ne peut apparaître qu'une seule fois par Set.

- -

Égalité des valeurs

- -

Chaque valeur d'un Set doit être unique, il faut donc tester l'égalité des valeurs contenues. Cette égalité n'est pas la même que celle de l'opérateur ===. Notamment, pour les objets Set+0 (qui, selon l'égalité stricte, est égal à -0) et -0 sont des valeurs différentes. Cela a toutefois été changé avec la dernière version d'ECMAScript 2015 (ES6). Voir le tableau de compatibilité ci-après quant à la prise en charge de l'égalité des clés pour 0 et -0.

- -

{{jsxref("NaN")}} and {{jsxref("undefined")}} peuvent être enregistrés dans un objet Set. NaN est considéré comme NaN (bien que NaN !== NaN).

- -

Propriétés

- -
-
Set.length
-
La valeur de la propriété length est 0. -

Note : Pour compter le nombre d'éléments d'un objet Set, on utilisera {{jsxref("Set.prototype.size")}}.

-
-
{{jsxref("Set.@@species", "get Set[@@species]")}}
-
Le constructeur utilisé pour créer des objets dérivés.
-
{{jsxref("Set.prototype")}}
-
Représente le prototype du constructeur Set. Cela permet d'ajouter des propriétés à tous les objets Set.
-
- -

Instances de Set

- -

Toutes les instances de Set héritent de {{jsxref("Set.prototype")}}.

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Set/prototype','Propriétés')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Set/prototype','Méthodes')}}

- -

Exemples

- -

Utiliser l'objet Set

- -
var monSet = new Set();
-
-monSet.add(1);         // { 1 }
-monSet.add(5);         // { 1, 5 }
-monSet.add("du texte");// { 1, 5, "du texte" }
-
-monSet.has(1); // true
-monSet.has(3); // false, 3 n'a pas été ajouté à l'ensemble
-monSet.has(5);              // true
-monSet.has(Math.sqrt(25));  // true
-monSet.has("Du Texte".toLowerCase()); // true
-
-monSet.size; // 3
-
-monSet.delete(5); // retire 5 du set
-monSet.has(5);    // false, 5 a été retiré de l'ensemble
-
-monSet.size; // 2, on a retiré une valeur de l'ensemble
-console.log(monSet); // Set [ 1, "du texte" ]
-
- -

Itérer sur des ensembles (Set)

- -
// On itère sur les différents éléments de l'ensemble
-// ici on affiche : 1, "du texte"
-for (let item of monSet) console.log(item);
-
-// ici on affiche les clés de l'ensemble : 1, "du texte"
-for (let item of monSet.keys()) console.log(item);
-
-// ici on affiche les valeurs de l'ensemble : 1, "du texte"
-for (let item of monSet.values()) console.log(item);
-
-// ici on affiche les clés de l'ensemble : 1, "du texte"
-//(ici, les clés et les valeurs sont les mêmes)
-for (let [clé, valeur] of monSet.entries()) console.log(clé);
-
-// Une méthode de conversion avec Array.from
-var monTableau = Array.from(monSet);    // [1, "du texte"]
-
-// Cela fonctionnera également dans un document HTML
-monSet.add(document.body);
-monSet.has(document.querySelector("body")); // true
-
-// convertir un tableau (Array) en ensemble (Set) et vice versa
-monSet2 = new Set([1,2,3,4]);
-monSet2.size; // 4
-[...monSet2]; // [1,2,3,4]
-
-// L'intersection peut être calculée avec
-var intersection = new Set([...set1].filter(x => set2.has(x)));
-
-// La différence pourra être simulée avec
-var différence = new Set([...set1].filter(x => !set2.has(x)));
-
-// On peut itérer sur les entrées d'un ensemble avec forEach
-mySet.forEach(function(value) {
-  console.log(value);
-});
-
-// 1
-// 2
-// 3
-// 4
- -

Implémenter des opérations ensemblistes

- -
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;
-}
-
-// Exemples
-var setA = new Set([1,2,3,4]),
-    setB = new Set([2,3]),
-    setC = new Set([3,4,5,6]);
-
-isSuperset(setA, setB);   // => true
-union(setA, setC);        // => Set [1, 2, 3, 4, 5, 6]
-intersection(setA, setC); // => Set [3, 4]
-difference(setA, setC);   // => Set [1, 2]
-
- -

Les relations avec les objets Array

- -
var monTableau = ["valeur1", "valeur2", "valeur3"];
-
-// On peut utiliser le constructeur Set pour transformer un Array en Set
-var monSet = new Set(monTableau);
-
-monSet.has("valeur1"); // renvoie true
-
-// Et utiliser l'opérateur de décomposition pour transformer un Set en Array.
-console.log([...monSet]); // affichera la même chose que monTableau
- -

Les relations avec les objets String

- -
var maChaine = "CouCou";
-
-var monEnsemble = new Set(maChaine);
-// Set {"C","o","u" }
-monEnsemble.size; // 3
-
- -

Dédoublonner un tableau

- -
const nombres = [2,3,4,4,2,2,2,4,4,5,5,6,6,7,5,32,3,4,5];
-console.log([...new Set(nombres)]);
-// affichera [2, 3, 4, 5, 6, 7, 32]
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set-objects', 'Set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set-objects', 'Set')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/index.md b/files/fr/web/javascript/reference/global_objects/set/index.md new file mode 100644 index 0000000000..46db53beed --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/index.md @@ -0,0 +1,246 @@ +--- +title: Set +slug: Web/JavaScript/Reference/Global_Objects/Set +tags: + - ECMAScript 2015 + - JavaScript + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set +original_slug: Web/JavaScript/Reference/Objets_globaux/Set +--- +
{{JSRef}}
+ +

L'objet Set (Ensemble en français) permet de stocker des valeurs uniques, de n'importe quel type, que ce soit des valeurs d'un {{Glossary("Primitive", "type primitif")}} ou des objets.

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

Syntaxe

+ +
 new Set([itérable]);
+ +

Paramètres

+ +
+
itérable
+
Paramètre optionnel. Si un objet itérable est donné comme argument, l'ensemble de ses éléments sera ajouté au nouvel objet Set. Si {{jsxref("null")}} est fourni comme argument ou qu'aucun argument n'est fourni, il sera traité comme {{jsxref("undefined")}}.
+
+ +

Valeur de retour

+ +

Un nouvel objet Set.

+ +

Description

+ +

Les objets Set sont des ensembles de valeurs. Il est possible d'itérer sur les éléments contenus dans l'objet Set dans leur ordre d'insertion. Une valeur donnée ne peut apparaître qu'une seule fois par Set.

+ +

Égalité des valeurs

+ +

Chaque valeur d'un Set doit être unique, il faut donc tester l'égalité des valeurs contenues. Cette égalité n'est pas la même que celle de l'opérateur ===. Notamment, pour les objets Set+0 (qui, selon l'égalité stricte, est égal à -0) et -0 sont des valeurs différentes. Cela a toutefois été changé avec la dernière version d'ECMAScript 2015 (ES6). Voir le tableau de compatibilité ci-après quant à la prise en charge de l'égalité des clés pour 0 et -0.

+ +

{{jsxref("NaN")}} and {{jsxref("undefined")}} peuvent être enregistrés dans un objet Set. NaN est considéré comme NaN (bien que NaN !== NaN).

+ +

Propriétés

+ +
+
Set.length
+
La valeur de la propriété length est 0. +

Note : Pour compter le nombre d'éléments d'un objet Set, on utilisera {{jsxref("Set.prototype.size")}}.

+
+
{{jsxref("Set.@@species", "get Set[@@species]")}}
+
Le constructeur utilisé pour créer des objets dérivés.
+
{{jsxref("Set.prototype")}}
+
Représente le prototype du constructeur Set. Cela permet d'ajouter des propriétés à tous les objets Set.
+
+ +

Instances de Set

+ +

Toutes les instances de Set héritent de {{jsxref("Set.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Set/prototype','Propriétés')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Set/prototype','Méthodes')}}

+ +

Exemples

+ +

Utiliser l'objet Set

+ +
var monSet = new Set();
+
+monSet.add(1);         // { 1 }
+monSet.add(5);         // { 1, 5 }
+monSet.add("du texte");// { 1, 5, "du texte" }
+
+monSet.has(1); // true
+monSet.has(3); // false, 3 n'a pas été ajouté à l'ensemble
+monSet.has(5);              // true
+monSet.has(Math.sqrt(25));  // true
+monSet.has("Du Texte".toLowerCase()); // true
+
+monSet.size; // 3
+
+monSet.delete(5); // retire 5 du set
+monSet.has(5);    // false, 5 a été retiré de l'ensemble
+
+monSet.size; // 2, on a retiré une valeur de l'ensemble
+console.log(monSet); // Set [ 1, "du texte" ]
+
+ +

Itérer sur des ensembles (Set)

+ +
// On itère sur les différents éléments de l'ensemble
+// ici on affiche : 1, "du texte"
+for (let item of monSet) console.log(item);
+
+// ici on affiche les clés de l'ensemble : 1, "du texte"
+for (let item of monSet.keys()) console.log(item);
+
+// ici on affiche les valeurs de l'ensemble : 1, "du texte"
+for (let item of monSet.values()) console.log(item);
+
+// ici on affiche les clés de l'ensemble : 1, "du texte"
+//(ici, les clés et les valeurs sont les mêmes)
+for (let [clé, valeur] of monSet.entries()) console.log(clé);
+
+// Une méthode de conversion avec Array.from
+var monTableau = Array.from(monSet);    // [1, "du texte"]
+
+// Cela fonctionnera également dans un document HTML
+monSet.add(document.body);
+monSet.has(document.querySelector("body")); // true
+
+// convertir un tableau (Array) en ensemble (Set) et vice versa
+monSet2 = new Set([1,2,3,4]);
+monSet2.size; // 4
+[...monSet2]; // [1,2,3,4]
+
+// L'intersection peut être calculée avec
+var intersection = new Set([...set1].filter(x => set2.has(x)));
+
+// La différence pourra être simulée avec
+var différence = new Set([...set1].filter(x => !set2.has(x)));
+
+// On peut itérer sur les entrées d'un ensemble avec forEach
+mySet.forEach(function(value) {
+  console.log(value);
+});
+
+// 1
+// 2
+// 3
+// 4
+ +

Implémenter des opérations ensemblistes

+ +
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;
+}
+
+// Exemples
+var setA = new Set([1,2,3,4]),
+    setB = new Set([2,3]),
+    setC = new Set([3,4,5,6]);
+
+isSuperset(setA, setB);   // => true
+union(setA, setC);        // => Set [1, 2, 3, 4, 5, 6]
+intersection(setA, setC); // => Set [3, 4]
+difference(setA, setC);   // => Set [1, 2]
+
+ +

Les relations avec les objets Array

+ +
var monTableau = ["valeur1", "valeur2", "valeur3"];
+
+// On peut utiliser le constructeur Set pour transformer un Array en Set
+var monSet = new Set(monTableau);
+
+monSet.has("valeur1"); // renvoie true
+
+// Et utiliser l'opérateur de décomposition pour transformer un Set en Array.
+console.log([...monSet]); // affichera la même chose que monTableau
+ +

Les relations avec les objets String

+ +
var maChaine = "CouCou";
+
+var monEnsemble = new Set(maChaine);
+// Set {"C","o","u" }
+monEnsemble.size; // 3
+
+ +

Dédoublonner un tableau

+ +
const nombres = [2,3,4,4,2,2,2,4,4,5,5,6,6,7,5,32,3,4,5];
+console.log([...new Set(nombres)]);
+// affichera [2, 3, 4, 5, 6, 7, 32]
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set-objects', 'Set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-set-objects', 'Set')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/size/index.html b/files/fr/web/javascript/reference/global_objects/set/size/index.html deleted file mode 100644 index 57e0165c9c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/size/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Set.prototype.size -slug: Web/JavaScript/Reference/Global_Objects/Set/size -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/size -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/size ---- -
{{JSRef}}
- -

L'accesseur size est une propriété qui renvoie le nombre d'éléments contenus dans un objet {{jsxref("Set")}}. Un objet Set correspondant à un ensemble, chaque élément qu'il contient y est unique.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-size.html")}}
- - - -

Description

- -

La valeur de size est un entier représentant le nombre d'éléments contenus dans l'ensemble. Le mutateur associée pour size vaut {{jsxref("undefined")}}. Cette propriété ne peut pas être changée directement.

- -

Exemples

- -
var monSet = new Set();
-monSet.add(1);
-monSet.add(5);
-monSet.add("du texte")
-
-monSet.size; // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-set.prototype.size', 'Set.prototype.size')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-set.prototype.size', 'Set.prototype.size')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.size")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/size/index.md b/files/fr/web/javascript/reference/global_objects/set/size/index.md new file mode 100644 index 0000000000..57e0165c9c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/size/index.md @@ -0,0 +1,66 @@ +--- +title: Set.prototype.size +slug: Web/JavaScript/Reference/Global_Objects/Set/size +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/size +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/size +--- +
{{JSRef}}
+ +

L'accesseur size est une propriété qui renvoie le nombre d'éléments contenus dans un objet {{jsxref("Set")}}. Un objet Set correspondant à un ensemble, chaque élément qu'il contient y est unique.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-size.html")}}
+ + + +

Description

+ +

La valeur de size est un entier représentant le nombre d'éléments contenus dans l'ensemble. Le mutateur associée pour size vaut {{jsxref("undefined")}}. Cette propriété ne peut pas être changée directement.

+ +

Exemples

+ +
var monSet = new Set();
+monSet.add(1);
+monSet.add(5);
+monSet.add("du texte")
+
+monSet.size; // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-get-set.prototype.size', 'Set.prototype.size')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-set.prototype.size', 'Set.prototype.size')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.size")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/set/values/index.html b/files/fr/web/javascript/reference/global_objects/set/values/index.html deleted file mode 100644 index fd56d94faa..0000000000 --- a/files/fr/web/javascript/reference/global_objects/set/values/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Set.prototype.values() -slug: Web/JavaScript/Reference/Global_Objects/Set/values -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - set -translation_of: Web/JavaScript/Reference/Global_Objects/Set/values -original_slug: Web/JavaScript/Reference/Objets_globaux/Set/values ---- -
{{JSRef}}
- -

La méthode values() renvoie un nouvel objet {{jsxref("Iterator")}} qui contient les valeurs de chaque élément de l'objet Set, dans leur ordre d'insertion.

- -

La méthode keys() est un alias pour cette méthode (afin de conserver une certaine similarité avec les objets {{jsxref("Map")}}) et se comportera exactement de la même façon en renvoyant les valeurs des éléments du Set.

- -
{{EmbedInteractiveExample("pages/js/set-prototype-values.html")}}
- -

Syntaxe

- -
monSet.values();
-
- -

Valeur de retour

- -

Un nouvel objet Iterator qui contient les valeurs de chaque élément de l'ensemble Set, dans leur ordre d'insertion.

- -

Exemples

- -
var monSet = new Set();
-monSet.add("toto");
-monSet.add("truc");
-monSet.add("machin");
-
-var setIter = monSet.values();
-
-console.log(setIter.next().value); // "toto"
-console.log(setIter.next().value); // "truc"
-console.log(setIter.next().value); // "machin"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.values', 'Set.prototype.values')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-set.prototype.values', 'Set.prototype.values')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Set.values")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/set/values/index.md b/files/fr/web/javascript/reference/global_objects/set/values/index.md new file mode 100644 index 0000000000..fd56d94faa --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/set/values/index.md @@ -0,0 +1,75 @@ +--- +title: Set.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Set/values +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - set +translation_of: Web/JavaScript/Reference/Global_Objects/Set/values +original_slug: Web/JavaScript/Reference/Objets_globaux/Set/values +--- +
{{JSRef}}
+ +

La méthode values() renvoie un nouvel objet {{jsxref("Iterator")}} qui contient les valeurs de chaque élément de l'objet Set, dans leur ordre d'insertion.

+ +

La méthode keys() est un alias pour cette méthode (afin de conserver une certaine similarité avec les objets {{jsxref("Map")}}) et se comportera exactement de la même façon en renvoyant les valeurs des éléments du Set.

+ +
{{EmbedInteractiveExample("pages/js/set-prototype-values.html")}}
+ +

Syntaxe

+ +
monSet.values();
+
+ +

Valeur de retour

+ +

Un nouvel objet Iterator qui contient les valeurs de chaque élément de l'ensemble Set, dans leur ordre d'insertion.

+ +

Exemples

+ +
var monSet = new Set();
+monSet.add("toto");
+monSet.add("truc");
+monSet.add("machin");
+
+var setIter = monSet.values();
+
+console.log(setIter.next().value); // "toto"
+console.log(setIter.next().value); // "truc"
+console.log(setIter.next().value); // "machin"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-set.prototype.values', 'Set.prototype.values')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-set.prototype.values', 'Set.prototype.values')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Set.values")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html deleted file mode 100644 index 6827b4c4ff..0000000000 --- a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: SharedArrayBuffer.prototype.byteLength -slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength -tags: - - JavaScript - - Mémoire partagée - - Propriété - - Reference - - SharedArrayBuffer - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength -original_slug: Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/byteLength ---- -
{{JSRef}}
- -

La propriété d'accesseur byteLength représente la longueur d'un {{jsxref("SharedArrayBuffer")}} exprimée en octets.

- -
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-bytelength.html")}}
- -

Syntaxe

- -
sab.byteLength
- -

Description

- -

La propriété byteLength est une propriété d'accesseur dont le mutateur associé vaut undefined. Autrement dit, cette propriété est en lecture seule. La valeur est établie lorsque le tableau partagé est construit et elle ne peut être modifiée par la suite.

- -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-sab.byteLength; // 1024
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-get-sharedarraybuffer.prototype.bytelength', 'SharedArrayBuffer.prototype.byteLength')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.SharedArrayBuffer.byteLength")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.md b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.md new file mode 100644 index 0000000000..6827b4c4ff --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/bytelength/index.md @@ -0,0 +1,59 @@ +--- +title: SharedArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength +tags: + - JavaScript + - Mémoire partagée + - Propriété + - Reference + - SharedArrayBuffer + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/byteLength +original_slug: Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/byteLength +--- +
{{JSRef}}
+ +

La propriété d'accesseur byteLength représente la longueur d'un {{jsxref("SharedArrayBuffer")}} exprimée en octets.

+ +
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-bytelength.html")}}
+ +

Syntaxe

+ +
sab.byteLength
+ +

Description

+ +

La propriété byteLength est une propriété d'accesseur dont le mutateur associé vaut undefined. Autrement dit, cette propriété est en lecture seule. La valeur est établie lorsque le tableau partagé est construit et elle ne peut être modifiée par la suite.

+ +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+sab.byteLength; // 1024
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-get-sharedarraybuffer.prototype.bytelength', 'SharedArrayBuffer.prototype.byteLength')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.SharedArrayBuffer.byteLength")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.html b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.html deleted file mode 100644 index 16d95eeed7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: SharedArrayBuffer -slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer -tags: - - Constructeur - - JavaScript - - Mémoire partagée - - Reference - - SharedArrayBuffer - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer -original_slug: Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer ---- -
{{JSRef}}
- -

L'objet SharedArrayBuffer est utilisé afin de représenter un tampon de données binaires brutes générique de longueur fixe. Il est semblable à l'objet {{jsxref("ArrayBuffer")}} mais peut ici être utilisé pour créer différentes vues sur une même mémoire partagée. À la différence d'un ArrayBuffer, un SharedArrayBuffer ne peut pas être détaché.

- -
-

Note : L'objet SharedArrayBuffer a été désactivé le 5 janvier 2018 par défaut pour l'ensemble des principaux navigateurs afin de réduire les failles Meltdown et Spectre. Chrome a réactivé cet objet avec la version 67 pour les plateformes sur lesquelles des fonctionnalités sont présentes pour protéger des vulnérabilités telles que Spectre (« site-isolation feature »)

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

Syntaxe

- - -
new SharedArrayBuffer([length])
-
- -

Paramètres

- -
-
longueur
-
La taille, exprimée en octets, du tampon (buffer) de données qu'on souhaite créer.
-
- -

Valeur de retour

- -

Un nouvel objet SharedArrayBuffer de la taille donnée, dont les éléments sont initialisés à 0.

- -

Description

- -

Allouer et partager la mémoire

- -

Pour partager une zone mémoire entre plusieurs objets {{jsxref("SharedArrayBuffer")}} d'un agent à un autre (ici un agent correspond au programme principal de la page web ou à l'un de ses web workers), on utilise postMessage et le clonage structuré.

- -

L'algorithme de clonage structuré permet d'envoyer des objets SharedArrayBuffers et TypedArrays vers SharedArrayBuffers. Dans les deux cas, l'objet SharedArrayBuffer est transmis au récepteur, ce qui crée un nouvel objet SharedArrayBuffer, privé, au sein de l'agent qui reçoit (comme avec  {{jsxref("ArrayBuffer")}}). Cependant, le bloc de mémoire référencé par les deux objets SharedArrayBuffer est bien le même bloc. Aussi, si un agent interagit avec cette zone, l'autre agent pourra voir les modifications.

- -
var sab = new SharedArrayBuffer(1024);
-worker.postMessage(sab);
-
- -

Mettre à jour et synchroniser la mémoire partagée avec les opérations atomiques

- -

La mémoire partagée peut être créée et mise à jour de façon simultanée entre les workers et le thread d'exécution principal. Selon le système (le processeur, le système d'exploitation, le navigateur), cela peut prendre du temps avant que le changement soit propagé sur l'ensemble des contextes. Pour que la synchronisation s'effectue, on doit utiliser les opérations {{jsxref("Atomics", "atomiques", "", 1)}}.

- -

Les API qui utilisent des objets SharedArrayBuffer

- - - -

Obligation d'utiliser l'opérateur new

- -

Les constructeurs SharedArrayBuffer doivent être utilisés avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Si on appelle un constructeur SharedArrayBuffer comme une fonction, sans new, cela lèvera une exception {{jsxref("TypeError")}}.

- -
var sab = SharedArrayBuffer(1024);
-// TypeError: appeler le constructeur natif SharedArrayBuffer sans
-// new est interdit
- -
var sab = new SharedArrayBuffer(1024);
- -

Propriétés

- -
-
SharedArrayBuffer.length
-
La propriété de longueur pour le constructeur SharedArrayBuffer dont la valeur est 1.
-
{{jsxref("SharedArrayBuffer.prototype")}}
-
Le prototype permet d'ajouter des propriétés à l'ensemble des objets SharedArrayBuffer.
-
- -

Le prototype de SharedArrayBuffer

- -

Toutes les instances de SharedArrayBuffer héritent de {{jsxref("SharedArrayBuffer.prototype")}}.

- -

Propriétés

- -

{{page('fr/Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/prototype','Propriétés')}}

- -

Méthodes

- -

{{page('fr/Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/prototype','Méthodes')}}

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ES8')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.md b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.md new file mode 100644 index 0000000000..16d95eeed7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/index.md @@ -0,0 +1,132 @@ +--- +title: SharedArrayBuffer +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +tags: + - Constructeur + - JavaScript + - Mémoire partagée + - Reference + - SharedArrayBuffer + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +original_slug: Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer +--- +
{{JSRef}}
+ +

L'objet SharedArrayBuffer est utilisé afin de représenter un tampon de données binaires brutes générique de longueur fixe. Il est semblable à l'objet {{jsxref("ArrayBuffer")}} mais peut ici être utilisé pour créer différentes vues sur une même mémoire partagée. À la différence d'un ArrayBuffer, un SharedArrayBuffer ne peut pas être détaché.

+ +
+

Note : L'objet SharedArrayBuffer a été désactivé le 5 janvier 2018 par défaut pour l'ensemble des principaux navigateurs afin de réduire les failles Meltdown et Spectre. Chrome a réactivé cet objet avec la version 67 pour les plateformes sur lesquelles des fonctionnalités sont présentes pour protéger des vulnérabilités telles que Spectre (« site-isolation feature »)

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

Syntaxe

+ + +
new SharedArrayBuffer([length])
+
+ +

Paramètres

+ +
+
longueur
+
La taille, exprimée en octets, du tampon (buffer) de données qu'on souhaite créer.
+
+ +

Valeur de retour

+ +

Un nouvel objet SharedArrayBuffer de la taille donnée, dont les éléments sont initialisés à 0.

+ +

Description

+ +

Allouer et partager la mémoire

+ +

Pour partager une zone mémoire entre plusieurs objets {{jsxref("SharedArrayBuffer")}} d'un agent à un autre (ici un agent correspond au programme principal de la page web ou à l'un de ses web workers), on utilise postMessage et le clonage structuré.

+ +

L'algorithme de clonage structuré permet d'envoyer des objets SharedArrayBuffers et TypedArrays vers SharedArrayBuffers. Dans les deux cas, l'objet SharedArrayBuffer est transmis au récepteur, ce qui crée un nouvel objet SharedArrayBuffer, privé, au sein de l'agent qui reçoit (comme avec  {{jsxref("ArrayBuffer")}}). Cependant, le bloc de mémoire référencé par les deux objets SharedArrayBuffer est bien le même bloc. Aussi, si un agent interagit avec cette zone, l'autre agent pourra voir les modifications.

+ +
var sab = new SharedArrayBuffer(1024);
+worker.postMessage(sab);
+
+ +

Mettre à jour et synchroniser la mémoire partagée avec les opérations atomiques

+ +

La mémoire partagée peut être créée et mise à jour de façon simultanée entre les workers et le thread d'exécution principal. Selon le système (le processeur, le système d'exploitation, le navigateur), cela peut prendre du temps avant que le changement soit propagé sur l'ensemble des contextes. Pour que la synchronisation s'effectue, on doit utiliser les opérations {{jsxref("Atomics", "atomiques", "", 1)}}.

+ +

Les API qui utilisent des objets SharedArrayBuffer

+ + + +

Obligation d'utiliser l'opérateur new

+ +

Les constructeurs SharedArrayBuffer doivent être utilisés avec l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Si on appelle un constructeur SharedArrayBuffer comme une fonction, sans new, cela lèvera une exception {{jsxref("TypeError")}}.

+ +
var sab = SharedArrayBuffer(1024);
+// TypeError: appeler le constructeur natif SharedArrayBuffer sans
+// new est interdit
+ +
var sab = new SharedArrayBuffer(1024);
+ +

Propriétés

+ +
+
SharedArrayBuffer.length
+
La propriété de longueur pour le constructeur SharedArrayBuffer dont la valeur est 1.
+
{{jsxref("SharedArrayBuffer.prototype")}}
+
Le prototype permet d'ajouter des propriétés à l'ensemble des objets SharedArrayBuffer.
+
+ +

Le prototype de SharedArrayBuffer

+ +

Toutes les instances de SharedArrayBuffer héritent de {{jsxref("SharedArrayBuffer.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/prototype','Propriétés')}}

+ +

Méthodes

+ +

{{page('fr/Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/prototype','Méthodes')}}

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ES8')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html deleted file mode 100644 index 57219bc3f2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: SharedArrayBuffer.prototype.slice() -slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice -tags: - - JavaScript - - Mémoire partagée - - Méthode - - Prototype - - Reference - - SharedArrayBuffer - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice -original_slug: Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/slice ---- -
{{JSRef}}
- -

La méthode SharedArrayBuffer.prototype.slice() renvoie un nouvel objet {{jsxref("SharedArrayBuffer")}} dont le contenu est une copie des octets de l'objet SharedArrayBuffer courant entre un indice de début (inclus) et un indice de fin (exclus) (autrement dit, on copie une « tranche » du tampon courant). Si l'indice de début ou de fin est négatif, la position sera comptée à partir de la fin du tableau plutôt qu'à partir du début. L'algorithme appliqué est le même que {{jsxref("Array.prototype.slice()")}}.

- -
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-slice.html")}}
- -

Syntaxe

- -
sab.slice()
-sab.slice(début)
-sab.slice(début, fin)
- -

Paramètres

- -
-
début {{optional_inline}}
-
-

L'indice auquel commencer l'extraction (le début du tableau se situe à l'indice 0).

- -

Si la valeur est négative, début indique le décalage à partir de la fin du tableau. Ainsi slice(-2) permettra d'extraire les deux derniers éléments du tableau.

- -

Si début est absent, slice commencera l'extraction à partir de l'indice 0.

-
-
fin {{optional_inline}}
-
-

L'indice auquel finir l'extraction. Attention, la valeur du tableau pour cet indice n'est pas incluse dans l'extraction.

- -

Ainsi, slice(1,4) permettra d'extraire entre le deuxième et le quatrième élément (c'est-à-dire les trois éléments dont les indices sont respectivement 1, 2 et 3).

- -

Si fin est un indice négatif, il indique le décalage à partir de la fin du tableau. Autrement dit slice(2,-1) permettra d'extraire les éléments du tampon à partir du troisième élément et jusqu'à l'avant-avant-dernier élément.

- -

Si fin est absent, slice réalisera l'extraction jusqu'à la fin de la séquence (sab.byteLength).

-
-
- -

Valeur de retour

- -

Un nouvel objet {{jsxref("SharedArrayBuffer")}} qui contient les éléments extraits.

- -

Exemples

- -
var sab = new SharedArrayBuffer(1024);
-sab.slice();    // SharedArrayBuffer { byteLength: 1024 }
-sab.slice(2);   // SharedArrayBuffer { byteLength: 1022 }
-sab.slice(-2);  // SharedArrayBuffer { byteLength: 2 }
-sab.slice(0,1); // SharedArrayBuffer { byteLength: 1 }
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-sharedarraybuffer.prototype.slice', 'SharedArrayBuffer.prototype.slice')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.SharedArrayBuffer.slice")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.md b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.md new file mode 100644 index 0000000000..57219bc3f2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/sharedarraybuffer/slice/index.md @@ -0,0 +1,89 @@ +--- +title: SharedArrayBuffer.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice +tags: + - JavaScript + - Mémoire partagée + - Méthode + - Prototype + - Reference + - SharedArrayBuffer + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice +original_slug: Web/JavaScript/Reference/Objets_globaux/SharedArrayBuffer/slice +--- +
{{JSRef}}
+ +

La méthode SharedArrayBuffer.prototype.slice() renvoie un nouvel objet {{jsxref("SharedArrayBuffer")}} dont le contenu est une copie des octets de l'objet SharedArrayBuffer courant entre un indice de début (inclus) et un indice de fin (exclus) (autrement dit, on copie une « tranche » du tampon courant). Si l'indice de début ou de fin est négatif, la position sera comptée à partir de la fin du tableau plutôt qu'à partir du début. L'algorithme appliqué est le même que {{jsxref("Array.prototype.slice()")}}.

+ +
{{EmbedInteractiveExample("pages/js/sharedarraybuffer-slice.html")}}
+ +

Syntaxe

+ +
sab.slice()
+sab.slice(début)
+sab.slice(début, fin)
+ +

Paramètres

+ +
+
début {{optional_inline}}
+
+

L'indice auquel commencer l'extraction (le début du tableau se situe à l'indice 0).

+ +

Si la valeur est négative, début indique le décalage à partir de la fin du tableau. Ainsi slice(-2) permettra d'extraire les deux derniers éléments du tableau.

+ +

Si début est absent, slice commencera l'extraction à partir de l'indice 0.

+
+
fin {{optional_inline}}
+
+

L'indice auquel finir l'extraction. Attention, la valeur du tableau pour cet indice n'est pas incluse dans l'extraction.

+ +

Ainsi, slice(1,4) permettra d'extraire entre le deuxième et le quatrième élément (c'est-à-dire les trois éléments dont les indices sont respectivement 1, 2 et 3).

+ +

Si fin est un indice négatif, il indique le décalage à partir de la fin du tableau. Autrement dit slice(2,-1) permettra d'extraire les éléments du tampon à partir du troisième élément et jusqu'à l'avant-avant-dernier élément.

+ +

Si fin est absent, slice réalisera l'extraction jusqu'à la fin de la séquence (sab.byteLength).

+
+
+ +

Valeur de retour

+ +

Un nouvel objet {{jsxref("SharedArrayBuffer")}} qui contient les éléments extraits.

+ +

Exemples

+ +
var sab = new SharedArrayBuffer(1024);
+sab.slice();    // SharedArrayBuffer { byteLength: 1024 }
+sab.slice(2);   // SharedArrayBuffer { byteLength: 1022 }
+sab.slice(-2);  // SharedArrayBuffer { byteLength: 2 }
+sab.slice(0,1); // SharedArrayBuffer { byteLength: 1 }
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-sharedarraybuffer.prototype.slice', 'SharedArrayBuffer.prototype.slice')}}{{Spec2('ESDraft')}}Définition initiale avec ES2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.SharedArrayBuffer.slice")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/@@iterator/index.html b/files/fr/web/javascript/reference/global_objects/string/@@iterator/index.html deleted file mode 100644 index 0a01613d9f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/@@iterator/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: String.prototype[@@iterator]() -slug: Web/JavaScript/Reference/Global_Objects/String/@@iterator -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/@@iterator -original_slug: Web/JavaScript/Reference/Objets_globaux/String/@@iterator ---- -
{{JSRef}}
- -

La méthode [@@iterator]() renvoie un nouvel objet Iterator qui itère sur les points de code (codets) d'une chaîne de caractères, en renvoyant chaque point de code sous forme d'une chaîne de caractères.

- -
{{EmbedInteractiveExample("pages/js/string-iterator.html")}}
- -

Syntaxe

- -
chaîneDeCaractères[Symbol.iterator]
- -

Valeur de retour

- -

Un nouvel objet Iterator.

- -

Exemples

- -

Utiliser [@@iterator]()

- -
var chaîne = "A\uD835\uDC68";
-
-var chaîneIter = chaîne[Symbol.iterator]();
-
-console.log(chaîneIter.next().value); // "A"
-console.log(chaîneIter.next().value); // "\uD835\uDC68"
-
- -

Utiliser [@@iterator]() avec une boucle for..of

- -
var chaine = "A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A";
-
-for (var c of chaine) {
-  console.log(c);
-}
-// "A"
-// "\uD835\uDC68"
-// "B"
-// "\uD835\uDC69"
-// "C"
-// "\uD835\uDC6A"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype-@@iterator', 'String.prototype[@@iterator]()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype-@@iterator', 'String.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.@@iterator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/@@iterator/index.md b/files/fr/web/javascript/reference/global_objects/string/@@iterator/index.md new file mode 100644 index 0000000000..0a01613d9f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/@@iterator/index.md @@ -0,0 +1,86 @@ +--- +title: String.prototype[@@iterator]() +slug: Web/JavaScript/Reference/Global_Objects/String/@@iterator +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/@@iterator +original_slug: Web/JavaScript/Reference/Objets_globaux/String/@@iterator +--- +
{{JSRef}}
+ +

La méthode [@@iterator]() renvoie un nouvel objet Iterator qui itère sur les points de code (codets) d'une chaîne de caractères, en renvoyant chaque point de code sous forme d'une chaîne de caractères.

+ +
{{EmbedInteractiveExample("pages/js/string-iterator.html")}}
+ +

Syntaxe

+ +
chaîneDeCaractères[Symbol.iterator]
+ +

Valeur de retour

+ +

Un nouvel objet Iterator.

+ +

Exemples

+ +

Utiliser [@@iterator]()

+ +
var chaîne = "A\uD835\uDC68";
+
+var chaîneIter = chaîne[Symbol.iterator]();
+
+console.log(chaîneIter.next().value); // "A"
+console.log(chaîneIter.next().value); // "\uD835\uDC68"
+
+ +

Utiliser [@@iterator]() avec une boucle for..of

+ +
var chaine = "A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A";
+
+for (var c of chaine) {
+  console.log(c);
+}
+// "A"
+// "\uD835\uDC68"
+// "B"
+// "\uD835\uDC69"
+// "C"
+// "\uD835\uDC6A"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype-@@iterator', 'String.prototype[@@iterator]()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype-@@iterator', 'String.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.@@iterator")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/anchor/index.html b/files/fr/web/javascript/reference/global_objects/string/anchor/index.html deleted file mode 100644 index f4ca8bb868..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/anchor/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: String.prototype.anchor() -slug: Web/JavaScript/Reference/Global_Objects/String/anchor -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/String/anchor -original_slug: Web/JavaScript/Reference/Objets_globaux/String/anchor ---- -
{{JSRef}}
- -

La méthode anchor() permet de créer une ancre HTML {{HTMLElement("a")}} qui est utilisé comme cible hypertexte.

- -

Syntaxe

- -
str.anchor(name)
- -

Paramètres

- -
-
name
-
Une chaîne de caractères représentant l'attribut name de la balise à créér.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente un élément HTML {{HTMLElement("a")}}.

- -

Description

- -

On utilise la méthode anchor() pour créer et afficher des ancres dans un document HTML à l'aide de JavaScript.

- -

Ici la chaîne représente le texte que verra l'utilisateur. Le paramètre name représente l'attribut name de l'élément {{HTMLElement("a")}}.

- -

Les ancres créées avec la méthode anchor deviennent des éléments accessibles à travers le tableau {{domxref("document.anchors")}}.

- -

Exemples

- -
var maChaîne = "Table des matières";
-
-document.body.innerHTML = maChaîne.anchor("ancre_contenu");
- -

produira le code HTML suivant :

- -
<a name="ancre_contenu">Table des matières</a>
- -

Prothèse d'émulation (polyfill)

- -
if (!String.prototype.anchor){
-  String.prototype.anchor = function(x){
-    return '<a name="' + x + '">' + this + '</a>'
-  };
-}
-
- -

Spécifications

- - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.anchor', 'String.prototype.anchor')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Défini dans l'annexe (normative) B sur les fonctionnalités additionnelles des navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.anchor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/anchor/index.md b/files/fr/web/javascript/reference/global_objects/string/anchor/index.md new file mode 100644 index 0000000000..f4ca8bb868 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/anchor/index.md @@ -0,0 +1,85 @@ +--- +title: String.prototype.anchor() +slug: Web/JavaScript/Reference/Global_Objects/String/anchor +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/String/anchor +original_slug: Web/JavaScript/Reference/Objets_globaux/String/anchor +--- +
{{JSRef}}
+ +

La méthode anchor() permet de créer une ancre HTML {{HTMLElement("a")}} qui est utilisé comme cible hypertexte.

+ +

Syntaxe

+ +
str.anchor(name)
+ +

Paramètres

+ +
+
name
+
Une chaîne de caractères représentant l'attribut name de la balise à créér.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente un élément HTML {{HTMLElement("a")}}.

+ +

Description

+ +

On utilise la méthode anchor() pour créer et afficher des ancres dans un document HTML à l'aide de JavaScript.

+ +

Ici la chaîne représente le texte que verra l'utilisateur. Le paramètre name représente l'attribut name de l'élément {{HTMLElement("a")}}.

+ +

Les ancres créées avec la méthode anchor deviennent des éléments accessibles à travers le tableau {{domxref("document.anchors")}}.

+ +

Exemples

+ +
var maChaîne = "Table des matières";
+
+document.body.innerHTML = maChaîne.anchor("ancre_contenu");
+ +

produira le code HTML suivant :

+ +
<a name="ancre_contenu">Table des matières</a>
+ +

Prothèse d'émulation (polyfill)

+ +
if (!String.prototype.anchor){
+  String.prototype.anchor = function(x){
+    return '<a name="' + x + '">' + this + '</a>'
+  };
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.anchor', 'String.prototype.anchor')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Défini dans l'annexe (normative) B sur les fonctionnalités additionnelles des navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.anchor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/big/index.html b/files/fr/web/javascript/reference/global_objects/string/big/index.html deleted file mode 100644 index 0cefdf7fab..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/big/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: String.prototype.big() -slug: Web/JavaScript/Reference/Global_Objects/String/big -tags: - - Dépréciée - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/big -original_slug: Web/JavaScript/Reference/Objets_globaux/String/big ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode big() crée un élément HTML {{HTMLElement("big")}} qui affichera la chaine de caractères avec une taille de police importante.

- -
-

Note : L'élément <big> a été retiré de HTML5 et ne doit pas être utilisé. À la place, les développeurs web doivent utiliser les propriétés CSS.

-
- -

Syntaxe

- -
str.big()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente un élément HTML {{HTMLElement("big")}}.

- -

Description

- -

La méthode big() place la chaine de caractères dans une balise <big> :
- "<big>str</big>"

- -

Exemples

- -

L'exemple suivant montre les méthodes de String pour changer la taille d'une chaine de caractères :

- -
var chaîneMonde = "Coucou monde";
-
-console.log( chaîneMonde.small()     ); // <small>Coucou monde</small>
-console.log( chaîneMonde.big()       ); // <big>Coucou monde</big>
-console.log( chaîneMonde.fontsize(7) ); // <fontsize=7>Coucou monde</fontsize>
- -

Avec l'objet {{domxref("HTMLElement.style", "element.style")}}, il est possible d'accéder à l'attribut style de l'élément et de le manipuler. Par exemple :

- -
document.getElementById('idÉlément').style.fontSize = '2em'
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.big', 'String.prototype.big')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe normative pour les fonctionnalités supplémentaires des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.big', 'String.prototype.big')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript supplémentaires des navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.big")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/big/index.md b/files/fr/web/javascript/reference/global_objects/string/big/index.md new file mode 100644 index 0000000000..0cefdf7fab --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/big/index.md @@ -0,0 +1,80 @@ +--- +title: String.prototype.big() +slug: Web/JavaScript/Reference/Global_Objects/String/big +tags: + - Dépréciée + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/big +original_slug: Web/JavaScript/Reference/Objets_globaux/String/big +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode big() crée un élément HTML {{HTMLElement("big")}} qui affichera la chaine de caractères avec une taille de police importante.

+ +
+

Note : L'élément <big> a été retiré de HTML5 et ne doit pas être utilisé. À la place, les développeurs web doivent utiliser les propriétés CSS.

+
+ +

Syntaxe

+ +
str.big()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente un élément HTML {{HTMLElement("big")}}.

+ +

Description

+ +

La méthode big() place la chaine de caractères dans une balise <big> :
+ "<big>str</big>"

+ +

Exemples

+ +

L'exemple suivant montre les méthodes de String pour changer la taille d'une chaine de caractères :

+ +
var chaîneMonde = "Coucou monde";
+
+console.log( chaîneMonde.small()     ); // <small>Coucou monde</small>
+console.log( chaîneMonde.big()       ); // <big>Coucou monde</big>
+console.log( chaîneMonde.fontsize(7) ); // <fontsize=7>Coucou monde</fontsize>
+ +

Avec l'objet {{domxref("HTMLElement.style", "element.style")}}, il est possible d'accéder à l'attribut style de l'élément et de le manipuler. Par exemple :

+ +
document.getElementById('idÉlément').style.fontSize = '2em'
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.big', 'String.prototype.big')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe normative pour les fonctionnalités supplémentaires des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.big', 'String.prototype.big')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript supplémentaires des navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.big")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/blink/index.html b/files/fr/web/javascript/reference/global_objects/string/blink/index.html deleted file mode 100644 index a57014d354..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/blink/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: String.prototype.blink() -slug: Web/JavaScript/Reference/Global_Objects/String/blink -tags: - - Deprecated - - HTML wrapper methods - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/blink -original_slug: Web/JavaScript/Reference/Objets_globaux/String/blink ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode blink() crée un élément HTML {{HTMLElement("blink")}} qui affiche la chaine de caractères en clignotant.

- -

Attention : Les textes clignotants sont fortement déconseillés par de nombreux standards d'accessibilité. L'élément <blink> est lui-même non standard et obsolète !

- -

Syntaxe

- -
str.blink()
- -

Valeur de retour

- -

Une chaine de caractères représentant un élément HTML {{HTMLElement("blink")}}.

- -

Description

- -

La méthode blink() place la chaine de caractères dans une balise <blink> :
- "<blink>str</blink>"

- -

Exemples

- -

L'exemple suivant utilise des méthodes de String pour changer l'affichage d'une chaine de caractères :

- -
var chaîneMonde = "Coucou monde";
-
-console.log(chaîneMonde.blink());
-console.log(chaîneMonde.bold());
-console.log(chaîneMonde.italics());
-console.log(chaîneMonde.strike());
- -

Cet exemple produira le code HTML suivant :

- -
<blink>Coucou monde</blink>
-<b>Coucou monde</b>
-<i>Coucou monde</i>
-<strike>Coucou monde</strike>
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.blink', 'String.prototype.blink')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.blink', 'String.prototype.blink')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.blink")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/blink/index.md b/files/fr/web/javascript/reference/global_objects/string/blink/index.md new file mode 100644 index 0000000000..a57014d354 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/blink/index.md @@ -0,0 +1,84 @@ +--- +title: String.prototype.blink() +slug: Web/JavaScript/Reference/Global_Objects/String/blink +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/blink +original_slug: Web/JavaScript/Reference/Objets_globaux/String/blink +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode blink() crée un élément HTML {{HTMLElement("blink")}} qui affiche la chaine de caractères en clignotant.

+ +

Attention : Les textes clignotants sont fortement déconseillés par de nombreux standards d'accessibilité. L'élément <blink> est lui-même non standard et obsolète !

+ +

Syntaxe

+ +
str.blink()
+ +

Valeur de retour

+ +

Une chaine de caractères représentant un élément HTML {{HTMLElement("blink")}}.

+ +

Description

+ +

La méthode blink() place la chaine de caractères dans une balise <blink> :
+ "<blink>str</blink>"

+ +

Exemples

+ +

L'exemple suivant utilise des méthodes de String pour changer l'affichage d'une chaine de caractères :

+ +
var chaîneMonde = "Coucou monde";
+
+console.log(chaîneMonde.blink());
+console.log(chaîneMonde.bold());
+console.log(chaîneMonde.italics());
+console.log(chaîneMonde.strike());
+ +

Cet exemple produira le code HTML suivant :

+ +
<blink>Coucou monde</blink>
+<b>Coucou monde</b>
+<i>Coucou monde</i>
+<strike>Coucou monde</strike>
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.blink', 'String.prototype.blink')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.blink', 'String.prototype.blink')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.blink")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/bold/index.html b/files/fr/web/javascript/reference/global_objects/string/bold/index.html deleted file mode 100644 index 956d34878d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/bold/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: String.prototype.bold() -slug: Web/JavaScript/Reference/Global_Objects/String/bold -tags: - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/bold -original_slug: Web/JavaScript/Reference/Objets_globaux/String/bold ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode bold() crée un élément HTML {{HTMLElement("b")}} qui affiche la chaine de caractères en gras.

- -

Syntaxe

- -
str.bold()
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("b")}}.

- -

Description

- -

La méthode bold() place la chaine de caractères dans une balise <b> :
- "<b>str</b>"

- -

Exemples

- -

L'exemple suivant utilise des méthodes de String pour changer l'affichage de la chaine de caractères :

- -
var chaîneMonde = "Coucou monde";
-
-console.log( chaîneMonde.blink()   );
-console.log( chaîneMonde.bold()    );
-console.log( chaîneMonde.italics() );
-console.log( chaîneMonde.strike()  );
- -

Cet exemple produit le même HTML que le code suivant :

- -
<blink>Coucou monde</blink>
-<b>Coucou monde</b>
-<i>Coucou monde</i>
-<strike>Coucou monde</strike>
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.bold', 'String.prototype.bold')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.bold', 'String.prototype.bold')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.bold")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/bold/index.md b/files/fr/web/javascript/reference/global_objects/string/bold/index.md new file mode 100644 index 0000000000..956d34878d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/bold/index.md @@ -0,0 +1,82 @@ +--- +title: String.prototype.bold() +slug: Web/JavaScript/Reference/Global_Objects/String/bold +tags: + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/bold +original_slug: Web/JavaScript/Reference/Objets_globaux/String/bold +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode bold() crée un élément HTML {{HTMLElement("b")}} qui affiche la chaine de caractères en gras.

+ +

Syntaxe

+ +
str.bold()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("b")}}.

+ +

Description

+ +

La méthode bold() place la chaine de caractères dans une balise <b> :
+ "<b>str</b>"

+ +

Exemples

+ +

L'exemple suivant utilise des méthodes de String pour changer l'affichage de la chaine de caractères :

+ +
var chaîneMonde = "Coucou monde";
+
+console.log( chaîneMonde.blink()   );
+console.log( chaîneMonde.bold()    );
+console.log( chaîneMonde.italics() );
+console.log( chaîneMonde.strike()  );
+ +

Cet exemple produit le même HTML que le code suivant :

+ +
<blink>Coucou monde</blink>
+<b>Coucou monde</b>
+<i>Coucou monde</i>
+<strike>Coucou monde</strike>
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.bold', 'String.prototype.bold')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.bold', 'String.prototype.bold')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles des navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.bold")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/charat/index.html b/files/fr/web/javascript/reference/global_objects/string/charat/index.html deleted file mode 100644 index 63e8e2d422..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/charat/index.html +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: String.prototype.charAt() -slug: Web/JavaScript/Reference/Global_Objects/String/charAt -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/charAt -original_slug: Web/JavaScript/Reference/Objets_globaux/String/charAt ---- -
{{JSRef}}
- -

La méthode charAt() renvoie une nouvelle chaîne contenant le caractère (ou, plus précisément, le point de code UTF-16)  à la position indiquée en argument.

- -
{{EmbedInteractiveExample("pages/js/string-charat.html")}}
- -

Syntaxe

- -
str.charAt(index)
- -

Paramètres

- -
-
index
-
Un entier entre 0 et la longueur de la chaîne - 1. Si aucun index n'est fourni (ce qui correspond à fournir {{jsxref("undefined")}}) ou si l'index ne peut pas être converti en entier, la recherche sera effectuée à l'index 0 et le premier caractère sera donc renvoyé.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le point de code UTF-16 à la position indiquée. Si la position est dehors de la chaîne, ce sera une chaîne vide.

- -

Description

- -

Les caractères d'une chaîne sont indexés de la gauche vers la droite. L'indice du premier caractère est 0 et l'indice du dernier caractère est la longueur de la chaîne moins un (par exemple, si on a une chaîne toto, le dernier caractère de la chaine aura l'indice toto.length - 1). Si l'indice fourni est en dehors de cet intervalle, la méthode renverra une chaîne vide. Si aucun indice n'est fourni, la valeur par défaut utilisée sera 0.

- -

Exemples

- -

Afficher les caractères situés à différentes positions d'une chaîne

- -

L'exemple suivant affiche les caractères à différentes positions de la chaîne "Coucou tout le monde" :

- -
var uneChaîne = "Coucou tout le monde";
-
-console.log("La caractère d'indice 0 est '" + uneChaîne.charAt(0)   + "'");
-console.log("La caractère d'indice 1 est '" + uneChaîne.charAt(1)   + "'");
-console.log("La caractère d'indice 2 est '" + uneChaîne.charAt(2)   + "'");
-console.log("La caractère d'indice 3 est '" + uneChaîne.charAt(3)   + "'");
-console.log("La caractère d'indice 4 est '" + uneChaîne.charAt(4)   + "'");
-console.log("La caractère d'indice 999 est '" + uneChaîne.charAt(999) + "'");
-
- -

Ces lignes afficheront respectivement :

- -
La caractère d'indice 0 est 'C'
-La caractère d'indice 1 est 'o'
-La caractère d'indice 2 est 'u'
-La caractère d'indice 3 est 'c'
-La caractère d'indice 4 est 'o'
-La caractère d'indice 999 est ''
-
- -

Obtenir des caractères complets

- -

Le code qui suit permet de s'assurer qu'on récupère des caractères complets et ce même si la chaîne de caractères contient des caractères en dehors du plan multilingue de base (BMP) (qui sont donc représentés sur deux unités de code/codets) :

- -
var str = 'A \uD87E\uDC04 Z'; // On pourrait aussi utiliser un caractère hors du BMP directement
-for (var i=0, chr; i < str.length; i++) {
-  if ((chr = getWholeChar(str, i)) === false) {
-    continue;
-  } // On adapte cette ligne pour chaque boucle, en passant la chaîne de caractères
-    // et on renvoie une variable représentant le caractère individuel
-
-  console.log(chr);
-}
-
-function getWholeChar(str, i) {
-  var code = str.charCodeAt(i);
-
-  if (Number.isNaN(code)) {
-    return ''; // la position n'a pas pu être trouvée
-  }
-  if (code < 0xD800 || code > 0xDFFF) {
-    return str.charAt(i);
-  }
-
-  // On traite ici le demi codet supérieur (high surrogate)
-  // La borne supérieure du test pourrait être 0xDB7F afin de prendre en compte
-  // les demi-codets privés comme des caractères uniques
-  if (0xD800 <= code && code <= 0xDBFF) {
-    if (str.length <= (i+1))  {
-      throw 'le demi-codet supérieur n'est pas suivi par un demi-codet inférieur';
-    }
-    var next = str.charCodeAt(i+1);
-      if (0xDC00 > next || next > 0xDFFF) {
-        throw 'le demi-codet supérieur n'est pas suivi par un demi-codet inférieur';
-      }
-      return str.charAt(i)+str.charAt(i+1);
-  }
-  // on gère le demi codet inférieur (0xDC00 <= code && code <= 0xDFFF)
-  if (i === 0) {
-    throw 'le demi-codet inférieur n'est pas précédé d'un demi-codet supérieur';
-  }
-  var prev = str.charCodeAt(i-1);
-
-  // (la borne supérieure pourrait être modifiée en 0xDB7F afin de traiter
-  // les demi-codets supérieurs privés comme des caractètres uniques)
-  if (0xD800 > prev || prev > 0xDBFF) {
-    throw 'le demi-codet inférieur n'est pas précédé d'un demi-codet supérieur';
-  }
-  // on peut passer des demis codets inférieurs comme deuxième composant
-  // d'une paire déjà traitée
-  return false;
-}
-
-
- -

Dans un environnement ECMAScript 2016 qui permet d'utiliser l'affectation par décomposition, on peut obtenir une version plus succincte et flexible :

- -
var str = 'A\uD87E\uDC04Z'; // We could also use a non-BMP character directly
-for (var i=0, chr; i < str.length; i++) {
-  [chr, i] = getWholeCharAndI(str, i);
-  // Adapt this line at the top of each loop, passing in the whole string and
-  // the current iteration and returning an array with the individual character
-  // and 'i' value (only changed if a surrogate pair)
-
-  console.log(chr);
-}
-
-function getWholeCharAndI(str, i) {
-  var code = str.charCodeAt(i);
-
-  if (Number.isNaN(code)) {
-    return ''; // Position not found
-  }
-  if (code < 0xD800 || code > 0xDFFF) {
-    return [str.charAt(i), i]; // Normal character, keeping 'i' the same
-  }
-
-  // High surrogate (could change last hex to 0xDB7F to treat high private
-  // surrogates as single characters)
-  if (0xD800 <= code && code <= 0xDBFF) {
-    if (str.length <= (i+1))  {
-      throw 'High surrogate without following low surrogate';
-    }
-    var next = str.charCodeAt(i+1);
-      if (0xDC00 > next || next > 0xDFFF) {
-        throw 'High surrogate without following low surrogate';
-      }
-      return [str.charAt(i)+str.charAt(i+1), i+1];
-  }
-  // Low surrogate (0xDC00 <= code && code <= 0xDFFF)
-  if (i === 0) {
-    throw 'Low surrogate without preceding high surrogate';
-  }
-  var prev = str.charCodeAt(i-1);
-
-  // (could change last hex to 0xDB7F to treat high private surrogates
-  // as single characters)
-  if (0xD800 > prev || prev > 0xDBFF) {
-    throw 'Low surrogate without preceding high surrogate';
-  }
-  // Return the next character instead (and increment)
-  return [str.charAt(i+1), i+1];
-}
- -

Créer une version de charAt qui permet de supporter des caractères hors du plan basique multilingue (BMP)

- -

Si on souhaite récupérer les paires de codets des caractères hors du plan classique, on peut utiliser le code suivant :

- -
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 < idx) {
-      idx++;
-    } else {
-      break;
-    }
-  }
-
-  if (idx >= end || idx < 0) {
-    return '';
-  }
-
-  ret += str.charAt(idx);
-
-  if (/[\uD800-\uDBFF]/.test(ret) && /[\uDC00-\uDFFF]/.test(str.charAt(idx+1))) {
-    // On avance d'un puisque l'un des caractères fait partie de la paire
-    ret += str.charAt(idx+1);
-  }
-  return ret;
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale
{{SpecName('ES5.1', '#sec-15.5.4.4', 'String.prototype.charAt')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.charat', 'String.prototype.charAt')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.charat', 'String.prototype.charAt')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.charAt")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/charat/index.md b/files/fr/web/javascript/reference/global_objects/string/charat/index.md new file mode 100644 index 0000000000..63e8e2d422 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/charat/index.md @@ -0,0 +1,246 @@ +--- +title: String.prototype.charAt() +slug: Web/JavaScript/Reference/Global_Objects/String/charAt +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/charAt +original_slug: Web/JavaScript/Reference/Objets_globaux/String/charAt +--- +
{{JSRef}}
+ +

La méthode charAt() renvoie une nouvelle chaîne contenant le caractère (ou, plus précisément, le point de code UTF-16)  à la position indiquée en argument.

+ +
{{EmbedInteractiveExample("pages/js/string-charat.html")}}
+ +

Syntaxe

+ +
str.charAt(index)
+ +

Paramètres

+ +
+
index
+
Un entier entre 0 et la longueur de la chaîne - 1. Si aucun index n'est fourni (ce qui correspond à fournir {{jsxref("undefined")}}) ou si l'index ne peut pas être converti en entier, la recherche sera effectuée à l'index 0 et le premier caractère sera donc renvoyé.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le point de code UTF-16 à la position indiquée. Si la position est dehors de la chaîne, ce sera une chaîne vide.

+ +

Description

+ +

Les caractères d'une chaîne sont indexés de la gauche vers la droite. L'indice du premier caractère est 0 et l'indice du dernier caractère est la longueur de la chaîne moins un (par exemple, si on a une chaîne toto, le dernier caractère de la chaine aura l'indice toto.length - 1). Si l'indice fourni est en dehors de cet intervalle, la méthode renverra une chaîne vide. Si aucun indice n'est fourni, la valeur par défaut utilisée sera 0.

+ +

Exemples

+ +

Afficher les caractères situés à différentes positions d'une chaîne

+ +

L'exemple suivant affiche les caractères à différentes positions de la chaîne "Coucou tout le monde" :

+ +
var uneChaîne = "Coucou tout le monde";
+
+console.log("La caractère d'indice 0 est '" + uneChaîne.charAt(0)   + "'");
+console.log("La caractère d'indice 1 est '" + uneChaîne.charAt(1)   + "'");
+console.log("La caractère d'indice 2 est '" + uneChaîne.charAt(2)   + "'");
+console.log("La caractère d'indice 3 est '" + uneChaîne.charAt(3)   + "'");
+console.log("La caractère d'indice 4 est '" + uneChaîne.charAt(4)   + "'");
+console.log("La caractère d'indice 999 est '" + uneChaîne.charAt(999) + "'");
+
+ +

Ces lignes afficheront respectivement :

+ +
La caractère d'indice 0 est 'C'
+La caractère d'indice 1 est 'o'
+La caractère d'indice 2 est 'u'
+La caractère d'indice 3 est 'c'
+La caractère d'indice 4 est 'o'
+La caractère d'indice 999 est ''
+
+ +

Obtenir des caractères complets

+ +

Le code qui suit permet de s'assurer qu'on récupère des caractères complets et ce même si la chaîne de caractères contient des caractères en dehors du plan multilingue de base (BMP) (qui sont donc représentés sur deux unités de code/codets) :

+ +
var str = 'A \uD87E\uDC04 Z'; // On pourrait aussi utiliser un caractère hors du BMP directement
+for (var i=0, chr; i < str.length; i++) {
+  if ((chr = getWholeChar(str, i)) === false) {
+    continue;
+  } // On adapte cette ligne pour chaque boucle, en passant la chaîne de caractères
+    // et on renvoie une variable représentant le caractère individuel
+
+  console.log(chr);
+}
+
+function getWholeChar(str, i) {
+  var code = str.charCodeAt(i);
+
+  if (Number.isNaN(code)) {
+    return ''; // la position n'a pas pu être trouvée
+  }
+  if (code < 0xD800 || code > 0xDFFF) {
+    return str.charAt(i);
+  }
+
+  // On traite ici le demi codet supérieur (high surrogate)
+  // La borne supérieure du test pourrait être 0xDB7F afin de prendre en compte
+  // les demi-codets privés comme des caractères uniques
+  if (0xD800 <= code && code <= 0xDBFF) {
+    if (str.length <= (i+1))  {
+      throw 'le demi-codet supérieur n'est pas suivi par un demi-codet inférieur';
+    }
+    var next = str.charCodeAt(i+1);
+      if (0xDC00 > next || next > 0xDFFF) {
+        throw 'le demi-codet supérieur n'est pas suivi par un demi-codet inférieur';
+      }
+      return str.charAt(i)+str.charAt(i+1);
+  }
+  // on gère le demi codet inférieur (0xDC00 <= code && code <= 0xDFFF)
+  if (i === 0) {
+    throw 'le demi-codet inférieur n'est pas précédé d'un demi-codet supérieur';
+  }
+  var prev = str.charCodeAt(i-1);
+
+  // (la borne supérieure pourrait être modifiée en 0xDB7F afin de traiter
+  // les demi-codets supérieurs privés comme des caractètres uniques)
+  if (0xD800 > prev || prev > 0xDBFF) {
+    throw 'le demi-codet inférieur n'est pas précédé d'un demi-codet supérieur';
+  }
+  // on peut passer des demis codets inférieurs comme deuxième composant
+  // d'une paire déjà traitée
+  return false;
+}
+
+
+ +

Dans un environnement ECMAScript 2016 qui permet d'utiliser l'affectation par décomposition, on peut obtenir une version plus succincte et flexible :

+ +
var str = 'A\uD87E\uDC04Z'; // We could also use a non-BMP character directly
+for (var i=0, chr; i < str.length; i++) {
+  [chr, i] = getWholeCharAndI(str, i);
+  // Adapt this line at the top of each loop, passing in the whole string and
+  // the current iteration and returning an array with the individual character
+  // and 'i' value (only changed if a surrogate pair)
+
+  console.log(chr);
+}
+
+function getWholeCharAndI(str, i) {
+  var code = str.charCodeAt(i);
+
+  if (Number.isNaN(code)) {
+    return ''; // Position not found
+  }
+  if (code < 0xD800 || code > 0xDFFF) {
+    return [str.charAt(i), i]; // Normal character, keeping 'i' the same
+  }
+
+  // High surrogate (could change last hex to 0xDB7F to treat high private
+  // surrogates as single characters)
+  if (0xD800 <= code && code <= 0xDBFF) {
+    if (str.length <= (i+1))  {
+      throw 'High surrogate without following low surrogate';
+    }
+    var next = str.charCodeAt(i+1);
+      if (0xDC00 > next || next > 0xDFFF) {
+        throw 'High surrogate without following low surrogate';
+      }
+      return [str.charAt(i)+str.charAt(i+1), i+1];
+  }
+  // Low surrogate (0xDC00 <= code && code <= 0xDFFF)
+  if (i === 0) {
+    throw 'Low surrogate without preceding high surrogate';
+  }
+  var prev = str.charCodeAt(i-1);
+
+  // (could change last hex to 0xDB7F to treat high private surrogates
+  // as single characters)
+  if (0xD800 > prev || prev > 0xDBFF) {
+    throw 'Low surrogate without preceding high surrogate';
+  }
+  // Return the next character instead (and increment)
+  return [str.charAt(i+1), i+1];
+}
+ +

Créer une version de charAt qui permet de supporter des caractères hors du plan basique multilingue (BMP)

+ +

Si on souhaite récupérer les paires de codets des caractères hors du plan classique, on peut utiliser le code suivant :

+ +
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 < idx) {
+      idx++;
+    } else {
+      break;
+    }
+  }
+
+  if (idx >= end || idx < 0) {
+    return '';
+  }
+
+  ret += str.charAt(idx);
+
+  if (/[\uD800-\uDBFF]/.test(ret) && /[\uDC00-\uDFFF]/.test(str.charAt(idx+1))) {
+    // On avance d'un puisque l'un des caractères fait partie de la paire
+    ret += str.charAt(idx+1);
+  }
+  return ret;
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale
{{SpecName('ES5.1', '#sec-15.5.4.4', 'String.prototype.charAt')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.charat', 'String.prototype.charAt')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.charat', 'String.prototype.charAt')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.charAt")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/charcodeat/index.html b/files/fr/web/javascript/reference/global_objects/string/charcodeat/index.html deleted file mode 100644 index 3b57bc337a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/charcodeat/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: String.prototype.charCodeAt() -slug: Web/JavaScript/Reference/Global_Objects/String/charCodeAt -tags: - - JavaScript - - Méthode - - Reference - - String - - Unicode -translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt -original_slug: Web/JavaScript/Reference/Objets_globaux/String/charCodeAt ---- -
{{JSRef}}
- -

La méthode charCodeAt() retourne un entier compris entre 0 et 65535 qui correspond au code UTF-16 d'un caractère de la chaîne situé à une position donnée.

- -
{{EmbedInteractiveExample("pages/js/string-charcodeat.html")}}
- - - -

Le codet UTF-16 renvoyé correspond au codet Unicode si le caractère peut être représenté sur un seul codet. Si le codet Unicode ne peut pas être représenté sur un seul codet UTF-16 (car sa valeur est supérieure à 0xFFFF), seule la première partie de la paire sera renvoyée. Si vous souhaitez obtenir l'ensemble de la valeur, vous pouvez utiliser la méthode {{jsxref("String.prototype.codePointAt()","codePointAt()")}}.

- -

Syntaxe

- -
str.charCodeAt(indice)
- -

Paramètres

- -
-
indice
-
Un entier supérieur ou égal à zéro et strictement inférieur à la longueur de la chaîne. La valeur par défaut (si le paramètre est absent ou n'est pas un nombre) sera zéro (0).
-
- -

Valeur de retour

- -

Un nombre qui représente la valeur du point de code UTF-16 pour le caractère à la position indiquée. Si index pointe en dehors de la chaîne, ce sera {{jsxref("Objets_globaux/NaN","NaN")}} qui sera renvoyé.

- -

Description

- -

Les codets Unicode vont de 0 à 1 114 111 (0x10FFFF). Les 128 premiers caractères Unicode correspondent aux caractères ASCII (leur encodage est le même). Pour plus d'informations sur la gestion de l'Unicode en JavaScript, voir le Guide JavaScript.

- -

La méthode charCodeAt() renverra toujours une valeur inférieure à 65 536. En effet, les caractères encodés sur les plus grandes valeurs sont encodés sur deux « demi-codets » (appelés surrogate pair en anglais). Pour recomposer de tels caractères, il faut donc utiliser charCodeAt(i) et aussi charCodeAt(i+1) afin de pouvoir récupérer chaque demi-codet. Pour plus de détails, voir le deuxième et troisième exemples.

- -

charCodeAt() renverra {{jsxref("NaN")}} si l'indice fourni est strictement inférieur à 0 ou dépasse la longueur de la chaîne.

- -

Dans les anciennes versions (JavaScript 1.2 par exemple) la méthode charCodeAt() renvoyait la valeur du caractère selon l'encodage ISO-Latin-1. L'encodage ISO-Latin-1 permet de représenter des caractères dont les valeurs vont de 0 à 255. Les valeurs 0 à 127 correspondent aux différentes valeurs ASCII.

- -

Exemples

- -

Utiliser charCodeAt()

- -

L'exemple suivant retourne 65, la valeur Unicode de A.

- -
"ABC".charCodeAt(0) // returns 65
-
- -

Utiliser charCodeAt pour gérer les caractères hors du plan multilingue de base sans hypothèse sur leur présence

- -

Cette fonction peut être utilisée dans des boucles ou autres dans les cas où on ne sait pas si des caractères représentés sur deux demi-codets (hors du plan BMP) existent avant la position indiquée.

- -
function fixedCharCodeAt (str, idx) {
-    // ex. fixedCharCodeAt ('\uD800\uDC00', 0); // 65536
-    // ex. fixedCharCodeAt ('\uD800\uDC00', 1); // false
-    idx = idx || 0;
-    var code = str.charCodeAt(idx);
-    var hi, low;
-
-    // On gère le demi-codet supérieur (la borne supérieure
-    // utilisée pourrait être 0xDB7F afin de traiter les
-    // paires surrogates privées comme des caractères uniques)
-    if (0xD800 <= code && code <= 0xDBFF) {
-        hi = code;
-        low = str.charCodeAt(idx+1);
-        if (isNaN(low)) {
-            throw "Le demi-codet supérieur n'est pas suivi "+
-                  "par un demi-codet inférieur dans fixedCharCodeAt()";
-        }
-        return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
-    }
-    if (0xDC00 <= code && code <= 0xDFFF) {
-    // Demi-codet inférieur
-
-        // On renvoie false pour permettre aux boucles
-        // car le cas a normalement déjà été géré avec
-        // l'étape précédente
-        return false;
-    }
-    return code;
-}
-
- -

Utiliser charCodeAt() pour gérer les caractères du plan multilingue de base (en sachant qu'ils sont présents)

- -
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 < idx) {
-            idx++;
-        }
-        else {
-            break;
-        }
-    }
-
-    if (idx >= end || idx < 0) {
-        return NaN;
-    }
-
-    code = str.charCodeAt(idx);
-
-    var hi, low;
-    if (0xD800 <= code && code <= 0xDBFF) {
-        hi = code;
-        low = str.charCodeAt(idx+1);
-        // On prend un caractère de plus
-        // car on a deux demi-codets à récupérer
-        return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
-    }
-    return code;
-}
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.5', 'String.prototype.charCodeAt')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.charCodeAt")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/charcodeat/index.md b/files/fr/web/javascript/reference/global_objects/string/charcodeat/index.md new file mode 100644 index 0000000000..3b57bc337a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/charcodeat/index.md @@ -0,0 +1,172 @@ +--- +title: String.prototype.charCodeAt() +slug: Web/JavaScript/Reference/Global_Objects/String/charCodeAt +tags: + - JavaScript + - Méthode + - Reference + - String + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt +original_slug: Web/JavaScript/Reference/Objets_globaux/String/charCodeAt +--- +
{{JSRef}}
+ +

La méthode charCodeAt() retourne un entier compris entre 0 et 65535 qui correspond au code UTF-16 d'un caractère de la chaîne situé à une position donnée.

+ +
{{EmbedInteractiveExample("pages/js/string-charcodeat.html")}}
+ + + +

Le codet UTF-16 renvoyé correspond au codet Unicode si le caractère peut être représenté sur un seul codet. Si le codet Unicode ne peut pas être représenté sur un seul codet UTF-16 (car sa valeur est supérieure à 0xFFFF), seule la première partie de la paire sera renvoyée. Si vous souhaitez obtenir l'ensemble de la valeur, vous pouvez utiliser la méthode {{jsxref("String.prototype.codePointAt()","codePointAt()")}}.

+ +

Syntaxe

+ +
str.charCodeAt(indice)
+ +

Paramètres

+ +
+
indice
+
Un entier supérieur ou égal à zéro et strictement inférieur à la longueur de la chaîne. La valeur par défaut (si le paramètre est absent ou n'est pas un nombre) sera zéro (0).
+
+ +

Valeur de retour

+ +

Un nombre qui représente la valeur du point de code UTF-16 pour le caractère à la position indiquée. Si index pointe en dehors de la chaîne, ce sera {{jsxref("Objets_globaux/NaN","NaN")}} qui sera renvoyé.

+ +

Description

+ +

Les codets Unicode vont de 0 à 1 114 111 (0x10FFFF). Les 128 premiers caractères Unicode correspondent aux caractères ASCII (leur encodage est le même). Pour plus d'informations sur la gestion de l'Unicode en JavaScript, voir le Guide JavaScript.

+ +

La méthode charCodeAt() renverra toujours une valeur inférieure à 65 536. En effet, les caractères encodés sur les plus grandes valeurs sont encodés sur deux « demi-codets » (appelés surrogate pair en anglais). Pour recomposer de tels caractères, il faut donc utiliser charCodeAt(i) et aussi charCodeAt(i+1) afin de pouvoir récupérer chaque demi-codet. Pour plus de détails, voir le deuxième et troisième exemples.

+ +

charCodeAt() renverra {{jsxref("NaN")}} si l'indice fourni est strictement inférieur à 0 ou dépasse la longueur de la chaîne.

+ +

Dans les anciennes versions (JavaScript 1.2 par exemple) la méthode charCodeAt() renvoyait la valeur du caractère selon l'encodage ISO-Latin-1. L'encodage ISO-Latin-1 permet de représenter des caractères dont les valeurs vont de 0 à 255. Les valeurs 0 à 127 correspondent aux différentes valeurs ASCII.

+ +

Exemples

+ +

Utiliser charCodeAt()

+ +

L'exemple suivant retourne 65, la valeur Unicode de A.

+ +
"ABC".charCodeAt(0) // returns 65
+
+ +

Utiliser charCodeAt pour gérer les caractères hors du plan multilingue de base sans hypothèse sur leur présence

+ +

Cette fonction peut être utilisée dans des boucles ou autres dans les cas où on ne sait pas si des caractères représentés sur deux demi-codets (hors du plan BMP) existent avant la position indiquée.

+ +
function fixedCharCodeAt (str, idx) {
+    // ex. fixedCharCodeAt ('\uD800\uDC00', 0); // 65536
+    // ex. fixedCharCodeAt ('\uD800\uDC00', 1); // false
+    idx = idx || 0;
+    var code = str.charCodeAt(idx);
+    var hi, low;
+
+    // On gère le demi-codet supérieur (la borne supérieure
+    // utilisée pourrait être 0xDB7F afin de traiter les
+    // paires surrogates privées comme des caractères uniques)
+    if (0xD800 <= code && code <= 0xDBFF) {
+        hi = code;
+        low = str.charCodeAt(idx+1);
+        if (isNaN(low)) {
+            throw "Le demi-codet supérieur n'est pas suivi "+
+                  "par un demi-codet inférieur dans fixedCharCodeAt()";
+        }
+        return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
+    }
+    if (0xDC00 <= code && code <= 0xDFFF) {
+    // Demi-codet inférieur
+
+        // On renvoie false pour permettre aux boucles
+        // car le cas a normalement déjà été géré avec
+        // l'étape précédente
+        return false;
+    }
+    return code;
+}
+
+ +

Utiliser charCodeAt() pour gérer les caractères du plan multilingue de base (en sachant qu'ils sont présents)

+ +
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 < idx) {
+            idx++;
+        }
+        else {
+            break;
+        }
+    }
+
+    if (idx >= end || idx < 0) {
+        return NaN;
+    }
+
+    code = str.charCodeAt(idx);
+
+    var hi, low;
+    if (0xD800 <= code && code <= 0xDBFF) {
+        hi = code;
+        low = str.charCodeAt(idx+1);
+        // On prend un caractère de plus
+        // car on a deux demi-codets à récupérer
+        return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
+    }
+    return code;
+}
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.5', 'String.prototype.charCodeAt')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.charCodeAt")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/codepointat/index.html b/files/fr/web/javascript/reference/global_objects/string/codepointat/index.html deleted file mode 100644 index d461d2917d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/codepointat/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: String.prototype.codePointAt() -slug: Web/JavaScript/Reference/Global_Objects/String/codePointAt -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - String - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/String/codePointAt -original_slug: Web/JavaScript/Reference/Objets_globaux/String/codePointAt ---- -
{{JSRef}}
- -

La méthode codePointAt() renvoie un entier positif qui correspond au code Unicode (code point) du caractère de la chaîne à la position donnée.

- -
{{EmbedInteractiveExample("pages/js/string-codepointat.html")}}
- -

Syntaxe

- -
str.codePointAt(pos)
- -

Paramètres

- -
-
pos
-
La position de l'élément dans la chaîne de caractères dont on souhaite obtenir la valeur du codet.
-
- -

Valeur de retour

- -

Un nombre qui représente la valeur du point de code du caractère à la position indiqué. C'est la valeur {{jsxref("undefined")}} qui est renvoyée s'il n'y aucun élément à pos.

- -

Description

- -

S'il n'y a pas d'élément à la position donnée, la valeur renvoyée sera {{jsxref("undefined")}}. Si ce n'est pas un élément représenté sur deux demi-codets (surrogate pair) UTF-16 et qui commence à pos, le codet de l'élément à l'indice pos est renvoyé.

- -

Exemples

- -
'ABC'.codePointAt(1);          // 66
-'\uD800\uDC00'.codePointAt(0); // 65536
-
-'XYZ'.codePointAt(42); // undefined
-
- -

Prothèse d'émulation (polyfill)

- -

Le fragment de code suivant permet d'ajouter la méthode codePointAt() pour les chaînes de caractères (String). En effet, cette méthode fait partie de ECMAScript 2015 et certains navigateurs peuvent ne pas proposer cette fonction nativement.

- -
/*! https://mths.be/codepointat v0.2.0 by @mathias */
-if (!String.prototype.codePointAt) {
-  (function() {
-    'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
-    var defineProperty = (function() {
-      // IE 8 only supports `Object.defineProperty` on DOM elements
-      try {
-        var object = {};
-        var $defineProperty = Object.defineProperty;
-        var result = $defineProperty(object, object, object) && $defineProperty;
-      } catch(error) {}
-      return result;
-    }());
-    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) { // better `isNaN`
-        index = 0;
-      }
-      // Account for out-of-bounds indices:
-      if (index < 0 || index >= size) {
-        return undefined;
-      }
-      // Get the first code unit
-      var first = string.charCodeAt(index);
-      var second;
-      if ( // check if it’s the start of a surrogate pair
-        first >= 0xD800 && first <= 0xDBFF && // high surrogate
-        size > index + 1 // there is a next code unit
-      ) {
-        second = string.charCodeAt(index + 1);
-        if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
-          // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
-          return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
-        }
-      }
-      return first;
-    };
-    if (defineProperty) {
-      defineProperty(String.prototype, 'codePointAt', {
-        'value': codePointAt,
-        'configurable': true,
-        'writable': true
-      });
-    } else {
-      String.prototype.codePointAt = codePointAt;
-    }
-  }());
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.codePointAt")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/codepointat/index.md b/files/fr/web/javascript/reference/global_objects/string/codepointat/index.md new file mode 100644 index 0000000000..d461d2917d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/codepointat/index.md @@ -0,0 +1,141 @@ +--- +title: String.prototype.codePointAt() +slug: Web/JavaScript/Reference/Global_Objects/String/codePointAt +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - String + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/String/codePointAt +original_slug: Web/JavaScript/Reference/Objets_globaux/String/codePointAt +--- +
{{JSRef}}
+ +

La méthode codePointAt() renvoie un entier positif qui correspond au code Unicode (code point) du caractère de la chaîne à la position donnée.

+ +
{{EmbedInteractiveExample("pages/js/string-codepointat.html")}}
+ +

Syntaxe

+ +
str.codePointAt(pos)
+ +

Paramètres

+ +
+
pos
+
La position de l'élément dans la chaîne de caractères dont on souhaite obtenir la valeur du codet.
+
+ +

Valeur de retour

+ +

Un nombre qui représente la valeur du point de code du caractère à la position indiqué. C'est la valeur {{jsxref("undefined")}} qui est renvoyée s'il n'y aucun élément à pos.

+ +

Description

+ +

S'il n'y a pas d'élément à la position donnée, la valeur renvoyée sera {{jsxref("undefined")}}. Si ce n'est pas un élément représenté sur deux demi-codets (surrogate pair) UTF-16 et qui commence à pos, le codet de l'élément à l'indice pos est renvoyé.

+ +

Exemples

+ +
'ABC'.codePointAt(1);          // 66
+'\uD800\uDC00'.codePointAt(0); // 65536
+
+'XYZ'.codePointAt(42); // undefined
+
+ +

Prothèse d'émulation (polyfill)

+ +

Le fragment de code suivant permet d'ajouter la méthode codePointAt() pour les chaînes de caractères (String). En effet, cette méthode fait partie de ECMAScript 2015 et certains navigateurs peuvent ne pas proposer cette fonction nativement.

+ +
/*! https://mths.be/codepointat v0.2.0 by @mathias */
+if (!String.prototype.codePointAt) {
+  (function() {
+    'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+    var defineProperty = (function() {
+      // IE 8 only supports `Object.defineProperty` on DOM elements
+      try {
+        var object = {};
+        var $defineProperty = Object.defineProperty;
+        var result = $defineProperty(object, object, object) && $defineProperty;
+      } catch(error) {}
+      return result;
+    }());
+    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) { // better `isNaN`
+        index = 0;
+      }
+      // Account for out-of-bounds indices:
+      if (index < 0 || index >= size) {
+        return undefined;
+      }
+      // Get the first code unit
+      var first = string.charCodeAt(index);
+      var second;
+      if ( // check if it’s the start of a surrogate pair
+        first >= 0xD800 && first <= 0xDBFF && // high surrogate
+        size > index + 1 // there is a next code unit
+      ) {
+        second = string.charCodeAt(index + 1);
+        if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
+          // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+          return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+        }
+      }
+      return first;
+    };
+    if (defineProperty) {
+      defineProperty(String.prototype, 'codePointAt', {
+        'value': codePointAt,
+        'configurable': true,
+        'writable': true
+      });
+    } else {
+      String.prototype.codePointAt = codePointAt;
+    }
+  }());
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.codePointAt")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/concat/index.html b/files/fr/web/javascript/reference/global_objects/string/concat/index.html deleted file mode 100644 index 8958a7491f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/concat/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: String.prototype.concat() -slug: Web/JavaScript/Reference/Global_Objects/String/concat -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/concat -original_slug: Web/JavaScript/Reference/Objets_globaux/String/concat ---- -
{{JSRef}}
- -

La méthode concat() combine le texte de plusieurs chaînes avec la chaîne appelante et renvoie la nouvelle chaîne ainsi formée.

- -
{{EmbedInteractiveExample("pages/js/string-concat.html")}}
- -

Syntaxe

- -
str.concat(string2[, string3, ..., stringN])
- -

Paramètres

- -
-
string2...stringN
-
Chaînes de caractères à concaténer ensemble.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères qui contient la concaténation des chaînes de caractères fournies.

- -

Description

- -

La fonction concat() renvoie une nouvelle chaîne correspondant à la concaténation des différents arguments avec la chaîne courante. La chaîne courante est celle sur laquelle a été appelée la méthode concat(). Si les valeurs passées en arguments ne sont pas des chaînes de caractères, elles sont automatiquement converties en chaînes (grâce à leur méthode toString() avant la concaténation).

- -

Exemples

- -

L'exemple suivant combine plusieurs chaînes afin d'en former une nouvelle.

- -
var coucou = "Bonjour ";
-console.log(coucou.concat("Tristan,", " bonne journée."));
-
-/* Bonjour Tristan, bonne journée. */
-
-var salutation = ['Bonjour', ' ', 'Alfred', ' ', '!'];
-"".concat(...salutation); // "Bonjour Alfred !"
-
-"".concat({});   // [object Object]
-"".concat([]);   // ""
-"".concat(null); // "null"
-"".concat(true); // "true"
-"".concat(4, 5); // "45"
-
-
- -

Performance

- -

Il est fortement recommandé d'utiliser les {{jsxref("Opérateurs/Opérateurs_d_affectation", "opérateurs d'affectation", "", 1)}} (+, +=) plutôt que la méthode concat() pour des raisons de performance.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.6', 'String.prototype.concat')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.concat', 'String.prototype.concat')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.concat', 'String.prototype.concat')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.concat")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/concat/index.md b/files/fr/web/javascript/reference/global_objects/string/concat/index.md new file mode 100644 index 0000000000..8958a7491f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/concat/index.md @@ -0,0 +1,103 @@ +--- +title: String.prototype.concat() +slug: Web/JavaScript/Reference/Global_Objects/String/concat +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/concat +original_slug: Web/JavaScript/Reference/Objets_globaux/String/concat +--- +
{{JSRef}}
+ +

La méthode concat() combine le texte de plusieurs chaînes avec la chaîne appelante et renvoie la nouvelle chaîne ainsi formée.

+ +
{{EmbedInteractiveExample("pages/js/string-concat.html")}}
+ +

Syntaxe

+ +
str.concat(string2[, string3, ..., stringN])
+ +

Paramètres

+ +
+
string2...stringN
+
Chaînes de caractères à concaténer ensemble.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères qui contient la concaténation des chaînes de caractères fournies.

+ +

Description

+ +

La fonction concat() renvoie une nouvelle chaîne correspondant à la concaténation des différents arguments avec la chaîne courante. La chaîne courante est celle sur laquelle a été appelée la méthode concat(). Si les valeurs passées en arguments ne sont pas des chaînes de caractères, elles sont automatiquement converties en chaînes (grâce à leur méthode toString() avant la concaténation).

+ +

Exemples

+ +

L'exemple suivant combine plusieurs chaînes afin d'en former une nouvelle.

+ +
var coucou = "Bonjour ";
+console.log(coucou.concat("Tristan,", " bonne journée."));
+
+/* Bonjour Tristan, bonne journée. */
+
+var salutation = ['Bonjour', ' ', 'Alfred', ' ', '!'];
+"".concat(...salutation); // "Bonjour Alfred !"
+
+"".concat({});   // [object Object]
+"".concat([]);   // ""
+"".concat(null); // "null"
+"".concat(true); // "true"
+"".concat(4, 5); // "45"
+
+
+ +

Performance

+ +

Il est fortement recommandé d'utiliser les {{jsxref("Opérateurs/Opérateurs_d_affectation", "opérateurs d'affectation", "", 1)}} (+, +=) plutôt que la méthode concat() pour des raisons de performance.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.6', 'String.prototype.concat')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.concat', 'String.prototype.concat')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.concat', 'String.prototype.concat')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.concat")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/endswith/index.html b/files/fr/web/javascript/reference/global_objects/string/endswith/index.html deleted file mode 100644 index 170935fb6e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/endswith/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: String.prototype.endsWith() -slug: Web/JavaScript/Reference/Global_Objects/String/endsWith -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/String/endsWith -original_slug: Web/JavaScript/Reference/Objets_globaux/String/endsWith ---- -
{{JSRef}}
- -

La méthode endsWith() renvoie un booléen indiquant si la chaine de caractères se termine par la chaine de caractères fournie en argument.

- -
{{EmbedInteractiveExample("pages/js/string-endswith.html")}}
- -

Syntaxe

- -
str.endsWith(chaîneRecherchée[, position]);
- -

Paramètres

- -
-
chaîneRecherchée
-
Les caractères à rechercher à la fin de la chaine de caractères.
-
position {{optional_inline}}
-
Paramètre optionnel. Permet de rechercher dans la chaine de caractères comme si elle faisait cette longueur ; par défaut il s'agit de la longueur de la chaine de caractères chaîneRecherchée. Si la valeur fournie est supérieure à la longueur de la chaine de caractères, elle ne sera pas prise en compte.
-
- -

Valeur de retour

- -

true si la chaîne de caractères se termine par la sous-chaîne indiquée, false sinon.

- -

Description

- -

Cette méthode permet de savoir si une chaine de caractères se termine avec une certaine chaine de caractères (comme les autres méthodes fonctionnant avec des chaînes de caractères, cette méthode est sensible à la casse).

- -

Exemples

- -
var str = "Être, ou ne pas être : telle est la question.";
-
-console.log(str.endsWith("question."));     // true
-console.log(str.endsWith("pas être"));      // false
-console.log(str.endsWith("pas être", 20));  // true
-
- -

Prothèse d'émulation (polyfill)

- -

Cette méthode a été ajoutée dans la spécification ECMAScript 6 et peut ne pas être disponible dans toutes les implémentations de JavaScript. Cependant, il est possible d'émuler le comportement de String.prototype.endsWith avec le fragment de code suivant :

- -
if (!String.prototype.endsWith) {
-  String.prototype.endsWith = function(searchString, position) {
-    var subjectString = this.toString();
-    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
-      position = subjectString.length;
-    }
-    position -= searchString.length;
-    var lastIndex = subjectString.lastIndexOf(searchString, position);
-    return lastIndex !== -1 && lastIndex === position;
-  };
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.endswith', 'String.prototype.endsWith')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.endswith', 'String.prototype.endsWith')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.endsWith")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/endswith/index.md b/files/fr/web/javascript/reference/global_objects/string/endswith/index.md new file mode 100644 index 0000000000..170935fb6e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/endswith/index.md @@ -0,0 +1,100 @@ +--- +title: String.prototype.endsWith() +slug: Web/JavaScript/Reference/Global_Objects/String/endsWith +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/String/endsWith +original_slug: Web/JavaScript/Reference/Objets_globaux/String/endsWith +--- +
{{JSRef}}
+ +

La méthode endsWith() renvoie un booléen indiquant si la chaine de caractères se termine par la chaine de caractères fournie en argument.

+ +
{{EmbedInteractiveExample("pages/js/string-endswith.html")}}
+ +

Syntaxe

+ +
str.endsWith(chaîneRecherchée[, position]);
+ +

Paramètres

+ +
+
chaîneRecherchée
+
Les caractères à rechercher à la fin de la chaine de caractères.
+
position {{optional_inline}}
+
Paramètre optionnel. Permet de rechercher dans la chaine de caractères comme si elle faisait cette longueur ; par défaut il s'agit de la longueur de la chaine de caractères chaîneRecherchée. Si la valeur fournie est supérieure à la longueur de la chaine de caractères, elle ne sera pas prise en compte.
+
+ +

Valeur de retour

+ +

true si la chaîne de caractères se termine par la sous-chaîne indiquée, false sinon.

+ +

Description

+ +

Cette méthode permet de savoir si une chaine de caractères se termine avec une certaine chaine de caractères (comme les autres méthodes fonctionnant avec des chaînes de caractères, cette méthode est sensible à la casse).

+ +

Exemples

+ +
var str = "Être, ou ne pas être : telle est la question.";
+
+console.log(str.endsWith("question."));     // true
+console.log(str.endsWith("pas être"));      // false
+console.log(str.endsWith("pas être", 20));  // true
+
+ +

Prothèse d'émulation (polyfill)

+ +

Cette méthode a été ajoutée dans la spécification ECMAScript 6 et peut ne pas être disponible dans toutes les implémentations de JavaScript. Cependant, il est possible d'émuler le comportement de String.prototype.endsWith avec le fragment de code suivant :

+ +
if (!String.prototype.endsWith) {
+  String.prototype.endsWith = function(searchString, position) {
+    var subjectString = this.toString();
+    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
+      position = subjectString.length;
+    }
+    position -= searchString.length;
+    var lastIndex = subjectString.lastIndexOf(searchString, position);
+    return lastIndex !== -1 && lastIndex === position;
+  };
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.endswith', 'String.prototype.endsWith')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.endswith', 'String.prototype.endsWith')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.endsWith")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/fixed/index.html b/files/fr/web/javascript/reference/global_objects/string/fixed/index.html deleted file mode 100644 index c014787858..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/fixed/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: String.prototype.fixed() -slug: Web/JavaScript/Reference/Global_Objects/String/fixed -tags: - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/fixed -original_slug: Web/JavaScript/Reference/Objets_globaux/String/fixed ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode fixed() permet de créer un élément HTML {{HTMLElement("tt")}}, ce qui permet d'afficher le texte de la chaîne de caractère dans une fonte à chasse fixe.

- -

Syntaxe

- -
str.fixed()
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("tt")}}.

- -

Description

- -

La méthode fixed() encadre une chaîne de caractères dans une balise <tt> :
- "<tt>str</tt>"

- -

Exemples

- -

L'exemple suivant illustre l'utilisation de la méthode fixed pour formater une chaîne de caractères :

- -
var worldString = "Coucou monde";
-
-console.log(worldString.fixed());
-// "<tt>Coucou monde</tt>"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.fixed', 'String.prototype.fixed')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.fixed', 'String.prototype.fixed')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.fixed")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/fixed/index.md b/files/fr/web/javascript/reference/global_objects/string/fixed/index.md new file mode 100644 index 0000000000..c014787858 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/fixed/index.md @@ -0,0 +1,73 @@ +--- +title: String.prototype.fixed() +slug: Web/JavaScript/Reference/Global_Objects/String/fixed +tags: + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fixed +original_slug: Web/JavaScript/Reference/Objets_globaux/String/fixed +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode fixed() permet de créer un élément HTML {{HTMLElement("tt")}}, ce qui permet d'afficher le texte de la chaîne de caractère dans une fonte à chasse fixe.

+ +

Syntaxe

+ +
str.fixed()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("tt")}}.

+ +

Description

+ +

La méthode fixed() encadre une chaîne de caractères dans une balise <tt> :
+ "<tt>str</tt>"

+ +

Exemples

+ +

L'exemple suivant illustre l'utilisation de la méthode fixed pour formater une chaîne de caractères :

+ +
var worldString = "Coucou monde";
+
+console.log(worldString.fixed());
+// "<tt>Coucou monde</tt>"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.fixed', 'String.prototype.fixed')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.fixed', 'String.prototype.fixed')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.fixed")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/fontcolor/index.html b/files/fr/web/javascript/reference/global_objects/string/fontcolor/index.html deleted file mode 100644 index 3ae3b58925..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/fontcolor/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: String.prototype.fontcolor() -slug: Web/JavaScript/Reference/Global_Objects/String/fontcolor -tags: - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/fontcolor -original_slug: Web/JavaScript/Reference/Objets_globaux/String/fontcolor ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode fontcolor() permet de créer un élément {{HTMLElement("font")}} qui permet d'afficher la chaine de caractères dans une fonte utilisant la couleur donnée.

- -
-

Note : L'élément <font> a été retiré dans HTML5 et ne devrait plus être utilisé. Les propriétés CSS permettent de modifier les aspects de mise en forme et doivent donc être utilisées à la place.

-
- -

Syntaxe

- -
str.fontcolor(couleur)
- -

Paramètres

- -
-
couleur
-
Une chaîne de caractères représentant la couleur en une valeur hexadécimale RGB ou comme un littéral. Les différents littéraux utilisables pour les noms de couleurs sont listés dans la référence des couleurs CSS.
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("font")}}.

- -

Description

- -

Si la couleur est représentée sous forme d'un triplet RVB, le format attendu est rrvvbb. Ainsi, pour représenter un rose saumon, les différentes composantes seront rouge = FA,  vert = 80, et bleu = 72, le triplet s'écrit donc "FA8072".

- -

Exemples

- -

L'exemple qui suit illustre comment utiliser la méthode fontcolor() pour modifier la couleur d'une chaîne de caractères en créant une balise <font> qui encadre la chaîne.

- -
var worldString = "Coucou monde";
-
-console.log(worldString.fontcolor("red") +  " avec le littéral red sur cette ligne");
-// '<font color="red">Coucou monde</font> avec le littéral red sur cette ligne'
-
-console.log(worldString.fontcolor("FF00") + " avec la valeur hexadécimale sur cette ligne");
-// '<font color="FF00">Coucou monde</font> avec la valeur hexadécimale sur cette ligne'
-
- -

L'objet {{domxref("HTMLElement.style", "element.style")}} permet d'utiliser l'attribut style de l'élément et de le manipuler de façon générique. Par exemple :

- -
document.getElementById('IDdeVotreElement').style.color = 'red'
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.fontcolor', 'String.prototype.fontcolor')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.fontcolor', 'String.prototype.fontcolor')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.fontcolor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/fontcolor/index.md b/files/fr/web/javascript/reference/global_objects/string/fontcolor/index.md new file mode 100644 index 0000000000..3ae3b58925 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/fontcolor/index.md @@ -0,0 +1,88 @@ +--- +title: String.prototype.fontcolor() +slug: Web/JavaScript/Reference/Global_Objects/String/fontcolor +tags: + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fontcolor +original_slug: Web/JavaScript/Reference/Objets_globaux/String/fontcolor +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode fontcolor() permet de créer un élément {{HTMLElement("font")}} qui permet d'afficher la chaine de caractères dans une fonte utilisant la couleur donnée.

+ +
+

Note : L'élément <font> a été retiré dans HTML5 et ne devrait plus être utilisé. Les propriétés CSS permettent de modifier les aspects de mise en forme et doivent donc être utilisées à la place.

+
+ +

Syntaxe

+ +
str.fontcolor(couleur)
+ +

Paramètres

+ +
+
couleur
+
Une chaîne de caractères représentant la couleur en une valeur hexadécimale RGB ou comme un littéral. Les différents littéraux utilisables pour les noms de couleurs sont listés dans la référence des couleurs CSS.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("font")}}.

+ +

Description

+ +

Si la couleur est représentée sous forme d'un triplet RVB, le format attendu est rrvvbb. Ainsi, pour représenter un rose saumon, les différentes composantes seront rouge = FA,  vert = 80, et bleu = 72, le triplet s'écrit donc "FA8072".

+ +

Exemples

+ +

L'exemple qui suit illustre comment utiliser la méthode fontcolor() pour modifier la couleur d'une chaîne de caractères en créant une balise <font> qui encadre la chaîne.

+ +
var worldString = "Coucou monde";
+
+console.log(worldString.fontcolor("red") +  " avec le littéral red sur cette ligne");
+// '<font color="red">Coucou monde</font> avec le littéral red sur cette ligne'
+
+console.log(worldString.fontcolor("FF00") + " avec la valeur hexadécimale sur cette ligne");
+// '<font color="FF00">Coucou monde</font> avec la valeur hexadécimale sur cette ligne'
+
+ +

L'objet {{domxref("HTMLElement.style", "element.style")}} permet d'utiliser l'attribut style de l'élément et de le manipuler de façon générique. Par exemple :

+ +
document.getElementById('IDdeVotreElement').style.color = 'red'
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.fontcolor', 'String.prototype.fontcolor')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.fontcolor', 'String.prototype.fontcolor')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.fontcolor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/fontsize/index.html b/files/fr/web/javascript/reference/global_objects/string/fontsize/index.html deleted file mode 100644 index 72aca87a1a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/fontsize/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: String.prototype.fontsize() -slug: Web/JavaScript/Reference/Global_Objects/String/fontsize -tags: - - Deprecated - - HTML wrapper methods - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/fontsize -original_slug: Web/JavaScript/Reference/Objets_globaux/String/fontsize ---- -
{{JSRef}}{{deprecated_header}}
- -

La propriété fontsize() permet de créer un élément HTML {{HTMLElement("font")}} qui permet d'afficher la chaîne de caractères dans une fonte de taille donnée.

- -
-

Note : L'élément <font> a été retiré dans HTML5 et ne devrait plus être utilisé. Les propriétés CSS permettent de modifier les aspects de mise en forme et doivent donc être utilisées à la place.

-
- -

Syntaxe

- -
str.fontsize(taille)
- -

Paramètres

- -
-
taille
-
Un entier compris entre 1 et 7 ou une chaîne de caractère représentant un nombre signé entre 1 et 7.
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("font")}}.

- -

Description

- -

Lorsque le paramètre utilisé est un entier, la taille de la chaîne str correspondra à l'une des 7 tailles définies. Lorsque le paramètre utilisé est une chaîne de caractères (par exemple "-2"), la taille de la fonte sera ajustée relativement à la taille définie par l'élément {{HTMLElement("basefont")}}.

- -

Exemples

- -

L'exemple qui suit illustre comment utiliser les méthodes pour les chaînes de caractères afin de modifier la taille d'une chaîne de caractères :

- -
var worldString = "Coucou monde";
-
-console.log(worldString.small()); // <small>Coucou monde</small>
-console.log(worldString.big()); // <big>Coucou monde</big>
-console.log(worldString.fontsize(7)); // <font size="7">Coucou monde</fontsize>
- -

L'objet {{domxref("HTMLElement.style", "element.style")}} permet d'utiliser l'attribut style de l'élément et de le manipuler de façon générique. Par exemple :

- -
document.getElementById('IdElement').style.fontSize = '0.7em'
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.fontsize', 'String.prototype.fontsize')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.fontsize', 'String.prototype.fontsize')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.fontsize")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/fontsize/index.md b/files/fr/web/javascript/reference/global_objects/string/fontsize/index.md new file mode 100644 index 0000000000..72aca87a1a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/fontsize/index.md @@ -0,0 +1,87 @@ +--- +title: String.prototype.fontsize() +slug: Web/JavaScript/Reference/Global_Objects/String/fontsize +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/fontsize +original_slug: Web/JavaScript/Reference/Objets_globaux/String/fontsize +--- +
{{JSRef}}{{deprecated_header}}
+ +

La propriété fontsize() permet de créer un élément HTML {{HTMLElement("font")}} qui permet d'afficher la chaîne de caractères dans une fonte de taille donnée.

+ +
+

Note : L'élément <font> a été retiré dans HTML5 et ne devrait plus être utilisé. Les propriétés CSS permettent de modifier les aspects de mise en forme et doivent donc être utilisées à la place.

+
+ +

Syntaxe

+ +
str.fontsize(taille)
+ +

Paramètres

+ +
+
taille
+
Un entier compris entre 1 et 7 ou une chaîne de caractère représentant un nombre signé entre 1 et 7.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("font")}}.

+ +

Description

+ +

Lorsque le paramètre utilisé est un entier, la taille de la chaîne str correspondra à l'une des 7 tailles définies. Lorsque le paramètre utilisé est une chaîne de caractères (par exemple "-2"), la taille de la fonte sera ajustée relativement à la taille définie par l'élément {{HTMLElement("basefont")}}.

+ +

Exemples

+ +

L'exemple qui suit illustre comment utiliser les méthodes pour les chaînes de caractères afin de modifier la taille d'une chaîne de caractères :

+ +
var worldString = "Coucou monde";
+
+console.log(worldString.small()); // <small>Coucou monde</small>
+console.log(worldString.big()); // <big>Coucou monde</big>
+console.log(worldString.fontsize(7)); // <font size="7">Coucou monde</fontsize>
+ +

L'objet {{domxref("HTMLElement.style", "element.style")}} permet d'utiliser l'attribut style de l'élément et de le manipuler de façon générique. Par exemple :

+ +
document.getElementById('IdElement').style.fontSize = '0.7em'
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.fontsize', 'String.prototype.fontsize')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.fontsize', 'String.prototype.fontsize')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.fontsize")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.html b/files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.html deleted file mode 100644 index db155abb0d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: String.fromCharCode() -slug: Web/JavaScript/Reference/Global_Objects/String/fromCharCode -tags: - - JavaScript - - Méthode - - Reference - - String - - UTF-16 - - Unicode -translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCharCode -original_slug: Web/JavaScript/Reference/Objets_globaux/String/fromCharCode ---- -
{{JSRef}}
- -

La méthode statique String.fromCharCode() renvoie une chaîne de caractères créée à partir de points de code UTF-16.

- -
{{EmbedInteractiveExample("pages/js/string-fromcharcode.html")}}
- -

Syntaxe

- -
String.fromCharCode(num1, ..., numN)
- -

Paramètres

- -
-
num1, ..., numN
-
Une séquence de nombres représentant des points de code UTF-16 entre 0 et 65535 (0xFFFF). Les nombres supérieurs à 0xFFFF sont tronqués.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui contient les caractères correspondants à la série de points de code UTF-16.

- -

Description

- -

Cette méthode renvoie une chaîne de caractère et non un objet {{jsxref("String")}}.

- -

La méthode fromCharCode() étant une méthode statique de l'objet String, elle doit toujours être utilisée avec la syntaxe String.fromCharCode() plutôt qu'en appelant la méthode à partir d'un objet String construit sur mesure.

- -

Exemples

- -

Pour les caractères du plan multilingue de base, UTF-16 utilise une seule unité de code :

- -
String.fromCharCode(65,66,67); // ABC
-String.fromCharCode(0x2014);   // "—"
-String.fromCharCode(0x12014);  // "—" également, le 1 a été tronqué
-String.fromCharCode(8212);     // renvoie également "—" car 8212
-                               // est la forme décimale
-
- -

Les caractères hors de ce plan utilisent deux unités de code (on parle de surrogate pair) :

- -
String.fromCharCode(0xD83C, 0xDF03); // Point de code U+1F303 pour l'émoji nuit étoilée
-
-// Forme décimale équivalente :
-String.fromCharCode(55356, 57091);
-
-String.fromCharCode(0xD834, 0xDF06, 0x61, 0xD834, 0xDF07);
-// "\uD834\uDF06a\uD834\uDF07"
-
- -

Utiliser des valeurs Unicode plus grandes

- -

En UTF-16, les caractères les plus communs sont représentables sur une seule valeur de 16 bits. Toutefois, cet ensemble de caractères (aussi appelé plan multilingue de base ou BMP en anglais) ne représente qu'1/17e de l'espace total représenté par les caractères Unicode. Le reste des points de code, sur l'intervalle 65536 (0x010000) à 1114111 (0x10FFFF) sont des caractères additionnels qui sont représentés par deux valeurs sur 16 bits qu'on appelle surrogate pairs en anglais.

- -

La méthode fromCharCode() ne fonctionne qu'avec des valeurs sur 16 bits et il faudra donc fournir une paire de codets pour obtenir certains caractères. Ainsi, String.fromCharCode(0xD83C, 0xDF03) renvoie le point de code U+1F303 qui représente l'émoji « nuit étoilée ».

- -

Bien qu'il y ait une relation mathématique entre la valeur composée et les deux codets qui forment la paire, on a besoin d'une étape supplémentaire à chaque fois. Aussi, il sera plus pratique d'utiliser {{jsxref("String.fromCodePoint()")}} (ES2015 / ES6) qui permet de manipuler les codes des caractères hors BMP : on pourra ainsi écrire String.fromCodePoint(0x1F303) pour renvoyer le caractère U+1F303 (émoji « nuit étoilée »).

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.3.2', 'StringfromCharCode')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.fromcharcodes', 'String.fromCharCode')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.fromcharcodes', 'String.fromCharCode')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.fromCharCode")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.md b/files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.md new file mode 100644 index 0000000000..db155abb0d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/fromcharcode/index.md @@ -0,0 +1,114 @@ +--- +title: String.fromCharCode() +slug: Web/JavaScript/Reference/Global_Objects/String/fromCharCode +tags: + - JavaScript + - Méthode + - Reference + - String + - UTF-16 + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCharCode +original_slug: Web/JavaScript/Reference/Objets_globaux/String/fromCharCode +--- +
{{JSRef}}
+ +

La méthode statique String.fromCharCode() renvoie une chaîne de caractères créée à partir de points de code UTF-16.

+ +
{{EmbedInteractiveExample("pages/js/string-fromcharcode.html")}}
+ +

Syntaxe

+ +
String.fromCharCode(num1, ..., numN)
+ +

Paramètres

+ +
+
num1, ..., numN
+
Une séquence de nombres représentant des points de code UTF-16 entre 0 et 65535 (0xFFFF). Les nombres supérieurs à 0xFFFF sont tronqués.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui contient les caractères correspondants à la série de points de code UTF-16.

+ +

Description

+ +

Cette méthode renvoie une chaîne de caractère et non un objet {{jsxref("String")}}.

+ +

La méthode fromCharCode() étant une méthode statique de l'objet String, elle doit toujours être utilisée avec la syntaxe String.fromCharCode() plutôt qu'en appelant la méthode à partir d'un objet String construit sur mesure.

+ +

Exemples

+ +

Pour les caractères du plan multilingue de base, UTF-16 utilise une seule unité de code :

+ +
String.fromCharCode(65,66,67); // ABC
+String.fromCharCode(0x2014);   // "—"
+String.fromCharCode(0x12014);  // "—" également, le 1 a été tronqué
+String.fromCharCode(8212);     // renvoie également "—" car 8212
+                               // est la forme décimale
+
+ +

Les caractères hors de ce plan utilisent deux unités de code (on parle de surrogate pair) :

+ +
String.fromCharCode(0xD83C, 0xDF03); // Point de code U+1F303 pour l'émoji nuit étoilée
+
+// Forme décimale équivalente :
+String.fromCharCode(55356, 57091);
+
+String.fromCharCode(0xD834, 0xDF06, 0x61, 0xD834, 0xDF07);
+// "\uD834\uDF06a\uD834\uDF07"
+
+ +

Utiliser des valeurs Unicode plus grandes

+ +

En UTF-16, les caractères les plus communs sont représentables sur une seule valeur de 16 bits. Toutefois, cet ensemble de caractères (aussi appelé plan multilingue de base ou BMP en anglais) ne représente qu'1/17e de l'espace total représenté par les caractères Unicode. Le reste des points de code, sur l'intervalle 65536 (0x010000) à 1114111 (0x10FFFF) sont des caractères additionnels qui sont représentés par deux valeurs sur 16 bits qu'on appelle surrogate pairs en anglais.

+ +

La méthode fromCharCode() ne fonctionne qu'avec des valeurs sur 16 bits et il faudra donc fournir une paire de codets pour obtenir certains caractères. Ainsi, String.fromCharCode(0xD83C, 0xDF03) renvoie le point de code U+1F303 qui représente l'émoji « nuit étoilée ».

+ +

Bien qu'il y ait une relation mathématique entre la valeur composée et les deux codets qui forment la paire, on a besoin d'une étape supplémentaire à chaque fois. Aussi, il sera plus pratique d'utiliser {{jsxref("String.fromCodePoint()")}} (ES2015 / ES6) qui permet de manipuler les codes des caractères hors BMP : on pourra ainsi écrire String.fromCodePoint(0x1F303) pour renvoyer le caractère U+1F303 (émoji « nuit étoilée »).

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.3.2', 'StringfromCharCode')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.fromcharcodes', 'String.fromCharCode')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.fromcharcodes', 'String.fromCharCode')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.fromCharCode")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.html b/files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.html deleted file mode 100644 index 81cf698e35..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: String.fromCodePoint() -slug: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - String - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint -original_slug: Web/JavaScript/Reference/Objets_globaux/String/fromCodePoint ---- -
{{JSRef}}
- -

La méthode statique String.fromCodePoint() renvoie une chaîne de caractères créée à partir d'un suite de codets.

- -
{{EmbedInteractiveExample("pages/js/string-fromcodepoint.html")}}
- -

Syntaxe

- -
String.fromCodePoint(num1[, ...[, numN]])
- -

Paramètres

- -
-
num1, ..., numN
-
Une séquence de codets (code points).
-
- -

Valeur de retour

- -

Une chaîne de caractères créée à partir de la séquence de codets indiquée.

- -

Exceptions

- - - -

Description

- -

fromCodePoint() étant une méthode statique de {{jsxref("String")}}, elle doit toujours être utilisée avec la syntaxe String.fromCodePoint(), plutôt qu'avec une méthode d'un objet {{jsxref("String")}} qui aurait été créé.

- -

Exemples

- -

Utiliser fromCodePoint()

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

Comparaison avec fromCharCode()

- -

La méthode {{jsxref("String.fromCharCode()")}} ne peut pas renvoyer les caractères de l'intervalle 0x010000 à 0X10FFFF avec un seul codet, il est nécessaire de lui fournir la paire décomposée (surrogate pair) pour obtenr un tel caractère :

- -
String.fromCharCode(0xD83C, 0xDF03); // émoji « nuit étoilée »
-String.fromCharCode(55356, 57091);   // équivalent en notation décimale
- -

String.fromCodePoint(), en revanche, peut renvoyer les caractères qui s'expriment sur plus d'un codet de 16 bits grâce à leur codet « simple » :

- -
String.fromCodePoint(0x1F303); // ou 127747 en notation décimale
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.fromCodePoint")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.md b/files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.md new file mode 100644 index 0000000000..81cf698e35 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/fromcodepoint/index.md @@ -0,0 +1,108 @@ +--- +title: String.fromCodePoint() +slug: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - String + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint +original_slug: Web/JavaScript/Reference/Objets_globaux/String/fromCodePoint +--- +
{{JSRef}}
+ +

La méthode statique String.fromCodePoint() renvoie une chaîne de caractères créée à partir d'un suite de codets.

+ +
{{EmbedInteractiveExample("pages/js/string-fromcodepoint.html")}}
+ +

Syntaxe

+ +
String.fromCodePoint(num1[, ...[, numN]])
+ +

Paramètres

+ +
+
num1, ..., numN
+
Une séquence de codets (code points).
+
+ +

Valeur de retour

+ +

Une chaîne de caractères créée à partir de la séquence de codets indiquée.

+ +

Exceptions

+ + + +

Description

+ +

fromCodePoint() étant une méthode statique de {{jsxref("String")}}, elle doit toujours être utilisée avec la syntaxe String.fromCodePoint(), plutôt qu'avec une méthode d'un objet {{jsxref("String")}} qui aurait été créé.

+ +

Exemples

+ +

Utiliser fromCodePoint()

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

Comparaison avec fromCharCode()

+ +

La méthode {{jsxref("String.fromCharCode()")}} ne peut pas renvoyer les caractères de l'intervalle 0x010000 à 0X10FFFF avec un seul codet, il est nécessaire de lui fournir la paire décomposée (surrogate pair) pour obtenr un tel caractère :

+ +
String.fromCharCode(0xD83C, 0xDF03); // émoji « nuit étoilée »
+String.fromCharCode(55356, 57091);   // équivalent en notation décimale
+ +

String.fromCodePoint(), en revanche, peut renvoyer les caractères qui s'expriment sur plus d'un codet de 16 bits grâce à leur codet « simple » :

+ +
String.fromCodePoint(0x1F303); // ou 127747 en notation décimale
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.fromCodePoint")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/includes/index.html b/files/fr/web/javascript/reference/global_objects/string/includes/index.html deleted file mode 100644 index e3aba75116..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/includes/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: String.prototype.includes() -slug: Web/JavaScript/Reference/Global_Objects/String/includes -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/includes -original_slug: Web/JavaScript/Reference/Objets_globaux/String/includes ---- -
{{JSRef}}
- -

La méthode includes() détermine si une chaîne de caractères est contenue dans une autre et renvoie true ou false selon le cas de figure.

- -
{{EmbedInteractiveExample("pages/js/string-includes.html")}}
- -

Syntaxe

- -
str.includes(chaîneRecherchée);
-str.includes(chaîneRecherchée, position);
- -

Paramètres

- -
-
chaîneRecherchée
-
Une chaîne à rechercher dans la chaîne courante.
-
position {{optional_inline}}
-
La position dans la chaîne à partir de laquelle commencera la recherche. La valeur par défaut de position est 0.
-
- -

Valeur de retour

- -

true si la chaîne de caractères contient la sous-chaîne recherchée, false sinon.

- -

Description

- -

Cette méthode détermine si une chaîne de caractères est contenue dans une autre.

- -

Sensibilité à la case

- -

includes() est sensible à la casse. Par exemple, l'expression suivante nous retournera false :

- -
'Baleine bleue'.includes('baleine'); // false
- -

Exemples

- -

Utiliser includes()

- -
const str = "Être ou ne pas être, telle est la question.";
-
-console.log(str.includes("Être"));       // true
-console.log(str.includes("question"));   // true
-console.log(str.includes("pléonasme"));  // false
-console.log(str.includes("Être", 1));    // false
-console.log(str.includes("ÊTRE"));       // false
-console.log(str.includes(""));       // true
-
- -

Prothèse d'émulation (polyfill)

- -

Cette méthode a été ajoutée à la spécification ECMAScript 2015 et n'est peut-être pas encore disponible dans toutes les implémentations JavaScript.

- -

Cependant, vous pouvez facilement {{Glossary('polyfill')}} cette méthode pour de vieux navigateurs :

- -
if (!String.prototype.includes) {
-  String.prototype.includes = function(search, start) {
-    'use strict';
-
-    if (search instanceof RegExp) {
-      throw TypeError('first argument must not be a RegExp');
-    }
-    if (start === undefined) { start = 0; }
-    return this.indexOf(search, start) !== -1;
-  };
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.includes', 'String.prototype.includes')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-string.prototype.includes', 'String.prototype.includes')}}{{Spec2('ES6')}}Définition initiale.
- -

Compatibilité du navigateur

- -

{{Compat("javascript.builtins.String.includes")}}

- -

String.prototype.contains

- -

Les versions de Firefox allant de Firefox 18 à Firefox 39 utilisent cette méthode avec le nom contains(). Cette méthode a été renommée en includes() via {{bug(1102219)}} pour la raison suivante :

- -

Il a été rapporté que certains sites web utilisant MooTools 1.2 plantaient sur Firefox 17. Cette version de MooTools vérifie que String.prototype.contains() existe bien, et si ce n'est pas le cas, ajoute sa propre fonction similaire. Avec l'introduction de cette fonction dans Firefox 17, le comportement de ce contrôle a changé de telle manière qu'il cause un plantage du code de MooTools implémenté pour String.prototype.contains(). En conséquence, cette implémentation a été désactivée de Firefox 17. String.prototype.contains() est ainsi disponible sur une version ultérieure : Firefox 18 lorsque MooTools a déclenché la sortie de la version 1.2.6.

- -

MooTools 1.3 force sa propre version de String.prototype.includes(), les sites Web l'implémentant ne sont donc pas perturbés. Néanmoins, il faut noter que les signatures des méthodes diffèrent entre MooTools 1.3 et ECMAScript 2015 (pour le second paramètre). MooTools 1.5+ a modifié sa signature afin de prendre en compte le standard de ES2015.

- -

Dans Firefox 48, la méthode String.prototype.contains() a été retirée. String.prototype.includes() doit être utilisée à la place.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/includes/index.md b/files/fr/web/javascript/reference/global_objects/string/includes/index.md new file mode 100644 index 0000000000..e3aba75116 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/includes/index.md @@ -0,0 +1,126 @@ +--- +title: String.prototype.includes() +slug: Web/JavaScript/Reference/Global_Objects/String/includes +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/includes +original_slug: Web/JavaScript/Reference/Objets_globaux/String/includes +--- +
{{JSRef}}
+ +

La méthode includes() détermine si une chaîne de caractères est contenue dans une autre et renvoie true ou false selon le cas de figure.

+ +
{{EmbedInteractiveExample("pages/js/string-includes.html")}}
+ +

Syntaxe

+ +
str.includes(chaîneRecherchée);
+str.includes(chaîneRecherchée, position);
+ +

Paramètres

+ +
+
chaîneRecherchée
+
Une chaîne à rechercher dans la chaîne courante.
+
position {{optional_inline}}
+
La position dans la chaîne à partir de laquelle commencera la recherche. La valeur par défaut de position est 0.
+
+ +

Valeur de retour

+ +

true si la chaîne de caractères contient la sous-chaîne recherchée, false sinon.

+ +

Description

+ +

Cette méthode détermine si une chaîne de caractères est contenue dans une autre.

+ +

Sensibilité à la case

+ +

includes() est sensible à la casse. Par exemple, l'expression suivante nous retournera false :

+ +
'Baleine bleue'.includes('baleine'); // false
+ +

Exemples

+ +

Utiliser includes()

+ +
const str = "Être ou ne pas être, telle est la question.";
+
+console.log(str.includes("Être"));       // true
+console.log(str.includes("question"));   // true
+console.log(str.includes("pléonasme"));  // false
+console.log(str.includes("Être", 1));    // false
+console.log(str.includes("ÊTRE"));       // false
+console.log(str.includes(""));       // true
+
+ +

Prothèse d'émulation (polyfill)

+ +

Cette méthode a été ajoutée à la spécification ECMAScript 2015 et n'est peut-être pas encore disponible dans toutes les implémentations JavaScript.

+ +

Cependant, vous pouvez facilement {{Glossary('polyfill')}} cette méthode pour de vieux navigateurs :

+ +
if (!String.prototype.includes) {
+  String.prototype.includes = function(search, start) {
+    'use strict';
+
+    if (search instanceof RegExp) {
+      throw TypeError('first argument must not be a RegExp');
+    }
+    if (start === undefined) { start = 0; }
+    return this.indexOf(search, start) !== -1;
+  };
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.includes', 'String.prototype.includes')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-string.prototype.includes', 'String.prototype.includes')}}{{Spec2('ES6')}}Définition initiale.
+ +

Compatibilité du navigateur

+ +

{{Compat("javascript.builtins.String.includes")}}

+ +

String.prototype.contains

+ +

Les versions de Firefox allant de Firefox 18 à Firefox 39 utilisent cette méthode avec le nom contains(). Cette méthode a été renommée en includes() via {{bug(1102219)}} pour la raison suivante :

+ +

Il a été rapporté que certains sites web utilisant MooTools 1.2 plantaient sur Firefox 17. Cette version de MooTools vérifie que String.prototype.contains() existe bien, et si ce n'est pas le cas, ajoute sa propre fonction similaire. Avec l'introduction de cette fonction dans Firefox 17, le comportement de ce contrôle a changé de telle manière qu'il cause un plantage du code de MooTools implémenté pour String.prototype.contains(). En conséquence, cette implémentation a été désactivée de Firefox 17. String.prototype.contains() est ainsi disponible sur une version ultérieure : Firefox 18 lorsque MooTools a déclenché la sortie de la version 1.2.6.

+ +

MooTools 1.3 force sa propre version de String.prototype.includes(), les sites Web l'implémentant ne sont donc pas perturbés. Néanmoins, il faut noter que les signatures des méthodes diffèrent entre MooTools 1.3 et ECMAScript 2015 (pour le second paramètre). MooTools 1.5+ a modifié sa signature afin de prendre en compte le standard de ES2015.

+ +

Dans Firefox 48, la méthode String.prototype.contains() a été retirée. String.prototype.includes() doit être utilisée à la place.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/index.html b/files/fr/web/javascript/reference/global_objects/string/index.html deleted file mode 100644 index 11a12969ca..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/index.html +++ /dev/null @@ -1,391 +0,0 @@ ---- -title: String -slug: Web/JavaScript/Reference/Global_Objects/String -tags: - - Class - - ECMAScript 2015 - - JavaScript - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String -original_slug: Web/JavaScript/Reference/Objets_globaux/String -browser-compat: javascript.builtins.String ---- -
{{JSRef}}
- -

Un objet String est utilisé afin de représenter et de manipuler une chaîne de caractères.

- -

Description

- -

Les chaînes de caractères sont utiles pour stocker des données qui peuvent être représentées sous forme de texte. Parmi les opérations les plus utilisées pour manipuler les chaînes de caractères, on a : la vérification de leur longueur avec length, la construction et la concaténation avec les opérateurs + et +=, la recherche de sous-chaîne avec les méthodes includes() ou indexOf() ou encore l'extraction de sous-chaînes avec la méthode substring().

- -

Créer des chaînes de caractères

- -

Il est possible de créer des chaînes de caractères comme des valeurs primitives ou comme des objets avec le constructeur String() :

- -
-const string1 = "Une chaîne de caractères primitive";
-const string2 = 'Là encore une valeur de chaîne de caractères primitive';
-const string3 = `Et ici aussi`;
- -
-const string4 = new String("Un objet String");
-
- -

Les valeurs primitives ou les objets représentant des chaînes de caractères peuvent être utilisés de façon interchangeable dans la plupart des situations. Voir ci-après Chaînes de caractères : valeurs primitives et objets.

- -

Les valeurs littérales pour les chaînes de caractères peuvent être indiquées avec des simples quotes ('), des doubles quotes (") ou encore par des accents graves (`). Cette dernière forme permet de définir un littéral de gabarit de chaîne de caractères avec lequel on pourra interpoler des expressions dans une chaîne de caractères.

- -

Accéder à un caractère

- -

Il existe deux façons d'accéder à un caractère dans une chaîne. La première façon consiste à utiliser la méthode charAt() :

- -
-return 'chat'.charAt(2); // renvoie "a"
-
- -

La seconde méthode, introduite avec ECMAScript 5, est de manipuler la chaîne comme un tableau, où les caractères sont les éléments du tableau et ont un indice correspondant à leur position :

- -
-return 'chat'[2]; // renvoie "a"
-
- -

En utilisant la seconde notation, il est impossible de supprimer ou d'affecter une valeur à ces propriétés. En effet, les propriétés concernées ne sont ni accessibles en écriture ni configurables. Pour plus d'informations, voir la page de Object.defineProperty().

- -

Comparer des chaînes de caractères

- -

Les développeurs C utilisent la fonction strcmp() pour comparer des chaînes de caractères. En JavaScript, il est possible d'utiliser les opérateurs inférieur et supérieur :

- -
-let a = "a";
-let b = "b";
-if (a < b) { // true
-  console.log(a + " est inférieure à " + b);
-} else if (a > b) {
-  console.log(a + " est supérieure à " + b);
-} else {
-  console.log(a + " et " + b + " sont égales.");
-}
-
- -

On peut obtenir un résultat semblable avec la méthode localeCompare() qui permet de prendre en compte la locale utilisée et qui est héritée par toutes les instances de String.

- -

On notera que a == b compare les chaînes de caractères a et b de façon sensible à la casse. Si on souhaite comparer des chaînes sans être sensible à la casse, on pourra utiliser une fonction semblable à :

- -
-function isEqual(str1, str2) {
-  return str1.toUpperCase() === str2.toUpperCase()
-}
-
- -

On utilise ici une conversion en majuscules plutôt qu'en minuscules, car cela cause certains problèmes de conversion pour certains caractères UTF-8.

- -

Les différences entre les objets String et le type primitif pour les chaînes de caractères

- -

En JavaScript, on distingue d'une part les objets String et d'autre par les valeurs primitives qui sont des chaînes de caractères (il en va de même pour les booléens/Boolean et les nombres/Number).

- -

Les valeurs littérales (délimitées par des simples quotes, des doubles quotes ou des accents graves et les chaînes de caractères renvoyées par les appels à String sans le mot-clé new sont des chaînes de caractères primitives. JavaScript convertit automatiquement les valeurs primitives en objets String et il est donc possible d'utiliser les méthodes objet de String sur les chaînes de caractères primitives. Dans les contextes où une méthode est appelée sur une chaîne de caractères primitive ou alors qu'on recherche une propriété, JavaScript convertira implicitement la valeur primitive et appellera la méthode ou accèdera à la propriété correspondante.

- -
-let s_prim = "toto";
-let s_obj = new String(s_prim);
-
-console.log(typeof s_prim); // affiche "string"
-console.log(typeof s_obj);  // affiche "object"
-
- -

Les chaînes primitives et les objets String renvoient des résultats différents lorsqu'ils sont évalués avec eval(). Les chaînes primitives sont traitées comme du code source, tandis que les objets String sont traités comme tous les autres objets, en renvoyant l'objet. Par exemple :

- -
-let s1 = "2 + 2";                // crée une chaîne primitive
-let s2 = new String("2 + 2");    // crée un objet String
-console.log(eval(s1));           // renvoie le nombre 4
-console.log(eval(s2));           // renvoie la chaîne "2 + 2"
-
- -

Pour ces raisons, il peut y avoir certains problèmes quand le code attend une chaîne primitive plutôt qu'un objet String. Toutefois, cette distinction est rarement nécessaire en pratique.

- -

Un objet String peut toujours être converti en son équivalent primitif grâce à la méthode valueOf().

- -
-console.log(eval(s2.valueOf())); // renvoie  4
-
- -

Échappement des caractères

- -

En dehors des caractères classiques, des caractères spéciaux peuvent être encodés grâce à l'échappement :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeRésultat
\0Caractère nul (U+0000 NULL)
\'simple quote (U+0027 APOSTROPHE)
\"double quote (U+0022 QUOTATION MARK)
\\barre oblique inversée (U+005C REVERSE SOLIDUS)
\nnouvelle ligne (U+000A LINE FEED; LF)
\rretour chariot (U+000D CARRIAGE RETURN; CR)
\vtabulation verticale (U+000B LINE TABULATION)
\ttabulation (U+0009 CHARACTER TABULATION)
\bretour arrière (U+0008 BACKSPACE)
\fsaut de page (U+000C FORM FEED)
\uXXXX (XXXX étant 4 chiffres hexadécimaux pour l'intervalle of 0x0000 - 0xFFFF)Point de code Unicode entre U+0000 et U+FFFF (représente le plan Unicode multilingue basique)
\u{X} ... \u{XXXXXX} (X…XXXXXX étant 1 à 6 chiffres hexadécimaux pour l'intervalle 0x0 - 0x10FFFF)Point de code Unicode entre U+0000 et U+10FFFF (représente l'intégralité d'Unicode)
\xXX (XX étant 2 chiffres hexadécimaux pour l'intervalle 0x00 - 0xFF)Point de code Unicode entre U+0000 et U+00FF (correspond à Basic Latin et Latin-1 supplement ; équivalent à ISO-8859-1)
- -

Littéraux pour les chaînes longues

- -

Il peut arriver que le code contienne des chaînes plutôt longues. Plutôt que d'avoir des lignes qui s'étirent sur tout le fichier et dans un éditeur de code, il est possible de casser la chaîne sur plusieurs lignes sans que cela modifie le contenu de la chaîne. Il existe deux façons de faire.

- -

Méthode 1

- -
-let chaineLongue = "Voici une très longue chaîne qui a besoin " +
-                   " d'être passée à la ligne parce que sinon " +
-                   " ça risque de devenir illisible.";
-
- -

Méthode 2

- -

On peut sinon utiliser le caractère barre oblique inversée "\" à la fin de chaque ligne pour indiquer que la chaîne continue sur la ligne suivante. Il faut bien faire attention à ce que la barre oblique soit bien le dernier caractère de la ligne avant le saut de ligne. Sinon, cela ne fonctionnera pas. Voilà comment se présente cette forme :

- -
-let chaineLongue = "Voici une très longue chaîne qui a besoin \
-d'être passée à la ligne parce que sinon \
-ça risque de devenir illisible.";
-
- -

Méthode 3

- -

Si les sauts de ligne doivent faire partie du résultat, on peut utiliser l'accent grave comme délimiteur de chaîne. Celui-ci permet d'utiliser des sauts de ligne à l'intérieur de la valeur littérale.

- -
-let chaineLongue = `Voici une très longue chaîne qui a besoin
-d'être passée à la ligne parce que sinon
-ça risque de devenir illisible.`;
-
- -

Constructeur

- -
-
String()
-
Crée un nouvel String. S'il est appelé comme une fonction plutôt que comme un constructeur, il effectue une conversion de la valeur en chaîne de caractères.
-
- -

Méthodes statiques

- -
-
String.fromCharCode(num1 [, ...[,numN]])
-
Renvoie une chaîne de caractères créée en utilisant la séquence indiquée de valeurs Unicode.
-
String.fromCodePoint(num1 [, ...[,numN]])
-
Renvoie une chaîne de caractères créée en utilisant la séquence indiquée de points de code.
-
String.raw()
-
Renvoie une chaîne de caractères créée à partir d'un gabarit de chaîne de caractères brut.
-
- -

Propriétés des instances

- -
-
String.prototype.length
-
Cette propriété indique la longueur de la chaîne de caractères. Elle est en lecture seule.
-
- -

Méthodes des instances

- -
-
String.prototype.at(index){{Experimental_Inline}}
-
Renvoie le caractère (exactement un seul codet UTF-16) à l'indice indiqué par index. Les indices négatifs sont acceptés, dans ce cas ils indiquent la position par rapport au dernier caractère.
-
String.prototype.charAt(index)
-
Renvoie le caractère (exactement un seul codet UTF-16) à l'indice indiqué par index.
-
String.prototype.charCodeAt(index)
-
Renvoie un nombre qui est la valeur du codet UTF-16 à l'indice indiqué par index.
-
String.prototype.codePointAt(pos)
-
Renvoie un entier positif qui correspond à la valeur du codet UTF-16 à la position indiquée par pos.
-
String.prototype.concat(str [,...strN ])
-
Combine le texte de deux (ou plusieurs) chaînes en une nouvelle chaîne de caractères.
-
String.prototype.includes(searchString [, position])
-
Détermine si la chaîne de caractères courante contient searchString. -
-
String.prototype.endsWith(searchString [, length])
-
Détermine si la chaîne de caractères courante se termine par searchString.
-
String.prototype.indexOf(searchValue [, fromIndex])
-
Renvoie l'indice, au sein de la chaîne courante, de la première occurrence de searchValue ou -1 si ce motif n'est pas trouvé. -
-
String.prototype.lastIndexOf(searchValue [, fromIndex]) -
-
Renvoie l'indice, au sein de la chaîne courant, de la dernière occurrence de searchValue ou -1 si ce motif n'est pas trouvé. -
-
String.prototype.localeCompare(compareString [, locales [, options]])
-
Renvoie un nombre indiquant si la chaîne courante vient avant ou après (ou est équivalente à ) compareString pour l'ordre de tri.
-
String.prototype.match(regexp) -
-
Permet de tester la correspondance d'une expression rationnelle entre regexp et la chaîne de caractères courante. -
-
String.prototype.matchAll(regexp)
-
Renvoie un itérateur contenant l'ensemble des correspondances de l'expression rationnelle regexp au sein de la chaîne de caractères courante.
-
String.prototype.normalize([form])
-
Renvoie la forme Unicode normalisée de la chaîne courante.
-
String.prototype.padEnd(targetLength [, padString])
-
Complète la chaîne courante à la fin avec une chaîne donnée afin d'obtenir une longueur cible targetLength et renvoie la chaîne ainsi construite.
-
String.prototype.padStart(targetLength [, padString])
-
Complète la chaîne courante au début avec une chaîne donnée afin d'obtenir une longueur cible targetLength et renvoie la chaîne ainsi construite.
-
String.prototype.repeat(count) -
-
Renvoie une chaîne de caractères qui est la répétition (count fois) de la chaîne de caractères courante.
-
String.prototype.replace(searchFor, replaceWith)
-
Remplace les occurrences de searchFor par replaceWith. searchFor peut être une chaîne de caractères ou une expression rationnelle et replaceWith peut être une chaîne de caractères ou une fonction.
-
String.prototype.replaceAll(searchFor, replaceWith)
-
Remplace toutes les occurrences de searchFor avec replaceWith. searchFor peut être une chaîne de caractères ou une expression rationnelle et replaceWith peut être une chaîne de caractères ou une fonction.
-
String.prototype.search(regexp)
-
Recherche une correspondance entre une expression rationnelle regexp et la chaîne de caractères courante.
-
String.prototype.slice(beginIndex[, endIndex])
-
Extrait une section de la chaîne de caractères et renvoie une nouvelle chaîne de caractères.
-
String.prototype.split([sep [, limit] ])
-
Renvoie un tableau de chaînes de caractères composé des fragments de la chaîne courante scindée à chaque occurrence de la sous-chaîne sep.
-
String.prototype.startsWith(searchString [, length])
-
Détermine si la chaîne courante commence par la chaîne de caractères indiquée en paramètre (searchString).
-
String.prototype.substring(indexStart [, indexEnd])
-
Renvoie une nouvelle chaîne de caractères contenant les caractères de la chaîne courante, situés à partir de l'indice donné ou entre les indices donnés.
-
String.prototype.toLocaleLowerCase( [locale, ...locales]) -
-
-

Renvoie une conversion en minuscules de la chaîne de caractères courante qui respecte la locale indiquée.

- -

Pour la plupart des langues, cela renverra la même valeur que toLowerCase().

-
-
String.prototype.toLocaleUpperCase( [locale, ...locales]) -
-
-

Renvoie une conversion en majuscules de la chaîne de caractères courante qui respecte la locale indiquée.

- -

Pour la plupart des langues, cela renverra la même valeur que toUpperCase().

-
-
String.prototype.toLowerCase()
-
Renvoie la valeur de la chaîne de caractères, convertie en minuscules.
-
String.prototype.toString()
-
Renvoie une chaîne de caractères représentant l'objet courant. Surcharge la méthode Object.prototype.toString().
-
String.prototype.toUpperCase()
-
Renvoie la valeur de la chaîne de caractères, convertie en majuscules.
-
String.prototype.trim()
-
Retire les blancs situés au début et à la fin de la chaîne de caractères.
-
String.prototype.trimStart()
-
Retire les blancs situés au début de la chaîne de caractères.
-
String.prototype.trimEnd()
-
Retire les blancs situés à la fin de la chaîne de caractères.
-
String.prototype.valueOf()
-
Renvoie la valeur primitive de l'objet courant. Surcharge la méthode Object.prototype.valueOf().
-
String.prototype.@@iterator()
-
Renvoie un nouvel objet itérateur qui permet d'itérer sur les points de code composant la chaîne de caractère. Chaque point de code est renvoyé comme une chaîne de caractères.
-
- -

Méthodes de conversion HTML

- -
-

Attention : Ces méthodes sont dépréciées et ne doivent plus être utilisées.

- -

Elles ont des possibilités limitées et ne concernent qu'une petite sous-partie des éléments et attributs HTML disponibles.

-
- -
-
String.prototype.anchor()
-
<a name="name"> (cible hypertexte)
-
String.prototype.big()
-
<big>
-
String.prototype.blink()
-
<blink>
-
String.prototype.bold()
-
<b>
-
String.prototype.fixed()
-
<tt>
-
String.prototype.fontcolor()
-
<font color="color">
-
String.prototype.fontsize()
-
<font size="size">
-
String.prototype.italics()
-
<i>
-
String.prototype.link()
-
<a href="url"> (lien d'une URL)
-
String.prototype.small()
-
<small>
-
String.prototype.strike()
-
<strike>
-
String.prototype.sub()
-
<sub>
-
String.prototype.sup()
-
<sup>
-
- -

Exemples

- -

Conversion en chaîne de caractères

- -

Il est possible d'utiliser String comme une alternative à toString() car cela permet de traiter les valeurs null, undefined et les symboles. Ainsi :

- -
-let chainesSortie = []
-for (let i = 0, n = valeursEntree.length; i < n; ++i) {
-  chainesSortie.push(String(valeursEntree[i]));
-}
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/index.md b/files/fr/web/javascript/reference/global_objects/string/index.md new file mode 100644 index 0000000000..11a12969ca --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/index.md @@ -0,0 +1,391 @@ +--- +title: String +slug: Web/JavaScript/Reference/Global_Objects/String +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String +original_slug: Web/JavaScript/Reference/Objets_globaux/String +browser-compat: javascript.builtins.String +--- +
{{JSRef}}
+ +

Un objet String est utilisé afin de représenter et de manipuler une chaîne de caractères.

+ +

Description

+ +

Les chaînes de caractères sont utiles pour stocker des données qui peuvent être représentées sous forme de texte. Parmi les opérations les plus utilisées pour manipuler les chaînes de caractères, on a : la vérification de leur longueur avec length, la construction et la concaténation avec les opérateurs + et +=, la recherche de sous-chaîne avec les méthodes includes() ou indexOf() ou encore l'extraction de sous-chaînes avec la méthode substring().

+ +

Créer des chaînes de caractères

+ +

Il est possible de créer des chaînes de caractères comme des valeurs primitives ou comme des objets avec le constructeur String() :

+ +
+const string1 = "Une chaîne de caractères primitive";
+const string2 = 'Là encore une valeur de chaîne de caractères primitive';
+const string3 = `Et ici aussi`;
+ +
+const string4 = new String("Un objet String");
+
+ +

Les valeurs primitives ou les objets représentant des chaînes de caractères peuvent être utilisés de façon interchangeable dans la plupart des situations. Voir ci-après Chaînes de caractères : valeurs primitives et objets.

+ +

Les valeurs littérales pour les chaînes de caractères peuvent être indiquées avec des simples quotes ('), des doubles quotes (") ou encore par des accents graves (`). Cette dernière forme permet de définir un littéral de gabarit de chaîne de caractères avec lequel on pourra interpoler des expressions dans une chaîne de caractères.

+ +

Accéder à un caractère

+ +

Il existe deux façons d'accéder à un caractère dans une chaîne. La première façon consiste à utiliser la méthode charAt() :

+ +
+return 'chat'.charAt(2); // renvoie "a"
+
+ +

La seconde méthode, introduite avec ECMAScript 5, est de manipuler la chaîne comme un tableau, où les caractères sont les éléments du tableau et ont un indice correspondant à leur position :

+ +
+return 'chat'[2]; // renvoie "a"
+
+ +

En utilisant la seconde notation, il est impossible de supprimer ou d'affecter une valeur à ces propriétés. En effet, les propriétés concernées ne sont ni accessibles en écriture ni configurables. Pour plus d'informations, voir la page de Object.defineProperty().

+ +

Comparer des chaînes de caractères

+ +

Les développeurs C utilisent la fonction strcmp() pour comparer des chaînes de caractères. En JavaScript, il est possible d'utiliser les opérateurs inférieur et supérieur :

+ +
+let a = "a";
+let b = "b";
+if (a < b) { // true
+  console.log(a + " est inférieure à " + b);
+} else if (a > b) {
+  console.log(a + " est supérieure à " + b);
+} else {
+  console.log(a + " et " + b + " sont égales.");
+}
+
+ +

On peut obtenir un résultat semblable avec la méthode localeCompare() qui permet de prendre en compte la locale utilisée et qui est héritée par toutes les instances de String.

+ +

On notera que a == b compare les chaînes de caractères a et b de façon sensible à la casse. Si on souhaite comparer des chaînes sans être sensible à la casse, on pourra utiliser une fonction semblable à :

+ +
+function isEqual(str1, str2) {
+  return str1.toUpperCase() === str2.toUpperCase()
+}
+
+ +

On utilise ici une conversion en majuscules plutôt qu'en minuscules, car cela cause certains problèmes de conversion pour certains caractères UTF-8.

+ +

Les différences entre les objets String et le type primitif pour les chaînes de caractères

+ +

En JavaScript, on distingue d'une part les objets String et d'autre par les valeurs primitives qui sont des chaînes de caractères (il en va de même pour les booléens/Boolean et les nombres/Number).

+ +

Les valeurs littérales (délimitées par des simples quotes, des doubles quotes ou des accents graves et les chaînes de caractères renvoyées par les appels à String sans le mot-clé new sont des chaînes de caractères primitives. JavaScript convertit automatiquement les valeurs primitives en objets String et il est donc possible d'utiliser les méthodes objet de String sur les chaînes de caractères primitives. Dans les contextes où une méthode est appelée sur une chaîne de caractères primitive ou alors qu'on recherche une propriété, JavaScript convertira implicitement la valeur primitive et appellera la méthode ou accèdera à la propriété correspondante.

+ +
+let s_prim = "toto";
+let s_obj = new String(s_prim);
+
+console.log(typeof s_prim); // affiche "string"
+console.log(typeof s_obj);  // affiche "object"
+
+ +

Les chaînes primitives et les objets String renvoient des résultats différents lorsqu'ils sont évalués avec eval(). Les chaînes primitives sont traitées comme du code source, tandis que les objets String sont traités comme tous les autres objets, en renvoyant l'objet. Par exemple :

+ +
+let s1 = "2 + 2";                // crée une chaîne primitive
+let s2 = new String("2 + 2");    // crée un objet String
+console.log(eval(s1));           // renvoie le nombre 4
+console.log(eval(s2));           // renvoie la chaîne "2 + 2"
+
+ +

Pour ces raisons, il peut y avoir certains problèmes quand le code attend une chaîne primitive plutôt qu'un objet String. Toutefois, cette distinction est rarement nécessaire en pratique.

+ +

Un objet String peut toujours être converti en son équivalent primitif grâce à la méthode valueOf().

+ +
+console.log(eval(s2.valueOf())); // renvoie  4
+
+ +

Échappement des caractères

+ +

En dehors des caractères classiques, des caractères spéciaux peuvent être encodés grâce à l'échappement :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeRésultat
\0Caractère nul (U+0000 NULL)
\'simple quote (U+0027 APOSTROPHE)
\"double quote (U+0022 QUOTATION MARK)
\\barre oblique inversée (U+005C REVERSE SOLIDUS)
\nnouvelle ligne (U+000A LINE FEED; LF)
\rretour chariot (U+000D CARRIAGE RETURN; CR)
\vtabulation verticale (U+000B LINE TABULATION)
\ttabulation (U+0009 CHARACTER TABULATION)
\bretour arrière (U+0008 BACKSPACE)
\fsaut de page (U+000C FORM FEED)
\uXXXX (XXXX étant 4 chiffres hexadécimaux pour l'intervalle of 0x0000 - 0xFFFF)Point de code Unicode entre U+0000 et U+FFFF (représente le plan Unicode multilingue basique)
\u{X} ... \u{XXXXXX} (X…XXXXXX étant 1 à 6 chiffres hexadécimaux pour l'intervalle 0x0 - 0x10FFFF)Point de code Unicode entre U+0000 et U+10FFFF (représente l'intégralité d'Unicode)
\xXX (XX étant 2 chiffres hexadécimaux pour l'intervalle 0x00 - 0xFF)Point de code Unicode entre U+0000 et U+00FF (correspond à Basic Latin et Latin-1 supplement ; équivalent à ISO-8859-1)
+ +

Littéraux pour les chaînes longues

+ +

Il peut arriver que le code contienne des chaînes plutôt longues. Plutôt que d'avoir des lignes qui s'étirent sur tout le fichier et dans un éditeur de code, il est possible de casser la chaîne sur plusieurs lignes sans que cela modifie le contenu de la chaîne. Il existe deux façons de faire.

+ +

Méthode 1

+ +
+let chaineLongue = "Voici une très longue chaîne qui a besoin " +
+                   " d'être passée à la ligne parce que sinon " +
+                   " ça risque de devenir illisible.";
+
+ +

Méthode 2

+ +

On peut sinon utiliser le caractère barre oblique inversée "\" à la fin de chaque ligne pour indiquer que la chaîne continue sur la ligne suivante. Il faut bien faire attention à ce que la barre oblique soit bien le dernier caractère de la ligne avant le saut de ligne. Sinon, cela ne fonctionnera pas. Voilà comment se présente cette forme :

+ +
+let chaineLongue = "Voici une très longue chaîne qui a besoin \
+d'être passée à la ligne parce que sinon \
+ça risque de devenir illisible.";
+
+ +

Méthode 3

+ +

Si les sauts de ligne doivent faire partie du résultat, on peut utiliser l'accent grave comme délimiteur de chaîne. Celui-ci permet d'utiliser des sauts de ligne à l'intérieur de la valeur littérale.

+ +
+let chaineLongue = `Voici une très longue chaîne qui a besoin
+d'être passée à la ligne parce que sinon
+ça risque de devenir illisible.`;
+
+ +

Constructeur

+ +
+
String()
+
Crée un nouvel String. S'il est appelé comme une fonction plutôt que comme un constructeur, il effectue une conversion de la valeur en chaîne de caractères.
+
+ +

Méthodes statiques

+ +
+
String.fromCharCode(num1 [, ...[,numN]])
+
Renvoie une chaîne de caractères créée en utilisant la séquence indiquée de valeurs Unicode.
+
String.fromCodePoint(num1 [, ...[,numN]])
+
Renvoie une chaîne de caractères créée en utilisant la séquence indiquée de points de code.
+
String.raw()
+
Renvoie une chaîne de caractères créée à partir d'un gabarit de chaîne de caractères brut.
+
+ +

Propriétés des instances

+ +
+
String.prototype.length
+
Cette propriété indique la longueur de la chaîne de caractères. Elle est en lecture seule.
+
+ +

Méthodes des instances

+ +
+
String.prototype.at(index){{Experimental_Inline}}
+
Renvoie le caractère (exactement un seul codet UTF-16) à l'indice indiqué par index. Les indices négatifs sont acceptés, dans ce cas ils indiquent la position par rapport au dernier caractère.
+
String.prototype.charAt(index)
+
Renvoie le caractère (exactement un seul codet UTF-16) à l'indice indiqué par index.
+
String.prototype.charCodeAt(index)
+
Renvoie un nombre qui est la valeur du codet UTF-16 à l'indice indiqué par index.
+
String.prototype.codePointAt(pos)
+
Renvoie un entier positif qui correspond à la valeur du codet UTF-16 à la position indiquée par pos.
+
String.prototype.concat(str [,...strN ])
+
Combine le texte de deux (ou plusieurs) chaînes en une nouvelle chaîne de caractères.
+
String.prototype.includes(searchString [, position])
+
Détermine si la chaîne de caractères courante contient searchString. +
+
String.prototype.endsWith(searchString [, length])
+
Détermine si la chaîne de caractères courante se termine par searchString.
+
String.prototype.indexOf(searchValue [, fromIndex])
+
Renvoie l'indice, au sein de la chaîne courante, de la première occurrence de searchValue ou -1 si ce motif n'est pas trouvé. +
+
String.prototype.lastIndexOf(searchValue [, fromIndex]) +
+
Renvoie l'indice, au sein de la chaîne courant, de la dernière occurrence de searchValue ou -1 si ce motif n'est pas trouvé. +
+
String.prototype.localeCompare(compareString [, locales [, options]])
+
Renvoie un nombre indiquant si la chaîne courante vient avant ou après (ou est équivalente à ) compareString pour l'ordre de tri.
+
String.prototype.match(regexp) +
+
Permet de tester la correspondance d'une expression rationnelle entre regexp et la chaîne de caractères courante. +
+
String.prototype.matchAll(regexp)
+
Renvoie un itérateur contenant l'ensemble des correspondances de l'expression rationnelle regexp au sein de la chaîne de caractères courante.
+
String.prototype.normalize([form])
+
Renvoie la forme Unicode normalisée de la chaîne courante.
+
String.prototype.padEnd(targetLength [, padString])
+
Complète la chaîne courante à la fin avec une chaîne donnée afin d'obtenir une longueur cible targetLength et renvoie la chaîne ainsi construite.
+
String.prototype.padStart(targetLength [, padString])
+
Complète la chaîne courante au début avec une chaîne donnée afin d'obtenir une longueur cible targetLength et renvoie la chaîne ainsi construite.
+
String.prototype.repeat(count) +
+
Renvoie une chaîne de caractères qui est la répétition (count fois) de la chaîne de caractères courante.
+
String.prototype.replace(searchFor, replaceWith)
+
Remplace les occurrences de searchFor par replaceWith. searchFor peut être une chaîne de caractères ou une expression rationnelle et replaceWith peut être une chaîne de caractères ou une fonction.
+
String.prototype.replaceAll(searchFor, replaceWith)
+
Remplace toutes les occurrences de searchFor avec replaceWith. searchFor peut être une chaîne de caractères ou une expression rationnelle et replaceWith peut être une chaîne de caractères ou une fonction.
+
String.prototype.search(regexp)
+
Recherche une correspondance entre une expression rationnelle regexp et la chaîne de caractères courante.
+
String.prototype.slice(beginIndex[, endIndex])
+
Extrait une section de la chaîne de caractères et renvoie une nouvelle chaîne de caractères.
+
String.prototype.split([sep [, limit] ])
+
Renvoie un tableau de chaînes de caractères composé des fragments de la chaîne courante scindée à chaque occurrence de la sous-chaîne sep.
+
String.prototype.startsWith(searchString [, length])
+
Détermine si la chaîne courante commence par la chaîne de caractères indiquée en paramètre (searchString).
+
String.prototype.substring(indexStart [, indexEnd])
+
Renvoie une nouvelle chaîne de caractères contenant les caractères de la chaîne courante, situés à partir de l'indice donné ou entre les indices donnés.
+
String.prototype.toLocaleLowerCase( [locale, ...locales]) +
+
+

Renvoie une conversion en minuscules de la chaîne de caractères courante qui respecte la locale indiquée.

+ +

Pour la plupart des langues, cela renverra la même valeur que toLowerCase().

+
+
String.prototype.toLocaleUpperCase( [locale, ...locales]) +
+
+

Renvoie une conversion en majuscules de la chaîne de caractères courante qui respecte la locale indiquée.

+ +

Pour la plupart des langues, cela renverra la même valeur que toUpperCase().

+
+
String.prototype.toLowerCase()
+
Renvoie la valeur de la chaîne de caractères, convertie en minuscules.
+
String.prototype.toString()
+
Renvoie une chaîne de caractères représentant l'objet courant. Surcharge la méthode Object.prototype.toString().
+
String.prototype.toUpperCase()
+
Renvoie la valeur de la chaîne de caractères, convertie en majuscules.
+
String.prototype.trim()
+
Retire les blancs situés au début et à la fin de la chaîne de caractères.
+
String.prototype.trimStart()
+
Retire les blancs situés au début de la chaîne de caractères.
+
String.prototype.trimEnd()
+
Retire les blancs situés à la fin de la chaîne de caractères.
+
String.prototype.valueOf()
+
Renvoie la valeur primitive de l'objet courant. Surcharge la méthode Object.prototype.valueOf().
+
String.prototype.@@iterator()
+
Renvoie un nouvel objet itérateur qui permet d'itérer sur les points de code composant la chaîne de caractère. Chaque point de code est renvoyé comme une chaîne de caractères.
+
+ +

Méthodes de conversion HTML

+ +
+

Attention : Ces méthodes sont dépréciées et ne doivent plus être utilisées.

+ +

Elles ont des possibilités limitées et ne concernent qu'une petite sous-partie des éléments et attributs HTML disponibles.

+
+ +
+
String.prototype.anchor()
+
<a name="name"> (cible hypertexte)
+
String.prototype.big()
+
<big>
+
String.prototype.blink()
+
<blink>
+
String.prototype.bold()
+
<b>
+
String.prototype.fixed()
+
<tt>
+
String.prototype.fontcolor()
+
<font color="color">
+
String.prototype.fontsize()
+
<font size="size">
+
String.prototype.italics()
+
<i>
+
String.prototype.link()
+
<a href="url"> (lien d'une URL)
+
String.prototype.small()
+
<small>
+
String.prototype.strike()
+
<strike>
+
String.prototype.sub()
+
<sub>
+
String.prototype.sup()
+
<sup>
+
+ +

Exemples

+ +

Conversion en chaîne de caractères

+ +

Il est possible d'utiliser String comme une alternative à toString() car cela permet de traiter les valeurs null, undefined et les symboles. Ainsi :

+ +
+let chainesSortie = []
+for (let i = 0, n = valeursEntree.length; i < n; ++i) {
+  chainesSortie.push(String(valeursEntree[i]));
+}
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/indexof/index.html b/files/fr/web/javascript/reference/global_objects/string/indexof/index.html deleted file mode 100644 index 69a0303542..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/indexof/index.html +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: String.prototype.indexOf() -slug: Web/JavaScript/Reference/Global_Objects/String/indexOf -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/indexOf -original_slug: Web/JavaScript/Reference/Objets_globaux/String/indexOf ---- -
{{JSRef}}
- -

La méthode indexOf() renvoie l'indice de la première occurence de la valeur cherchée au sein de la chaîne courante (à partir de indexDébut). Elle renvoie -1 si la valeur cherchée n'est pas trouvée.

- -
{{EmbedInteractiveExample("pages/js/string-indexof.html")}}
- - - -
-

Note : Pour la méthode associée aux tableaux, voir la page {{jsxref("Array.prototype.indexOf()")}}.

-
- -

Syntaxe

- -
str.indexOf(valeurRecherchée)
-str.indexOf(valeurRecherchée, indexDébut)
-
- -

Paramètres

- -
-
valeurRecherchée
-
Une chaîne représentant la valeur qu'on cherche dans la chaîne courante. Si aucune valeur n'est fournie explicitement, valeurRecherchée sera convertie en "undefined" et c'est cette chaîne qui sera recherchée.
-
indexDébut
-
Paramètre optionnel. L'indice à partir duquel commencer la recherche, effectuée du début vers la fin de la liste. Cela peut être n'importe quel entier. La valeur par défaut est 0. Si indexDébut < 0 la chaîne sera parcourue en entier (ce qui équivaut à utiliser 0). Si indexDébut >= str.length, la méthode renverra -1 sauf si valeurRecherchée est la chaîne vide, auquel cas, la méthode renverra str.length.
-
- -

Valeur de retour

- -

L'indice de la première occurrence de la valeur indiquée, -1 si elle n'est pas trouvée. Si la valeur recherchée est la chaîne vide, une correspondance sera trouvée à n'importe quel index entre 0 et str.length.

- -

Description

- -

Les caractères dans une chaîne de caractères sont indexés de la gauche à la droite. L'indice du premier caractère est 0, celui du dernier caractère (d'une chaîne str) est str.length - 1.

- -
"Blue Whale".indexOf("Blue");     // retourne  0
-"Blue Whale".indexOf("Blute");    // retourne -1
-"Blue Whale".indexOf("Whale", 0); // retourne  5
-"Blue Whale".indexOf("Whale", 5); // retourne  5
-"Blue Whale".indexOf("");         // retourne  0
-"Blue Whale".indexOf("", 9);      // retourne  9
-"Blue Whale".indexOf("", 10);     // retourne 10
-"Blue Whale".indexOf("", 11);     // retourne 10
- -

Sensibilité à la casse

- -

La méthode indexOf() est sensible à la casse. Par exemple, l'expression suivante retourne -1 :

- -
"Blue Whale".indexOf("blue") // retourne -1
-
- -

Attention : 0 n'est pas une valeur qui peut être évaluée à true et -1 n'est pas une valeur qui peut être évaluée à false. Ainsi, si on souhaite tester si une chaîne de caractères existe au sein d'une autre chaîne de caractères, on procèdera de cette façon (ou on utilisera {{jsxref("String.prototype.includes()")}}

- -
"Blue Whale".indexOf("Blue") != -1; // true
-"Blue Whale".indexOf("Bloe") != -1; // false
- -

Exemples

- -

Utiliser indexOf() et lastIndexOf()

- -

L'exemple suivant utilise indexOf() et lastIndexOf() pour localiser différentes valeurs dans la chaîne de caractères "Brave new world".

- -
const uneChaîne = "Brave new world"
-
-console.log("Indice du premier w " + uneChaîne.indexOf("w"));
-// Affiche 8
-console.log("Indice du dernier w " + uneChaîne.lastIndexOf("w"));
-// Affiche 10
-
-console.log("Indice du premier 'new' " + uneChaîne.indexOf("new"));
-// Affiche 6
-console.log("Indice du dernier 'new' " + uneChaîne.lastIndexOf("new"));
-// Affiche 6
-
- -

indexOf() et la sensibilité à la casse

- -

L'exemple suivant définit 2 chaînes de caractères. Ces variables contiennent la meme chaîne de caractères sauf que la seconde chaîne de caractères contient des lettres majuscules. La première méthode writeln affiche 19. Cependant, comme la méthode indexOf est sensible à la casse, la chaîne de caractères "cheddar" n'est pas trouvée dans myCapString, donc le second résultat affiche -1.

- -
const maChaîne = "brie, reblochon, cheddar";
-const maChaîneMajuscules = "Brie, Reblochon, Cheddar";
-
-console.log('maChaîne.indexOf("cheddar") is '+ maChaîne.indexOf("cheddar"));
-// Affiche 19
-console.log('maChaîneMajuscules.indexOf("cheddar") is ' + maChaîneMajuscules.indexOf("cheddar"));
-// Affiche -1
- -

Utiliser indexOf() pour compter le nombre d'occurences dans une chaîne de caractères

- -

L'exemple suivant utilise la variable count pour stocker le nombre d'occurences de la lettre x dans la chaîne de caractère str :

- -
const str = "Chaîne x de test x";
-let count = 0;
-let pos = str.indexOf("x");
-
-while ( pos != -1 ) {
-   count++;
-   pos = str.indexOf( "x",pos + 1 );
-}
-console.log(count); // Affiche 2
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.5.4.7', 'String.prototype.indexOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.indexOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/indexof/index.md b/files/fr/web/javascript/reference/global_objects/string/indexof/index.md new file mode 100644 index 0000000000..69a0303542 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/indexof/index.md @@ -0,0 +1,160 @@ +--- +title: String.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/String/indexOf +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/indexOf +original_slug: Web/JavaScript/Reference/Objets_globaux/String/indexOf +--- +
{{JSRef}}
+ +

La méthode indexOf() renvoie l'indice de la première occurence de la valeur cherchée au sein de la chaîne courante (à partir de indexDébut). Elle renvoie -1 si la valeur cherchée n'est pas trouvée.

+ +
{{EmbedInteractiveExample("pages/js/string-indexof.html")}}
+ + + +
+

Note : Pour la méthode associée aux tableaux, voir la page {{jsxref("Array.prototype.indexOf()")}}.

+
+ +

Syntaxe

+ +
str.indexOf(valeurRecherchée)
+str.indexOf(valeurRecherchée, indexDébut)
+
+ +

Paramètres

+ +
+
valeurRecherchée
+
Une chaîne représentant la valeur qu'on cherche dans la chaîne courante. Si aucune valeur n'est fournie explicitement, valeurRecherchée sera convertie en "undefined" et c'est cette chaîne qui sera recherchée.
+
indexDébut
+
Paramètre optionnel. L'indice à partir duquel commencer la recherche, effectuée du début vers la fin de la liste. Cela peut être n'importe quel entier. La valeur par défaut est 0. Si indexDébut < 0 la chaîne sera parcourue en entier (ce qui équivaut à utiliser 0). Si indexDébut >= str.length, la méthode renverra -1 sauf si valeurRecherchée est la chaîne vide, auquel cas, la méthode renverra str.length.
+
+ +

Valeur de retour

+ +

L'indice de la première occurrence de la valeur indiquée, -1 si elle n'est pas trouvée. Si la valeur recherchée est la chaîne vide, une correspondance sera trouvée à n'importe quel index entre 0 et str.length.

+ +

Description

+ +

Les caractères dans une chaîne de caractères sont indexés de la gauche à la droite. L'indice du premier caractère est 0, celui du dernier caractère (d'une chaîne str) est str.length - 1.

+ +
"Blue Whale".indexOf("Blue");     // retourne  0
+"Blue Whale".indexOf("Blute");    // retourne -1
+"Blue Whale".indexOf("Whale", 0); // retourne  5
+"Blue Whale".indexOf("Whale", 5); // retourne  5
+"Blue Whale".indexOf("");         // retourne  0
+"Blue Whale".indexOf("", 9);      // retourne  9
+"Blue Whale".indexOf("", 10);     // retourne 10
+"Blue Whale".indexOf("", 11);     // retourne 10
+ +

Sensibilité à la casse

+ +

La méthode indexOf() est sensible à la casse. Par exemple, l'expression suivante retourne -1 :

+ +
"Blue Whale".indexOf("blue") // retourne -1
+
+ +

Attention : 0 n'est pas une valeur qui peut être évaluée à true et -1 n'est pas une valeur qui peut être évaluée à false. Ainsi, si on souhaite tester si une chaîne de caractères existe au sein d'une autre chaîne de caractères, on procèdera de cette façon (ou on utilisera {{jsxref("String.prototype.includes()")}}

+ +
"Blue Whale".indexOf("Blue") != -1; // true
+"Blue Whale".indexOf("Bloe") != -1; // false
+ +

Exemples

+ +

Utiliser indexOf() et lastIndexOf()

+ +

L'exemple suivant utilise indexOf() et lastIndexOf() pour localiser différentes valeurs dans la chaîne de caractères "Brave new world".

+ +
const uneChaîne = "Brave new world"
+
+console.log("Indice du premier w " + uneChaîne.indexOf("w"));
+// Affiche 8
+console.log("Indice du dernier w " + uneChaîne.lastIndexOf("w"));
+// Affiche 10
+
+console.log("Indice du premier 'new' " + uneChaîne.indexOf("new"));
+// Affiche 6
+console.log("Indice du dernier 'new' " + uneChaîne.lastIndexOf("new"));
+// Affiche 6
+
+ +

indexOf() et la sensibilité à la casse

+ +

L'exemple suivant définit 2 chaînes de caractères. Ces variables contiennent la meme chaîne de caractères sauf que la seconde chaîne de caractères contient des lettres majuscules. La première méthode writeln affiche 19. Cependant, comme la méthode indexOf est sensible à la casse, la chaîne de caractères "cheddar" n'est pas trouvée dans myCapString, donc le second résultat affiche -1.

+ +
const maChaîne = "brie, reblochon, cheddar";
+const maChaîneMajuscules = "Brie, Reblochon, Cheddar";
+
+console.log('maChaîne.indexOf("cheddar") is '+ maChaîne.indexOf("cheddar"));
+// Affiche 19
+console.log('maChaîneMajuscules.indexOf("cheddar") is ' + maChaîneMajuscules.indexOf("cheddar"));
+// Affiche -1
+ +

Utiliser indexOf() pour compter le nombre d'occurences dans une chaîne de caractères

+ +

L'exemple suivant utilise la variable count pour stocker le nombre d'occurences de la lettre x dans la chaîne de caractère str :

+ +
const str = "Chaîne x de test x";
+let count = 0;
+let pos = str.indexOf("x");
+
+while ( pos != -1 ) {
+   count++;
+   pos = str.indexOf( "x",pos + 1 );
+}
+console.log(count); // Affiche 2
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.5.4.7', 'String.prototype.indexOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.indexOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/italics/index.html b/files/fr/web/javascript/reference/global_objects/string/italics/index.html deleted file mode 100644 index 06525ca226..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/italics/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: String.prototype.italics() -slug: Web/JavaScript/Reference/Global_Objects/String/italics -tags: - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/italics -original_slug: Web/JavaScript/Reference/Objets_globaux/String/italics ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode italics() permet de créer un élément HTML {{HTMLElement("i")}} qui permet de représenter la chaîne courante en italique.

- -

Syntaxe

- -
str.italics()
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("i")}}.

- -

Description

- -

La méthode italics encadre la chaîne de caractères dans une balise <i> :
- "<i>str</i>"

- -

Exemples

- -

Les méthodes des chaînes de caractères peuvent être utilisées pour changer le formatage d'une chaîne de caractères :

- -
var worldString = "Coucou monde";
-
-console.log(worldString.blink());
-console.log(worldString.bold());
-console.log(worldString.italics());
-console.log(worldString.strike());
-
- -

Cet exemple permet de produire le fragment HTML suivant dans la console :

- -
<blink>Coucou monde</blink>
-<b>Coucou monde</b>
-<i>Coucou monde</i>
-<strike>Coucou monde</strike>
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.italics', 'String.prototype.italics')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.italics', 'String.prototype.italics')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.italics")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/italics/index.md b/files/fr/web/javascript/reference/global_objects/string/italics/index.md new file mode 100644 index 0000000000..06525ca226 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/italics/index.md @@ -0,0 +1,82 @@ +--- +title: String.prototype.italics() +slug: Web/JavaScript/Reference/Global_Objects/String/italics +tags: + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/italics +original_slug: Web/JavaScript/Reference/Objets_globaux/String/italics +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode italics() permet de créer un élément HTML {{HTMLElement("i")}} qui permet de représenter la chaîne courante en italique.

+ +

Syntaxe

+ +
str.italics()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("i")}}.

+ +

Description

+ +

La méthode italics encadre la chaîne de caractères dans une balise <i> :
+ "<i>str</i>"

+ +

Exemples

+ +

Les méthodes des chaînes de caractères peuvent être utilisées pour changer le formatage d'une chaîne de caractères :

+ +
var worldString = "Coucou monde";
+
+console.log(worldString.blink());
+console.log(worldString.bold());
+console.log(worldString.italics());
+console.log(worldString.strike());
+
+ +

Cet exemple permet de produire le fragment HTML suivant dans la console :

+ +
<blink>Coucou monde</blink>
+<b>Coucou monde</b>
+<i>Coucou monde</i>
+<strike>Coucou monde</strike>
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.italics', 'String.prototype.italics')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.italics', 'String.prototype.italics')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.italics")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/lastindexof/index.html b/files/fr/web/javascript/reference/global_objects/string/lastindexof/index.html deleted file mode 100644 index fc5c35bb08..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/lastindexof/index.html +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: String.prototype.lastIndexOf() -slug: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf -original_slug: Web/JavaScript/Reference/Objets_globaux/String/lastIndexOf ---- -
{{JSRef}}
- -

La méthode lastIndexOf() renvoie l'indice, dans la chaîne courante, de la dernière occurence de la valeur donnée en argument. Si cette sous-chaîne n'est pas trouvée, la méthode renvoie -1. La recherche s'effectue de la fin vers le début de la chaîne, à partir de indiceDébut.

- -
{{EmbedInteractiveExample("pages/js/string-lastindexof.html")}}
- -

Syntaxe

- -
str.lastIndexOf(valeurRecherchée[, indiceDébut])
- -

Paramètres

- -
-
valeurRecherchée
-
Une chaîne qu'on recherche dans la chaîne courante. Si ce paramètre n'est pas défini et que indiceDébut est utilisé, c'est ce dernier qui sera renvoyé par la fonction.
-
indiceDébut {{optional_inline}}
-
Paramètre optionnel. L'emplacement, dans la chaîne courante, à partir duquel effectuer la recherche (en partant de la fin de la chaîne et en remontant vers le début). Cela peut être n'importe quel entier. La valeur par défaut est +Infinity. Si indiceDébut > str.length, toute la chaîne sera parcourue. Si indiceDébut < 0,  on aura le même comportement que si indiceDébut valait 0.
-
- -

Valeur de retour

- -

L'indice de la dernière occurrence de la valeur indiquée, -1 si elle n'est pas trouvée.

- -

Description

- -

Les caractères d'une chaîne de caractères sont indexés de gauche à droite. L'indice du premier caractère vaut 0 et l'indice du dernier caractère vaut maChaîne.length - 1.

- -
'canal'.lastIndexOf('a');     // renvoie 3
-'canal'.lastIndexOf('a', 2);  // renvoie 1
-'canal'.lastIndexOf('a', 0);  // renvoie -1
-'canal'.lastIndexOf('x');     // renvoie -1
-'canal'.lastIndexOf('c', -5); // renvoie 0
-'canal'.lastIndexOf('c', 0);  // renvoie 0
-'canal'.lastIndexOf('');      // renvoie 5
-'canal'.lastIndexOf('', 2);   // renvoie 2
-
- -
-

Note : 'abab'.lastIndexOf('ab', 2) renvoie 2 et pas 0 car l'argument indiceDébut ne limite que le début de la correspondance recherchée ( qui est 'ab')

-
- -

Sensibilité à la casse

- -

La méthode lastIndexOf() est sensible à la casse (une lettre en minuscule (i) est différente d'une lettre en majuscule (I)). Ainsi, le résultat de l'expression suivante sera -1 :

- -
'Blue Whale, Killer Whale'.lastIndexOf('blue'); // renvoie -1
-
- -

Exemples

- -

Dans l'exemple suivant, on utilise {{jsxref("String.prototype.indexOf()", "indexOf()")}} et lastIndexOf() pour situer certaines valeurs dans la chaîne "Brave new world".

- -
var maChaîne = 'Brave new world';
-
-console.log('Indice du premier w ' + maChaîne.indexOf('w'));
-// Affiche 8
-console.log('Indice du dernier w ' + maChaîne.lastIndexOf('w'));
-// Affiche 10
-
-console.log('Indice du premier "new" ' + maChaîne.indexOf('new'));
-// Affiche 6
-console.log('Indice du dernier "new" ' + maChaîne.lastIndexOf('new'));
-// Affiche 6
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.5.4.8', 'String.prototype.lastIndexOf')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.lastindexof', 'String.prototype.lastIndexOf')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.lastindexof', 'String.prototype.lastIndexOf')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.lastIndexOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/lastindexof/index.md b/files/fr/web/javascript/reference/global_objects/string/lastindexof/index.md new file mode 100644 index 0000000000..fc5c35bb08 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/lastindexof/index.md @@ -0,0 +1,122 @@ +--- +title: String.prototype.lastIndexOf() +slug: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf +original_slug: Web/JavaScript/Reference/Objets_globaux/String/lastIndexOf +--- +
{{JSRef}}
+ +

La méthode lastIndexOf() renvoie l'indice, dans la chaîne courante, de la dernière occurence de la valeur donnée en argument. Si cette sous-chaîne n'est pas trouvée, la méthode renvoie -1. La recherche s'effectue de la fin vers le début de la chaîne, à partir de indiceDébut.

+ +
{{EmbedInteractiveExample("pages/js/string-lastindexof.html")}}
+ +

Syntaxe

+ +
str.lastIndexOf(valeurRecherchée[, indiceDébut])
+ +

Paramètres

+ +
+
valeurRecherchée
+
Une chaîne qu'on recherche dans la chaîne courante. Si ce paramètre n'est pas défini et que indiceDébut est utilisé, c'est ce dernier qui sera renvoyé par la fonction.
+
indiceDébut {{optional_inline}}
+
Paramètre optionnel. L'emplacement, dans la chaîne courante, à partir duquel effectuer la recherche (en partant de la fin de la chaîne et en remontant vers le début). Cela peut être n'importe quel entier. La valeur par défaut est +Infinity. Si indiceDébut > str.length, toute la chaîne sera parcourue. Si indiceDébut < 0,  on aura le même comportement que si indiceDébut valait 0.
+
+ +

Valeur de retour

+ +

L'indice de la dernière occurrence de la valeur indiquée, -1 si elle n'est pas trouvée.

+ +

Description

+ +

Les caractères d'une chaîne de caractères sont indexés de gauche à droite. L'indice du premier caractère vaut 0 et l'indice du dernier caractère vaut maChaîne.length - 1.

+ +
'canal'.lastIndexOf('a');     // renvoie 3
+'canal'.lastIndexOf('a', 2);  // renvoie 1
+'canal'.lastIndexOf('a', 0);  // renvoie -1
+'canal'.lastIndexOf('x');     // renvoie -1
+'canal'.lastIndexOf('c', -5); // renvoie 0
+'canal'.lastIndexOf('c', 0);  // renvoie 0
+'canal'.lastIndexOf('');      // renvoie 5
+'canal'.lastIndexOf('', 2);   // renvoie 2
+
+ +
+

Note : 'abab'.lastIndexOf('ab', 2) renvoie 2 et pas 0 car l'argument indiceDébut ne limite que le début de la correspondance recherchée ( qui est 'ab')

+
+ +

Sensibilité à la casse

+ +

La méthode lastIndexOf() est sensible à la casse (une lettre en minuscule (i) est différente d'une lettre en majuscule (I)). Ainsi, le résultat de l'expression suivante sera -1 :

+ +
'Blue Whale, Killer Whale'.lastIndexOf('blue'); // renvoie -1
+
+ +

Exemples

+ +

Dans l'exemple suivant, on utilise {{jsxref("String.prototype.indexOf()", "indexOf()")}} et lastIndexOf() pour situer certaines valeurs dans la chaîne "Brave new world".

+ +
var maChaîne = 'Brave new world';
+
+console.log('Indice du premier w ' + maChaîne.indexOf('w'));
+// Affiche 8
+console.log('Indice du dernier w ' + maChaîne.lastIndexOf('w'));
+// Affiche 10
+
+console.log('Indice du premier "new" ' + maChaîne.indexOf('new'));
+// Affiche 6
+console.log('Indice du dernier "new" ' + maChaîne.lastIndexOf('new'));
+// Affiche 6
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.5.4.8', 'String.prototype.lastIndexOf')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.lastindexof', 'String.prototype.lastIndexOf')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.lastindexof', 'String.prototype.lastIndexOf')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.lastIndexOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/length/index.html b/files/fr/web/javascript/reference/global_objects/string/length/index.html deleted file mode 100644 index d3f3f49913..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/length/index.html +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: String.length -slug: Web/JavaScript/Reference/Global_Objects/String/length -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/length -original_slug: Web/JavaScript/Reference/Objets_globaux/String/length ---- -
{{JSRef}}
- -

La propriété length représente la longueur d'une chaine de caractères, exprimée en nombre de points de code UTF-16. C'est une propriété accessible en lecture seule.

- -
{{EmbedInteractiveExample("pages/js/string-length.html")}}
- -

Syntaxe

- -
str.length
- -

Description

- -

Cette propriété renvoie le nombre de « codets » (ou unités de code ou bien code units en anglais) d'une chaîne de caractères. {{interwiki("wikipedia", "UTF-16")}}. Le format utilisé pour représenter les chaînes de caractères en JavaScript utilise un seul codet sur 16 bits pour représenter la plupart des caractères communs. En revanche, pour représenter les caractères plus rares, deux codets seront utilisés : la valeur renvoyée par length ne correspondra alors pas au nombre de caractères dans la chaîne.

- -

ECMAScript 2016 (la septième édition) établit une longueur maximale de 2^53 - 1 éléments. Auparavant, aucune longueur maximale n'était spécifiée. Pour Firefox, les chaînes ont une longueur maximale de 2^30-2 caractères (environ 1 Go). Pour les versions de Firefox antérieures à Firefox 65, la taille maximale était de de 2^28-1 (environ 256 Mo).

- -

Pour une chaine vide, on aura length égal à 0.

- -

La propriété statique String.length renvoie la valeur 1.

- -

Exemples

- -

Utiliser String.length

- -
const x = "Mozilla";
-const vide = "";
-
-console.log(x + " mesure " + x.length + " codets");
-/* "Mozilla mesure 7 codets" */
-
-console.log("La chaîne vide a une longueur de " + vide.length);
-/* "La chaîne vide a une longueur de 0" */
- -

Affecter une valeur à length

- -
const maChaine = "Sloubi";
-// Lorsqu'on tente d'affecter une valeur à la propriété length
-// rien d'observable ne se produit
-
-maChaine.length = 3;
-console.log(maChaine); /* Sloubi */
-console.log(maChaine.length); // 6
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
- Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.5.1', 'String.prototype.length')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-properties-of-string-instances-length', 'String.prototype.length')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-properties-of-string-instances-length', 'String.prototype.length')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.length")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/length/index.md b/files/fr/web/javascript/reference/global_objects/string/length/index.md new file mode 100644 index 0000000000..d3f3f49913 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/length/index.md @@ -0,0 +1,98 @@ +--- +title: String.length +slug: Web/JavaScript/Reference/Global_Objects/String/length +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/length +original_slug: Web/JavaScript/Reference/Objets_globaux/String/length +--- +
{{JSRef}}
+ +

La propriété length représente la longueur d'une chaine de caractères, exprimée en nombre de points de code UTF-16. C'est une propriété accessible en lecture seule.

+ +
{{EmbedInteractiveExample("pages/js/string-length.html")}}
+ +

Syntaxe

+ +
str.length
+ +

Description

+ +

Cette propriété renvoie le nombre de « codets » (ou unités de code ou bien code units en anglais) d'une chaîne de caractères. {{interwiki("wikipedia", "UTF-16")}}. Le format utilisé pour représenter les chaînes de caractères en JavaScript utilise un seul codet sur 16 bits pour représenter la plupart des caractères communs. En revanche, pour représenter les caractères plus rares, deux codets seront utilisés : la valeur renvoyée par length ne correspondra alors pas au nombre de caractères dans la chaîne.

+ +

ECMAScript 2016 (la septième édition) établit une longueur maximale de 2^53 - 1 éléments. Auparavant, aucune longueur maximale n'était spécifiée. Pour Firefox, les chaînes ont une longueur maximale de 2^30-2 caractères (environ 1 Go). Pour les versions de Firefox antérieures à Firefox 65, la taille maximale était de de 2^28-1 (environ 256 Mo).

+ +

Pour une chaine vide, on aura length égal à 0.

+ +

La propriété statique String.length renvoie la valeur 1.

+ +

Exemples

+ +

Utiliser String.length

+ +
const x = "Mozilla";
+const vide = "";
+
+console.log(x + " mesure " + x.length + " codets");
+/* "Mozilla mesure 7 codets" */
+
+console.log("La chaîne vide a une longueur de " + vide.length);
+/* "La chaîne vide a une longueur de 0" */
+ +

Affecter une valeur à length

+ +
const maChaine = "Sloubi";
+// Lorsqu'on tente d'affecter une valeur à la propriété length
+// rien d'observable ne se produit
+
+maChaine.length = 3;
+console.log(maChaine); /* Sloubi */
+console.log(maChaine.length); // 6
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
+ Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.5.1', 'String.prototype.length')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-properties-of-string-instances-length', 'String.prototype.length')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-properties-of-string-instances-length', 'String.prototype.length')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.length")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/link/index.html b/files/fr/web/javascript/reference/global_objects/string/link/index.html deleted file mode 100644 index f942d61c5a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/link/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: String.prototype.link() -slug: Web/JavaScript/Reference/Global_Objects/String/link -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/link -original_slug: Web/JavaScript/Reference/Objets_globaux/String/link ---- -
{{JSRef}}
- -

La méthode link() permet de créer une chaîne de caractères représentant un élément HTML {{HTMLElement("a")}}, ce qui permet d'afficher la chaîne de caractères comme un lien hypertexte vers une URL donnée.

- -

Syntaxe

- -
str.link(url)
- -

Paramètres

- -
-
url
-
Toute chaîne de caractères pouvant être utilisée comme valeur pour l'attribut href de la balise a. Cette chaîne doit être une URL valide (relative ou absolue) dont les caractères & sont échappés en &amp;, et dont les doubles quotes (") doivent être échappées avec l'entité &quot;.
-
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("a")}}.

- -

Description

- -

La méthode link permet de créer un fragment HTML avec un lien hypertexte. Le chaîne renvoyée par la méthode peut ensuite être ajoutée au document grâce aux méthodes {{domxref("document.write()")}} ou {{domxref("element.innerHTML")}}.

- -

Les liens créés avec la méthode link deviennent des éléments du tableau links, membre de l'objet document. Voir {{ Domxref("document.links") }}.

- -

Exemples

- -

L'exemple qui suit affiche le texte "MDN" avec un hyperlien qui envoie l'utilisateur vers le site du Mozilla Developer Network.

- -
var texteAffiché = "MDN";
-var URL = "https://developer.mozilla.org/";
-
-console.log("Cliquer ici pour revenir sur " + texteAffiché.link(URL));
-// Cliquer ici pour revenir sur <a href="https://developer.mozilla.org/">MDN</a>
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.link', 'String.prototype.link')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'Annexe B (normative) pour les fonctionnalités ECMAScript additionnelles concernant les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.link', 'String.prototype.link')}}{{Spec2('ESDraft')}}Définie dans l'Annexe B (normative) pour les fonctionnalités ECMAScript additionnelles concernant les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.link")}}

- -

Notes relatives à Gecko

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/link/index.md b/files/fr/web/javascript/reference/global_objects/string/link/index.md new file mode 100644 index 0000000000..f942d61c5a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/link/index.md @@ -0,0 +1,84 @@ +--- +title: String.prototype.link() +slug: Web/JavaScript/Reference/Global_Objects/String/link +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/link +original_slug: Web/JavaScript/Reference/Objets_globaux/String/link +--- +
{{JSRef}}
+ +

La méthode link() permet de créer une chaîne de caractères représentant un élément HTML {{HTMLElement("a")}}, ce qui permet d'afficher la chaîne de caractères comme un lien hypertexte vers une URL donnée.

+ +

Syntaxe

+ +
str.link(url)
+ +

Paramètres

+ +
+
url
+
Toute chaîne de caractères pouvant être utilisée comme valeur pour l'attribut href de la balise a. Cette chaîne doit être une URL valide (relative ou absolue) dont les caractères & sont échappés en &amp;, et dont les doubles quotes (") doivent être échappées avec l'entité &quot;.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("a")}}.

+ +

Description

+ +

La méthode link permet de créer un fragment HTML avec un lien hypertexte. Le chaîne renvoyée par la méthode peut ensuite être ajoutée au document grâce aux méthodes {{domxref("document.write()")}} ou {{domxref("element.innerHTML")}}.

+ +

Les liens créés avec la méthode link deviennent des éléments du tableau links, membre de l'objet document. Voir {{ Domxref("document.links") }}.

+ +

Exemples

+ +

L'exemple qui suit affiche le texte "MDN" avec un hyperlien qui envoie l'utilisateur vers le site du Mozilla Developer Network.

+ +
var texteAffiché = "MDN";
+var URL = "https://developer.mozilla.org/";
+
+console.log("Cliquer ici pour revenir sur " + texteAffiché.link(URL));
+// Cliquer ici pour revenir sur <a href="https://developer.mozilla.org/">MDN</a>
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.link', 'String.prototype.link')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'Annexe B (normative) pour les fonctionnalités ECMAScript additionnelles concernant les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.link', 'String.prototype.link')}}{{Spec2('ESDraft')}}Définie dans l'Annexe B (normative) pour les fonctionnalités ECMAScript additionnelles concernant les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.link")}}

+ +

Notes relatives à Gecko

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/localecompare/index.html b/files/fr/web/javascript/reference/global_objects/string/localecompare/index.html deleted file mode 100644 index 2b84d90be0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/localecompare/index.html +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: String.prototype.localeCompare() -slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare -tags: - - Internationalisation - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare -original_slug: Web/JavaScript/Reference/Objets_globaux/String/localeCompare ---- -
{{JSRef}}
- -

La méthode localeCompare() renvoie un nombre indiquant si la chaîne de caractères courante se situe avant, après ou est la même que la chaîne passée en paramètre, selon l'ordre lexicographique.

- -
{{EmbedInteractiveExample("pages/js/string-localecompare.html")}}
- - - -

Les arguments locales et options permettent de définir la locale et des options pour adapter le comportement de la fonction. Les anciennes implémentations ignoreront les arguments locales et options. L'ordre de tri utilisé sera entièrement dépendant de l'implémentation.

- -

Syntaxe

- -
str.localeCompare(chaineÀComparer [, locales [, options]])
- -

Paramètres

- -

Voir le tableau de compatibilité des navigateurs pour savoir quels navigateurs prennent en charge les arguments locales et options. L'exemple pour vérifier le support des arguments locales et options fournit un fragment de code pour détecter la prise en charge de ces fonctionnalités.

- -
-
chaineÀComparer
-
La chaîne avec laquelle on souhaite comparer la chaîne de caractères courante.
-
- -
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Collator','Param.C3.A8tres')}}
- -

Valeur de retour

- -

Un nombre négatif si la chaîne de appelante est ordonnée avant la chaîne passée en argument, un nombre positif si elle se situe après, 0 si les deux chaînes sont équivalentes.

- -

Description

- -

Cette méthode renvoie un nombre entier qui indique si la chaîne de caractères courante se situe avant ou après la chaîne passée en argument selon l'ordre lexicographique tenant compte de la locale. Cette méthode renvoie

- - - -

Attention à ne pas tester que les valeurs -1 et 1. Les valeurs entières utilisées peuvent varier en fonction des navigateurs et de leurs versions. En effet, la spécification indique uniquement le signe de la valeur à fournir. Par exemple, certains navigateurs pourront renvoyer -2 ou 2 (voire d'autres valeurs).

- -

Exemples

- -

Utiliser la méthode localeCompare()

- -

L'exemple qui suit illustre les différents cas de figures lors de la comparaison des chaînes de caractères :

- -
console.log('a'.localeCompare('c')); // -2, ou -1, ou toute autre valeur négative
-console.log('c'.localeCompare('a')); // 2, ou 1, ou toute autre valeur positive
-console.log('a'.localeCompare('a')); // 0
-
- -

Les résultats illustrés ici peuvent varier entre les différents navigateurs et selon les versions des navigateurs. En effet, les valeurs renvoyées sont spécifiques selon les implémentations. La spécification définit uniquement le signe de la valeur à renvoyer.

- -

Trier un tableau

- -

localeCompare() permet de trier un tableau sans tenir compte de la casse :

- -
var items = ['réservé', 'Premier', 'Cliché', 'communiqué', 'café', 'Adieu'];
-items.sort((a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true}));
-// ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
-
- -

Vérifier le support des arguments locales et options

- -

Les argument locales et options ne sont pas supportés par tous les navigateurs. Pour vérifier qu'une implémentation supporte ces paramètres, il est possible d'utiliser un cas d'erreur quand on utilise une balise de langue incorrecte (ce qui provoque une exception {{jsxref("RangeError")}}) :

- -
function localeCompareSupportsLocales() {
-    try {
-        "a".localeCompare​("b", "i");
-    } catch (e) {
-        return e​.name === "RangeError";
-    }
-    return false;
-}
-
- -

Utiliser le paramètre locales

- -

Les résultats fournis par la méthode localeCompare() peuvent varier selon les langues utilisées. Pour spécifier la langue à utiliser pour votre application, utiliser l'argument locales pour définir la locale à utiliser (et éventuellement des langues de recours) :

- -
console.log('ä'.localeCompare('z', 'de')); // une valeur négative : en allemand ä est avant z
-console.log('ä'.localeCompare('z', 'sv')); // une valeur positive : en suédois, ä arrive après z
-
- -

Utiliser le paramètre options

- -

Les résultats construits par la méthode localeCompare() peuvent être adaptés grâce au paramètre options :

- -
// en allemand, ä et a ont la même lettre de base
-console.log('ä'.localeCompare('a', 'de', {sensitivity: "base"})); // 0
-
-// en suédois, ä et a n'ont pas la même lettre de base
-console.log('ä'.localeCompare('a', 'sv', {sensitivity: "base"})); // une valeur positive
-
- -

Tri numérique

- -
// Par défaut, selon l'ordre lexicographique, "2" est supérieur à "10"
-console.log("2".localeCompare("10")); // 1
-
-// En utilisant un ordre numérique :
-console.log("2".localeCompare("10", undefined, {numeric: true})); // -1
-
-// En utilisant une balise de locale:
-console.log("2".localeCompare("10","en-u-kn-true")); // -1
-
- -

Performances

- -

Pour comparer un grand nombre de chaînes de caractères, par exemple pour trier de grands tableaux, il est préférable de créer un objet {{jsxref("Objets_globaux/Collator", "Intl.Collator")}} et utiliser la fonction fournie par la propriété {{jsxref("Collator.prototype.compare", "compare")}}.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
- Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-15.5.4.9', 'String.prototype.localeCompare')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.1.1', 'String.prototype.localeCompare')}}{{Spec2('ES Int 1.0')}}Définition des paramètres locale et option
{{SpecName('ES Int 2.0', '#sec-13.1.1', 'String.prototype.localeCompare')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-String.prototype.localeCompare', 'String.prototype.localeCompare')}}{{Spec2('ES Int Draft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.localeCompare")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/localecompare/index.md b/files/fr/web/javascript/reference/global_objects/string/localecompare/index.md new file mode 100644 index 0000000000..2b84d90be0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/localecompare/index.md @@ -0,0 +1,182 @@ +--- +title: String.prototype.localeCompare() +slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare +tags: + - Internationalisation + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare +original_slug: Web/JavaScript/Reference/Objets_globaux/String/localeCompare +--- +
{{JSRef}}
+ +

La méthode localeCompare() renvoie un nombre indiquant si la chaîne de caractères courante se situe avant, après ou est la même que la chaîne passée en paramètre, selon l'ordre lexicographique.

+ +
{{EmbedInteractiveExample("pages/js/string-localecompare.html")}}
+ + + +

Les arguments locales et options permettent de définir la locale et des options pour adapter le comportement de la fonction. Les anciennes implémentations ignoreront les arguments locales et options. L'ordre de tri utilisé sera entièrement dépendant de l'implémentation.

+ +

Syntaxe

+ +
str.localeCompare(chaineÀComparer [, locales [, options]])
+ +

Paramètres

+ +

Voir le tableau de compatibilité des navigateurs pour savoir quels navigateurs prennent en charge les arguments locales et options. L'exemple pour vérifier le support des arguments locales et options fournit un fragment de code pour détecter la prise en charge de ces fonctionnalités.

+ +
+
chaineÀComparer
+
La chaîne avec laquelle on souhaite comparer la chaîne de caractères courante.
+
+ +
{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Collator','Param.C3.A8tres')}}
+ +

Valeur de retour

+ +

Un nombre négatif si la chaîne de appelante est ordonnée avant la chaîne passée en argument, un nombre positif si elle se situe après, 0 si les deux chaînes sont équivalentes.

+ +

Description

+ +

Cette méthode renvoie un nombre entier qui indique si la chaîne de caractères courante se situe avant ou après la chaîne passée en argument selon l'ordre lexicographique tenant compte de la locale. Cette méthode renvoie

+ + + +

Attention à ne pas tester que les valeurs -1 et 1. Les valeurs entières utilisées peuvent varier en fonction des navigateurs et de leurs versions. En effet, la spécification indique uniquement le signe de la valeur à fournir. Par exemple, certains navigateurs pourront renvoyer -2 ou 2 (voire d'autres valeurs).

+ +

Exemples

+ +

Utiliser la méthode localeCompare()

+ +

L'exemple qui suit illustre les différents cas de figures lors de la comparaison des chaînes de caractères :

+ +
console.log('a'.localeCompare('c')); // -2, ou -1, ou toute autre valeur négative
+console.log('c'.localeCompare('a')); // 2, ou 1, ou toute autre valeur positive
+console.log('a'.localeCompare('a')); // 0
+
+ +

Les résultats illustrés ici peuvent varier entre les différents navigateurs et selon les versions des navigateurs. En effet, les valeurs renvoyées sont spécifiques selon les implémentations. La spécification définit uniquement le signe de la valeur à renvoyer.

+ +

Trier un tableau

+ +

localeCompare() permet de trier un tableau sans tenir compte de la casse :

+ +
var items = ['réservé', 'Premier', 'Cliché', 'communiqué', 'café', 'Adieu'];
+items.sort((a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true}));
+// ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']
+
+ +

Vérifier le support des arguments locales et options

+ +

Les argument locales et options ne sont pas supportés par tous les navigateurs. Pour vérifier qu'une implémentation supporte ces paramètres, il est possible d'utiliser un cas d'erreur quand on utilise une balise de langue incorrecte (ce qui provoque une exception {{jsxref("RangeError")}}) :

+ +
function localeCompareSupportsLocales() {
+    try {
+        "a".localeCompare​("b", "i");
+    } catch (e) {
+        return e​.name === "RangeError";
+    }
+    return false;
+}
+
+ +

Utiliser le paramètre locales

+ +

Les résultats fournis par la méthode localeCompare() peuvent varier selon les langues utilisées. Pour spécifier la langue à utiliser pour votre application, utiliser l'argument locales pour définir la locale à utiliser (et éventuellement des langues de recours) :

+ +
console.log('ä'.localeCompare('z', 'de')); // une valeur négative : en allemand ä est avant z
+console.log('ä'.localeCompare('z', 'sv')); // une valeur positive : en suédois, ä arrive après z
+
+ +

Utiliser le paramètre options

+ +

Les résultats construits par la méthode localeCompare() peuvent être adaptés grâce au paramètre options :

+ +
// en allemand, ä et a ont la même lettre de base
+console.log('ä'.localeCompare('a', 'de', {sensitivity: "base"})); // 0
+
+// en suédois, ä et a n'ont pas la même lettre de base
+console.log('ä'.localeCompare('a', 'sv', {sensitivity: "base"})); // une valeur positive
+
+ +

Tri numérique

+ +
// Par défaut, selon l'ordre lexicographique, "2" est supérieur à "10"
+console.log("2".localeCompare("10")); // 1
+
+// En utilisant un ordre numérique :
+console.log("2".localeCompare("10", undefined, {numeric: true})); // -1
+
+// En utilisant une balise de locale:
+console.log("2".localeCompare("10","en-u-kn-true")); // -1
+
+ +

Performances

+ +

Pour comparer un grand nombre de chaînes de caractères, par exemple pour trier de grands tableaux, il est préférable de créer un objet {{jsxref("Objets_globaux/Collator", "Intl.Collator")}} et utiliser la fonction fournie par la propriété {{jsxref("Collator.prototype.compare", "compare")}}.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
+ Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-15.5.4.9', 'String.prototype.localeCompare')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int 1.0', '#sec-13.1.1', 'String.prototype.localeCompare')}}{{Spec2('ES Int 1.0')}}Définition des paramètres locale et option
{{SpecName('ES Int 2.0', '#sec-13.1.1', 'String.prototype.localeCompare')}}{{Spec2('ES Int 2.0')}} 
{{SpecName('ES Int Draft', '#sec-String.prototype.localeCompare', 'String.prototype.localeCompare')}}{{Spec2('ES Int Draft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.localeCompare")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/match/index.html b/files/fr/web/javascript/reference/global_objects/string/match/index.html deleted file mode 100644 index 27d3d04e85..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/match/index.html +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: String.prototype.match() -slug: Web/JavaScript/Reference/Global_Objects/String/match -tags: - - Expressions rationnelles - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/match -original_slug: Web/JavaScript/Reference/Objets_globaux/String/match ---- -
{{JSRef}}
- -

La méthode match() permet d'obtenir le tableau des correspondances entre la chaîne courante et une expression rationnelle.

- -
{{EmbedInteractiveExample("pages/js/string-match.html")}}
- -

Syntaxe

- -
str.match(regexp)
- -

Paramètres

- -
-
regexp
-
Un objet représentant une expression rationnelle. Si ce n'est pas un objet de type RegExp, celui-ci sera converti en un objet {{jsxref("RegExp")}} grâce à new RegExp(regexp). Si aucun paramètre n'est utilisé, cela renverra un tableau contenant un élément étant la chaîne vide : [""].
-
- -

Valeur de retour

- -

Un tableau ({{jsxref("Array")}}) contenant les correspondances et les groupes capturés avec les parenthèses ou {{jsxref("null")}} s'il n'y a pas de correspondance. Le contenu de ce tableau dépend de l'utilisation du marqueur pour la recherche globale g :

- - - -

Propriétés supplémentaires

- -

Comme indiqué ci-avant, les résultats peuvent contenir certaines propriétés supplémentaires :

- - - -

Description

- -

Si l'expression n'utilise pas le drapeau (flag) g, le résultat obtenu sera le même qu'avec {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}}.

- -

Voir aussi : les méthodes de RegExp

- - - -

Exemples

- -

Utiliser match()

- -

Dans l'exemple suivant, on utilise match() afin de trouver la chaîne 'Chapitre' suivie par un ou plusieurs chiffres séparés par des points. L'expression utilisée active le drapeau i afin que la casse ne soit pas prise en compte.

- -
var str = 'Pour plus d\'informations, voir le chapitre 3.4.5.1';
-var re = /(chapitre \d+(\.\d)*)/i;
-var trouvé = str.match(re);
-
-console.log(trouvé);
-
-// logs ['chapitre 3.4.5.1', 'chapitre 3.4.5.1', '.1']
-
-// 'chapitre 3.4.5.1' est la première correspondance
-// 'chapitre 3.4.5.1' est la valeur gardée en mémoire par
-// `(chapitre \d+(\.\d)*)`.
-// '.1' est la valeur gardée en mémoire par `(\.\d)`.
-
- -

Utiliser les drapeaux g (global) et i (ignorer la casse) avec match()

- -

Dans cet exemple, on illustre comment utiliser des drapeaux avec l'expression rationnelle qui est un argument de match(). Chaque lettre de A à E et de a à e est renvoyée, chacune dans un élément du tableau de résultat.

- -
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
-var regexp = /[A-E]/gi;
-var tableau_correspondances = str.match(regexp);
-
-console.log(tableau_correspondances);
-// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
-
- -

Utiliser un paramètre qui n'est pas une RegExp

- -

Lorsque le paramètre passé à la fonction est une chaîne de caractères ou un nombre, il est converti de façon implicite en un objet  {{jsxref("RegExp")}} grâce à new RegExp(obj). Si c'est un nombre positif avec le signe +, la méthode RegExp() ignorera ce signe.

- -
var str1 = "NaN signifie : qui n'est pas un nombre.";
-var str2 = "Mon père a 65 ans."
-str1.match("nombre");   // "nombre" est une chaîne, renvoie ["nombre"]
-str1.match(NaN);        // NaN est de type number, renvoie ["NaN"]
-str2.match(65);         // Renvoie ["65"]
-str2.match(+65);        // Renvoie également ["65"]
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.10', 'String.prototype.match')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.match', 'String.prototype.match')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.match', 'String.prototype.match')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.match")}}

- -

Notes spécifiques à Firefox/Gecko

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/match/index.md b/files/fr/web/javascript/reference/global_objects/string/match/index.md new file mode 100644 index 0000000000..27d3d04e85 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/match/index.md @@ -0,0 +1,154 @@ +--- +title: String.prototype.match() +slug: Web/JavaScript/Reference/Global_Objects/String/match +tags: + - Expressions rationnelles + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/match +original_slug: Web/JavaScript/Reference/Objets_globaux/String/match +--- +
{{JSRef}}
+ +

La méthode match() permet d'obtenir le tableau des correspondances entre la chaîne courante et une expression rationnelle.

+ +
{{EmbedInteractiveExample("pages/js/string-match.html")}}
+ +

Syntaxe

+ +
str.match(regexp)
+ +

Paramètres

+ +
+
regexp
+
Un objet représentant une expression rationnelle. Si ce n'est pas un objet de type RegExp, celui-ci sera converti en un objet {{jsxref("RegExp")}} grâce à new RegExp(regexp). Si aucun paramètre n'est utilisé, cela renverra un tableau contenant un élément étant la chaîne vide : [""].
+
+ +

Valeur de retour

+ +

Un tableau ({{jsxref("Array")}}) contenant les correspondances et les groupes capturés avec les parenthèses ou {{jsxref("null")}} s'il n'y a pas de correspondance. Le contenu de ce tableau dépend de l'utilisation du marqueur pour la recherche globale g :

+ + + +

Propriétés supplémentaires

+ +

Comme indiqué ci-avant, les résultats peuvent contenir certaines propriétés supplémentaires :

+ + + +

Description

+ +

Si l'expression n'utilise pas le drapeau (flag) g, le résultat obtenu sera le même qu'avec {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}}.

+ +

Voir aussi : les méthodes de RegExp

+ + + +

Exemples

+ +

Utiliser match()

+ +

Dans l'exemple suivant, on utilise match() afin de trouver la chaîne 'Chapitre' suivie par un ou plusieurs chiffres séparés par des points. L'expression utilisée active le drapeau i afin que la casse ne soit pas prise en compte.

+ +
var str = 'Pour plus d\'informations, voir le chapitre 3.4.5.1';
+var re = /(chapitre \d+(\.\d)*)/i;
+var trouvé = str.match(re);
+
+console.log(trouvé);
+
+// logs ['chapitre 3.4.5.1', 'chapitre 3.4.5.1', '.1']
+
+// 'chapitre 3.4.5.1' est la première correspondance
+// 'chapitre 3.4.5.1' est la valeur gardée en mémoire par
+// `(chapitre \d+(\.\d)*)`.
+// '.1' est la valeur gardée en mémoire par `(\.\d)`.
+
+ +

Utiliser les drapeaux g (global) et i (ignorer la casse) avec match()

+ +

Dans cet exemple, on illustre comment utiliser des drapeaux avec l'expression rationnelle qui est un argument de match(). Chaque lettre de A à E et de a à e est renvoyée, chacune dans un élément du tableau de résultat.

+ +
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+var regexp = /[A-E]/gi;
+var tableau_correspondances = str.match(regexp);
+
+console.log(tableau_correspondances);
+// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
+
+ +

Utiliser un paramètre qui n'est pas une RegExp

+ +

Lorsque le paramètre passé à la fonction est une chaîne de caractères ou un nombre, il est converti de façon implicite en un objet  {{jsxref("RegExp")}} grâce à new RegExp(obj). Si c'est un nombre positif avec le signe +, la méthode RegExp() ignorera ce signe.

+ +
var str1 = "NaN signifie : qui n'est pas un nombre.";
+var str2 = "Mon père a 65 ans."
+str1.match("nombre");   // "nombre" est une chaîne, renvoie ["nombre"]
+str1.match(NaN);        // NaN est de type number, renvoie ["NaN"]
+str2.match(65);         // Renvoie ["65"]
+str2.match(+65);        // Renvoie également ["65"]
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.10', 'String.prototype.match')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.match', 'String.prototype.match')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.match', 'String.prototype.match')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.match")}}

+ +

Notes spécifiques à Firefox/Gecko

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/matchall/index.html b/files/fr/web/javascript/reference/global_objects/string/matchall/index.html deleted file mode 100644 index 5b9e8b50c9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/matchall/index.html +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: String.prototype.matchAll() -slug: Web/JavaScript/Reference/Global_Objects/String/matchAll -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/matchAll -original_slug: Web/JavaScript/Reference/Objets_globaux/String/matchAll ---- -
{{JSRef}}
- -

La méthode matchAll() renvoie un itérateur contenant l'ensemble des correspondances entre une chaîne de caractères d'une part et une expression rationnelle d'autre part (y compris les groupes capturants).

- -
{{EmbedInteractiveExample("pages/js/string-matchall.html")}}
- -

Syntaxe

- -
str.matchAll(regexp)
- -

Paramètres

- -
-
regexp
-
Un objet représentant une expression rationnelle. Si cet objet n'est pas une instance de {{jsxref("RegExp")}}, il est automatiquement et implicitement converti en une telle instance à l'aide de new RegExp(obj).
-
- -

Valeur de retour

- -

Un itérateur.

- -

Exemples

- -

Regexp.exec() et matchAll()

- -

Avant l'apparition de matchAll() en JavaScript, il était possible d'utiliser {{jsxref("RegExp.exec")}} (et des expressions rationnelles utilisant le marqueur /g) dans une boucle afin d'obtenir l'ensemble des correspondances :

- -
const regexp = RegExp('foo*','g');
-const str = 'table football, foosball';
-
-while ((matches = regexp.exec(str)) !== null) {
-  console.log(`${matches[0]} trouvé. Prochaine recherche à partir de ${regexp.lastIndex}.`);
-  // dans la console : "foo trouvé. Prochaine recherche à partir de 9."
-  // dans la console : "foo trouvé. Prochaine recherche à partir de 19."
-}
-
- -

Avec matchAll(), on peut éviter la boucle while et le marqueur global. On récupère l'itérateur et on utilise une boucle for...of, la décomposition de tableau ou encore {{jsxref("Array.from()")}} :

- -
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" ]
-
-// l'itérateur est épuise après l'itération via for..of
-// On rappelle matchAll afin de créer un nouvel itérateur
-matches = str.matchAll(regexp);
-
-Array.from(matches, m => m[0]);
-// Array [ "foo", "foo" ]
-
- -

Meilleur accès aux groupes capturants

- -

Un autre avantage de matchAll() est un meilleur accès aux groupes capturants. De fait, les groupes capturants sont ignorés par match() lorsqu'on utilise le marqueur global /g :

- -
var regexp = /t(e)(st(\d?))/g;
-var str = 'test1test2';
-
-str.match(regexp);
-// Array ['test1', 'test2']
- -

Avec matchAll(), on peut y accéder :

- -
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]
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.matchall', 'String.prototype.matchAll')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.matchAll")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/matchall/index.md b/files/fr/web/javascript/reference/global_objects/string/matchall/index.md new file mode 100644 index 0000000000..5b9e8b50c9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/matchall/index.md @@ -0,0 +1,119 @@ +--- +title: String.prototype.matchAll() +slug: Web/JavaScript/Reference/Global_Objects/String/matchAll +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/matchAll +original_slug: Web/JavaScript/Reference/Objets_globaux/String/matchAll +--- +
{{JSRef}}
+ +

La méthode matchAll() renvoie un itérateur contenant l'ensemble des correspondances entre une chaîne de caractères d'une part et une expression rationnelle d'autre part (y compris les groupes capturants).

+ +
{{EmbedInteractiveExample("pages/js/string-matchall.html")}}
+ +

Syntaxe

+ +
str.matchAll(regexp)
+ +

Paramètres

+ +
+
regexp
+
Un objet représentant une expression rationnelle. Si cet objet n'est pas une instance de {{jsxref("RegExp")}}, il est automatiquement et implicitement converti en une telle instance à l'aide de new RegExp(obj).
+
+ +

Valeur de retour

+ +

Un itérateur.

+ +

Exemples

+ +

Regexp.exec() et matchAll()

+ +

Avant l'apparition de matchAll() en JavaScript, il était possible d'utiliser {{jsxref("RegExp.exec")}} (et des expressions rationnelles utilisant le marqueur /g) dans une boucle afin d'obtenir l'ensemble des correspondances :

+ +
const regexp = RegExp('foo*','g');
+const str = 'table football, foosball';
+
+while ((matches = regexp.exec(str)) !== null) {
+  console.log(`${matches[0]} trouvé. Prochaine recherche à partir de ${regexp.lastIndex}.`);
+  // dans la console : "foo trouvé. Prochaine recherche à partir de 9."
+  // dans la console : "foo trouvé. Prochaine recherche à partir de 19."
+}
+
+ +

Avec matchAll(), on peut éviter la boucle while et le marqueur global. On récupère l'itérateur et on utilise une boucle for...of, la décomposition de tableau ou encore {{jsxref("Array.from()")}} :

+ +
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" ]
+
+// l'itérateur est épuise après l'itération via for..of
+// On rappelle matchAll afin de créer un nouvel itérateur
+matches = str.matchAll(regexp);
+
+Array.from(matches, m => m[0]);
+// Array [ "foo", "foo" ]
+
+ +

Meilleur accès aux groupes capturants

+ +

Un autre avantage de matchAll() est un meilleur accès aux groupes capturants. De fait, les groupes capturants sont ignorés par match() lorsqu'on utilise le marqueur global /g :

+ +
var regexp = /t(e)(st(\d?))/g;
+var str = 'test1test2';
+
+str.match(regexp);
+// Array ['test1', 'test2']
+ +

Avec matchAll(), on peut y accéder :

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

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.matchall', 'String.prototype.matchAll')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.matchAll")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/normalize/index.html b/files/fr/web/javascript/reference/global_objects/string/normalize/index.html deleted file mode 100644 index b35ff15f8b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/normalize/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: String.prototype.normalize() -slug: Web/JavaScript/Reference/Global_Objects/String/normalize -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - String - - Unicode -translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize -original_slug: Web/JavaScript/Reference/Objets_globaux/String/normalize ---- -
{{JSRef}}
- -

La méthode normalize() permet de renvoyer la forme normalisée Unicode d'une chaîne de caractères (si la valeur n'est pas une chaîne de caractères, elle sera convertie).

- -
{{EmbedInteractiveExample("pages/js/string-normalize.html")}}
- -

Syntaxe

- -
str.normalize([form]);
- -

Paramètres

- -
-
form
-
Paramètre optionnel. Une chaîne parmi "NFC", "NFD", "NFKC", ou "NFKD", définissant la forme de normalisation Unicode à utiliser. Si le paramètre n'est pas précisé ou vaut {{jsxref("undefined")}}, la valeur par défaut utilisée sera "NFC". -
    -
  • NFC - Normalization Form Canonical Composition.
  • -
  • NFD - Normalization Form Canonical Decomposition.
  • -
  • NFKC - Normalization Form Compatibility Composition.
  • -
  • NFKD - Normalization Form Compatibility Decomposition.
  • -
-
-
- -

Valeur de retour

- -

Une chaîne de caractères qui est le forme Unicode normalisée de la chaîne appelante.

- -

Exceptions

- -
-
{{jsxref("RangeError")}}
-
Une exception RangeError est envoyée si le paramètre form n'est pas une des valeurs définies ci-avant.
-
- -

Description

- -

La méthode normalize() renvoie la forme normalisée Unicode de la chaîne de caractères. Elle n'affecte pas la valeur de la chaîne.

- -

Exemples

- -
// Chaîne initiale
-
-// U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
-// U+0323: COMBINING DOT BELOW
-var str = "\u1E9B\u0323";
-
-
-// Forme canonique composée (Canonically-composed form) (NFC)
-
-// U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
-// U+0323: COMBINING DOT BELOW
-str.normalize("NFC"); // "\u1E9B\u0323"
-str.normalize(); // la même chaîne que précédemment
-
-
-// Forme canonique décomposée (Canonically-decomposed form) (NFD)
-
-// U+017F: LATIN SMALL LETTER LONG S
-// U+0323: COMBINING DOT BELOW
-// U+0307: COMBINING DOT ABOVE
-str.normalize("NFD"); // "\u017F\u0323\u0307"
-
-
-// Forme composée compatible (NFKC)
-
-// U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
-str.normalize("NFKC"); // "\u1E69"
-
-
-// Forme décomposée compatible (NFKD)
-
-// U+0073: LATIN SMALL LETTER S
-// U+0323: COMBINING DOT BELOW
-// U+0307: COMBINING DOT ABOVE
-str.normalize("NFKD"); // "\u0073\u0323\u0307"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.normalize")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/normalize/index.md b/files/fr/web/javascript/reference/global_objects/string/normalize/index.md new file mode 100644 index 0000000000..b35ff15f8b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/normalize/index.md @@ -0,0 +1,124 @@ +--- +title: String.prototype.normalize() +slug: Web/JavaScript/Reference/Global_Objects/String/normalize +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - String + - Unicode +translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize +original_slug: Web/JavaScript/Reference/Objets_globaux/String/normalize +--- +
{{JSRef}}
+ +

La méthode normalize() permet de renvoyer la forme normalisée Unicode d'une chaîne de caractères (si la valeur n'est pas une chaîne de caractères, elle sera convertie).

+ +
{{EmbedInteractiveExample("pages/js/string-normalize.html")}}
+ +

Syntaxe

+ +
str.normalize([form]);
+ +

Paramètres

+ +
+
form
+
Paramètre optionnel. Une chaîne parmi "NFC", "NFD", "NFKC", ou "NFKD", définissant la forme de normalisation Unicode à utiliser. Si le paramètre n'est pas précisé ou vaut {{jsxref("undefined")}}, la valeur par défaut utilisée sera "NFC". +
    +
  • NFC - Normalization Form Canonical Composition.
  • +
  • NFD - Normalization Form Canonical Decomposition.
  • +
  • NFKC - Normalization Form Compatibility Composition.
  • +
  • NFKD - Normalization Form Compatibility Decomposition.
  • +
+
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui est le forme Unicode normalisée de la chaîne appelante.

+ +

Exceptions

+ +
+
{{jsxref("RangeError")}}
+
Une exception RangeError est envoyée si le paramètre form n'est pas une des valeurs définies ci-avant.
+
+ +

Description

+ +

La méthode normalize() renvoie la forme normalisée Unicode de la chaîne de caractères. Elle n'affecte pas la valeur de la chaîne.

+ +

Exemples

+ +
// Chaîne initiale
+
+// U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
+// U+0323: COMBINING DOT BELOW
+var str = "\u1E9B\u0323";
+
+
+// Forme canonique composée (Canonically-composed form) (NFC)
+
+// U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE
+// U+0323: COMBINING DOT BELOW
+str.normalize("NFC"); // "\u1E9B\u0323"
+str.normalize(); // la même chaîne que précédemment
+
+
+// Forme canonique décomposée (Canonically-decomposed form) (NFD)
+
+// U+017F: LATIN SMALL LETTER LONG S
+// U+0323: COMBINING DOT BELOW
+// U+0307: COMBINING DOT ABOVE
+str.normalize("NFD"); // "\u017F\u0323\u0307"
+
+
+// Forme composée compatible (NFKC)
+
+// U+1E69: LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+str.normalize("NFKC"); // "\u1E69"
+
+
+// Forme décomposée compatible (NFKD)
+
+// U+0073: LATIN SMALL LETTER S
+// U+0323: COMBINING DOT BELOW
+// U+0307: COMBINING DOT ABOVE
+str.normalize("NFKD"); // "\u0073\u0323\u0307"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.normalize")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/padend/index.html b/files/fr/web/javascript/reference/global_objects/string/padend/index.html deleted file mode 100644 index 2039f7be3c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/padend/index.html +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: String.prototype.padEnd() -slug: Web/JavaScript/Reference/Global_Objects/String/padEnd -tags: - - JavaScript - - Méthode - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/padEnd -original_slug: Web/JavaScript/Reference/Objets_globaux/String/padEnd ---- -
{{JSRef}}
- -

La méthode padEnd() permet de compléter la chaîne courante avec une chaîne de caractères donnée afin d'obtenir une chaîne de longueur fixée. Pour atteindre cette longueur, la chaîne complémentaire peut être répétée. La chaîne courante est complétée depuis la fin.

- -
{{EmbedInteractiveExample("pages/js/string-padend.html")}}
- -

Syntaxe

- -
str.padEnd(longueurCible [, chaîneComplémentaire])
- -

Paramètres

- -
-
longueurCible
-
La longueur de la chaîne qu'on souhaite obtenir. Si la longueur indiquée est inférieure à celle de la chaîne courante, cette dernière est renvoyée telle quelle.
-
chaîneComplémentaire {{optional_inline}}
-
La chaîne de caractères avec laquelle on veut compléter la chaîne courante. Si cette chaîne est trop longue, on prendra uniquement le début (la partie la plus à gauche pour les langues écrites de gauche à droite et la partie la plus à droite pour les langues écrites de droite à gauche). La valeur par défaut de ce paramètre est l'espace " " (U+0020). Si cette chaîne est trop courte, elle sera répétée.
-
- -

Valeur de retour

- -

Une chaîne de caractères ({{jsxref("String")}}) dont la longueur est celle indiquée, complétée avec la chaîne fournie.

- -

Exemples

- -
'abc'.padEnd(10);         // "abc       "
-'abc'.padEnd(10, "toto"); // "abctototot"
-'abc'.padEnd(6,"123456"); // "abc123"
-'abc'.padEnd(1);          // "abc"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.padend', 'String.prototype.padEnd')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-string.prototype.padend', 'String.prototype.padEnd')}}{{Spec2('ES8')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.padEnd")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/padend/index.md b/files/fr/web/javascript/reference/global_objects/string/padend/index.md new file mode 100644 index 0000000000..2039f7be3c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/padend/index.md @@ -0,0 +1,73 @@ +--- +title: String.prototype.padEnd() +slug: Web/JavaScript/Reference/Global_Objects/String/padEnd +tags: + - JavaScript + - Méthode + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/padEnd +original_slug: Web/JavaScript/Reference/Objets_globaux/String/padEnd +--- +
{{JSRef}}
+ +

La méthode padEnd() permet de compléter la chaîne courante avec une chaîne de caractères donnée afin d'obtenir une chaîne de longueur fixée. Pour atteindre cette longueur, la chaîne complémentaire peut être répétée. La chaîne courante est complétée depuis la fin.

+ +
{{EmbedInteractiveExample("pages/js/string-padend.html")}}
+ +

Syntaxe

+ +
str.padEnd(longueurCible [, chaîneComplémentaire])
+ +

Paramètres

+ +
+
longueurCible
+
La longueur de la chaîne qu'on souhaite obtenir. Si la longueur indiquée est inférieure à celle de la chaîne courante, cette dernière est renvoyée telle quelle.
+
chaîneComplémentaire {{optional_inline}}
+
La chaîne de caractères avec laquelle on veut compléter la chaîne courante. Si cette chaîne est trop longue, on prendra uniquement le début (la partie la plus à gauche pour les langues écrites de gauche à droite et la partie la plus à droite pour les langues écrites de droite à gauche). La valeur par défaut de ce paramètre est l'espace " " (U+0020). Si cette chaîne est trop courte, elle sera répétée.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères ({{jsxref("String")}}) dont la longueur est celle indiquée, complétée avec la chaîne fournie.

+ +

Exemples

+ +
'abc'.padEnd(10);         // "abc       "
+'abc'.padEnd(10, "toto"); // "abctototot"
+'abc'.padEnd(6,"123456"); // "abc123"
+'abc'.padEnd(1);          // "abc"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.padend', 'String.prototype.padEnd')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-string.prototype.padend', 'String.prototype.padEnd')}}{{Spec2('ES8')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.padEnd")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/padstart/index.html b/files/fr/web/javascript/reference/global_objects/string/padstart/index.html deleted file mode 100644 index 85ecc07e2d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/padstart/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: String.prototype.padStart() -slug: Web/JavaScript/Reference/Global_Objects/String/padStart -tags: - - JavaScript - - Méthode - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/padStart -original_slug: Web/JavaScript/Reference/Objets_globaux/String/padStart ---- -
{{JSRef}}
- -

La méthode padStart() permet de compléter la chaîne courante avec une chaîne de caractères donnée afin d'obtenir une chaîne de longueur fixée. Pour atteindre cette longueur, la chaîne complémentaire peut être répétée. La chaîne courante est complétée depuis le début.

- -
{{EmbedInteractiveExample("pages/js/string-padstart.html")}}
- -

Syntaxe

- -
str.padStart(longueurCible [, chaîneComplémentaire])
- -

Paramètres

- -
-
longueurCible
-
La longueur de la chaîne qu'on souhaite obtenir. Si la longueur indiquée est inférieure à celle de la chaîne courante, cette dernière est renvoyée telle quelle.
-
chaîneComplémentaire {{optional_inline}}
-
La chaîne de caractères avec laquelle on veut compléter la chaîne courante. Si cette chaîne est trop longue, on prendra uniquement le début (la partie la plus à gauche quand la langue s'écrit de gauche à droite). La valeur par défaut de ce paramètre est l'espace " " (U+0020). Si cette chaîne est trop courte, elle sera répétée.
-
- -

Valeur de retour

- -

Une chaîne de caractères ({{jsxref("String")}}) dont la longueur est celle indiquée, complétée avec la chaîne fournie au début de la chaîne courante.

- -

Exemples

- -
'abc'.padStart(10);         // "        abc"
-'abc'.padStart(10, "toto"); // "totototabc"
-'abc'.padStart(6,"123465"); // "123abc"
-'abc'.padStart(8, "0");     // "00000abc"
-'abc'.padStart(1);          // "abc"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.padstart', 'String.prototype.padStart')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-string.prototype.padstart', 'String.prototype.padStart')}}{{Spec2('ES8')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.padStart")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/padstart/index.md b/files/fr/web/javascript/reference/global_objects/string/padstart/index.md new file mode 100644 index 0000000000..85ecc07e2d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/padstart/index.md @@ -0,0 +1,75 @@ +--- +title: String.prototype.padStart() +slug: Web/JavaScript/Reference/Global_Objects/String/padStart +tags: + - JavaScript + - Méthode + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/padStart +original_slug: Web/JavaScript/Reference/Objets_globaux/String/padStart +--- +
{{JSRef}}
+ +

La méthode padStart() permet de compléter la chaîne courante avec une chaîne de caractères donnée afin d'obtenir une chaîne de longueur fixée. Pour atteindre cette longueur, la chaîne complémentaire peut être répétée. La chaîne courante est complétée depuis le début.

+ +
{{EmbedInteractiveExample("pages/js/string-padstart.html")}}
+ +

Syntaxe

+ +
str.padStart(longueurCible [, chaîneComplémentaire])
+ +

Paramètres

+ +
+
longueurCible
+
La longueur de la chaîne qu'on souhaite obtenir. Si la longueur indiquée est inférieure à celle de la chaîne courante, cette dernière est renvoyée telle quelle.
+
chaîneComplémentaire {{optional_inline}}
+
La chaîne de caractères avec laquelle on veut compléter la chaîne courante. Si cette chaîne est trop longue, on prendra uniquement le début (la partie la plus à gauche quand la langue s'écrit de gauche à droite). La valeur par défaut de ce paramètre est l'espace " " (U+0020). Si cette chaîne est trop courte, elle sera répétée.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères ({{jsxref("String")}}) dont la longueur est celle indiquée, complétée avec la chaîne fournie au début de la chaîne courante.

+ +

Exemples

+ +
'abc'.padStart(10);         // "        abc"
+'abc'.padStart(10, "toto"); // "totototabc"
+'abc'.padStart(6,"123465"); // "123abc"
+'abc'.padStart(8, "0");     // "00000abc"
+'abc'.padStart(1);          // "abc"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-string.prototype.padstart', 'String.prototype.padStart')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-string.prototype.padstart', 'String.prototype.padStart')}}{{Spec2('ES8')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.padStart")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/raw/index.html b/files/fr/web/javascript/reference/global_objects/string/raw/index.html deleted file mode 100644 index 9a9724ffc9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/raw/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: String.raw() -slug: Web/JavaScript/Reference/Global_Objects/String/raw -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/raw -original_slug: Web/JavaScript/Reference/Objets_globaux/String/raw ---- -
{{JSRef}}
- -

La méthode statique String.raw() est une fonction d'étiquetage (tag function) pour les gabarits de chaînes de caractères (elle est semblable au préfixe r en Python ou au préfixe @ en C#). Cette fonction permet d'obtenir la chaîne brute pour un gabarit (les caractères spéciaux ne sont pas pris en compte mais retranscrits tels quels, les séquences d'échappement ne sont pas interprétées et les emplacements (ex. ${toto}) sont traités).

- -
{{EmbedInteractiveExample("pages/js/string-raw.html")}}
- -

Syntaxe

- -
String.raw(callSite, ...substitutions)
-
-String.raw`gabaritChaîne`
-
- -

Paramètres

- -
-
callSite
-
Un site d'appel bien formé pour un gabarit (call site object) tel que {raw: "string"}.
-
...substitutions
-
Paramètre contenant les valeurs à substituer.
-
gabaritChaîne
-
Un gabarit de chaîne de caractères, éventuellement avec des substitutions (${...}).
-
- -

Valeur de retour

- -

La chaîne de caractères brute correspondant à un gabarit donné.

- -

Exceptions

- -
-
{{jsxref("TypeError")}}
-
Une exception TypeError est renvoyée si le premier argument n'est pas un objet bien formé.
-
- -

Description

- -

Dans la plupart des cas, String.raw() est utilisé avec des gabarits de chaînes de caractères. La première syntaxe, présentée ci-avant est rarement utilisée. En effet, le moteur JavaScript appellera cette forme avec les arguments appropriés, comme pour les fonctions d'étiquetage (tag).

- -

La méthode String.raw() est la seule méthode d'étiquetage native pour les chaînes de caractères. Elle fonctionne comme la fonction par défaut pour les gabarits et permet d'effectuer des concaténations. Il est également possible d'implémenter cette méthode avec du code JavaScript.

- -

Exemples

- -
String.raw`Hi\n${2+3}!`;
-// "Hi\n5!", le caractère après "Hi" n'est pas
-// le caractère de nouvelle ligne
-// "\" et "n" sont bien deux caractères distincts
-// ici.
-
-String.raw`Hi\u000A!`;
-// "Hi\u000A!", de même ici. Les caractères
-//  \, u, 0, 0, 0, A et 6 sont distincts.
-// Tous les caractères d'échappement seront
-// inefficaces. Des backslashes peuvent donc être
-// présents dans la chaîne produite. Cela peut
-// être vérifié avec la propriété .length de la
-// chaîne.
-
-let nom = "Bob";
-String.raw`Hi\n${nom}!`;
-// "Hi\nBob!", les remplacements sont effectués.
-
-// Généralement, on n'appelle pas String.raw
-// comme une fonction, mais c'est possible :
-String.raw({raw: "test"}, 0, 1, 2);
-// "t0e1s2t"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.raw', 'String.raw')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.raw', 'String.raw')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.raw")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/raw/index.md b/files/fr/web/javascript/reference/global_objects/string/raw/index.md new file mode 100644 index 0000000000..9a9724ffc9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/raw/index.md @@ -0,0 +1,113 @@ +--- +title: String.raw() +slug: Web/JavaScript/Reference/Global_Objects/String/raw +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/raw +original_slug: Web/JavaScript/Reference/Objets_globaux/String/raw +--- +
{{JSRef}}
+ +

La méthode statique String.raw() est une fonction d'étiquetage (tag function) pour les gabarits de chaînes de caractères (elle est semblable au préfixe r en Python ou au préfixe @ en C#). Cette fonction permet d'obtenir la chaîne brute pour un gabarit (les caractères spéciaux ne sont pas pris en compte mais retranscrits tels quels, les séquences d'échappement ne sont pas interprétées et les emplacements (ex. ${toto}) sont traités).

+ +
{{EmbedInteractiveExample("pages/js/string-raw.html")}}
+ +

Syntaxe

+ +
String.raw(callSite, ...substitutions)
+
+String.raw`gabaritChaîne`
+
+ +

Paramètres

+ +
+
callSite
+
Un site d'appel bien formé pour un gabarit (call site object) tel que {raw: "string"}.
+
...substitutions
+
Paramètre contenant les valeurs à substituer.
+
gabaritChaîne
+
Un gabarit de chaîne de caractères, éventuellement avec des substitutions (${...}).
+
+ +

Valeur de retour

+ +

La chaîne de caractères brute correspondant à un gabarit donné.

+ +

Exceptions

+ +
+
{{jsxref("TypeError")}}
+
Une exception TypeError est renvoyée si le premier argument n'est pas un objet bien formé.
+
+ +

Description

+ +

Dans la plupart des cas, String.raw() est utilisé avec des gabarits de chaînes de caractères. La première syntaxe, présentée ci-avant est rarement utilisée. En effet, le moteur JavaScript appellera cette forme avec les arguments appropriés, comme pour les fonctions d'étiquetage (tag).

+ +

La méthode String.raw() est la seule méthode d'étiquetage native pour les chaînes de caractères. Elle fonctionne comme la fonction par défaut pour les gabarits et permet d'effectuer des concaténations. Il est également possible d'implémenter cette méthode avec du code JavaScript.

+ +

Exemples

+ +
String.raw`Hi\n${2+3}!`;
+// "Hi\n5!", le caractère après "Hi" n'est pas
+// le caractère de nouvelle ligne
+// "\" et "n" sont bien deux caractères distincts
+// ici.
+
+String.raw`Hi\u000A!`;
+// "Hi\u000A!", de même ici. Les caractères
+//  \, u, 0, 0, 0, A et 6 sont distincts.
+// Tous les caractères d'échappement seront
+// inefficaces. Des backslashes peuvent donc être
+// présents dans la chaîne produite. Cela peut
+// être vérifié avec la propriété .length de la
+// chaîne.
+
+let nom = "Bob";
+String.raw`Hi\n${nom}!`;
+// "Hi\nBob!", les remplacements sont effectués.
+
+// Généralement, on n'appelle pas String.raw
+// comme une fonction, mais c'est possible :
+String.raw({raw: "test"}, 0, 1, 2);
+// "t0e1s2t"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.raw', 'String.raw')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.raw', 'String.raw')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.raw")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/repeat/index.html b/files/fr/web/javascript/reference/global_objects/string/repeat/index.html deleted file mode 100644 index 77600fdf96..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/repeat/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: String.prototype.repeat() -slug: Web/JavaScript/Reference/Global_Objects/String/repeat -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - String - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/String/repeat -original_slug: Web/JavaScript/Reference/Objets_globaux/String/repeat ---- -
{{JSRef}}
- -

La méthode repeat() construit et renvoie une nouvelle chaine de caractères qui contient le nombre de copie demandée de la chaine de caractères sur laquelle la méthode a été appelée, concaténées les unes aux autres.

- -
{{EmbedInteractiveExample("pages/js/string-repeat.html")}}
- -

Syntaxe

- -
str.repeat(compte)
- -

Paramètres

- -
-
compte
-
Un nombre entier entre 0 and +∞ : [ 0, +∞[, indiquant le nombre de fois que la chaine de caractères doit être repétée dans la nouvelle chaine de caractères.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères composée du nombre indiqué de copies de la chaîne appelante.

- -

Exceptions

- - - -
-
{{jsxref("RangeError")}}
-
La compteur doit être positif et inférieur à l'infini.
-
- -

Exemples

- -
"abc".repeat(-1)     // RangeError
-"abc".repeat(0)      // ""
-"abc".repeat(1)      // "abc"
-"abc".repeat(2)      // "abcabc"
-"abc".repeat(3.5)    // "abcabcabc" (le compteur est converti en un nombre entier)
-"abc".repeat(1/0)    // RangeError
-
-({toString : () => "abc", repeat : String.prototype.repeat}).repeat(2)
-// "abcabc" (repeat() est une méthode générique)
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaire
{{SpecName('ES2015', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}{{Spec2('ES2015')}}Première définition.
{{SpecName('ESDraft', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.repeat")}}

diff --git a/files/fr/web/javascript/reference/global_objects/string/repeat/index.md b/files/fr/web/javascript/reference/global_objects/string/repeat/index.md new file mode 100644 index 0000000000..77600fdf96 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/repeat/index.md @@ -0,0 +1,84 @@ +--- +title: String.prototype.repeat() +slug: Web/JavaScript/Reference/Global_Objects/String/repeat +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - String + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/String/repeat +original_slug: Web/JavaScript/Reference/Objets_globaux/String/repeat +--- +
{{JSRef}}
+ +

La méthode repeat() construit et renvoie une nouvelle chaine de caractères qui contient le nombre de copie demandée de la chaine de caractères sur laquelle la méthode a été appelée, concaténées les unes aux autres.

+ +
{{EmbedInteractiveExample("pages/js/string-repeat.html")}}
+ +

Syntaxe

+ +
str.repeat(compte)
+ +

Paramètres

+ +
+
compte
+
Un nombre entier entre 0 and +∞ : [ 0, +∞[, indiquant le nombre de fois que la chaine de caractères doit être repétée dans la nouvelle chaine de caractères.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères composée du nombre indiqué de copies de la chaîne appelante.

+ +

Exceptions

+ + + +
+
{{jsxref("RangeError")}}
+
La compteur doit être positif et inférieur à l'infini.
+
+ +

Exemples

+ +
"abc".repeat(-1)     // RangeError
+"abc".repeat(0)      // ""
+"abc".repeat(1)      // "abc"
+"abc".repeat(2)      // "abcabc"
+"abc".repeat(3.5)    // "abcabcabc" (le compteur est converti en un nombre entier)
+"abc".repeat(1/0)    // RangeError
+
+({toString : () => "abc", repeat : String.prototype.repeat}).repeat(2)
+// "abcabc" (repeat() est une méthode générique)
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaire
{{SpecName('ES2015', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}{{Spec2('ES2015')}}Première définition.
{{SpecName('ESDraft', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.repeat")}}

diff --git a/files/fr/web/javascript/reference/global_objects/string/replace/index.html b/files/fr/web/javascript/reference/global_objects/string/replace/index.html deleted file mode 100644 index 69816aace6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/replace/index.html +++ /dev/null @@ -1,306 +0,0 @@ ---- -title: String.prototype.replace() -slug: Web/JavaScript/Reference/Global_Objects/String/replace -tags: - - Chaîne - - Expression - - JavaScript - - Méthode - - Prototype - - Reference - - Régulière -translation_of: Web/JavaScript/Reference/Global_Objects/String/replace -original_slug: Web/JavaScript/Reference/Objets_globaux/String/replace ---- -
{{JSRef}}
- -

La méthode replace() renvoie une nouvelle chaîne de caractères dans laquelle tout ou partie des correspondances à un modèle sont remplacées par un remplacement. Le modèle utilisé peut être une {{jsxref("RegExp")}} et le remplacement peut être une chaîne ou une fonction à appeler pour chaque correspondance. Si modèle est une chaîne de caractères, seule la première correspondance sera remplacée.

- -

La chaîne de caractère originale reste inchangée.

- -
{{EmbedInteractiveExample("pages/js/string-replace.html")}}
- -

Syntaxe

- -
chn.replace(regexp|souschn, nouvSouschn|fonction)
- -

Paramètres

- -
-
regexp (modèle)
-
Un objet ou un littéral {{jsxref("RegExp")}}. La ou les correspondances sont remplacées  par nouvSouschn ou par la valeur retournée par la fonction indiquée.
-
souschn (modèle)
-
Une {{jsxref("String")}} qui est à remplacer par nouvSouschn. Elle est traitée comme une chaîne de caractères verbatim et elle n'est pas interprétée comme une expression régulière. Seule la première occurrence sera remplacée.
-
nouvSouschn (remplacement)
-
La {{jsxref("String")}} qui remplace la chaîne de caractères indiquée par le paramètre regexp ou souschn. Un certain nombre de modèles de remplacement spéciaux sont supportés ; voir la section "Indiquer une chaîne de caractères comme paramètre" ci-dessous.
-
fonction (remplacement)
-
Une fonction à appeler pour créer la nouvelle sous-chaîne de caractères à utiliser pour remplacer la regexp ou la souschn donnée. Les arguments passés à cette fonction sont décrits dans la section "Indiquer une fonction comme paramètre" ci-dessous.
-
- -

Valeur retournée

- -

Une nouvelle chaîne de caractères avec tout ou partie des correspondances du modèle remplacées par un remplacement.

- -

Description

- -

Cette méthode ne change pas l'objet {{jsxref("String")}} auquel elle est appliquée. Elle retourne simplement une nouvelle chaîne de caractères.

- -

Pour réaliser une recherche et remplacement global(e), incluez le commutateur g dans l'expression régulière.

- -

Indiquer une chaîne de caractère comme paramètre

- -

La chaîne de caractère de remplacement peut inclure les modèles de remplacement spéciaux suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModèleInsère
$$Insère un "$".
$&Insère la chaine de caractère en correspondance.
$`Insère la partie de la chaîne de caractère qui précède la sous-chaîne en correspondance.
$'Insère la partie de la chaîne de caractère qui suit la sous-chaîne en correspondance.
$n -

Où n est un entier positif inférieur à 100. Insère la n ième chaîne de sous-correspondance entre parenthèses, à condition que le premier argument ait été un objet {{jsxref("RegExp")}}. Notez que ceci est réalisé en indices base 1.

-
- -

Indiquer une fonction comme paramètre

- -

Vous pouvez indiquer une fonction comme second paramètre. Dans ce cas, cette fonction sera appelée après que la recherche a été effectuée. Le résultat de la fonction (valeur retournée) sera utilisé comme chaîne de remplacement. (Note : les modèles de remplacement spéciaux mentionnés ci-dessus ne s'appliquent pas dans ce cas). Notez que cette fonction sera appelée plusieurs fois, pour chaque correspondance complète à remplacer si l'expression régulière dans le premier paramètre est globale.

- -

Les arguments de cette fonction sont les suivants :

- - - - - - - - - - - - - - - - - - - - - - - - -
Nom possibleValeur fournie
correspondanceLa chaîne de caractère en correspondance. (Correspond au $& défini ci-dessus.)
p1, p2, ... -

La n-ième chaîne de sous-correspondance entre parenthèses capturantes, à condition que le premier argument de replace() soit un objet RegExp. (Correspond aux $1, $2, etc. ci-dessus.) Par exemple, si /(\a+)(\b+)/ a été indiqué, p1 correspond à \a+, et p2 à \b+.

-
decalageLe décalage entre la sous-chaîne en correspondance à l'intérieur de la chaîne complète en cours d'analyse. (Par exemple, si la chaîne complète était 'abcd', et que le chaîne en correspondance était 'bc', alors cet argument vaudra 1.)
chaineLa chaîne complète en cours d'analyse.
- -

(Le nombre exact d'arguments varie suivant que le premier paramètre est ou non un objet {{jsxref("RegExp")}} et, dans ce cas, du nombre de sous-correspondances entre parenthèses qu'il indique.)

- -

L'exemple suivant affectera 'abc - 12345 - #$*%' à la variable nouvelleChaine :

- -
function remplaceur(correspondance, p1, p2, p3, decalage, chaine) {
-  // p1 est non numérique, p2 numérique, et p3 non-alphanumérique
-  return [p1, p2, p3].join(' - ');
-}
-var nouvelleChaine = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, remplaceur);
-console.log(nouvelleChaine); // abc - 12345 - #$*%
-
- -

Exemples

- -

Définition de l'expression régulière dans replace()

- -

Dans l'exemple suivant, l'expression régulière est définie dans replace() et inclut l'indicateur d'indifférence à la casse.

- -
var chn = 'Twas the night before Xmas...';
-var nouvChn = chn.replace(/xmas/i, 'Christmas');
-console.log(nouvChn); // Twas the night before Christmas...
- -

Cela affiche 'Twas the night before Christmas...'.

- -
-

Note : Voir ce guide pour plus d'explications concernant les expressions régulières.

-
- -

Utilisation de global et ignore avec replace()

- -

Le remplacement global ne peut être fait qu'avec une expression régulière. Dans l'exemple suivant, l'expression régulière inclut les indicateurs global et indifférence à la casse, qui permettent à replace() de remplacer chaque occurrence de 'pommes' dans la chaîne par 'oranges'.

- -
var re = /pommes/gi;
-var chn = 'Les pommes sont rondes, et les pommes sont juteuses.';
-var nouvChn = chn.replace(re, 'oranges');
-console.log(nouvChn); // Les oranges sont rondes, et les oranges sont juteuses.
-
- -

Cela affiche 'Les oranges sont rondes, et les oranges sont juteuses.'.

- -

Inverser des mots dans une chaîne de caractères

- -

Le script suivant intervertit les mots dans la chaîne de caractères. Pour le texte de remplacement, le script utilise les modèles de remplacement $1 et $2.

- -
var re = /(\w+)\s(\w+)/;
-var chn = 'Jean Martin';
-var nouvChn = chn.replace(re, "$2, $1");
-console.log(nouvChn); // Martin, Jean
-
- -

Cela affiche 'Martin, Jean'.

- -

Utilisation d'une fonction inline modifiant les caractères en correspondance

- -

Dans cet exemple, toutes les occurrences des lettres majuscules sont converties en minuscules, et un tiret est inséré juste avant l'emplacement de la correspondance. La chose importante ici est que des opérations suppémentaires sont nécessaires sur l'élément en correspondance avant qu'il ne soit retourné comme remplacement.

- -

La fonction de remplacement accepte le fragment en correspondance comme paramètre, et elle l'utilise pour transformer sa casse et y concaténer le tiret avant de le retourner.

- -
function styleFormatTiret(nomPropriete) {
-  function majusculesEnTiretMinuscules(correspondance, decalage, chaine) {
-    return (decalage > 0 ? '-' : '') + correspondance.toLowerCase();
-  }
-  return nomPropriete.replace(/[A-Z]/g, majusculesEnTiretMinuscules);
-}
-
- -

Avec styleFormatTiret('borderTop'), cela renvoie 'border-top'.

- -

Du fait que nous voulons transformer davantage le résultat de la correspondance avant la substitution finale, nous devons utiliser une fonction. Cela force l'évaluation de la correspondance avant la méthode {{jsxref ("String.prototype.toLowerCase()", "toLowerCase()")}}. Si nous avions essayé de le faire en utilisant la correspondance sans fonction, le {{jsxref ("String.prototype.toLowerCase()", "toLowerCase()")}} n'aurait eu aucun effet.

- -
var nouvChn = nomPropriete.replace(/[A-Z]/g, '-' + '$&'.toLowerCase()); // ne fonctionne pas
-
- -

Ceci est dû au fait que '$&'.toLowerCase() serait d'abord évalué comme un littéral de chaîne (résultant en le même '$&') avant d'utiliser les caractères comme modèle.

- -

Remplacer un degré Fahrenheit par son équivalent Celsius

- -

L'exemple suivant remplace des degrés Fahrenheit par leur équivalent en degrés Celsius. Les degrés Fahrenheit doivent être un nombre se terminant par F. La fonction renvoie le nombre en Celsius se terminant par C. Par exemple, si le nombre de départ est 212F, la fonction renvoie 100C. Si le nombre de départ est 0F, la fonction retourne -17.77777777777778C.

- -

L'expression régulière test vérifie tout nombre se terminant par F. Le nombre de degrés Fahrenheit est accessible à la fonction via son deuxième paramètre, p1. La fonction définit le nombre Celsius sur la base des degrés Fahrenheit transmis dans une chaîne à la fonction f2c(). f2c() renvoie ensuite le nombre Celsius. Cette fonction se rapproche de l'indicateur s///e de Perl.

- -
function f2c(x) {
-  function convertir(chn, p1, decalage, s) {
-    return ((p1-32) * 5/9) + 'C';
-  }
-  var s = String(x);
-  var test = /(-?\d+(?:\.\d*)?)F\b/g;
-  return s.replace(test, convertir);
-}
-
- -

Utiliser une fonction inline avec une expression régulière pour éviter des boucles for

- -

L'exemple suivant accepte un modèle chaîne et le convertit en un tableau d'objets.

- -

Entrée :

- -

Une chaîne de caractères composée des caractères x, - et _

- -
x-x_
-x---x---x---x---
-x-xxx-xx-x-
-x_x_x___x___x___
- -
Sortie :
- -
- -
Un tableau d'objets. Un 'x' dénote un état 'marche', un '-' symbolise un état 'arret' et un  '_' (blanc souligné) symbolise la longueur d'un état 'marche'.
- -
- -
[
-  { marche: true, longueur: 1 },
-  { marche: false, longueur: 1 },
-  { marche: true, longueur: 2 }
-  ...
-]
- -
Fragment :
- -
- -
-
var chn = 'x-x_';
-var tabRet = [];
-chn.replace(/(x_*)|(-)/g, function(correspondance, $1, $2){
-  if($1) tabRet.push({ marche: true, longueur: $1.length });
-  if($2) tabRet.push({ marche: false, longueur: 1 });
-});
-
-console.log(tabRet);
-
- -
Ce fragment génère un tableau de 3 objets au format désiré sans utiliser de boucle for.
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaire
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée en JavaScript 1.2
{{SpecName('ES5.1', '#sec-15.5.4.11', 'String.prototype.replace')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.replace', 'String.prototype.replace')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.replace', 'String.prototype.replace')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.replace")}}

- -

Notes spécifiques à Firefox

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/replace/index.md b/files/fr/web/javascript/reference/global_objects/string/replace/index.md new file mode 100644 index 0000000000..69816aace6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/replace/index.md @@ -0,0 +1,306 @@ +--- +title: String.prototype.replace() +slug: Web/JavaScript/Reference/Global_Objects/String/replace +tags: + - Chaîne + - Expression + - JavaScript + - Méthode + - Prototype + - Reference + - Régulière +translation_of: Web/JavaScript/Reference/Global_Objects/String/replace +original_slug: Web/JavaScript/Reference/Objets_globaux/String/replace +--- +
{{JSRef}}
+ +

La méthode replace() renvoie une nouvelle chaîne de caractères dans laquelle tout ou partie des correspondances à un modèle sont remplacées par un remplacement. Le modèle utilisé peut être une {{jsxref("RegExp")}} et le remplacement peut être une chaîne ou une fonction à appeler pour chaque correspondance. Si modèle est une chaîne de caractères, seule la première correspondance sera remplacée.

+ +

La chaîne de caractère originale reste inchangée.

+ +
{{EmbedInteractiveExample("pages/js/string-replace.html")}}
+ +

Syntaxe

+ +
chn.replace(regexp|souschn, nouvSouschn|fonction)
+ +

Paramètres

+ +
+
regexp (modèle)
+
Un objet ou un littéral {{jsxref("RegExp")}}. La ou les correspondances sont remplacées  par nouvSouschn ou par la valeur retournée par la fonction indiquée.
+
souschn (modèle)
+
Une {{jsxref("String")}} qui est à remplacer par nouvSouschn. Elle est traitée comme une chaîne de caractères verbatim et elle n'est pas interprétée comme une expression régulière. Seule la première occurrence sera remplacée.
+
nouvSouschn (remplacement)
+
La {{jsxref("String")}} qui remplace la chaîne de caractères indiquée par le paramètre regexp ou souschn. Un certain nombre de modèles de remplacement spéciaux sont supportés ; voir la section "Indiquer une chaîne de caractères comme paramètre" ci-dessous.
+
fonction (remplacement)
+
Une fonction à appeler pour créer la nouvelle sous-chaîne de caractères à utiliser pour remplacer la regexp ou la souschn donnée. Les arguments passés à cette fonction sont décrits dans la section "Indiquer une fonction comme paramètre" ci-dessous.
+
+ +

Valeur retournée

+ +

Une nouvelle chaîne de caractères avec tout ou partie des correspondances du modèle remplacées par un remplacement.

+ +

Description

+ +

Cette méthode ne change pas l'objet {{jsxref("String")}} auquel elle est appliquée. Elle retourne simplement une nouvelle chaîne de caractères.

+ +

Pour réaliser une recherche et remplacement global(e), incluez le commutateur g dans l'expression régulière.

+ +

Indiquer une chaîne de caractère comme paramètre

+ +

La chaîne de caractère de remplacement peut inclure les modèles de remplacement spéciaux suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModèleInsère
$$Insère un "$".
$&Insère la chaine de caractère en correspondance.
$`Insère la partie de la chaîne de caractère qui précède la sous-chaîne en correspondance.
$'Insère la partie de la chaîne de caractère qui suit la sous-chaîne en correspondance.
$n +

Où n est un entier positif inférieur à 100. Insère la n ième chaîne de sous-correspondance entre parenthèses, à condition que le premier argument ait été un objet {{jsxref("RegExp")}}. Notez que ceci est réalisé en indices base 1.

+
+ +

Indiquer une fonction comme paramètre

+ +

Vous pouvez indiquer une fonction comme second paramètre. Dans ce cas, cette fonction sera appelée après que la recherche a été effectuée. Le résultat de la fonction (valeur retournée) sera utilisé comme chaîne de remplacement. (Note : les modèles de remplacement spéciaux mentionnés ci-dessus ne s'appliquent pas dans ce cas). Notez que cette fonction sera appelée plusieurs fois, pour chaque correspondance complète à remplacer si l'expression régulière dans le premier paramètre est globale.

+ +

Les arguments de cette fonction sont les suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + +
Nom possibleValeur fournie
correspondanceLa chaîne de caractère en correspondance. (Correspond au $& défini ci-dessus.)
p1, p2, ... +

La n-ième chaîne de sous-correspondance entre parenthèses capturantes, à condition que le premier argument de replace() soit un objet RegExp. (Correspond aux $1, $2, etc. ci-dessus.) Par exemple, si /(\a+)(\b+)/ a été indiqué, p1 correspond à \a+, et p2 à \b+.

+
decalageLe décalage entre la sous-chaîne en correspondance à l'intérieur de la chaîne complète en cours d'analyse. (Par exemple, si la chaîne complète était 'abcd', et que le chaîne en correspondance était 'bc', alors cet argument vaudra 1.)
chaineLa chaîne complète en cours d'analyse.
+ +

(Le nombre exact d'arguments varie suivant que le premier paramètre est ou non un objet {{jsxref("RegExp")}} et, dans ce cas, du nombre de sous-correspondances entre parenthèses qu'il indique.)

+ +

L'exemple suivant affectera 'abc - 12345 - #$*%' à la variable nouvelleChaine :

+ +
function remplaceur(correspondance, p1, p2, p3, decalage, chaine) {
+  // p1 est non numérique, p2 numérique, et p3 non-alphanumérique
+  return [p1, p2, p3].join(' - ');
+}
+var nouvelleChaine = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, remplaceur);
+console.log(nouvelleChaine); // abc - 12345 - #$*%
+
+ +

Exemples

+ +

Définition de l'expression régulière dans replace()

+ +

Dans l'exemple suivant, l'expression régulière est définie dans replace() et inclut l'indicateur d'indifférence à la casse.

+ +
var chn = 'Twas the night before Xmas...';
+var nouvChn = chn.replace(/xmas/i, 'Christmas');
+console.log(nouvChn); // Twas the night before Christmas...
+ +

Cela affiche 'Twas the night before Christmas...'.

+ +
+

Note : Voir ce guide pour plus d'explications concernant les expressions régulières.

+
+ +

Utilisation de global et ignore avec replace()

+ +

Le remplacement global ne peut être fait qu'avec une expression régulière. Dans l'exemple suivant, l'expression régulière inclut les indicateurs global et indifférence à la casse, qui permettent à replace() de remplacer chaque occurrence de 'pommes' dans la chaîne par 'oranges'.

+ +
var re = /pommes/gi;
+var chn = 'Les pommes sont rondes, et les pommes sont juteuses.';
+var nouvChn = chn.replace(re, 'oranges');
+console.log(nouvChn); // Les oranges sont rondes, et les oranges sont juteuses.
+
+ +

Cela affiche 'Les oranges sont rondes, et les oranges sont juteuses.'.

+ +

Inverser des mots dans une chaîne de caractères

+ +

Le script suivant intervertit les mots dans la chaîne de caractères. Pour le texte de remplacement, le script utilise les modèles de remplacement $1 et $2.

+ +
var re = /(\w+)\s(\w+)/;
+var chn = 'Jean Martin';
+var nouvChn = chn.replace(re, "$2, $1");
+console.log(nouvChn); // Martin, Jean
+
+ +

Cela affiche 'Martin, Jean'.

+ +

Utilisation d'une fonction inline modifiant les caractères en correspondance

+ +

Dans cet exemple, toutes les occurrences des lettres majuscules sont converties en minuscules, et un tiret est inséré juste avant l'emplacement de la correspondance. La chose importante ici est que des opérations suppémentaires sont nécessaires sur l'élément en correspondance avant qu'il ne soit retourné comme remplacement.

+ +

La fonction de remplacement accepte le fragment en correspondance comme paramètre, et elle l'utilise pour transformer sa casse et y concaténer le tiret avant de le retourner.

+ +
function styleFormatTiret(nomPropriete) {
+  function majusculesEnTiretMinuscules(correspondance, decalage, chaine) {
+    return (decalage > 0 ? '-' : '') + correspondance.toLowerCase();
+  }
+  return nomPropriete.replace(/[A-Z]/g, majusculesEnTiretMinuscules);
+}
+
+ +

Avec styleFormatTiret('borderTop'), cela renvoie 'border-top'.

+ +

Du fait que nous voulons transformer davantage le résultat de la correspondance avant la substitution finale, nous devons utiliser une fonction. Cela force l'évaluation de la correspondance avant la méthode {{jsxref ("String.prototype.toLowerCase()", "toLowerCase()")}}. Si nous avions essayé de le faire en utilisant la correspondance sans fonction, le {{jsxref ("String.prototype.toLowerCase()", "toLowerCase()")}} n'aurait eu aucun effet.

+ +
var nouvChn = nomPropriete.replace(/[A-Z]/g, '-' + '$&'.toLowerCase()); // ne fonctionne pas
+
+ +

Ceci est dû au fait que '$&'.toLowerCase() serait d'abord évalué comme un littéral de chaîne (résultant en le même '$&') avant d'utiliser les caractères comme modèle.

+ +

Remplacer un degré Fahrenheit par son équivalent Celsius

+ +

L'exemple suivant remplace des degrés Fahrenheit par leur équivalent en degrés Celsius. Les degrés Fahrenheit doivent être un nombre se terminant par F. La fonction renvoie le nombre en Celsius se terminant par C. Par exemple, si le nombre de départ est 212F, la fonction renvoie 100C. Si le nombre de départ est 0F, la fonction retourne -17.77777777777778C.

+ +

L'expression régulière test vérifie tout nombre se terminant par F. Le nombre de degrés Fahrenheit est accessible à la fonction via son deuxième paramètre, p1. La fonction définit le nombre Celsius sur la base des degrés Fahrenheit transmis dans une chaîne à la fonction f2c(). f2c() renvoie ensuite le nombre Celsius. Cette fonction se rapproche de l'indicateur s///e de Perl.

+ +
function f2c(x) {
+  function convertir(chn, p1, decalage, s) {
+    return ((p1-32) * 5/9) + 'C';
+  }
+  var s = String(x);
+  var test = /(-?\d+(?:\.\d*)?)F\b/g;
+  return s.replace(test, convertir);
+}
+
+ +

Utiliser une fonction inline avec une expression régulière pour éviter des boucles for

+ +

L'exemple suivant accepte un modèle chaîne et le convertit en un tableau d'objets.

+ +

Entrée :

+ +

Une chaîne de caractères composée des caractères x, - et _

+ +
x-x_
+x---x---x---x---
+x-xxx-xx-x-
+x_x_x___x___x___
+ +
Sortie :
+ +
+ +
Un tableau d'objets. Un 'x' dénote un état 'marche', un '-' symbolise un état 'arret' et un  '_' (blanc souligné) symbolise la longueur d'un état 'marche'.
+ +
+ +
[
+  { marche: true, longueur: 1 },
+  { marche: false, longueur: 1 },
+  { marche: true, longueur: 2 }
+  ...
+]
+ +
Fragment :
+ +
+ +
+
var chn = 'x-x_';
+var tabRet = [];
+chn.replace(/(x_*)|(-)/g, function(correspondance, $1, $2){
+  if($1) tabRet.push({ marche: true, longueur: $1.length });
+  if($2) tabRet.push({ marche: false, longueur: 1 });
+});
+
+console.log(tabRet);
+
+ +
Ce fragment génère un tableau de 3 objets au format désiré sans utiliser de boucle for.
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaire
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée en JavaScript 1.2
{{SpecName('ES5.1', '#sec-15.5.4.11', 'String.prototype.replace')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-string.prototype.replace', 'String.prototype.replace')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-string.prototype.replace', 'String.prototype.replace')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.replace")}}

+ +

Notes spécifiques à Firefox

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/replaceall/index.html b/files/fr/web/javascript/reference/global_objects/string/replaceall/index.html deleted file mode 100644 index c06b93eca3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/replaceall/index.html +++ /dev/null @@ -1,167 +0,0 @@ ---- -title: String.prototype.replaceAll() -slug: Web/JavaScript/Reference/Global_Objects/String/replaceAll -translation_of: Web/JavaScript/Reference/Global_Objects/String/replaceAll -original_slug: Web/JavaScript/Reference/Objets_globaux/String/replaceAll ---- -
{{JSRef}}
- -

La méthode replaceAll() retourne une nouvelle chaîne de caractères dans laquelle toutes les occurrences d'un motif donné ont été remplacées par une chaîne de remplacement. L'argument pattern fournit pour décrire le motif peut être une chaîne de caractères ou une expression rationnelle (RegExp), l'argument replacement peut être une chaîne de caractères ou une fonction qui sera appelée pour chaque correspondance.

- -

La chaîne de caractères initiale restera inchangée.

- -
{{EmbedInteractiveExample("pages/js/string-replaceall.html")}}
- -

Syntaxe

- -
const newStr = str.replaceAll(regexp|substr, newSubstr|function)
-
- -
-

Note : Quand on utilise une expression rationnelle, il est nécessaire d'utiliser le marqueur global ("g"); autrement, l'exception TypeError: "replaceAll must be called with a global RegExp" sera levée.

-
- -

Paramètres

- -
-
regexp (le motif à rechercher)
-
Un objet ou littérale RegExp avec le marqueur global. Les correspondances sont remplacées par newSubstr ou la valeur retournée par la function spécifiée. Une RegExp sans le marqueur global ("g") renverra l'erreur TypeError: "replaceAll must be called with a global RegExp".
-
substr
-
Une chaîne de caractères (String) qui sera remplacée par newSubstr. Elle est traitée comme une chaîne de caracères littérale et non pas comme une expression régulière.
-
newSubstr (remplacement)
-
La chaîne de caractères (String) qui remplacera la sous-chaîne indiquée par la regexp ou substr donnée en paramètre. Un certain nombre de motifs spéciaux pour le remplacement sont pris en charge, voir la section "Spécifier une chaîne de caractères comme paramètre" ci-dessous.
-
function (remplacement)
-
Une fonction qui a pour but de créer la nouvelle sous-chaîne qui remplacera les occurrences trouvées via la regexp ou substr donnée en paramètre. Les arguments passés à cette fonction sont détaillés dans la section "Spécifier une fonction comme paramètre" ci-dessous.
-
- -

Valeur de retour

- -

Une nouvelle chaîne avec toutes les occurrences trouvées remplacées par le pattern de remplacement.

- -

Description

- -

Cette méthode ne remplace ni ne modifie l'objet String original. Elle retourne juste une nouvelle chaîne de caractères.

- -

Spécifier une chaîne de caractères comme paramètre

- -

La chaîne de caractères de remplacement peut inclure les motifs de remplacement spéciaux suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MotifInsertion
$$Insère un "$".
$&Insère la chaîne de caractères trouvée.
$`Insère la portion de chaîne de caractères qui précède celle trouvée.
$'Insère la portion de chaîne de caractères qui suit celle trouvée.
$nn est un entier positif inférieur à 100. Insère la n-ième occurrence trouvée, à condition que le premier argument soit un objet RegExp. Cet indice démarre à partir de 1.
- -

Spécifier une fonction comme paramètre

- -

Vous pouvez passer une fonction comme second paramètre. Dans ce cas, la fonction sera appelée après qu'une occurrence soit trouvée. Le résultat de la fonction (valeur de retour) sera utilisé comme chaîne de remplacement. (Note : les remplacements spéciaux mentionnés plus haut ne s'appliqueront pas dans ce cas.)

- -

À noter que la fonction sera utilisée à chaque fois qu'une occurrence sera rencontrée, si l'expression régulière donnée en paramètre est globale.

- -

La fonction admet les arguments suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Nom possibleValeur fournie
matchL'occurrence trouvée. (Correspond au $& du précédent tableau.)
p1, p2… -

Le n-ième chaîne de caractères trouvée par une sous-correspondance entre parenthèses, à condition que le premier paramètre soit un objet de type RegExp.
- (Correspond aux $1, $2… précédents.) Par exemple, si /(\a+)(\b+)/ a été passé en paramètre, p1 est la correspondance pour \a+, et p2 pour \b+.

-
offsetLe décalage de la sous-chaîne trouvée dans la chaîne d'entrée (par exemple, si la chaîne complète d'entrée était 'abcd' et la sous-chaîne 'bc' alors, cet argument vaudra 1.)
stringLa chaîne compète examinée.
- -

Le nombre d'arguments exact dépend du premier argument de replaceAll() : si c'est un objet de type RegExp et, si tel est le cas, du nombre de sous-correspondances entre parenthèses qu'il spécifie.

- -

Exemples

- -

Utiliser replaceAll()

- -
'aabbcc'.replaceAll('b', '.');
-// 'aa..cc'
- -

Exceptions pour les expressions rationnelles non globales

- -

Quand on utilise une expression rationnelle pour chercher une valeur, celle-ci doit être globale. Le code suivant ne fonctionnera pas :

- -
'aabbcc'.replaceAll(/b/, '.');
-TypeError: replaceAll must be called with a global RegExp
-
- -

L'exemple suivant, utilisant le marqueur g, fonctionnera :

- -
'aabbcc'.replaceAll(/b/g, '.');
-"aa..cc"
-
- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('ESDraft', '#sec-string.prototype.replaceall', 'String.prototype.replaceAll')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.replaceAll")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/replaceall/index.md b/files/fr/web/javascript/reference/global_objects/string/replaceall/index.md new file mode 100644 index 0000000000..c06b93eca3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/replaceall/index.md @@ -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 +original_slug: Web/JavaScript/Reference/Objets_globaux/String/replaceAll +--- +
{{JSRef}}
+ +

La méthode replaceAll() retourne une nouvelle chaîne de caractères dans laquelle toutes les occurrences d'un motif donné ont été remplacées par une chaîne de remplacement. L'argument pattern fournit pour décrire le motif peut être une chaîne de caractères ou une expression rationnelle (RegExp), l'argument replacement peut être une chaîne de caractères ou une fonction qui sera appelée pour chaque correspondance.

+ +

La chaîne de caractères initiale restera inchangée.

+ +
{{EmbedInteractiveExample("pages/js/string-replaceall.html")}}
+ +

Syntaxe

+ +
const newStr = str.replaceAll(regexp|substr, newSubstr|function)
+
+ +
+

Note : Quand on utilise une expression rationnelle, il est nécessaire d'utiliser le marqueur global ("g"); autrement, l'exception TypeError: "replaceAll must be called with a global RegExp" sera levée.

+
+ +

Paramètres

+ +
+
regexp (le motif à rechercher)
+
Un objet ou littérale RegExp avec le marqueur global. Les correspondances sont remplacées par newSubstr ou la valeur retournée par la function spécifiée. Une RegExp sans le marqueur global ("g") renverra l'erreur TypeError: "replaceAll must be called with a global RegExp".
+
substr
+
Une chaîne de caractères (String) qui sera remplacée par newSubstr. Elle est traitée comme une chaîne de caracères littérale et non pas comme une expression régulière.
+
newSubstr (remplacement)
+
La chaîne de caractères (String) qui remplacera la sous-chaîne indiquée par la regexp ou substr donnée en paramètre. Un certain nombre de motifs spéciaux pour le remplacement sont pris en charge, voir la section "Spécifier une chaîne de caractères comme paramètre" ci-dessous.
+
function (remplacement)
+
Une fonction qui a pour but de créer la nouvelle sous-chaîne qui remplacera les occurrences trouvées via la regexp ou substr donnée en paramètre. Les arguments passés à cette fonction sont détaillés dans la section "Spécifier une fonction comme paramètre" ci-dessous.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne avec toutes les occurrences trouvées remplacées par le pattern de remplacement.

+ +

Description

+ +

Cette méthode ne remplace ni ne modifie l'objet String original. Elle retourne juste une nouvelle chaîne de caractères.

+ +

Spécifier une chaîne de caractères comme paramètre

+ +

La chaîne de caractères de remplacement peut inclure les motifs de remplacement spéciaux suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MotifInsertion
$$Insère un "$".
$&Insère la chaîne de caractères trouvée.
$`Insère la portion de chaîne de caractères qui précède celle trouvée.
$'Insère la portion de chaîne de caractères qui suit celle trouvée.
$nn est un entier positif inférieur à 100. Insère la n-ième occurrence trouvée, à condition que le premier argument soit un objet RegExp. Cet indice démarre à partir de 1.
+ +

Spécifier une fonction comme paramètre

+ +

Vous pouvez passer une fonction comme second paramètre. Dans ce cas, la fonction sera appelée après qu'une occurrence soit trouvée. Le résultat de la fonction (valeur de retour) sera utilisé comme chaîne de remplacement. (Note : les remplacements spéciaux mentionnés plus haut ne s'appliqueront pas dans ce cas.)

+ +

À noter que la fonction sera utilisée à chaque fois qu'une occurrence sera rencontrée, si l'expression régulière donnée en paramètre est globale.

+ +

La fonction admet les arguments suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Nom possibleValeur fournie
matchL'occurrence trouvée. (Correspond au $& du précédent tableau.)
p1, p2… +

Le n-ième chaîne de caractères trouvée par une sous-correspondance entre parenthèses, à condition que le premier paramètre soit un objet de type RegExp.
+ (Correspond aux $1, $2… précédents.) Par exemple, si /(\a+)(\b+)/ a été passé en paramètre, p1 est la correspondance pour \a+, et p2 pour \b+.

+
offsetLe décalage de la sous-chaîne trouvée dans la chaîne d'entrée (par exemple, si la chaîne complète d'entrée était 'abcd' et la sous-chaîne 'bc' alors, cet argument vaudra 1.)
stringLa chaîne compète examinée.
+ +

Le nombre d'arguments exact dépend du premier argument de replaceAll() : si c'est un objet de type RegExp et, si tel est le cas, du nombre de sous-correspondances entre parenthèses qu'il spécifie.

+ +

Exemples

+ +

Utiliser replaceAll()

+ +
'aabbcc'.replaceAll('b', '.');
+// 'aa..cc'
+ +

Exceptions pour les expressions rationnelles non globales

+ +

Quand on utilise une expression rationnelle pour chercher une valeur, celle-ci doit être globale. Le code suivant ne fonctionnera pas :

+ +
'aabbcc'.replaceAll(/b/, '.');
+TypeError: replaceAll must be called with a global RegExp
+
+ +

L'exemple suivant, utilisant le marqueur g, fonctionnera :

+ +
'aabbcc'.replaceAll(/b/g, '.');
+"aa..cc"
+
+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('ESDraft', '#sec-string.prototype.replaceall', 'String.prototype.replaceAll')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.replaceAll")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/search/index.html b/files/fr/web/javascript/reference/global_objects/string/search/index.html deleted file mode 100644 index aa1828528f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/search/index.html +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: String.prototype.search() -slug: Web/JavaScript/Reference/Global_Objects/String/search -tags: - - Expressions rationnelles - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/search -original_slug: Web/JavaScript/Reference/Objets_globaux/String/search ---- -
{{JSRef}}
- -

La méthode search() éxecute une recherche dans une chaine de caractères grâce à une expression rationnelle appliquée sur la chaîne courante.

- -
{{EmbedInteractiveExample("pages/js/string-search.html")}}
- -

Syntaxe

- -
str.search(regexp)
- -

Paramètres

- -
-
regexp
-
Un objet représentant une expression rationnelle. Si l'objet passé n'est pas un objet d'expression régulière, il est directement converti en une instance de {{jsxref("RegExp")}} en utilisant new RegExp(obj).
-
- -

Valeur de retour

- -

Si la recherche aboutit, search() renvoie un entier qui correspond à l'indice de la première correspondance trouvée dans la chaîne. Si rien n'est trouvé, la méthode renvoie -1.

- -

Description

- -

Si la recherche est positive, search() renvoie l'indice de la première correspondance pour l'expression rationnelle au sein de la chaine de caractères. Sinon, la méthode renvoie -1.

- -

Si on souhaite savoir si un motif est trouvé dans une chaine de caractères, on utilisera cette méthode (semblable à la méthode {{jsxref("RegExp.prototype.test", "test()")}}) du prototype de RegExp ; pour plus d'informations (mais une éxecution plus lente), on utilisera {{jsxref("String.prototype.match", "match()")}} (semblable à la méthode {{jsxref("RegExp.prototype.exec", "exec()")}} pour les expressions rationnelles). La méthode test est semblable mais renvoie uniquement un booléen indiquant si une correspondance a été trouvée.

- -

Exemples

- -

Dans l'exemple suivant, on utilise une chaîne de caractères pour laquelle on applique deux expressions rationnelles (la première permet d'obtenir une correspondance et la seconde n'en trouve aucune).

- -
var maChaine = "CoucOu";
-var regex1 = /[A-Z]/g;
-var regex2 = /[.]/g;
-
-console.log(maChaine.search(regex1)); // Renvoie 0, la position de la première majuscule
-console.log(maChaine.search(regex2)); // Renvoie -1 car il n'y a aucun point dans la chaîne
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-15.5.4.12', 'String.prototype.search')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.search', 'String.prototype.search')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.search', 'String.prototype.search')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Notes spécifiques à Gecko

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/search/index.md b/files/fr/web/javascript/reference/global_objects/string/search/index.md new file mode 100644 index 0000000000..aa1828528f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/search/index.md @@ -0,0 +1,103 @@ +--- +title: String.prototype.search() +slug: Web/JavaScript/Reference/Global_Objects/String/search +tags: + - Expressions rationnelles + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/search +original_slug: Web/JavaScript/Reference/Objets_globaux/String/search +--- +
{{JSRef}}
+ +

La méthode search() éxecute une recherche dans une chaine de caractères grâce à une expression rationnelle appliquée sur la chaîne courante.

+ +
{{EmbedInteractiveExample("pages/js/string-search.html")}}
+ +

Syntaxe

+ +
str.search(regexp)
+ +

Paramètres

+ +
+
regexp
+
Un objet représentant une expression rationnelle. Si l'objet passé n'est pas un objet d'expression régulière, il est directement converti en une instance de {{jsxref("RegExp")}} en utilisant new RegExp(obj).
+
+ +

Valeur de retour

+ +

Si la recherche aboutit, search() renvoie un entier qui correspond à l'indice de la première correspondance trouvée dans la chaîne. Si rien n'est trouvé, la méthode renvoie -1.

+ +

Description

+ +

Si la recherche est positive, search() renvoie l'indice de la première correspondance pour l'expression rationnelle au sein de la chaine de caractères. Sinon, la méthode renvoie -1.

+ +

Si on souhaite savoir si un motif est trouvé dans une chaine de caractères, on utilisera cette méthode (semblable à la méthode {{jsxref("RegExp.prototype.test", "test()")}}) du prototype de RegExp ; pour plus d'informations (mais une éxecution plus lente), on utilisera {{jsxref("String.prototype.match", "match()")}} (semblable à la méthode {{jsxref("RegExp.prototype.exec", "exec()")}} pour les expressions rationnelles). La méthode test est semblable mais renvoie uniquement un booléen indiquant si une correspondance a été trouvée.

+ +

Exemples

+ +

Dans l'exemple suivant, on utilise une chaîne de caractères pour laquelle on applique deux expressions rationnelles (la première permet d'obtenir une correspondance et la seconde n'en trouve aucune).

+ +
var maChaine = "CoucOu";
+var regex1 = /[A-Z]/g;
+var regex2 = /[.]/g;
+
+console.log(maChaine.search(regex1)); // Renvoie 0, la position de la première majuscule
+console.log(maChaine.search(regex2)); // Renvoie -1 car il n'y a aucun point dans la chaîne
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-15.5.4.12', 'String.prototype.search')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.search', 'String.prototype.search')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.search', 'String.prototype.search')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes spécifiques à Gecko

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/slice/index.html b/files/fr/web/javascript/reference/global_objects/string/slice/index.html deleted file mode 100644 index a43faa2bd1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/slice/index.html +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: String.prototype.slice() -slug: Web/JavaScript/Reference/Global_Objects/String/slice -tags: - - Chaîne - - JavaScript - - Méthode - - Prototype - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/String/slice -original_slug: Web/JavaScript/Reference/Objets_globaux/String/slice ---- -
{{JSRef}}
- -

La méthode slice() extrait une section d'une chaine de caractères et la retourne comme une nouvelle chaine de caractères. La chaîne de caractères courante n'est pas modifiée.

- -
{{EmbedInteractiveExample("pages/js/string-slice.html")}}
- -

Syntaxe

- -
chn.slice(indiceDebut[, indiceFin])
- -

Paramètres

- -
-
indiceDebut
-
L'indice base 0 auquel commencer l'extraction. Si négatif, il est traité comme (longueurSource + indiceDebut) où longueurSource est la longueur de la chaine de caractères (par exemple, si indiceDebut est -3, il sera traité comme longueurSource - 3). Si indiceDebut est supérieur à la longueur de la chaîne, slice() renvoie une chaîne vide.
-
indiceFin
-
Paramètre optionnel. Un indice base 0 avant lequel terminer l'extraction. Le caractère à cet indice ne sera pas inclus. Si indiceFin est absent, slice() extraira jusqu'à la fin de la chaine de caractères. Si négatif, il sera traité comme (longueurSource + indiceFin) où longueurSource est la longueur de la chaine de caractères (par exemple s'il vaut -3, il sera traité comme longueurSource - 3)
-
- -

Valeur retournée

- -

Une nouvelle chaîne de caractères contenant la section extraite de la chaîne.

- -

Description

- -

slice() extrait le texte d'une chaine de caractères et retourne une nouvelle chaîne de caractères. Les changements au texte dans une chaine de caractères n'affectent pas l'autre chaîne.

- -

slice() extrait jusqu'à indiceFin, mais sans l'inclure. Par exemple, chn.slice(1, 4) extrait du second caractère jusqu'au quatrième caractère (caractères d'indices 1, 2 et 3).

- -

Par exemple, chn.slice(2, -1) extrait du troisième caractère jusqu'à l'avant-dernier caractère de la chaine de caractères.

- -

Exemples

- -

Utilisation de slice() pour créer une nouvelle chaîne de caractères

- -

L'exemple suivant utilise slice() pour créer une nouvelle chaîne de caractères.

- -
var chn1 = 'Le matin est sur nous.', // la longueur de chn1 est de 22
-    chn2 = chn1.slice(1, 8),
-    chn3 = chn1.slice(3, -2),
-    chn4 = chn1.slice(13),
-    chn5 = chn1.slice(30);
-console.log(chn2); // SORTIE : e matin
-console.log(chn3); // SORTIE : matin est sur nou
-console.log(chn4); // SORTIE : sur nous.
-console.log(chn5); // SORTIE : ""
- -

Utilisation de slice() avec des indices négatifs

- -

L'exemple suivant utilise slice() avec des indices négatifs.

- -
var chn = 'Le matin est sur nous.';
-chn.slice(-3);     // retourne "us."
-chn.slice(-3, -1); // retourne "us"
-chn.slice(0, -1);  // retourne "Le matin est sur nous"
-
- -

Dans l'exemple qui suit, on commence à chercher l'indice de début à partir de la fin de la chaîne avec l'argument -11 et on utilise un indice de fin positif avec 16 :

- -
console.log(chn.slice(-11, 16)); // "st sur"
- -

On utilise ensuite un indice de début positif (la recherche est effectuée depuis le début de la chaîne) et un indice de fin négatif pour parvenir au même résultat :

- -
console.log(chn.slice(10, -5)); // "st sur"
- -

Enfin, on utilise deux indices négatifs : la position de début et la position de fin sont recherchées à parti de la fin de la chaîne :

- -
console.log(chn.slice(-11, -5)); // "st sur"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaire
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée dans JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.13', 'String.prototype.slice')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.slice', 'String.prototype.slice')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.slice', 'String.prototype.slice')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.slice")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/slice/index.md b/files/fr/web/javascript/reference/global_objects/string/slice/index.md new file mode 100644 index 0000000000..a43faa2bd1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/slice/index.md @@ -0,0 +1,126 @@ +--- +title: String.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/String/slice +tags: + - Chaîne + - JavaScript + - Méthode + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/String/slice +original_slug: Web/JavaScript/Reference/Objets_globaux/String/slice +--- +
{{JSRef}}
+ +

La méthode slice() extrait une section d'une chaine de caractères et la retourne comme une nouvelle chaine de caractères. La chaîne de caractères courante n'est pas modifiée.

+ +
{{EmbedInteractiveExample("pages/js/string-slice.html")}}
+ +

Syntaxe

+ +
chn.slice(indiceDebut[, indiceFin])
+ +

Paramètres

+ +
+
indiceDebut
+
L'indice base 0 auquel commencer l'extraction. Si négatif, il est traité comme (longueurSource + indiceDebut) où longueurSource est la longueur de la chaine de caractères (par exemple, si indiceDebut est -3, il sera traité comme longueurSource - 3). Si indiceDebut est supérieur à la longueur de la chaîne, slice() renvoie une chaîne vide.
+
indiceFin
+
Paramètre optionnel. Un indice base 0 avant lequel terminer l'extraction. Le caractère à cet indice ne sera pas inclus. Si indiceFin est absent, slice() extraira jusqu'à la fin de la chaine de caractères. Si négatif, il sera traité comme (longueurSource + indiceFin) où longueurSource est la longueur de la chaine de caractères (par exemple s'il vaut -3, il sera traité comme longueurSource - 3)
+
+ +

Valeur retournée

+ +

Une nouvelle chaîne de caractères contenant la section extraite de la chaîne.

+ +

Description

+ +

slice() extrait le texte d'une chaine de caractères et retourne une nouvelle chaîne de caractères. Les changements au texte dans une chaine de caractères n'affectent pas l'autre chaîne.

+ +

slice() extrait jusqu'à indiceFin, mais sans l'inclure. Par exemple, chn.slice(1, 4) extrait du second caractère jusqu'au quatrième caractère (caractères d'indices 1, 2 et 3).

+ +

Par exemple, chn.slice(2, -1) extrait du troisième caractère jusqu'à l'avant-dernier caractère de la chaine de caractères.

+ +

Exemples

+ +

Utilisation de slice() pour créer une nouvelle chaîne de caractères

+ +

L'exemple suivant utilise slice() pour créer une nouvelle chaîne de caractères.

+ +
var chn1 = 'Le matin est sur nous.', // la longueur de chn1 est de 22
+    chn2 = chn1.slice(1, 8),
+    chn3 = chn1.slice(3, -2),
+    chn4 = chn1.slice(13),
+    chn5 = chn1.slice(30);
+console.log(chn2); // SORTIE : e matin
+console.log(chn3); // SORTIE : matin est sur nou
+console.log(chn4); // SORTIE : sur nous.
+console.log(chn5); // SORTIE : ""
+ +

Utilisation de slice() avec des indices négatifs

+ +

L'exemple suivant utilise slice() avec des indices négatifs.

+ +
var chn = 'Le matin est sur nous.';
+chn.slice(-3);     // retourne "us."
+chn.slice(-3, -1); // retourne "us"
+chn.slice(0, -1);  // retourne "Le matin est sur nous"
+
+ +

Dans l'exemple qui suit, on commence à chercher l'indice de début à partir de la fin de la chaîne avec l'argument -11 et on utilise un indice de fin positif avec 16 :

+ +
console.log(chn.slice(-11, 16)); // "st sur"
+ +

On utilise ensuite un indice de début positif (la recherche est effectuée depuis le début de la chaîne) et un indice de fin négatif pour parvenir au même résultat :

+ +
console.log(chn.slice(10, -5)); // "st sur"
+ +

Enfin, on utilise deux indices négatifs : la position de début et la position de fin sont recherchées à parti de la fin de la chaîne :

+ +
console.log(chn.slice(-11, -5)); // "st sur"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaire
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée dans JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.13', 'String.prototype.slice')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.slice', 'String.prototype.slice')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.slice', 'String.prototype.slice')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.slice")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/small/index.html b/files/fr/web/javascript/reference/global_objects/string/small/index.html deleted file mode 100644 index 5fba5a585f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/small/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: String.prototype.small() -slug: Web/JavaScript/Reference/Global_Objects/String/small -tags: - - Deprecated - - HTML wrapper methods - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/small -original_slug: Web/JavaScript/Reference/Objets_globaux/String/small ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode small() permet de créer un élément HTML {{HTMLElement("small")}}, ce qui permet d'afficher la chaîne de caractères dans une fonte de petite taille.

- -

Syntaxe

- -
str.small()
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("small")}}.

- -

Description

- -

La méthode small() encadre la chaîne courante dans une balise <small> :
- "<small>str</small>"

- -

Exemple

- -

Utiliser la méthode small()

- -

L'exemple suivant illustre les différentes méthodes de String permettant de changer la taille d'une chaîne de caractères :

- -
var worldString = "Coucou monde";
-
-console.log(worldString.small());     // <small>Coucou monde</small>
-console.log(worldString.big());       // <big>Coucou monde</big>
-console.log(worldString.fontsize(7)); // <font size="7">Coucou monde</fontsize>
- -

L'objet {{domxref("HTMLElement.style", "element.style")}} permet d'utiliser l'attribut style de l'élément et de le manipuler de façon générique. Par exemple :

- -
document.getElementById('IDélément').style.fontSize = '0.7em'
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.small', 'String.prototype.small')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.small', 'String.prototype.small')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.small")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/small/index.md b/files/fr/web/javascript/reference/global_objects/string/small/index.md new file mode 100644 index 0000000000..5fba5a585f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/small/index.md @@ -0,0 +1,79 @@ +--- +title: String.prototype.small() +slug: Web/JavaScript/Reference/Global_Objects/String/small +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/small +original_slug: Web/JavaScript/Reference/Objets_globaux/String/small +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode small() permet de créer un élément HTML {{HTMLElement("small")}}, ce qui permet d'afficher la chaîne de caractères dans une fonte de petite taille.

+ +

Syntaxe

+ +
str.small()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("small")}}.

+ +

Description

+ +

La méthode small() encadre la chaîne courante dans une balise <small> :
+ "<small>str</small>"

+ +

Exemple

+ +

Utiliser la méthode small()

+ +

L'exemple suivant illustre les différentes méthodes de String permettant de changer la taille d'une chaîne de caractères :

+ +
var worldString = "Coucou monde";
+
+console.log(worldString.small());     // <small>Coucou monde</small>
+console.log(worldString.big());       // <big>Coucou monde</big>
+console.log(worldString.fontsize(7)); // <font size="7">Coucou monde</fontsize>
+ +

L'objet {{domxref("HTMLElement.style", "element.style")}} permet d'utiliser l'attribut style de l'élément et de le manipuler de façon générique. Par exemple :

+ +
document.getElementById('IDélément').style.fontSize = '0.7em'
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.small', 'String.prototype.small')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.small', 'String.prototype.small')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.small")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/split/index.html b/files/fr/web/javascript/reference/global_objects/string/split/index.html deleted file mode 100644 index 208f978a7d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/split/index.html +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: String.prototype.split() -slug: Web/JavaScript/Reference/Global_Objects/String/split -tags: - - JavaScript - - Method - - Prototype - - Reference - - Regular Expressions - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/split -original_slug: Web/JavaScript/Reference/Objets_globaux/String/split ---- -
{{JSRef}}
- -

La méthode split() divise une chaîne de caractères en une liste ordonnée de sous-chaînes, place ces sous-chaînes dans un tableau et retourne le tableau. La division est effectuée en recherchant un motif ; où le motif est fourni comme premier paramètre dans l'appel de la méthode.

- -
{{EmbedInteractiveExample("pages/js/string-split.html", "taller")}}
- -

Syntaxe

- -
str.split([separator[, limit]])
- -

Paramètres

- -
-
separator Facultatif
-
-

Le motif décrivant où chaque séparation doit se produire. Le separator peut être une simple chaîne de caractères ou peut être une expression régulière.

- -
    -
  • Le cas le plus simple est celui où separator n'est qu'un seul caractère ; il est utilisé pour diviser une chaîne délimitée. Par exemple, une chaîne contenant des valeurs séparées par des tabulations (TSV) pourrait être analysée en passant un caractère de tabulation comme séparateur, comme ceci : myString.split("\t").
  • -
  • Si separator contient plusieurs caractères, cette séquence de caractères entière doit être trouvée afin de diviser la chaîne.
  • -
  • Si separator est omis ou n'apparaît pas dans la chaîne str, le tableau retourné contient un élément constitué de la chaîne entière.
  • -
  • Si separator apparaît au début (ou à la fin) de la chaîne, il a quand même l'effet de division. Le résultat est une chaîne vide (c'est-à-dire de longueur nulle), qui apparaît à la première (ou dernière) position du tableau retourné.
  • -
  • Si separator est une chaîne vide (""), la chaîne str est convertie en un tableau de chacun de ses "caractères" UTF-16.
  • -
- -
-

Attention : Lorsque une chaîne vide ("") est utilisée comme séparateur, la chaîne n'est pas divisée par des caractères perçus par l'utilisateur (grappes de graphèmes) ou des caractères unicodes (codepoints), mais par des unités de code UTF-16. Cela détruit les paires de substituts. Voir « Comment obtenir une chaîne de caractères vers un tableau de caractères en JavaScript ? » sur StackOverflow.

-
-
-
limit Facultatif
-
-

Un nombre entier non négatif spécifiant une limite sur le nombre de sous-chaînes à inclure dans le tableau. S'il est fourni, il divise la chaîne de caractères à chaque occurrence du separator spécifié, mais s'arrête lorsque la limit (limite) d'entrées a été atteinte dans le tableau. Tout texte restant n'est pas du tout inclus dans le tableau.

- -
    -
  • Le tableau peut contenir moins d'entrées que la limit (limite), si la fin de la chaîne de caractères est atteinte avant que la limite ne soit atteinte.
  • -
  • Si limit est paramétré sur 0, un tableau vide [] est retourné.
  • -
-
-
- -

Valeur de retour

- -

Un tableau (Array) qui contient les fragments de la chaîne de caractères, découpée en fonction du séparateur indiqué.

- -

Description

- -

Lorsqu'il est trouvé, separator est supprimé de la chaîne de caractère, et les sous-chaînes sont retournées dans un tableau.

- -

Si separator est une expression régulière avec des parenthèses de capture, alors chaque fois que separator correspond, les résultats (y compris tout résultat undefined) des parenthèses de capture sont joints au tableau de sortie.

- -

Si le séparateur est un tableau, alors ce tableau est converti en une chaîne de caractères et est utilisé comme séparateur.

- -

Exemples

- -

Utiliser split()

- -

Lorsque la chaîne de caractères est vide, split() retourne un tableau contenant une chaîne de caractères vide, plutôt qu'un tableau vide. Si la chaîne et le séparateur sont tous deux des chaînes vides, un tableau vide est retourné.

- -
const myString = ''
-const splits = myString.split()
-
-console.log(splits)
-
-// ↪ [""]
- -

L'exemple suivant définit une fonction qui divise une chaîne en un tableau de chaînes selon un délimiteur spécifié. Après la coupe de la chaîne, la fonction affiche des messages indiquant la chaîne initiale (avant la coupe), le délimiteur utilisé, le nombre d'éléments dans le tableau, et les éléments du tableau retourné.

- -
function splitString(stringToSplit, separator) {
-  var arrayOfStrings = stringToSplit.split(separator);
-
-  console.log(`La chaine d'origine est : ${stringToSplit}`);
-  console.log(`Le délimiteur est : ${separator}`);
-  console.log(`Le tableau comporte ${arrayOfStrings.length} elements : `, arrayOfStrings.join(' / '));
-}
-
-var tempestString = "Oh brave new world that has such people in it.";
-var monthString = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
-
-var espace = " ";
-var virgule = ",";
-
-splitString(tempestString, espace);
-splitString(tempestString);
-splitString(monthString, virgule);
-
- -

Cet exemple produira la sortie suivante :

- -
La chaine d'origine est : "Oh brave new world that has such people in it."
-Le délimiteur est : " "
-Le tableau comporte 10 elements : Oh / brave / new / world / that / has / such / people / in / it. /
-
-La chaine d'origine est : "Oh brave new world that has such people in it."
-Le délimiteur est : "undefined"
-Le tableau comporte 1 elements : Oh brave new world that has such people in it. /
-
-La chaine d'origine est : "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
-Le délimiteur est : ","
-Le tableau comporte 12 elements : Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec /
-
- -

Supprimer les espaces d'une chaîne

- -

Dans l'exemple suivant, split recherche zéro ou plusieurs espaces suivis d'un point-virgule, lui-même suivi par zéro ou plus espaces. Lorsque ce « motif » est trouvé, cela supprime celui-ci de la chaîne. nameList est le tableau retourné du résultat de split.

- -
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";
-
-console.log(names);
-
-var re = /\s*(;|$)\s*/;
-var nameList = names.split(re);
-
-console.log(nameList);
- -

Ceci affichera deux lignes dans la console ; la première ligne correspondant à la chaîne d'origine, et la seconde au tableau de résultats.

- -
Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand
-["Harry Trump","Fred Barney","Helen Rigby","Bill Abel","Chris Hand"]
- -

Retourner un nombre limité de sous-chaînes

- -

Dans l'exemple suivant, split() recherche des espaces dans une chaîne et retourne les 3 premières sous-chaînes qui correspondent.

- -
var myString = "Hello World. How are you doing?";
-var splits = myString.split(" ", 3);
-
-console.log(splits);
- -

Ce script affichera :

- -
["Hello", "World.", "How"]
- -

Découper une expression rationnelle - Parenthèses capturantes

- -

Si le paramètre séparateur est une expression rationnelle qui contient des parenthèses de capture, les résultats seront retournés dans le tableau.

- -
var myString = "Hello 1 word. Sentence number 2.";
-var splits = myString.split(/(\d)/);
-
-console.log(splits);
- -

Ce script affichera :

- -
[ "Hello ", "1", " word. Sentence number ", "2", "." ]
- -
-

Note : \d correspond à la classe de caractères pour les chiffres compris entre 0 et 9.

-
- -

Inverser une chaîne en utilisant split()

- -
-

Attention : Ce n'est pas une façon robuste d'inverser une chaîne :

- -
const str = 'asdfghjkl'
-const strReverse = str.split('').reverse().join('')
-// 'lkjhgfdsa'
-
-// split() retourne un tableau sur lequel reverse() et join() peuvent être appliqués.
- -

Cela ne fonctionne pas si la chaîne de caractères contient des groupes de graphèmes, même en utilisant une division sensible aux unicodes. (Utilisez, par exemple, esrever à la place).

- -
const str = 'résumé'
-const strReverse = str.split(/(?:)/u).reverse().join('')
-// => "́emuśer"
-
- -

Bonus : utiliser l'opérateur === pour tester si la chaîne d'origine est un palindrome.

-
- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('ESDraft', '#sec-string.prototype.split', 'String.prototype.split')}} -
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/split/index.md b/files/fr/web/javascript/reference/global_objects/string/split/index.md new file mode 100644 index 0000000000..208f978a7d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/split/index.md @@ -0,0 +1,212 @@ +--- +title: String.prototype.split() +slug: Web/JavaScript/Reference/Global_Objects/String/split +tags: + - JavaScript + - Method + - Prototype + - Reference + - Regular Expressions + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/split +original_slug: Web/JavaScript/Reference/Objets_globaux/String/split +--- +
{{JSRef}}
+ +

La méthode split() divise une chaîne de caractères en une liste ordonnée de sous-chaînes, place ces sous-chaînes dans un tableau et retourne le tableau. La division est effectuée en recherchant un motif ; où le motif est fourni comme premier paramètre dans l'appel de la méthode.

+ +
{{EmbedInteractiveExample("pages/js/string-split.html", "taller")}}
+ +

Syntaxe

+ +
str.split([separator[, limit]])
+ +

Paramètres

+ +
+
separator Facultatif
+
+

Le motif décrivant où chaque séparation doit se produire. Le separator peut être une simple chaîne de caractères ou peut être une expression régulière.

+ +
    +
  • Le cas le plus simple est celui où separator n'est qu'un seul caractère ; il est utilisé pour diviser une chaîne délimitée. Par exemple, une chaîne contenant des valeurs séparées par des tabulations (TSV) pourrait être analysée en passant un caractère de tabulation comme séparateur, comme ceci : myString.split("\t").
  • +
  • Si separator contient plusieurs caractères, cette séquence de caractères entière doit être trouvée afin de diviser la chaîne.
  • +
  • Si separator est omis ou n'apparaît pas dans la chaîne str, le tableau retourné contient un élément constitué de la chaîne entière.
  • +
  • Si separator apparaît au début (ou à la fin) de la chaîne, il a quand même l'effet de division. Le résultat est une chaîne vide (c'est-à-dire de longueur nulle), qui apparaît à la première (ou dernière) position du tableau retourné.
  • +
  • Si separator est une chaîne vide (""), la chaîne str est convertie en un tableau de chacun de ses "caractères" UTF-16.
  • +
+ +
+

Attention : Lorsque une chaîne vide ("") est utilisée comme séparateur, la chaîne n'est pas divisée par des caractères perçus par l'utilisateur (grappes de graphèmes) ou des caractères unicodes (codepoints), mais par des unités de code UTF-16. Cela détruit les paires de substituts. Voir « Comment obtenir une chaîne de caractères vers un tableau de caractères en JavaScript ? » sur StackOverflow.

+
+
+
limit Facultatif
+
+

Un nombre entier non négatif spécifiant une limite sur le nombre de sous-chaînes à inclure dans le tableau. S'il est fourni, il divise la chaîne de caractères à chaque occurrence du separator spécifié, mais s'arrête lorsque la limit (limite) d'entrées a été atteinte dans le tableau. Tout texte restant n'est pas du tout inclus dans le tableau.

+ +
    +
  • Le tableau peut contenir moins d'entrées que la limit (limite), si la fin de la chaîne de caractères est atteinte avant que la limite ne soit atteinte.
  • +
  • Si limit est paramétré sur 0, un tableau vide [] est retourné.
  • +
+
+
+ +

Valeur de retour

+ +

Un tableau (Array) qui contient les fragments de la chaîne de caractères, découpée en fonction du séparateur indiqué.

+ +

Description

+ +

Lorsqu'il est trouvé, separator est supprimé de la chaîne de caractère, et les sous-chaînes sont retournées dans un tableau.

+ +

Si separator est une expression régulière avec des parenthèses de capture, alors chaque fois que separator correspond, les résultats (y compris tout résultat undefined) des parenthèses de capture sont joints au tableau de sortie.

+ +

Si le séparateur est un tableau, alors ce tableau est converti en une chaîne de caractères et est utilisé comme séparateur.

+ +

Exemples

+ +

Utiliser split()

+ +

Lorsque la chaîne de caractères est vide, split() retourne un tableau contenant une chaîne de caractères vide, plutôt qu'un tableau vide. Si la chaîne et le séparateur sont tous deux des chaînes vides, un tableau vide est retourné.

+ +
const myString = ''
+const splits = myString.split()
+
+console.log(splits)
+
+// ↪ [""]
+ +

L'exemple suivant définit une fonction qui divise une chaîne en un tableau de chaînes selon un délimiteur spécifié. Après la coupe de la chaîne, la fonction affiche des messages indiquant la chaîne initiale (avant la coupe), le délimiteur utilisé, le nombre d'éléments dans le tableau, et les éléments du tableau retourné.

+ +
function splitString(stringToSplit, separator) {
+  var arrayOfStrings = stringToSplit.split(separator);
+
+  console.log(`La chaine d'origine est : ${stringToSplit}`);
+  console.log(`Le délimiteur est : ${separator}`);
+  console.log(`Le tableau comporte ${arrayOfStrings.length} elements : `, arrayOfStrings.join(' / '));
+}
+
+var tempestString = "Oh brave new world that has such people in it.";
+var monthString = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec";
+
+var espace = " ";
+var virgule = ",";
+
+splitString(tempestString, espace);
+splitString(tempestString);
+splitString(monthString, virgule);
+
+ +

Cet exemple produira la sortie suivante :

+ +
La chaine d'origine est : "Oh brave new world that has such people in it."
+Le délimiteur est : " "
+Le tableau comporte 10 elements : Oh / brave / new / world / that / has / such / people / in / it. /
+
+La chaine d'origine est : "Oh brave new world that has such people in it."
+Le délimiteur est : "undefined"
+Le tableau comporte 1 elements : Oh brave new world that has such people in it. /
+
+La chaine d'origine est : "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
+Le délimiteur est : ","
+Le tableau comporte 12 elements : Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec /
+
+ +

Supprimer les espaces d'une chaîne

+ +

Dans l'exemple suivant, split recherche zéro ou plusieurs espaces suivis d'un point-virgule, lui-même suivi par zéro ou plus espaces. Lorsque ce « motif » est trouvé, cela supprime celui-ci de la chaîne. nameList est le tableau retourné du résultat de split.

+ +
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";
+
+console.log(names);
+
+var re = /\s*(;|$)\s*/;
+var nameList = names.split(re);
+
+console.log(nameList);
+ +

Ceci affichera deux lignes dans la console ; la première ligne correspondant à la chaîne d'origine, et la seconde au tableau de résultats.

+ +
Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand
+["Harry Trump","Fred Barney","Helen Rigby","Bill Abel","Chris Hand"]
+ +

Retourner un nombre limité de sous-chaînes

+ +

Dans l'exemple suivant, split() recherche des espaces dans une chaîne et retourne les 3 premières sous-chaînes qui correspondent.

+ +
var myString = "Hello World. How are you doing?";
+var splits = myString.split(" ", 3);
+
+console.log(splits);
+ +

Ce script affichera :

+ +
["Hello", "World.", "How"]
+ +

Découper une expression rationnelle - Parenthèses capturantes

+ +

Si le paramètre séparateur est une expression rationnelle qui contient des parenthèses de capture, les résultats seront retournés dans le tableau.

+ +
var myString = "Hello 1 word. Sentence number 2.";
+var splits = myString.split(/(\d)/);
+
+console.log(splits);
+ +

Ce script affichera :

+ +
[ "Hello ", "1", " word. Sentence number ", "2", "." ]
+ +
+

Note : \d correspond à la classe de caractères pour les chiffres compris entre 0 et 9.

+
+ +

Inverser une chaîne en utilisant split()

+ +
+

Attention : Ce n'est pas une façon robuste d'inverser une chaîne :

+ +
const str = 'asdfghjkl'
+const strReverse = str.split('').reverse().join('')
+// 'lkjhgfdsa'
+
+// split() retourne un tableau sur lequel reverse() et join() peuvent être appliqués.
+ +

Cela ne fonctionne pas si la chaîne de caractères contient des groupes de graphèmes, même en utilisant une division sensible aux unicodes. (Utilisez, par exemple, esrever à la place).

+ +
const str = 'résumé'
+const strReverse = str.split(/(?:)/u).reverse().join('')
+// => "́emuśer"
+
+ +

Bonus : utiliser l'opérateur === pour tester si la chaîne d'origine est un palindrome.

+
+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('ESDraft', '#sec-string.prototype.split', 'String.prototype.split')}} +
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/startswith/index.html b/files/fr/web/javascript/reference/global_objects/string/startswith/index.html deleted file mode 100644 index 6216df303c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/startswith/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: String.prototype.startsWith() -slug: Web/JavaScript/Reference/Global_Objects/String/startsWith -tags: - - ECMAScript6 - - JavaScript - - Méthode - - Prototype - - Reference - - String - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/String/startsWith -original_slug: Web/JavaScript/Reference/Objets_globaux/String/startsWith ---- -
{{JSRef}}
- -

La méthode startsWith() renvoie un booléen indiquant si la chaine de caractères commence par la deuxième chaine de caractères fournie en argument.

- -
{{EmbedInteractiveExample("pages/js/string-startswith.html")}}
- -

Syntaxe

- -
str.startsWith(chaîneRecherchée [, position]);
- -

Paramètres

- -
-
chaîneRecherchée
-
Les caractères à rechercher au début de la chaine de caractères.
-
position {{optional_inline}}
-
La position à laquelle commencer la recherche de chaîneRecherchée ; par défaut 0.
-
- -

Valeur de retour

- -

true si la chaîne de caractères commence avec la sous-chaîne en argument, false sinon

- -

Description

- -

Cette méthode permet de savoir si une chaine de caractères commence avec une autre chaine de caractères (comme pour les autres méthodes fonctionnant avec les chaînes de caractères, cette méthode est sensible à la casse).

- -

Exemples

- -
var str = "Être, ou ne pas être : telle est la question.";
-
-console.log(str.startsWith("Être"));         // true
-console.log(str.startsWith("pas être"));     // false
-console.log(str.startsWith("pas être", 12)); // true
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.startsWith")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/startswith/index.md b/files/fr/web/javascript/reference/global_objects/string/startswith/index.md new file mode 100644 index 0000000000..6216df303c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/startswith/index.md @@ -0,0 +1,84 @@ +--- +title: String.prototype.startsWith() +slug: Web/JavaScript/Reference/Global_Objects/String/startsWith +tags: + - ECMAScript6 + - JavaScript + - Méthode + - Prototype + - Reference + - String + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/String/startsWith +original_slug: Web/JavaScript/Reference/Objets_globaux/String/startsWith +--- +
{{JSRef}}
+ +

La méthode startsWith() renvoie un booléen indiquant si la chaine de caractères commence par la deuxième chaine de caractères fournie en argument.

+ +
{{EmbedInteractiveExample("pages/js/string-startswith.html")}}
+ +

Syntaxe

+ +
str.startsWith(chaîneRecherchée [, position]);
+ +

Paramètres

+ +
+
chaîneRecherchée
+
Les caractères à rechercher au début de la chaine de caractères.
+
position {{optional_inline}}
+
La position à laquelle commencer la recherche de chaîneRecherchée ; par défaut 0.
+
+ +

Valeur de retour

+ +

true si la chaîne de caractères commence avec la sous-chaîne en argument, false sinon

+ +

Description

+ +

Cette méthode permet de savoir si une chaine de caractères commence avec une autre chaine de caractères (comme pour les autres méthodes fonctionnant avec les chaînes de caractères, cette méthode est sensible à la casse).

+ +

Exemples

+ +
var str = "Être, ou ne pas être : telle est la question.";
+
+console.log(str.startsWith("Être"));         // true
+console.log(str.startsWith("pas être"));     // false
+console.log(str.startsWith("pas être", 12)); // true
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.startsWith")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/strike/index.html b/files/fr/web/javascript/reference/global_objects/string/strike/index.html deleted file mode 100644 index 9dc8d4aa4a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/strike/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: String.prototype.strike() -slug: Web/JavaScript/Reference/Global_Objects/String/strike -tags: - - Deprecated - - HTML wrapper methods - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/strike -original_slug: Web/JavaScript/Reference/Objets_globaux/String/strike ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode strike() permet de créer un élément HTML {{HTMLElement("strike")}} qui permet d'afficher la chaîne comme un texte barré.

- -

Syntaxe

- -
str.strike()
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("strike")}}.

- -

Description

- -

Cette méthode encadre la chaîne de caractères dans une balise <strike> :
- "<strike>str</strike>"

- -

Exemples

- -

Les méthodes suivantes peuvent être utilisées pour modifier le formatage d'une chaîne de caractères :

- -
var worldString = "Coucou monde";
-
-console.log(worldString.blink());
-console.log(worldString.bold());
-console.log(worldString.italics());
-console.log(worldString.strike());
- -

Cela produira le code HTML suivant dans la console :

- -
<blink>Coucou monde</blink>
-<b>Coucou monde</b>
-<i>Coucou monde</i>
-<strike>Coucou monde</strike>
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.strike', 'String.prototype.strike')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.strike', 'String.prototype.strike')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.strike")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/strike/index.md b/files/fr/web/javascript/reference/global_objects/string/strike/index.md new file mode 100644 index 0000000000..9dc8d4aa4a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/strike/index.md @@ -0,0 +1,82 @@ +--- +title: String.prototype.strike() +slug: Web/JavaScript/Reference/Global_Objects/String/strike +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/strike +original_slug: Web/JavaScript/Reference/Objets_globaux/String/strike +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode strike() permet de créer un élément HTML {{HTMLElement("strike")}} qui permet d'afficher la chaîne comme un texte barré.

+ +

Syntaxe

+ +
str.strike()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("strike")}}.

+ +

Description

+ +

Cette méthode encadre la chaîne de caractères dans une balise <strike> :
+ "<strike>str</strike>"

+ +

Exemples

+ +

Les méthodes suivantes peuvent être utilisées pour modifier le formatage d'une chaîne de caractères :

+ +
var worldString = "Coucou monde";
+
+console.log(worldString.blink());
+console.log(worldString.bold());
+console.log(worldString.italics());
+console.log(worldString.strike());
+ +

Cela produira le code HTML suivant dans la console :

+ +
<blink>Coucou monde</blink>
+<b>Coucou monde</b>
+<i>Coucou monde</i>
+<strike>Coucou monde</strike>
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.strike', 'String.prototype.strike')}}{{Spec2('ES6')}}Définition initiale. Implémentée dans JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.strike', 'String.prototype.strike')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.strike")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/sub/index.html b/files/fr/web/javascript/reference/global_objects/string/sub/index.html deleted file mode 100644 index 2f53665a08..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/sub/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: String.prototype.sub() -slug: Web/JavaScript/Reference/Global_Objects/String/sub -tags: - - Deprecated - - HTML wrapper methods - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/sub -original_slug: Web/JavaScript/Reference/Objets_globaux/String/sub ---- -
{{JSRef}}{{deprecated_header}}
- -

La méthode sub() crée un élément HTML {{HTMLElement("sub")}} qui entraîne l'affichage de la chaîne en indice.

- -

Syntaxe

- -
str.sub()
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("sub")}}.

- -

Description

- -

La méthode sub encapsule une chaîne dans une balise <sub> :
- "<sub>str</sub>".

- -

Exemples

- -

L'exemple suivant utilise les méthodes sub() et {{jsxref("String.prototype.sup()", "sup()")}} pour mettre en forme une chaîne :

- -
var superText = "exposant";
-var subText = "indice";
-
-console.log("Ceci illustre l'affichage d'un texte en " + superText.sup() + ".");
-// "Ceci illustre l'affichage d'un texte en <sup>expostant</sup>
-
-console.log("Ceci illustre l'affichage d'un texte en " + subText.sub() + ".");
-// "Ceci illustre l'affichage d'un texte en <sub>indice</sub>
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaire
{{SpecName('ES6', '#sec-string.prototype.sub', 'String.prototype.sub')}}{{Spec2('ES6')}}Définition initiale. Implementée avec JavaScript 1.0. Définie dans l'annexe B (normative) des fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.sub', 'String.prototype.sub')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) des fonctionnalités ECMAScript additionnelles pour les navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.sub")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/sub/index.md b/files/fr/web/javascript/reference/global_objects/string/sub/index.md new file mode 100644 index 0000000000..2f53665a08 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/sub/index.md @@ -0,0 +1,75 @@ +--- +title: String.prototype.sub() +slug: Web/JavaScript/Reference/Global_Objects/String/sub +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/sub +original_slug: Web/JavaScript/Reference/Objets_globaux/String/sub +--- +
{{JSRef}}{{deprecated_header}}
+ +

La méthode sub() crée un élément HTML {{HTMLElement("sub")}} qui entraîne l'affichage de la chaîne en indice.

+ +

Syntaxe

+ +
str.sub()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("sub")}}.

+ +

Description

+ +

La méthode sub encapsule une chaîne dans une balise <sub> :
+ "<sub>str</sub>".

+ +

Exemples

+ +

L'exemple suivant utilise les méthodes sub() et {{jsxref("String.prototype.sup()", "sup()")}} pour mettre en forme une chaîne :

+ +
var superText = "exposant";
+var subText = "indice";
+
+console.log("Ceci illustre l'affichage d'un texte en " + superText.sup() + ".");
+// "Ceci illustre l'affichage d'un texte en <sup>expostant</sup>
+
+console.log("Ceci illustre l'affichage d'un texte en " + subText.sub() + ".");
+// "Ceci illustre l'affichage d'un texte en <sub>indice</sub>
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaire
{{SpecName('ES6', '#sec-string.prototype.sub', 'String.prototype.sub')}}{{Spec2('ES6')}}Définition initiale. Implementée avec JavaScript 1.0. Définie dans l'annexe B (normative) des fonctionnalités ECMAScript additionnelles pour les navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.sub', 'String.prototype.sub')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) des fonctionnalités ECMAScript additionnelles pour les navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.sub")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/substr/index.html b/files/fr/web/javascript/reference/global_objects/string/substr/index.html deleted file mode 100644 index 9ee8253861..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/substr/index.html +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: String.prototype.substr() -slug: Web/JavaScript/Reference/Global_Objects/String/substr -tags: - - Déprécié - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/substr -original_slug: Web/JavaScript/Reference/Objets_globaux/String/substr ---- -
{{JSRef}}
- -

Attention : Bien que String.prototype.substr(…) ne soit pas strictement obsolète (au sens où elle n'a pas été retirée des standards), elle est définie au sein de l'Annexe B du standard ECMA-262 qui définit l'ensemble des fonctionnalités historiques qui doivent être évitées autant que possible. On utilisera la méthode {{jsxref("String.prototype.substring()")}} à la place.

- -

La méthode substr() retourne la partie d'une chaîne de caractères comprise entre l'indice de départ et un certain nombre de caractères après celui-ci.

- -
{{EmbedInteractiveExample("pages/js/string-substr.html")}}
- -

Syntaxe

- -
chn.substr(début[, longueur])
- -

Paramètres

- -
-
début
-
L'indice du premier caractère à inclure dans la sous-chaîne retournée.
-
longueur
-
Optionnel. Le nombre de caractères à extraire.
-
- -

Valeur de retour

- -

Une nouvelle chaîne contenant la partie indiquée de la chaîne donnée.

- -

Description

- -

substr() extrait longueur caractères d'une string, en comptant à partir de l'indice début.

- -

Si début est un nombre positif, l'indice commence à compter du début de la chaîne. Sa valeur est limitée à chn.length.

- -

Si début est un nombre négatif, l'indice commence à compter de la fin de la chaîne. Sa valeur est limitée à -chn.length.

- -

Note : dans JScript de Microsoft, les valeurs négatives de l'argument début ne sont pas considérées comme faisant référence à la fin de la chaîne.

- -

Si longueur est omise, substr() extrait les caractères jusqu'à la fin de la chaîne.

- -

Si longueur est {{jsxref("undefined")}}, substr() extrait les caractères jusqu'à la fin de la chaîne.

- -

Si longueur est négative, elle est traitée comme 0.

- -

Pour début comme pour longueur, NaN est traité comme 0.

- -

Exemples

- -
var uneChaine = 'Mozilla';
-
-console.log(uneChaine.substr(0, 1));   // 'M'
-console.log(uneChaine.substr(1, 0));   // ''
-console.log(uneChaine.substr(-1, 1));  // 'a'
-console.log(uneChaine.substr(1, -1));  // ''
-console.log(uneChaine.substr(-3));     // 'lla'
-console.log(uneChaine.substr(1));      // 'ozilla'
-console.log(uneChaine.substr(-20, 2)); // 'Mo'
-console.log(uneChaine.substr(20, 2));  // ''
- -

Prothèse d'émulation (polyfill)

- -

JScript de Microsoft ne supporte pas les valeurs négatives pour l'indice de début. Pour utiliser cette fonctionnalité, vous pouvez utiliser le code suivant :

- -
// N'appliquer que lorsque la fonction est incomplète
-if ('ab'.substr(-1) != 'b') {
-  /**
-   *  Obtenir la sous-chaîne d'une chaîne
-   *  @param  {entier}  début     où démarrer la sous-chaîne
-   *  @param  {entier}  longueur  combien de caractères à retourner
-   *  @return {chaîne}
-   */
-  String.prototype.substr = function(substr) {
-    return function(début, longueur) {
-      // Appel de la méthode originale
-      return substr.call(this,
-        // Si on a un début négatif, calculer combien il vaut à partir du début de la chaîne
-        // Ajuster le paramètre pour une valeur négative
-        début < 0 ? this.length + début : début,
-        longueur)
-    }
-  }(String.prototype.substr);
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définie dans la Compatibility Annex B (informative). Implémentée dans JavaScript 1.0.
{{SpecName('ES5.1', '#sec-B.2.3', 'String.prototype.substr')}}{{Spec2('ES5.1')}}Définie dans la Compatibility Annex B (informative).
{{SpecName('ES6', '#sec-string.prototype.substr', 'String.prototype.substr')}}{{Spec2('ES6')}}Définie dans l'Annex B (normative) pour les Additional ECMAScript Features for Web Browsers.
{{SpecName('ESDraft', '#sec-string.prototype.substr', 'String.prototype.substr')}}{{Spec2('ESDraft')}}Définie dans l'Annex B (normative) pour les Additional ECMAScript Features for Web Browsers
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.substr")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/substr/index.md b/files/fr/web/javascript/reference/global_objects/string/substr/index.md new file mode 100644 index 0000000000..9ee8253861 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/substr/index.md @@ -0,0 +1,136 @@ +--- +title: String.prototype.substr() +slug: Web/JavaScript/Reference/Global_Objects/String/substr +tags: + - Déprécié + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/substr +original_slug: Web/JavaScript/Reference/Objets_globaux/String/substr +--- +
{{JSRef}}
+ +

Attention : Bien que String.prototype.substr(…) ne soit pas strictement obsolète (au sens où elle n'a pas été retirée des standards), elle est définie au sein de l'Annexe B du standard ECMA-262 qui définit l'ensemble des fonctionnalités historiques qui doivent être évitées autant que possible. On utilisera la méthode {{jsxref("String.prototype.substring()")}} à la place.

+ +

La méthode substr() retourne la partie d'une chaîne de caractères comprise entre l'indice de départ et un certain nombre de caractères après celui-ci.

+ +
{{EmbedInteractiveExample("pages/js/string-substr.html")}}
+ +

Syntaxe

+ +
chn.substr(début[, longueur])
+ +

Paramètres

+ +
+
début
+
L'indice du premier caractère à inclure dans la sous-chaîne retournée.
+
longueur
+
Optionnel. Le nombre de caractères à extraire.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne contenant la partie indiquée de la chaîne donnée.

+ +

Description

+ +

substr() extrait longueur caractères d'une string, en comptant à partir de l'indice début.

+ +

Si début est un nombre positif, l'indice commence à compter du début de la chaîne. Sa valeur est limitée à chn.length.

+ +

Si début est un nombre négatif, l'indice commence à compter de la fin de la chaîne. Sa valeur est limitée à -chn.length.

+ +

Note : dans JScript de Microsoft, les valeurs négatives de l'argument début ne sont pas considérées comme faisant référence à la fin de la chaîne.

+ +

Si longueur est omise, substr() extrait les caractères jusqu'à la fin de la chaîne.

+ +

Si longueur est {{jsxref("undefined")}}, substr() extrait les caractères jusqu'à la fin de la chaîne.

+ +

Si longueur est négative, elle est traitée comme 0.

+ +

Pour début comme pour longueur, NaN est traité comme 0.

+ +

Exemples

+ +
var uneChaine = 'Mozilla';
+
+console.log(uneChaine.substr(0, 1));   // 'M'
+console.log(uneChaine.substr(1, 0));   // ''
+console.log(uneChaine.substr(-1, 1));  // 'a'
+console.log(uneChaine.substr(1, -1));  // ''
+console.log(uneChaine.substr(-3));     // 'lla'
+console.log(uneChaine.substr(1));      // 'ozilla'
+console.log(uneChaine.substr(-20, 2)); // 'Mo'
+console.log(uneChaine.substr(20, 2));  // ''
+ +

Prothèse d'émulation (polyfill)

+ +

JScript de Microsoft ne supporte pas les valeurs négatives pour l'indice de début. Pour utiliser cette fonctionnalité, vous pouvez utiliser le code suivant :

+ +
// N'appliquer que lorsque la fonction est incomplète
+if ('ab'.substr(-1) != 'b') {
+  /**
+   *  Obtenir la sous-chaîne d'une chaîne
+   *  @param  {entier}  début     où démarrer la sous-chaîne
+   *  @param  {entier}  longueur  combien de caractères à retourner
+   *  @return {chaîne}
+   */
+  String.prototype.substr = function(substr) {
+    return function(début, longueur) {
+      // Appel de la méthode originale
+      return substr.call(this,
+        // Si on a un début négatif, calculer combien il vaut à partir du début de la chaîne
+        // Ajuster le paramètre pour une valeur négative
+        début < 0 ? this.length + début : début,
+        longueur)
+    }
+  }(String.prototype.substr);
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définie dans la Compatibility Annex B (informative). Implémentée dans JavaScript 1.0.
{{SpecName('ES5.1', '#sec-B.2.3', 'String.prototype.substr')}}{{Spec2('ES5.1')}}Définie dans la Compatibility Annex B (informative).
{{SpecName('ES6', '#sec-string.prototype.substr', 'String.prototype.substr')}}{{Spec2('ES6')}}Définie dans l'Annex B (normative) pour les Additional ECMAScript Features for Web Browsers.
{{SpecName('ESDraft', '#sec-string.prototype.substr', 'String.prototype.substr')}}{{Spec2('ESDraft')}}Définie dans l'Annex B (normative) pour les Additional ECMAScript Features for Web Browsers
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.substr")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/substring/index.html b/files/fr/web/javascript/reference/global_objects/string/substring/index.html deleted file mode 100644 index df6dc3157c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/substring/index.html +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: String.prototype.substring() -slug: Web/JavaScript/Reference/Global_Objects/String/substring -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/substring -original_slug: Web/JavaScript/Reference/Objets_globaux/String/substring ---- -
{{JSRef}}
- -

La méthode substring() retourne une sous-chaîne de la chaîne courante, entre un indice de début et un indice de fin.

- -
{{EmbedInteractiveExample("pages/js/string-substring.html")}}
- -

Syntaxe

- -
str.substring(indiceA[, indiceB])
- -

Paramètres

- -
-
indiceA
-
Un entier compris entre 0 et la longueur de la chaîne.
-
indiceB
-
Paramètre optionnel : un entier compris entre 0 et la longueur de la chaine.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères qui correspond à la section souhaitée de la chaîne appelante.

- -

Description

- -

substring extrait des caractères de la chaîne courante à partir de indiceA jusqu'à indiceB (non compris). On a notamment :

- - - -

Si indiceA est supérieur à indiceB, la fonction substring() intervertira ces deux valeurs afin de les traiter comme si elles avaient été passées dans le bon ordre. Par exemple : str.substring(1, 0) == str.substring(0, 1).

- -

Exemples

- -

Utiliser substring()

- -

Les exemples suivants utilisent la méthode substring() pour extraire et afficher des caractères à partir de la chaine "Mozilla" :

- -
var uneChaîne = "Mozilla";
-
-// Affiche "Moz"
-console.log(uneChaîne.substring(0,3));
-console.log(uneChaîne.substring(3,0));
-
-// Affiche "lla"
-console.log(uneChaîne.substring(4,7));
-console.log(uneChaîne.substring(4));
-console.log(uneChaîne.substring(7,4));
-
-// Affiche "Mozill"
-console.log(uneChaîne.substring(0,6));
-
-// Affiche "Mozilla"
-console.log(uneChaîne.substring(0,7));
-console.log(uneChaîne.substring(0,10));
-
- -

Remplacer une sous-chaîne dans une chaîne

- -

L'exemple suivant remplace une partie d'une chaine. Elle remplace à la fois les caractères individuels et les sous-chaines. La fonction appelée à la fin de cet exemple transforme la chaine "Brave New World" en "Brave New Web".

- -
function replaceString(oldS, newS, fullS) {
-// On remplace oldS avec newS dans fullS
-  for (var i = 0; i < 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("World", "Web", "Brave New World");
- -

Attention : ceci peut résulter en une boucle infinie si oldS est elle-même une sous-chaine de newS -- par exemple, si on essaie de remplacer "World" par "OtherWorld". Une meilleure solution serait de remplacer les chaines de cette manière :

- -
function replaceString(oldS, newS,fullS){
-  return fullS.split(oldS).join(newS);
-}
- -

Le code ci-dessus sert d'exemple pour les opérations sur les sous-chaines. S'il est nécessaire de remplacer des sous-chaines, la plupart du temps il faudrait préférer l'utilisation de {{jsxref("String.prototype.replace()")}}.

- -

Différence entre substring() et substr()

- -

Il existe une légère différence entre les méthodes substring() et {{jsxref("String.substr", "substr()")}}. Les deux ne doivent pas être confondues.

- -

Les arguments de la méthode substring() représentent les indices de début et de fin sur la chaîne. Pour substr(), les arguments représentent l'indice de début et le nombre de caractères à utiliser pour la chaîne résultante.

- -
var texte = "Mozilla";
-console.log(texte.substring(2,5)); // => "zil"
-console.log(texte.substr(2,3)); // => "zil"
-
- -

Différences entre substring() et slice()

- -

Les méthodes substring() et {{jsxref("String.slice", "slice()")}} sont très proches mais certaines différences les distinguent, notamment la façon de gérer les arguments négatifs.

- -

La méthode substring() échangera les deux arguments si indiceA est supérieur à indiceB et renverra donc une chaîne de caractères. La méthode {{jsxref("String.slice", "slice()")}} n'échange pas les arguments et renvoie donc une chaîne vide si le premier est supérieur au second :

- -
var text = 'Mozilla';
-console.log(text.substring(5, 2)); // => "zil"
-console.log(text.slice(5, 2));     // => ""
-
- -

Si l'un ou l'autre des arguments sont négatifs ou valent NaN, la méthode substring() les traitera comme s'ils valaient 0.

- -
console.log(text.substring(-5, 2)); // => "Mo"
-console.log(text.substring(-5, -2)); // => ""
-
- -

slice() traite également NaN comme 0, mais parcourt la chaîne à partir de la fin lorsque des arguments négatifs sont utilisés.

- -
console.log(text.slice(-5, 2)); // => ""
-console.log(text.slice(-5, -2)); // => "zil"
-
- -

Pour plus d'exemples sur l'utilisation d'arguments négatifs, voir la page {{jsxref("String.slice", "slice()")}}.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.4.15', 'String.prototype.substring')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.substring', 'String.prototype.substring')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.substring', 'String.prototype.substring')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.substring")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/substring/index.md b/files/fr/web/javascript/reference/global_objects/string/substring/index.md new file mode 100644 index 0000000000..df6dc3157c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/substring/index.md @@ -0,0 +1,177 @@ +--- +title: String.prototype.substring() +slug: Web/JavaScript/Reference/Global_Objects/String/substring +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/substring +original_slug: Web/JavaScript/Reference/Objets_globaux/String/substring +--- +
{{JSRef}}
+ +

La méthode substring() retourne une sous-chaîne de la chaîne courante, entre un indice de début et un indice de fin.

+ +
{{EmbedInteractiveExample("pages/js/string-substring.html")}}
+ +

Syntaxe

+ +
str.substring(indiceA[, indiceB])
+ +

Paramètres

+ +
+
indiceA
+
Un entier compris entre 0 et la longueur de la chaîne.
+
indiceB
+
Paramètre optionnel : un entier compris entre 0 et la longueur de la chaine.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères qui correspond à la section souhaitée de la chaîne appelante.

+ +

Description

+ +

substring extrait des caractères de la chaîne courante à partir de indiceA jusqu'à indiceB (non compris). On a notamment :

+ + + +

Si indiceA est supérieur à indiceB, la fonction substring() intervertira ces deux valeurs afin de les traiter comme si elles avaient été passées dans le bon ordre. Par exemple : str.substring(1, 0) == str.substring(0, 1).

+ +

Exemples

+ +

Utiliser substring()

+ +

Les exemples suivants utilisent la méthode substring() pour extraire et afficher des caractères à partir de la chaine "Mozilla" :

+ +
var uneChaîne = "Mozilla";
+
+// Affiche "Moz"
+console.log(uneChaîne.substring(0,3));
+console.log(uneChaîne.substring(3,0));
+
+// Affiche "lla"
+console.log(uneChaîne.substring(4,7));
+console.log(uneChaîne.substring(4));
+console.log(uneChaîne.substring(7,4));
+
+// Affiche "Mozill"
+console.log(uneChaîne.substring(0,6));
+
+// Affiche "Mozilla"
+console.log(uneChaîne.substring(0,7));
+console.log(uneChaîne.substring(0,10));
+
+ +

Remplacer une sous-chaîne dans une chaîne

+ +

L'exemple suivant remplace une partie d'une chaine. Elle remplace à la fois les caractères individuels et les sous-chaines. La fonction appelée à la fin de cet exemple transforme la chaine "Brave New World" en "Brave New Web".

+ +
function replaceString(oldS, newS, fullS) {
+// On remplace oldS avec newS dans fullS
+  for (var i = 0; i < 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("World", "Web", "Brave New World");
+ +

Attention : ceci peut résulter en une boucle infinie si oldS est elle-même une sous-chaine de newS -- par exemple, si on essaie de remplacer "World" par "OtherWorld". Une meilleure solution serait de remplacer les chaines de cette manière :

+ +
function replaceString(oldS, newS,fullS){
+  return fullS.split(oldS).join(newS);
+}
+ +

Le code ci-dessus sert d'exemple pour les opérations sur les sous-chaines. S'il est nécessaire de remplacer des sous-chaines, la plupart du temps il faudrait préférer l'utilisation de {{jsxref("String.prototype.replace()")}}.

+ +

Différence entre substring() et substr()

+ +

Il existe une légère différence entre les méthodes substring() et {{jsxref("String.substr", "substr()")}}. Les deux ne doivent pas être confondues.

+ +

Les arguments de la méthode substring() représentent les indices de début et de fin sur la chaîne. Pour substr(), les arguments représentent l'indice de début et le nombre de caractères à utiliser pour la chaîne résultante.

+ +
var texte = "Mozilla";
+console.log(texte.substring(2,5)); // => "zil"
+console.log(texte.substr(2,3)); // => "zil"
+
+ +

Différences entre substring() et slice()

+ +

Les méthodes substring() et {{jsxref("String.slice", "slice()")}} sont très proches mais certaines différences les distinguent, notamment la façon de gérer les arguments négatifs.

+ +

La méthode substring() échangera les deux arguments si indiceA est supérieur à indiceB et renverra donc une chaîne de caractères. La méthode {{jsxref("String.slice", "slice()")}} n'échange pas les arguments et renvoie donc une chaîne vide si le premier est supérieur au second :

+ +
var text = 'Mozilla';
+console.log(text.substring(5, 2)); // => "zil"
+console.log(text.slice(5, 2));     // => ""
+
+ +

Si l'un ou l'autre des arguments sont négatifs ou valent NaN, la méthode substring() les traitera comme s'ils valaient 0.

+ +
console.log(text.substring(-5, 2)); // => "Mo"
+console.log(text.substring(-5, -2)); // => ""
+
+ +

slice() traite également NaN comme 0, mais parcourt la chaîne à partir de la fin lorsque des arguments négatifs sont utilisés.

+ +
console.log(text.slice(-5, 2)); // => ""
+console.log(text.slice(-5, -2)); // => "zil"
+
+ +

Pour plus d'exemples sur l'utilisation d'arguments négatifs, voir la page {{jsxref("String.slice", "slice()")}}.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.4.15', 'String.prototype.substring')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.substring', 'String.prototype.substring')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.substring', 'String.prototype.substring')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.substring")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/sup/index.html b/files/fr/web/javascript/reference/global_objects/string/sup/index.html deleted file mode 100644 index a7806d7dbe..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/sup/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: String.prototype.sup() -slug: Web/JavaScript/Reference/Global_Objects/String/sup -tags: - - Deprecated - - HTML wrapper methods - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/sup -original_slug: Web/JavaScript/Reference/Objets_globaux/String/sup ---- -
{{JSRef}} {{deprecated_header}}
- -

La méthode sup() crée un élément HTML {{HTMLElement("sup")}} qui entraîne l'affichage de la chaîne en exposant.

- -

Syntaxe

- -
str.sup()
- -

Valeur de retour

- -

Une chaîne de caractères représentant un élément HTML {{HTMLElement("sup")}}.

- -

Description

- -

La méthode sup encapsule une chaîne dans une balise <sup> :
- "<sup>str</sup>".

- -

Exemples

- -

L'exemple suivant utilise les méthodes {{jsxref("String.prototype.sub()", "sub()")}} et sup pour mettre en forme une chaîne :

- -
var superText = "exposant";
-var subText = "indice";
-
-console.log("Ceci illustre l'affichage d'un texte en " + superText.sup() + ".");
-// Ceci illustre l'affichage d'un texte en <sup>exposant</sup>.
-console.log("Ceci illustre l'affichage d'un texte en " + subText.sub() + ".");
-Ceci illustre l'affichage d'un texte en <sub>indice</sub>.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.sup', 'String.prototype.sup')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.sup', 'String.prototype.sup')}}{{Spec2('ESDraft')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles des navigateurs web.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.sup")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/sup/index.md b/files/fr/web/javascript/reference/global_objects/string/sup/index.md new file mode 100644 index 0000000000..a7806d7dbe --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/sup/index.md @@ -0,0 +1,75 @@ +--- +title: String.prototype.sup() +slug: Web/JavaScript/Reference/Global_Objects/String/sup +tags: + - Deprecated + - HTML wrapper methods + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/sup +original_slug: Web/JavaScript/Reference/Objets_globaux/String/sup +--- +
{{JSRef}} {{deprecated_header}}
+ +

La méthode sup() crée un élément HTML {{HTMLElement("sup")}} qui entraîne l'affichage de la chaîne en exposant.

+ +

Syntaxe

+ +
str.sup()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant un élément HTML {{HTMLElement("sup")}}.

+ +

Description

+ +

La méthode sup encapsule une chaîne dans une balise <sup> :
+ "<sup>str</sup>".

+ +

Exemples

+ +

L'exemple suivant utilise les méthodes {{jsxref("String.prototype.sub()", "sub()")}} et sup pour mettre en forme une chaîne :

+ +
var superText = "exposant";
+var subText = "indice";
+
+console.log("Ceci illustre l'affichage d'un texte en " + superText.sup() + ".");
+// Ceci illustre l'affichage d'un texte en <sup>exposant</sup>.
+console.log("Ceci illustre l'affichage d'un texte en " + subText.sub() + ".");
+Ceci illustre l'affichage d'un texte en <sub>indice</sub>.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-string.prototype.sup', 'String.prototype.sup')}}{{Spec2('ES6')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles des navigateurs web.
{{SpecName('ESDraft', '#sec-string.prototype.sup', 'String.prototype.sup')}}{{Spec2('ESDraft')}}Définition initiale. Implémentée avec JavaScript 1.0. Définie dans l'annexe B (normative) pour les fonctionnalités ECMAScript additionnelles des navigateurs web.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.sup")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.html b/files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.html deleted file mode 100644 index caf1c9c0c8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.html +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: String.prototype.toLocaleLowerCase() -slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase -tags: - - Internationalisation - - JavaScript - - Méthode - - Prototype - - Reference - - String - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase -original_slug: Web/JavaScript/Reference/Objets_globaux/String/toLocaleLowerCase ---- -
{{JSRef}}
- -

La méthode toLocaleLowerCase() renvoie la chaîne de caractères qui appelle la méthode en une chaîne de caractères représentées en minuscules, en tenant compte des correspondances de caractères propres aux différentes locales.

- -
{{EmbedInteractiveExample("pages/js/string-tolocalelowercase.html")}}
- -

Syntaxe

- -
str.toLocaleLowerCase()
-str.toLocaleLowerCase(locale)
-str.toLocaleLowerCase([locale, locale, ...])
- -

Paramètres

- -
-
locale {{optional_inline}}
-
Ce paramètre indique la locale dans laquelle convertir la chaîne en minuscules en utilisant les correspondances de cette locale. Si plusieurs locales sont fournies au sein d'un tableau, c'est la meilleure locale disponible qui est utilisée. La locale par défaut est celle utilisée par le système hôte.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères obtenue à partir de la chaîne appelante, convertie en minuscules en tenant compte de la locale.

- -

Exceptions

- -

Cette méthode peut lever les exceptions suivantes :

- - - -

Description

- -

La méthode toLocaleLowerCase() renvoie la valeur de la chaîne de caractères, convertie en minuscules selon les correspondances propres à la la locale. toLocaleLowerCase() ne modifie pas la chaîne d'origine. Dans la plupart des cas, cette méthode produira le même résultat que {{jsxref("String.toLowerCase", "toLowerCase()")}}. En revanche, pour certaines locales, par exemple les locales turques dont les correspondances entre les caractères ne sont pas celles par défaut, prévues par Unicode, cette méthode pourra produire un résultat différent.

- -

Exemples

- -
"ALPHABET".toLocaleLowerCase(); // "alphabet"
-
-"\u0130".toLocaleLowerCase("tr") === "i"; // true
-"\u0130".toLocaleLowerCase("en-US") === "i"; // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.17', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES Int Draft')}}Ajout du paramètre locale dans ES Intl 2017
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.toLocaleLowerCase")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.md b/files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.md new file mode 100644 index 0000000000..caf1c9c0c8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/tolocalelowercase/index.md @@ -0,0 +1,106 @@ +--- +title: String.prototype.toLocaleLowerCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase +tags: + - Internationalisation + - JavaScript + - Méthode + - Prototype + - Reference + - String + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase +original_slug: Web/JavaScript/Reference/Objets_globaux/String/toLocaleLowerCase +--- +
{{JSRef}}
+ +

La méthode toLocaleLowerCase() renvoie la chaîne de caractères qui appelle la méthode en une chaîne de caractères représentées en minuscules, en tenant compte des correspondances de caractères propres aux différentes locales.

+ +
{{EmbedInteractiveExample("pages/js/string-tolocalelowercase.html")}}
+ +

Syntaxe

+ +
str.toLocaleLowerCase()
+str.toLocaleLowerCase(locale)
+str.toLocaleLowerCase([locale, locale, ...])
+ +

Paramètres

+ +
+
locale {{optional_inline}}
+
Ce paramètre indique la locale dans laquelle convertir la chaîne en minuscules en utilisant les correspondances de cette locale. Si plusieurs locales sont fournies au sein d'un tableau, c'est la meilleure locale disponible qui est utilisée. La locale par défaut est celle utilisée par le système hôte.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères obtenue à partir de la chaîne appelante, convertie en minuscules en tenant compte de la locale.

+ +

Exceptions

+ +

Cette méthode peut lever les exceptions suivantes :

+ + + +

Description

+ +

La méthode toLocaleLowerCase() renvoie la valeur de la chaîne de caractères, convertie en minuscules selon les correspondances propres à la la locale. toLocaleLowerCase() ne modifie pas la chaîne d'origine. Dans la plupart des cas, cette méthode produira le même résultat que {{jsxref("String.toLowerCase", "toLowerCase()")}}. En revanche, pour certaines locales, par exemple les locales turques dont les correspondances entre les caractères ne sont pas celles par défaut, prévues par Unicode, cette méthode pourra produire un résultat différent.

+ +

Exemples

+ +
"ALPHABET".toLocaleLowerCase(); // "alphabet"
+
+"\u0130".toLocaleLowerCase("tr") === "i"; // true
+"\u0130".toLocaleLowerCase("en-US") === "i"; // false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.17', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}{{Spec2('ES Int Draft')}}Ajout du paramètre locale dans ES Intl 2017
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.toLocaleLowerCase")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html b/files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html deleted file mode 100644 index 0116ac288d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: String.prototype.toLocaleUpperCase() -slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase -tags: - - Internationalisation - - JavaScript - - Méthode - - Prototype - - Reference - - String - - i18n -translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase -original_slug: Web/JavaScript/Reference/Objets_globaux/String/toLocaleUpperCase ---- -
{{JSRef}}
- -

La méthode toLocaleUpperCase() renvoie la chaîne de caractères qui appelle la méthode en caractères majuscules, selon les correspondances de caractères propres aux différentes locales.

- -
{{EmbedInteractiveExample("pages/js/string-tolocaleuppercase.html")}}
- -

Syntaxe

- -
str.toLocaleUpperCase()
-str.toLocaleUpperCase(locale)
-str.toLocaleUpperCase([locale, locale, ...])
- -

Paramètres

- -
-
locale {{optional_inline}}
-
Le paramètre locale indique la locale dans laquelle convertir la chaîne en majuscules afin que la méthode utilise les correspondances de cette locale. Si plusieurs locales sont fournies au sein d'un tableau, la meilleure locale disponible est alors utilisée. La locale par défaut est celle utilisée par le système hôte.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères obtenue en transformant la chaîne de caractères appelante en majuscules et en tenant compte de la locale.

- -

Exceptions

- -

Cette méthode peut lever les exceptions suivantes :

- - - -

Description

- -

La méthode toLocaleUpperCase() renvoie la valeur de la chaîne de caractères, convertie en majuscules selon les correspondances propres à la la locale. toLocaleUpperCase() ne modifie pas la chaîne d'origine. Dans la plupart des cas, cette méthode produira le même résultat que {{jsxref("String.toUpperCase", "toUpperCase()")}}. En revanche, pour certaines locales, par exemple les locales turques dont les correspondances entre les caractères ne sont pas celles par défaut prévue par Unicode, cette méthode pourra produire un résultat différent.

- -

On notera également que la conversion ne repose pas sur une correspondance un à un de chaque caractère. En effet, certains caractères produisent deux (voire plus) caractères lorsqu'ils sont convertis en majuscules. Ainsi, la longueur de la chaîne passée en majuscules peut être différente de la longueur de la chaîne originale. Cela implique que la transformation n'est pas stable, autrement dit, l'instruction suivante pourra renvoyer false : x.toLocaleLowerCase() === x.toLocaleUpperCase().toLocaleLowerCase().

- -

Exemples

- -
"alphabet".toLocaleUpperCase();       // "ALPHABET"
-'Gesäß'.toLocaleUpperCase();          // 'GESÄSS'
-"i\u0307".toLocaleUpperCase("lt-LT"); // "I"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.19', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES Int Draft')}}Ajout du paramètre locale dans ES Intl 2017.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.toLocaleUpperCase")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.md b/files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.md new file mode 100644 index 0000000000..0116ac288d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/tolocaleuppercase/index.md @@ -0,0 +1,107 @@ +--- +title: String.prototype.toLocaleUpperCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase +tags: + - Internationalisation + - JavaScript + - Méthode + - Prototype + - Reference + - String + - i18n +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase +original_slug: Web/JavaScript/Reference/Objets_globaux/String/toLocaleUpperCase +--- +
{{JSRef}}
+ +

La méthode toLocaleUpperCase() renvoie la chaîne de caractères qui appelle la méthode en caractères majuscules, selon les correspondances de caractères propres aux différentes locales.

+ +
{{EmbedInteractiveExample("pages/js/string-tolocaleuppercase.html")}}
+ +

Syntaxe

+ +
str.toLocaleUpperCase()
+str.toLocaleUpperCase(locale)
+str.toLocaleUpperCase([locale, locale, ...])
+ +

Paramètres

+ +
+
locale {{optional_inline}}
+
Le paramètre locale indique la locale dans laquelle convertir la chaîne en majuscules afin que la méthode utilise les correspondances de cette locale. Si plusieurs locales sont fournies au sein d'un tableau, la meilleure locale disponible est alors utilisée. La locale par défaut est celle utilisée par le système hôte.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères obtenue en transformant la chaîne de caractères appelante en majuscules et en tenant compte de la locale.

+ +

Exceptions

+ +

Cette méthode peut lever les exceptions suivantes :

+ + + +

Description

+ +

La méthode toLocaleUpperCase() renvoie la valeur de la chaîne de caractères, convertie en majuscules selon les correspondances propres à la la locale. toLocaleUpperCase() ne modifie pas la chaîne d'origine. Dans la plupart des cas, cette méthode produira le même résultat que {{jsxref("String.toUpperCase", "toUpperCase()")}}. En revanche, pour certaines locales, par exemple les locales turques dont les correspondances entre les caractères ne sont pas celles par défaut prévue par Unicode, cette méthode pourra produire un résultat différent.

+ +

On notera également que la conversion ne repose pas sur une correspondance un à un de chaque caractère. En effet, certains caractères produisent deux (voire plus) caractères lorsqu'ils sont convertis en majuscules. Ainsi, la longueur de la chaîne passée en majuscules peut être différente de la longueur de la chaîne originale. Cela implique que la transformation n'est pas stable, autrement dit, l'instruction suivante pourra renvoyer false : x.toLocaleLowerCase() === x.toLocaleUpperCase().toLocaleLowerCase().

+ +

Exemples

+ +
"alphabet".toLocaleUpperCase();       // "ALPHABET"
+'Gesäß'.toLocaleUpperCase();          // 'GESÄSS'
+"i\u0307".toLocaleUpperCase("lt-LT"); // "I"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.5.4.19', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ESDraft')}} 
{{SpecName('ES Int Draft', '#sup-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}{{Spec2('ES Int Draft')}}Ajout du paramètre locale dans ES Intl 2017.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.toLocaleUpperCase")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/tolowercase/index.html b/files/fr/web/javascript/reference/global_objects/string/tolowercase/index.html deleted file mode 100644 index 88a37a316c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/tolowercase/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: String.prototype.toLowerCase() -slug: Web/JavaScript/Reference/Global_Objects/String/toLowerCase -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/toLowerCase -original_slug: Web/JavaScript/Reference/Objets_globaux/String/toLowerCase ---- -
{{JSRef}}
- -

La méthode toLowerCase() retourne la chaîne de caractères courante en minuscules.

- -
{{EmbedInteractiveExample("pages/js/string-tolowercase.html")}}
- -

Syntaxe

- -
str.toLowerCase()
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères qui est obtenue en passant la chaîne appelante en minuscules.

- -

Description

- -

La méthode toLowerCase() renvoie la valeur de la chaîne convertie en minuscules. toLowerCase() ne modifie pas la valeur de la chaîne courante.

- -

Exemples

- -
console.log( "ALPHABET".toLowerCase() ); // "alphabet"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.4.16', 'String.prototype.toLowerCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolowercase', 'String.prototype.toLowerCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolowercase', 'String.prototype.toLowerCase')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.toLowerCase")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/tolowercase/index.md b/files/fr/web/javascript/reference/global_objects/string/tolowercase/index.md new file mode 100644 index 0000000000..88a37a316c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/tolowercase/index.md @@ -0,0 +1,78 @@ +--- +title: String.prototype.toLowerCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toLowerCase +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toLowerCase +original_slug: Web/JavaScript/Reference/Objets_globaux/String/toLowerCase +--- +
{{JSRef}}
+ +

La méthode toLowerCase() retourne la chaîne de caractères courante en minuscules.

+ +
{{EmbedInteractiveExample("pages/js/string-tolowercase.html")}}
+ +

Syntaxe

+ +
str.toLowerCase()
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères qui est obtenue en passant la chaîne appelante en minuscules.

+ +

Description

+ +

La méthode toLowerCase() renvoie la valeur de la chaîne convertie en minuscules. toLowerCase() ne modifie pas la valeur de la chaîne courante.

+ +

Exemples

+ +
console.log( "ALPHABET".toLowerCase() ); // "alphabet"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.4.16', 'String.prototype.toLowerCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tolowercase', 'String.prototype.toLowerCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tolowercase', 'String.prototype.toLowerCase')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.toLowerCase")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/tosource/index.html b/files/fr/web/javascript/reference/global_objects/string/tosource/index.html deleted file mode 100644 index 2fb635149a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/tosource/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: String.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/String/toSource -tags: - - JavaScript - - Méthode - - Non-standard - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/String/toSource ---- -
{{JSRef}} {{Non-standard_header}}
- -

La méthode toSource() permet de renvoyer une chaîne de caractères représentant le code source de l'objet.

- -

Syntaxe

- -
String.toSource()
-str.toSource()
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le code source de la chaîne de caractères appelante.

- -

Description

- -

La méthode toSource() renvoie les valeurs suivantes :

- - - -

Généralement, cette méthode est appelée par du code interne au moteur JavaScript et n'est pas trouvée dans du code JavaScript externe.

- -

Spécifications

- -

Cette méthode ne fait partie d'aucun standard. Elle a été implémentée avec JavaScript 1.3.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.toSource")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/tosource/index.md b/files/fr/web/javascript/reference/global_objects/string/tosource/index.md new file mode 100644 index 0000000000..2fb635149a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/tosource/index.md @@ -0,0 +1,57 @@ +--- +title: String.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/String/toSource +tags: + - JavaScript + - Méthode + - Non-standard + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/String/toSource +--- +
{{JSRef}} {{Non-standard_header}}
+ +

La méthode toSource() permet de renvoyer une chaîne de caractères représentant le code source de l'objet.

+ +

Syntaxe

+ +
String.toSource()
+str.toSource()
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le code source de la chaîne de caractères appelante.

+ +

Description

+ +

La méthode toSource() renvoie les valeurs suivantes :

+ + + +

Généralement, cette méthode est appelée par du code interne au moteur JavaScript et n'est pas trouvée dans du code JavaScript externe.

+ +

Spécifications

+ +

Cette méthode ne fait partie d'aucun standard. Elle a été implémentée avec JavaScript 1.3.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.toSource")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/tostring/index.html b/files/fr/web/javascript/reference/global_objects/string/tostring/index.html deleted file mode 100644 index 0cdc5b48b2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/tostring/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: String.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/String/toString -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/String/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaine de caractères représentant l'objet renseigné.

- - - -
{{EmbedInteractiveExample("pages/js/string-tostring.html")}}
- -

Syntaxe

- -
str.toString()
- -

Valeur de retour

- -

Une chaîne de caractères représentant la chaîne appelante.

- -

Description

- -

L'objet {{jsxref("String")}} surcharge la méthode toString() de l'objet {{jsxref("Object")}} ; il n'hérite pas de {{jsxref("Object.toString","Object.prototype.toString()")}}. Pour Les objets String, la méthode toString() renvoie une chaine de caractères représentant l'objet, et est similaire à la méthode {{jsxref("String.prototype.valueOf()")}}.

- -

Exemples

- -

L'exemple suivant affiche la valeur textuelle d'un objet  {{jsxref("String")}} :

- -
var x = new String("coucou monde");
-console.log(x.toString()); // affiche "coucou monde"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.5.4.2', 'String.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tostring', 'String.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tostring', 'String.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/tostring/index.md b/files/fr/web/javascript/reference/global_objects/string/tostring/index.md new file mode 100644 index 0000000000..0cdc5b48b2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/tostring/index.md @@ -0,0 +1,81 @@ +--- +title: String.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/String/toString +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/String/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaine de caractères représentant l'objet renseigné.

+ + + +
{{EmbedInteractiveExample("pages/js/string-tostring.html")}}
+ +

Syntaxe

+ +
str.toString()
+ +

Valeur de retour

+ +

Une chaîne de caractères représentant la chaîne appelante.

+ +

Description

+ +

L'objet {{jsxref("String")}} surcharge la méthode toString() de l'objet {{jsxref("Object")}} ; il n'hérite pas de {{jsxref("Object.toString","Object.prototype.toString()")}}. Pour Les objets String, la méthode toString() renvoie une chaine de caractères représentant l'objet, et est similaire à la méthode {{jsxref("String.prototype.valueOf()")}}.

+ +

Exemples

+ +

L'exemple suivant affiche la valeur textuelle d'un objet  {{jsxref("String")}} :

+ +
var x = new String("coucou monde");
+console.log(x.toString()); // affiche "coucou monde"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.5.4.2', 'String.prototype.toString')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.tostring', 'String.prototype.toString')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.tostring', 'String.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/touppercase/index.html b/files/fr/web/javascript/reference/global_objects/string/touppercase/index.html deleted file mode 100644 index cd9d6b0f9b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/touppercase/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: String.prototype.toUpperCase() -slug: Web/JavaScript/Reference/Global_Objects/String/toUpperCase -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/toUpperCase -original_slug: Web/JavaScript/Reference/Objets_globaux/String/toUpperCase ---- -
{{JSRef}}
- -

La méthode toUpperCase() retourne la valeur de la chaîne courante, convertie en majuscules.

- -
{{EmbedInteractiveExample("pages/js/string-touppercase.html")}}
- -

Syntaxe

- -
str.toUpperCase()
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères obtenue à partir de la chaîne appelante, passée en majuscules.

- -

Exceptions levées

- -
-
{{jsxref("TypeError")}}
-
Une telle exception sera levée si on appelle cette méthode sur {{jsxref("null")}} ou {{jsxref("undefined")}} (en utilisant Function.prototype.call() par exemple).
-
- -

Description

- -

La méthode toUpperCase() retourne la valeur de la chaîne convertie en majuscules. toUpperCase n'affecte pas la valeur de la chaîne elle-même.

- -

Exemples

- -

Utiliser toUpperCase()

- -
console.log( "alphabet".toUpperCase() ); // "ALPHABET"
- -

Convertir une valeur this en chaîne de caractères

- -

Cette peut être utilisée pour convertir une valeur qui n'est pas une chaîne de caractères lorsque celle-ci est fournie comme valeur this : ​​​​

- -
var obj = {
-  toString: function toString(){
-    return 'abcdef';
-  }
-};
-var a = String.prototype.toUpperCase.call(obj);
-var b = String.prototype.toUpperCase.call(true);
-
-console.log(a); // Affiche 'ABCDEF' dans la console
-console.log(b); // Affiche 'TRUE' dans la console
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.4.18', 'String.prototype.toUpperCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.touppercase', 'String.prototype.toUpperCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.touppercase', 'String.prototype.toUpperCase')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.toUpperCase")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/touppercase/index.md b/files/fr/web/javascript/reference/global_objects/string/touppercase/index.md new file mode 100644 index 0000000000..cd9d6b0f9b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/touppercase/index.md @@ -0,0 +1,104 @@ +--- +title: String.prototype.toUpperCase() +slug: Web/JavaScript/Reference/Global_Objects/String/toUpperCase +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/toUpperCase +original_slug: Web/JavaScript/Reference/Objets_globaux/String/toUpperCase +--- +
{{JSRef}}
+ +

La méthode toUpperCase() retourne la valeur de la chaîne courante, convertie en majuscules.

+ +
{{EmbedInteractiveExample("pages/js/string-touppercase.html")}}
+ +

Syntaxe

+ +
str.toUpperCase()
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères obtenue à partir de la chaîne appelante, passée en majuscules.

+ +

Exceptions levées

+ +
+
{{jsxref("TypeError")}}
+
Une telle exception sera levée si on appelle cette méthode sur {{jsxref("null")}} ou {{jsxref("undefined")}} (en utilisant Function.prototype.call() par exemple).
+
+ +

Description

+ +

La méthode toUpperCase() retourne la valeur de la chaîne convertie en majuscules. toUpperCase n'affecte pas la valeur de la chaîne elle-même.

+ +

Exemples

+ +

Utiliser toUpperCase()

+ +
console.log( "alphabet".toUpperCase() ); // "ALPHABET"
+ +

Convertir une valeur this en chaîne de caractères

+ +

Cette peut être utilisée pour convertir une valeur qui n'est pas une chaîne de caractères lorsque celle-ci est fournie comme valeur this : ​​​​

+ +
var obj = {
+  toString: function toString(){
+    return 'abcdef';
+  }
+};
+var a = String.prototype.toUpperCase.call(obj);
+var b = String.prototype.toUpperCase.call(true);
+
+console.log(a); // Affiche 'ABCDEF' dans la console
+console.log(b); // Affiche 'TRUE' dans la console
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
{{SpecName('ES5.1', '#sec-15.5.4.18', 'String.prototype.toUpperCase')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.touppercase', 'String.prototype.toUpperCase')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.touppercase', 'String.prototype.toUpperCase')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.toUpperCase")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/trim/index.html b/files/fr/web/javascript/reference/global_objects/string/trim/index.html deleted file mode 100644 index 24146f8e6f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/trim/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: String.prototype.trim() -slug: Web/JavaScript/Reference/Global_Objects/String/Trim -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - String - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/String/Trim -original_slug: Web/JavaScript/Reference/Objets_globaux/String/trim ---- -
{{JSRef}}
- -

La méthode trim() permet de retirer les blancs en début et fin de chaîne. Les blancs considérés sont les caractères d'espacement (espace, tabulation, espace insécable, etc.) ainsi que les caractères de fin de ligne (LF, CR, etc.).

- -
{{EmbedInteractiveExample("pages/js/string-trim.html")}}
- -

Syntaxe

- -
str.trim()
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères dérivant de la chaîne appelante pour laquelle les blancs ont été retirés aux deux extrémités de la chaîne.

- -

Description

- -

La méthode trim() renvoie la chaîne sans blanc au début et à la fin. La méthode trim() n'affecte pas la valeur de la chaîne courante.

- -

Exemples

- -

L'exemple qui suit affiche la chaîne 'toto' :

- -
var chaîneOriginale = '   toto  ';
-console.log(chaîneOriginale.trim()); // 'toto'
-
-// Un autre exemple de .trim() qui enlève les espaces juste d'un côté
-
-var chaîneOriginale = 'toto    ';
-console.log(chaîneOriginale.trim()); // 'toto'
-
- -

Prothèse d'émulation (polyfill)

- -

Si l'environnement utilisé ne possède pas cette méthode, il est possible de l'émuler avec le fragment de code suivant :

- -
if (!String.prototype.trim) {
-  String.prototype.trim = function () {
-    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
-  };
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.5.4.20', 'String.prototype.trim')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.1.
{{SpecName('ES6', '#sec-string.prototype.trim', 'String.prototype.trim')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.trim', 'String.prototype.trim')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.trim")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/trim/index.md b/files/fr/web/javascript/reference/global_objects/string/trim/index.md new file mode 100644 index 0000000000..24146f8e6f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/trim/index.md @@ -0,0 +1,93 @@ +--- +title: String.prototype.trim() +slug: Web/JavaScript/Reference/Global_Objects/String/Trim +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - String + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/String/Trim +original_slug: Web/JavaScript/Reference/Objets_globaux/String/trim +--- +
{{JSRef}}
+ +

La méthode trim() permet de retirer les blancs en début et fin de chaîne. Les blancs considérés sont les caractères d'espacement (espace, tabulation, espace insécable, etc.) ainsi que les caractères de fin de ligne (LF, CR, etc.).

+ +
{{EmbedInteractiveExample("pages/js/string-trim.html")}}
+ +

Syntaxe

+ +
str.trim()
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères dérivant de la chaîne appelante pour laquelle les blancs ont été retirés aux deux extrémités de la chaîne.

+ +

Description

+ +

La méthode trim() renvoie la chaîne sans blanc au début et à la fin. La méthode trim() n'affecte pas la valeur de la chaîne courante.

+ +

Exemples

+ +

L'exemple qui suit affiche la chaîne 'toto' :

+ +
var chaîneOriginale = '   toto  ';
+console.log(chaîneOriginale.trim()); // 'toto'
+
+// Un autre exemple de .trim() qui enlève les espaces juste d'un côté
+
+var chaîneOriginale = 'toto    ';
+console.log(chaîneOriginale.trim()); // 'toto'
+
+ +

Prothèse d'émulation (polyfill)

+ +

Si l'environnement utilisé ne possède pas cette méthode, il est possible de l'émuler avec le fragment de code suivant :

+ +
if (!String.prototype.trim) {
+  String.prototype.trim = function () {
+    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+  };
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-15.5.4.20', 'String.prototype.trim')}}{{Spec2('ES5.1')}}Définition initiale. Implémentée avec JavaScript 1.8.1.
{{SpecName('ES6', '#sec-string.prototype.trim', 'String.prototype.trim')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.trim', 'String.prototype.trim')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.trim")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/trimend/index.html b/files/fr/web/javascript/reference/global_objects/string/trimend/index.html deleted file mode 100644 index 3f3ea377c8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/trimend/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: String.prototype.trimEnd() -slug: Web/JavaScript/Reference/Global_Objects/String/trimEnd -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/trimEnd -original_slug: Web/JavaScript/Reference/Objets_globaux/String/trimEnd ---- -
{{JSRef}}
- -

La méthode trimEnd() permet de retirer les blancs situés à la fin d'une chaîne de caractères. trimRight() est un synonyme pour cette méthode.

- -
{{EmbedInteractiveExample("pages/js/string-trimend.html")}}
- -

Syntaxe

- -
str.trimEnd();
-str.trimRight();
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères basée sur la chaîne appelante et dont les blancs en fin de chaîne ont été supprimés.

- -

Description

- -

La méthode trimEnd() renvoie la chaîne de caractères sans les blancs présents à partir de la droite de la chaîne. trimEnd() ne modifie pas la chaîne elle-même.

- -

Synonyme

- -

Pour des raisons de cohérence avec les méthodes existantes comme {{jsxref("String.prototype.padEnd")}}, le nom standard de cette méthode est trimEnd. Toutefois, à des fins de compatibilité web, trimRight est un synonyme de trimEnd. Pour certains moteurs JavaScript, on pourra donc avoir :

- -
String.prototype.trimRight.name === "trimEnd";
- -

Exemples

- -

L'exemple qui suit illustre comment afficher la chaîne "   toto":

- -
var str = "   toto  ";
-
-console.log(str.length); // 9
-
-str = str.trimEnd();
-console.log(str.length); // 7
-console.log(str);        // "   toto"
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour String.prototype.{trimStart,trimEnd}Brouillon de niveau 4Attendu pour ES2019
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.trimEnd")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/trimend/index.md b/files/fr/web/javascript/reference/global_objects/string/trimend/index.md new file mode 100644 index 0000000000..3f3ea377c8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/trimend/index.md @@ -0,0 +1,79 @@ +--- +title: String.prototype.trimEnd() +slug: Web/JavaScript/Reference/Global_Objects/String/trimEnd +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/trimEnd +original_slug: Web/JavaScript/Reference/Objets_globaux/String/trimEnd +--- +
{{JSRef}}
+ +

La méthode trimEnd() permet de retirer les blancs situés à la fin d'une chaîne de caractères. trimRight() est un synonyme pour cette méthode.

+ +
{{EmbedInteractiveExample("pages/js/string-trimend.html")}}
+ +

Syntaxe

+ +
str.trimEnd();
+str.trimRight();
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères basée sur la chaîne appelante et dont les blancs en fin de chaîne ont été supprimés.

+ +

Description

+ +

La méthode trimEnd() renvoie la chaîne de caractères sans les blancs présents à partir de la droite de la chaîne. trimEnd() ne modifie pas la chaîne elle-même.

+ +

Synonyme

+ +

Pour des raisons de cohérence avec les méthodes existantes comme {{jsxref("String.prototype.padEnd")}}, le nom standard de cette méthode est trimEnd. Toutefois, à des fins de compatibilité web, trimRight est un synonyme de trimEnd. Pour certains moteurs JavaScript, on pourra donc avoir :

+ +
String.prototype.trimRight.name === "trimEnd";
+ +

Exemples

+ +

L'exemple qui suit illustre comment afficher la chaîne "   toto":

+ +
var str = "   toto  ";
+
+console.log(str.length); // 9
+
+str = str.trimEnd();
+console.log(str.length); // 7
+console.log(str);        // "   toto"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour String.prototype.{trimStart,trimEnd}Brouillon de niveau 4Attendu pour ES2019
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.trimEnd")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/trimstart/index.html b/files/fr/web/javascript/reference/global_objects/string/trimstart/index.html deleted file mode 100644 index fb06eafc08..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/trimstart/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: String.prototype.trimStart() -slug: Web/JavaScript/Reference/Global_Objects/String/trimStart -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/trimStart -original_slug: Web/JavaScript/Reference/Objets_globaux/String/trimStart ---- -
{{JSRef}}
- -

La méthode trimStart() permet de retirer les blancs au début de la chaîne de caractères. trimLeft() est un synonyme pour cette méthode.

- -
{{EmbedInteractiveExample("pages/js/string-trimstart.html")}}
- -

Syntaxe

- -
str.trimStart();
-str.trimLeft();
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères dérivant de la chaîne appelante pour laquelle les blancs en début de chaîne ont été retirés.

- -

Description

- -

La méthode trimStart() renvoie la chaîne de caractères dont les blancs à gauche ont été retirés. trimStart ne modifie pas la chaîne elle-même.

- -

Synonyme

- -

Pour des raisons de cohérences avec les méthodes préexistantes (telles que {{jsxref("String.prototype.padStart")}}), le nom standard de cette méthode est trimStart. Toutefois, à des fins de compatibilité web, le nom trimLeft sera gardé comme un synonyme. Pour certains moteurs JavaScript, on pourra donc avoir :

- -
String.prototype.trimLeft.name === "trimStart";
- -

Exemple

- -

L'exemple qui suit illustre comment afficher la chaîne de caractères "toto  " en minuscules :

- -
var str = "   toto  ";
-
-console.log(str.length); // 8
-
-str = str.trimStart();
-console.log(str.length); // 5
-console.log(str);        // "toto  "
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour String.prototype.{trimStart,trimEnd}Brouillon de niveau 4Attendu pour ES2019
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.trimStart")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/trimstart/index.md b/files/fr/web/javascript/reference/global_objects/string/trimstart/index.md new file mode 100644 index 0000000000..fb06eafc08 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/trimstart/index.md @@ -0,0 +1,79 @@ +--- +title: String.prototype.trimStart() +slug: Web/JavaScript/Reference/Global_Objects/String/trimStart +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/trimStart +original_slug: Web/JavaScript/Reference/Objets_globaux/String/trimStart +--- +
{{JSRef}}
+ +

La méthode trimStart() permet de retirer les blancs au début de la chaîne de caractères. trimLeft() est un synonyme pour cette méthode.

+ +
{{EmbedInteractiveExample("pages/js/string-trimstart.html")}}
+ +

Syntaxe

+ +
str.trimStart();
+str.trimLeft();
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères dérivant de la chaîne appelante pour laquelle les blancs en début de chaîne ont été retirés.

+ +

Description

+ +

La méthode trimStart() renvoie la chaîne de caractères dont les blancs à gauche ont été retirés. trimStart ne modifie pas la chaîne elle-même.

+ +

Synonyme

+ +

Pour des raisons de cohérences avec les méthodes préexistantes (telles que {{jsxref("String.prototype.padStart")}}), le nom standard de cette méthode est trimStart. Toutefois, à des fins de compatibilité web, le nom trimLeft sera gardé comme un synonyme. Pour certains moteurs JavaScript, on pourra donc avoir :

+ +
String.prototype.trimLeft.name === "trimStart";
+ +

Exemple

+ +

L'exemple qui suit illustre comment afficher la chaîne de caractères "toto  " en minuscules :

+ +
var str = "   toto  ";
+
+console.log(str.length); // 8
+
+str = str.trimStart();
+console.log(str.length); // 5
+console.log(str);        // "toto  "
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour String.prototype.{trimStart,trimEnd}Brouillon de niveau 4Attendu pour ES2019
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.trimStart")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/string/valueof/index.html b/files/fr/web/javascript/reference/global_objects/string/valueof/index.html deleted file mode 100644 index edacaf0f0c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/string/valueof/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: String.prototype.valueOf() -slug: Web/JavaScript/Reference/Global_Objects/String/valueOf -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - String -translation_of: Web/JavaScript/Reference/Global_Objects/String/valueOf -original_slug: Web/JavaScript/Reference/Objets_globaux/String/valueOf ---- -
{{JSRef}}
- -

La méthode valueOf() renvoie la valeur primitive de l'objet {{jsxref("String")}}.

- -
{{EmbedInteractiveExample("pages/js/string-valueof.html")}}
- -

Syntaxe

- -
str.valueOf()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente la valeur primitive d'un objet {{jsxref("String")}}.

- -

Description

- -

La méthode valueOf() de String renvoie la valeur primitive de l'objet String sous la forme d'une chaine de caractères. Cette valeur est équivalente à {{jsxref("String.prototype.toString()")}}.

- -

Cette méthode est généralement appelée en interne par JavaScript et non explicitement dans du code.

- -

Exemples

- -
var x = new String("Coucou monde");
-console.log(x.valueOf()); // affiche "Coucou monde"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.5.4.3', 'String.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.valueof', 'String.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.valueof', 'String.prototype.valueOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.String.valueOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/string/valueof/index.md b/files/fr/web/javascript/reference/global_objects/string/valueof/index.md new file mode 100644 index 0000000000..edacaf0f0c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/string/valueof/index.md @@ -0,0 +1,80 @@ +--- +title: String.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/String/valueOf +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - String +translation_of: Web/JavaScript/Reference/Global_Objects/String/valueOf +original_slug: Web/JavaScript/Reference/Objets_globaux/String/valueOf +--- +
{{JSRef}}
+ +

La méthode valueOf() renvoie la valeur primitive de l'objet {{jsxref("String")}}.

+ +
{{EmbedInteractiveExample("pages/js/string-valueof.html")}}
+ +

Syntaxe

+ +
str.valueOf()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente la valeur primitive d'un objet {{jsxref("String")}}.

+ +

Description

+ +

La méthode valueOf() de String renvoie la valeur primitive de l'objet String sous la forme d'une chaine de caractères. Cette valeur est équivalente à {{jsxref("String.prototype.toString()")}}.

+ +

Cette méthode est généralement appelée en interne par JavaScript et non explicitement dans du code.

+ +

Exemples

+ +
var x = new String("Coucou monde");
+console.log(x.valueOf()); // affiche "Coucou monde"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.5.4.3', 'String.prototype.valueOf')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-string.prototype.valueof', 'String.prototype.valueOf')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-string.prototype.valueof', 'String.prototype.valueOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.String.valueOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html b/files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html deleted file mode 100644 index 601aaceead..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Symbol.prototype[@@toPrimitive] -slug: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/@@toPrimitive ---- -
{{JSRef}}
- -

La méthode [@@toPrimitive]() permet de convertir un objet symbole en une valeur primitive.

- -

Syntaxe

- -
Symbol()[Symbol.toPrimitive](hint);
-
- -

Valeur de retour

- -

La valeur primitive de l'objet {{jsxref("Symbol")}} indiqué.

- -

Description

- -

La méthode [@@toPrimitive]() de {{jsxref("Symbol")}} renvoie la valeur primitive d'un objet Symbol (le résultat sera  donc un symbole au sens primitif). L'argument hint n'est pas utilisé.

- -

Le moteur JavaScript appelle la méthode [@@toPrimitive]() afin de convertir un objet en une valeur primitive. Généralement, il n'est pas nécessaire d'appeler [@@toPrimitive]() car le moteur JavaScript l'appelle automatiquement lorsqu'il détecte un objet là où une valeur primitive est attendue.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.md b/files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.md new file mode 100644 index 0000000000..601aaceead --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/@@toprimitive/index.md @@ -0,0 +1,63 @@ +--- +title: Symbol.prototype[@@toPrimitive] +slug: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/@@toPrimitive +--- +
{{JSRef}}
+ +

La méthode [@@toPrimitive]() permet de convertir un objet symbole en une valeur primitive.

+ +

Syntaxe

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

Valeur de retour

+ +

La valeur primitive de l'objet {{jsxref("Symbol")}} indiqué.

+ +

Description

+ +

La méthode [@@toPrimitive]() de {{jsxref("Symbol")}} renvoie la valeur primitive d'un objet Symbol (le résultat sera  donc un symbole au sens primitif). L'argument hint n'est pas utilisé.

+ +

Le moteur JavaScript appelle la méthode [@@toPrimitive]() afin de convertir un objet en une valeur primitive. Généralement, il n'est pas nécessaire d'appeler [@@toPrimitive]() car le moteur JavaScript l'appelle automatiquement lorsqu'il détecte un objet là où une valeur primitive est attendue.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.html b/files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.html deleted file mode 100644 index c70f09bb88..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Symbol.asyncIterator -slug: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator -tags: - - ECMAScript 2018 - - JavaScript - - Propriété - - Reference - - Symbole -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/asyncIterator ---- -
{{JSRef}}
- -

Le symbole connu Symbol.asyncIterator définit l'itérateur asynchrone par défaut d'un objet. Si cette propriété est définie sur un objet, celui-ci est un itérable asynchrone et peut être utilisé avec une boucle for await...of.

- -

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

- -

Description

- -

Le symbole Symbol.asyncIterator est un symbole natif utilisé pour accéder à la méthode @@asyncIterator d'un objet. Pour qu'un objet soit un itérable asynchrone, il doit avoir une clé Symbol.asyncIterator.

- -

Exemples

- -

Itérable asynchrone personnalisé

- -

Il est possible de définir son propre itérable en définissant la propriété [Symbol.asyncIterator] d'un objet :

- -
const myAsyncIterable = new Object();
-myAsyncIterable[Symbol.asyncIterator] = async function*() {
-    yield "coucou";
-    yield "l'itération";
-    yield "asynchrone !";
-};
-
-(async () => {
-    for await (const x of myAsyncIterable) {
-        console.log(x);
-        // expected output:
-        //    "coucou"
-        //    "l'itération"
-        //    "asynchrone !"
-    }
-})();
-
- -

Itérables asynchrones natifs

- -

Il n'existe actuellement pas d'objets JavaScript natifs qui possèdent la clé [Symbol.asyncIterator] par défaut. Toutefois, les flux (Streams) WHATWG pourraient devenir les premiers objets natifs itérables asynchrones.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2018', '#sec-symbol.asynciterator', 'Symbol.asyncIterator')}}{{Spec2('ES2018')}} 
- -

Compatibilité des navigateurs

- -

{{compat("javascript.builtins.Symbol.asyncIterator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.md b/files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.md new file mode 100644 index 0000000000..c70f09bb88 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/asynciterator/index.md @@ -0,0 +1,79 @@ +--- +title: Symbol.asyncIterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +tags: + - ECMAScript 2018 + - JavaScript + - Propriété + - Reference + - Symbole +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/asyncIterator +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.asyncIterator définit l'itérateur asynchrone par défaut d'un objet. Si cette propriété est définie sur un objet, celui-ci est un itérable asynchrone et peut être utilisé avec une boucle for await...of.

+ +

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

+ +

Description

+ +

Le symbole Symbol.asyncIterator est un symbole natif utilisé pour accéder à la méthode @@asyncIterator d'un objet. Pour qu'un objet soit un itérable asynchrone, il doit avoir une clé Symbol.asyncIterator.

+ +

Exemples

+ +

Itérable asynchrone personnalisé

+ +

Il est possible de définir son propre itérable en définissant la propriété [Symbol.asyncIterator] d'un objet :

+ +
const myAsyncIterable = new Object();
+myAsyncIterable[Symbol.asyncIterator] = async function*() {
+    yield "coucou";
+    yield "l'itération";
+    yield "asynchrone !";
+};
+
+(async () => {
+    for await (const x of myAsyncIterable) {
+        console.log(x);
+        // expected output:
+        //    "coucou"
+        //    "l'itération"
+        //    "asynchrone !"
+    }
+})();
+
+ +

Itérables asynchrones natifs

+ +

Il n'existe actuellement pas d'objets JavaScript natifs qui possèdent la clé [Symbol.asyncIterator] par défaut. Toutefois, les flux (Streams) WHATWG pourraient devenir les premiers objets natifs itérables asynchrones.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2018', '#sec-symbol.asynciterator', 'Symbol.asyncIterator')}}{{Spec2('ES2018')}} 
+ +

Compatibilité des navigateurs

+ +

{{compat("javascript.builtins.Symbol.asyncIterator")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/description/index.html b/files/fr/web/javascript/reference/global_objects/symbol/description/index.html deleted file mode 100644 index c538e5f35f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/description/index.html +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Symbol.prototype.description -slug: Web/JavaScript/Reference/Global_Objects/Symbol/description -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/description -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/description ---- -
{{JSRef}}
- -

La propriété en lecture seule description est une chaîne de caractères qui renvoie la description optionnelle de l'objet {{jsxref("Symbol")}}.

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

Syntaxe

- -
Symbol('maDescription').description;
-Symbol.iterator.description;
-Symbol.for('toto').description;
-
- -

Description

- -

Les objets {{jsxref("Symbol")}} peuvent être créés avec une description facultative qui peut être utilisée pour du débogage mais sans accéder au symbole. La propriété Symbol.prototype.description peut être utilisée afin de lire cette description. Cette propriété est différente de Symbol.prototype.toString() car elle ne contient pas la chaîne de caractères "Symbol()" autour de la description (voir les exemples qui suivent).

- -

Exemples

- -
Symbol('desc').toString();   // "Symbol(desc)"
-Symbol('desc').description;  // "desc"
-Symbol('').description;      // ""
-Symbol().description;        // undefined
-
-// symboles connus
-Symbol.iterator.toString();  // "Symbol(Symbol.iterator)"
-Symbol.iterator.description; // "Symbol.iterator"
-
-// symboles globaux
-Symbol.for('toto').toString();  // "Symbol(toto)"
-Symbol.for('toto').description; // "toto"
-
-
- -

Spécifications

- - - - - - - - - - - - -
SpécificationÉtat
Proposition pour Symbol.prototype.descriptionProposition de niveau 4
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/description/index.md b/files/fr/web/javascript/reference/global_objects/symbol/description/index.md new file mode 100644 index 0000000000..c538e5f35f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/description/index.md @@ -0,0 +1,71 @@ +--- +title: Symbol.prototype.description +slug: Web/JavaScript/Reference/Global_Objects/Symbol/description +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/description +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/description +--- +
{{JSRef}}
+ +

La propriété en lecture seule description est une chaîne de caractères qui renvoie la description optionnelle de l'objet {{jsxref("Symbol")}}.

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

Syntaxe

+ +
Symbol('maDescription').description;
+Symbol.iterator.description;
+Symbol.for('toto').description;
+
+ +

Description

+ +

Les objets {{jsxref("Symbol")}} peuvent être créés avec une description facultative qui peut être utilisée pour du débogage mais sans accéder au symbole. La propriété Symbol.prototype.description peut être utilisée afin de lire cette description. Cette propriété est différente de Symbol.prototype.toString() car elle ne contient pas la chaîne de caractères "Symbol()" autour de la description (voir les exemples qui suivent).

+ +

Exemples

+ +
Symbol('desc').toString();   // "Symbol(desc)"
+Symbol('desc').description;  // "desc"
+Symbol('').description;      // ""
+Symbol().description;        // undefined
+
+// symboles connus
+Symbol.iterator.toString();  // "Symbol(Symbol.iterator)"
+Symbol.iterator.description; // "Symbol.iterator"
+
+// symboles globaux
+Symbol.for('toto').toString();  // "Symbol(toto)"
+Symbol.for('toto').description; // "toto"
+
+
+ +

Spécifications

+ + + + + + + + + + + + +
SpécificationÉtat
Proposition pour Symbol.prototype.descriptionProposition de niveau 4
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/for/index.html b/files/fr/web/javascript/reference/global_objects/symbol/for/index.html deleted file mode 100644 index 06bb734b9f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/for/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Symbol.for() -slug: Web/JavaScript/Reference/Global_Objects/Symbol/for -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/for ---- -
{{JSRef}}
- -

La méthode Symbol.for(clé) permet de chercher parmi les symboles existants enregistrés dans le registre global de l'environnement d'exécution. Si un symbole associé à la clé donnée existe, il est renvoyé par la fonction, sinon un nouveau symbole associé à cette clé est créé dans le registre.

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

Syntaxe

- -
Symbol.for(clé);
- -

Paramètres

- -
-
clé
-
Une chaîne de caractères, obligatoire. La clé correspondant au symbole (également utilisée pour la description du symbole).
-
- -

Valeur de retour

- -

Un symbole existant s'il en a été trouvé un avec la clé fournie. Sinon, un nouveau symbole est créé puis renvoyé par la méthode.

- -

Description

- -

À la différence de Symbol(), la méthode Symbol.for() crée un symbole enregistré dans le registre global. Symbol.for() ne crée pas nécessairement un nouveau symbole pour chaque appel, elle vérifie d'abord si un symbole avec la clé donnée est d'ores et déjà présent dans le registre. Si c'est le cas, le symbole correspondant est renvoyé, sinon Symbol.for() crée un nouveau symbol global.

- -

Registre global pour les symboles

- -

Le registre global des symboles est une liste, initialement vide, dont les éléments ont la structure suivante :

- - - - - - - - - - - - - - - - - -
Structure d'un enregistrement dans le registre global des symboles
Nom du champValeur
[[key]]Une chaîne de caractères représentant la clé pour identifier un symbole en particulier.
[[symbol]]Un symbole enregistré de façon globale.
- -

Exemples

- -
Symbol.for("toto"); // crée un nouveau symbole global
-Symbol.for("toto"); // renvoie le symbole déjà existant
-
-// Globalement on a un symbole par clé, localement non
-Symbol.for("machin") === Symbol.for("machin"); // true
-Symbol("machin") === Symbol("machin"); // false
-
-// La clé sert également de description
-var sym = Symbol.for("mario");
-sym.toString(); // "Symbol(mario)"
-
- -

Afin d'éviter des conflits entre les clés des symboles globaux liés à votre application et les autres symboles potentiels (bibliothèques externes, etc...), il peut être judicieux de les préfixer :

- -
Symbol.for("mdn.toto");
-Symbol.for("mdn.machin");
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.for', 'Symbol.for')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/for/index.md b/files/fr/web/javascript/reference/global_objects/symbol/for/index.md new file mode 100644 index 0000000000..06bb734b9f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/for/index.md @@ -0,0 +1,110 @@ +--- +title: Symbol.for() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/for +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/for +--- +
{{JSRef}}
+ +

La méthode Symbol.for(clé) permet de chercher parmi les symboles existants enregistrés dans le registre global de l'environnement d'exécution. Si un symbole associé à la clé donnée existe, il est renvoyé par la fonction, sinon un nouveau symbole associé à cette clé est créé dans le registre.

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

Syntaxe

+ +
Symbol.for(clé);
+ +

Paramètres

+ +
+
clé
+
Une chaîne de caractères, obligatoire. La clé correspondant au symbole (également utilisée pour la description du symbole).
+
+ +

Valeur de retour

+ +

Un symbole existant s'il en a été trouvé un avec la clé fournie. Sinon, un nouveau symbole est créé puis renvoyé par la méthode.

+ +

Description

+ +

À la différence de Symbol(), la méthode Symbol.for() crée un symbole enregistré dans le registre global. Symbol.for() ne crée pas nécessairement un nouveau symbole pour chaque appel, elle vérifie d'abord si un symbole avec la clé donnée est d'ores et déjà présent dans le registre. Si c'est le cas, le symbole correspondant est renvoyé, sinon Symbol.for() crée un nouveau symbol global.

+ +

Registre global pour les symboles

+ +

Le registre global des symboles est une liste, initialement vide, dont les éléments ont la structure suivante :

+ + + + + + + + + + + + + + + + + +
Structure d'un enregistrement dans le registre global des symboles
Nom du champValeur
[[key]]Une chaîne de caractères représentant la clé pour identifier un symbole en particulier.
[[symbol]]Un symbole enregistré de façon globale.
+ +

Exemples

+ +
Symbol.for("toto"); // crée un nouveau symbole global
+Symbol.for("toto"); // renvoie le symbole déjà existant
+
+// Globalement on a un symbole par clé, localement non
+Symbol.for("machin") === Symbol.for("machin"); // true
+Symbol("machin") === Symbol("machin"); // false
+
+// La clé sert également de description
+var sym = Symbol.for("mario");
+sym.toString(); // "Symbol(mario)"
+
+ +

Afin d'éviter des conflits entre les clés des symboles globaux liés à votre application et les autres symboles potentiels (bibliothèques externes, etc...), il peut être judicieux de les préfixer :

+ +
Symbol.for("mdn.toto");
+Symbol.for("mdn.machin");
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.for', 'Symbol.for')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.html b/files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.html deleted file mode 100644 index 4809e68bcc..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Symbol.hasInstance -slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/hasInstance ---- -
{{JSRef}}
- -

Le symbole « connu » Symbol.hasInstance est utilisé afin de déterminer si un objet constructeur reconnaît un objet comme une de ses instances. On peut donc adapter/personnaliser le comportement de l'opérateur {{jsxref("Opérateurs/instanceof", "instanceof")}} grâce à ce symbole.

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

Exemples

- -

On peut implémenter un comportement différent pour instanceof de cette façon :

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.md b/files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.md new file mode 100644 index 0000000000..4809e68bcc --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/hasinstance/index.md @@ -0,0 +1,64 @@ +--- +title: Symbol.hasInstance +slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/hasInstance +--- +
{{JSRef}}
+ +

Le symbole « connu » Symbol.hasInstance est utilisé afin de déterminer si un objet constructeur reconnaît un objet comme une de ses instances. On peut donc adapter/personnaliser le comportement de l'opérateur {{jsxref("Opérateurs/instanceof", "instanceof")}} grâce à ce symbole.

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

Exemples

+ +

On peut implémenter un comportement différent pour instanceof de cette façon :

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/index.html b/files/fr/web/javascript/reference/global_objects/symbol/index.html deleted file mode 100644 index fdeffa85f1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/index.html +++ /dev/null @@ -1,226 +0,0 @@ ---- -title: Symbol -slug: Web/JavaScript/Reference/Global_Objects/Symbol -tags: - - ECMAScript 2015 - - JavaScript - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol ---- -
{{JSRef}}
- -

Un symbole est un type de données primitif représentant une donnée unique et inchangeable qui peut être utilisée afin de représenter des identifiants pour des propriétés d'un objet. L'objet Symbol est un conteneur objet implicite pour le {{Glossary("Primitive", "type de données primitif")}} symbole.

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

Syntaxe

- -
Symbol([description])
- -

Paramètres

- -
-
description {{optional_inline}}
-
Une chaîne de caractères optionnelle. Correspond à une description du symbole, elle peut être utile pour déboguer (mais pas pour accéder au symbole).
-
- -

Description

- -

Pour créer un nouveau symbole, il suffit d'appeler Symbol(), éventuellement avec une chaîne de caractère descriptive :

- -
var sym1 = Symbol();
-var sym2 = Symbol("toto");
-var sym3 = Symbol("toto");
-
- -

Le fragment de code ci-dessus permet de créer trois nouveaux symboles. On notera que l'instruction Symbol("toto") ne convertit pas la chaîne "toto" en un symbole. On crée bien un nouveau symbole pour chaque instruction ci-avant.

- -
Symbol("toto") === Symbol("toto"); // false
- -

La syntaxe suivante, utilisant l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}, entraînera une exception {{jsxref("TypeError")}}:

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

Cela est fait pour empêcher d'écrire un conteneur (wrapper) explicite de Symbol plutôt qu'une nouvelle valeur, cela peut être surprenant car généralement, on peut créer des objets « autour » de types primitifs (par exemple avec new Boolean, new String et new Number).

- -

Si on souhaite obtenir un object contenant un symbole, on pourra toujours utiliser la fonction Object() :

- -
var sym = Symbol("toto");
-typeof sym;     // "symbol"
-var symObj = Object(sym);
-typeof symObj;  // "object"
- -

Symboles partagés et registre global des symboles

- -

La syntaxe manipulée ci-avant, utilisant la fonction Symbol(), ne crée pas un symbole global, disponible partout dans votre code. Pour créer des symboles qui soient disponibles pour différents fichiers et appartiennent à l'environnement global, il faut utiliser les méthodes {{jsxref("Symbol.for()")}} et {{jsxref("Symbol.keyFor()")}} afin de définir et de récupérer les symboles listés dans le registre global.

- -

Trouver les propriétés identifiées par des symboles pour un objet

- -

La méthode {{jsxref("Object.getOwnPropertySymbols()")}} renvoie un tableau de symboles, permettant ainsi de connaître les propriétés identifiées par un symbole pour un objet donné. À l'initialisation, un objet ne contient aucune propriété propre identifiée par un symbole, ce tableau sera donc vide jusqu'à ce qu'une propriété, identifiée par un symbole, lui soit ajoutée.

- -

Les symboles et les conversions

- -

Lorsqu'on utilise des mécanismes de conversion de types avec les symboles, on aura le comportement suivant :

- - - -

Propriétés

- -
-
Symbol.length
-
La propriété length dont la valeur est 0.
-
{{jsxref("Symbol.prototype")}}
-
Cette propriété représente le prototype du constructeur Symbol.
-
- -

Symboles connus

- -

En plus des symboles que vous pouvez créer, JavaScript possède certains symboles natifs représentant des aspects internes du langages qui, pour ECMAScript 5 et les versions précédentes, n'étaient pas exposées aux développeurs. Il est possible d'accéder à ces symboles en utilisant les propriétés suivantes :

- -

Symboles d'itération

- -
-
{{jsxref("Symbol.iterator")}}
-
Une méthode qui renvoie l'itérateur par défaut d'un objet. Ce symbole est utilisé par la boucle {{jsxref("Instructions/for...of","for...of")}}.
-
{{jsxref("Symbol.asyncIterator")}}
-
Une méthode qui renvoie l'itérateur asynchrone par défaut d'un objet. Ce symbole est utilisé par la boucle for await...of.
-
- -

Symboles liés aux expressions rationnelles

- -
-
{{jsxref("Symbol.match")}}
-
Une méthode qui fait correspondre une expression rationnelle avec une chaîne de caractères. Elle est aussi utilisée pour déterminer si un objet peut être utilisé comme une expression rationnelle.
-
{{jsxref("Symbol.matchAll")}}
-
Une méthode qui renvoie un itérateur permettant de parcourir l'ensemble des correspondances entre une chaîne de caractères et une expression rationnelle. Ce symbole est utilisé par {{jsxref("String.prototype.matchAll()")}}.
-
{{jsxref("Symbol.replace")}}
-
Une méthode qui remplace les sous-chaînes correspondantes dans une chaîne de caractères. Utilisée par {{jsxref("String.prototype.replace()")}}.
-
{{jsxref("Symbol.search")}}
-
Une méthode qui renvoie l'indice d'une chaîne de caractères pour lequel on a une correspondance avec une expression rationnelle. Utilisée par {{jsxref("String.prototype.search()")}}.
-
{{jsxref("Symbol.split")}}
-
Une méthode qui découpe la chaîne à l'indice donné par la correspondance avec une expression rationnelle. Utilisée par {{jsxref("String.prototype.split()")}}.
-
- -

Autres symboles

- -
-
{{jsxref("Symbol.hasInstance")}}
-
Une méthode qui permet de déterminer si un constructeur reconnaît un objet comme son instance. Utilisé par {{jsxref("Opérateurs/instanceof", "instanceof")}}.
-
{{jsxref("Symbol.isConcatSpreadable")}}
-
Une valeur booléenne qui indique si un objet devrait être réduit à la concaténation des éléments de son tableau via  {{jsxref("Array.prototype.concat()")}}.
-
{{jsxref("Symbol.unscopables")}}
-
Un objet dont les noms des propriétés propres et héritées sont exclues de l'objet associé lors de l'utilisation de with.
-
{{jsxref("Symbol.species")}}
-
Un constructeur utilisé pour construire des objets dérivés.
-
{{jsxref("Symbol.toPrimitive")}}
-
Spécifié comme @@toPrimitive. Une méthode qui convertit un objet en sa valeur primitive.
-
{{jsxref("Symbol.toStringTag")}}
-
Spécifié comme @@toStringTag. Une chaîne de caractères utilisée pour la description d'un objet. Ce symbole est utilisé par {{jsxref("Object.prototype.toString()")}}.
-
- -

Méthodes

- -
-
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
-
Recherche parmi les symboles existants un symbole désigné par cette clé. S'il est trouvé, le symbole est renvoyé, sinon un nouveau symbole est créé et enregistré avec cette clé dans le registre global des symboles.
-
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
-
Pour un symbole donné, récupère la clé d'un symbole partagé depuis le registre global.
-
- -

Prototype Symbol

- -

Tous les symboles héritent de {{jsxref("Symbol.prototype")}}.

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Symbol/prototype','Propri.C3.A9t.C3.A9s')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Symbol/prototype','M.C3.A9thodes')}}

- -

Exemples

- -

Utiliser l'opérateur typeof avec des symboles

- -

L'opérateur {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} permet d'identifier des symboles :

- -
typeof Symbol() === 'symbol'
-typeof Symbol('toto') === 'symbol'
-typeof Symbol.iterator === 'symbol'
-
- -

Les symboles et les boucles for...in

- -

Les symboles ne peuvent pas être énumérés dans les boucles for...in. De plus, la méthode {{jsxref("Object.getOwnPropertyNames()")}} ne renverra pas les propriétés identifiées par des symboles. La méthode {{jsxref("Object.getOwnPropertySymbols()")}} permet d'avoir accès à ces propriétés.

- -
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); // enregistre "c" et "d"
-}
- -

Les symboles et JSON.stringify()

- -

Les propriétés identifiées par des symboles seront totalement ignorées par JSON.stringify():

- -
JSON.stringify({[Symbol("toto")]: "toto"});
-// '{}'
- -

Pour plus de détails, voir la page {{jsxref("JSON.stringify()")}}.

- -

Utiliser les symboles enveloppés dans un objet

- -

Lors qu'on on utilise un objet pour contenir la valeur du symbole et faire référence à une propriété, l'objet sera ramené au symbole d'origine :

- -
var sym = Symbol("toto")
-var obj = {[sym]: 1};
-obj[sym];              // 1
-obj[Object(sym)];      // toujours 1
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/index.md b/files/fr/web/javascript/reference/global_objects/symbol/index.md new file mode 100644 index 0000000000..fdeffa85f1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/index.md @@ -0,0 +1,226 @@ +--- +title: Symbol +slug: Web/JavaScript/Reference/Global_Objects/Symbol +tags: + - ECMAScript 2015 + - JavaScript + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol +--- +
{{JSRef}}
+ +

Un symbole est un type de données primitif représentant une donnée unique et inchangeable qui peut être utilisée afin de représenter des identifiants pour des propriétés d'un objet. L'objet Symbol est un conteneur objet implicite pour le {{Glossary("Primitive", "type de données primitif")}} symbole.

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

Syntaxe

+ +
Symbol([description])
+ +

Paramètres

+ +
+
description {{optional_inline}}
+
Une chaîne de caractères optionnelle. Correspond à une description du symbole, elle peut être utile pour déboguer (mais pas pour accéder au symbole).
+
+ +

Description

+ +

Pour créer un nouveau symbole, il suffit d'appeler Symbol(), éventuellement avec une chaîne de caractère descriptive :

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

Le fragment de code ci-dessus permet de créer trois nouveaux symboles. On notera que l'instruction Symbol("toto") ne convertit pas la chaîne "toto" en un symbole. On crée bien un nouveau symbole pour chaque instruction ci-avant.

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

La syntaxe suivante, utilisant l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}, entraînera une exception {{jsxref("TypeError")}}:

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

Cela est fait pour empêcher d'écrire un conteneur (wrapper) explicite de Symbol plutôt qu'une nouvelle valeur, cela peut être surprenant car généralement, on peut créer des objets « autour » de types primitifs (par exemple avec new Boolean, new String et new Number).

+ +

Si on souhaite obtenir un object contenant un symbole, on pourra toujours utiliser la fonction Object() :

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

Symboles partagés et registre global des symboles

+ +

La syntaxe manipulée ci-avant, utilisant la fonction Symbol(), ne crée pas un symbole global, disponible partout dans votre code. Pour créer des symboles qui soient disponibles pour différents fichiers et appartiennent à l'environnement global, il faut utiliser les méthodes {{jsxref("Symbol.for()")}} et {{jsxref("Symbol.keyFor()")}} afin de définir et de récupérer les symboles listés dans le registre global.

+ +

Trouver les propriétés identifiées par des symboles pour un objet

+ +

La méthode {{jsxref("Object.getOwnPropertySymbols()")}} renvoie un tableau de symboles, permettant ainsi de connaître les propriétés identifiées par un symbole pour un objet donné. À l'initialisation, un objet ne contient aucune propriété propre identifiée par un symbole, ce tableau sera donc vide jusqu'à ce qu'une propriété, identifiée par un symbole, lui soit ajoutée.

+ +

Les symboles et les conversions

+ +

Lorsqu'on utilise des mécanismes de conversion de types avec les symboles, on aura le comportement suivant :

+ + + +

Propriétés

+ +
+
Symbol.length
+
La propriété length dont la valeur est 0.
+
{{jsxref("Symbol.prototype")}}
+
Cette propriété représente le prototype du constructeur Symbol.
+
+ +

Symboles connus

+ +

En plus des symboles que vous pouvez créer, JavaScript possède certains symboles natifs représentant des aspects internes du langages qui, pour ECMAScript 5 et les versions précédentes, n'étaient pas exposées aux développeurs. Il est possible d'accéder à ces symboles en utilisant les propriétés suivantes :

+ +

Symboles d'itération

+ +
+
{{jsxref("Symbol.iterator")}}
+
Une méthode qui renvoie l'itérateur par défaut d'un objet. Ce symbole est utilisé par la boucle {{jsxref("Instructions/for...of","for...of")}}.
+
{{jsxref("Symbol.asyncIterator")}}
+
Une méthode qui renvoie l'itérateur asynchrone par défaut d'un objet. Ce symbole est utilisé par la boucle for await...of.
+
+ +

Symboles liés aux expressions rationnelles

+ +
+
{{jsxref("Symbol.match")}}
+
Une méthode qui fait correspondre une expression rationnelle avec une chaîne de caractères. Elle est aussi utilisée pour déterminer si un objet peut être utilisé comme une expression rationnelle.
+
{{jsxref("Symbol.matchAll")}}
+
Une méthode qui renvoie un itérateur permettant de parcourir l'ensemble des correspondances entre une chaîne de caractères et une expression rationnelle. Ce symbole est utilisé par {{jsxref("String.prototype.matchAll()")}}.
+
{{jsxref("Symbol.replace")}}
+
Une méthode qui remplace les sous-chaînes correspondantes dans une chaîne de caractères. Utilisée par {{jsxref("String.prototype.replace()")}}.
+
{{jsxref("Symbol.search")}}
+
Une méthode qui renvoie l'indice d'une chaîne de caractères pour lequel on a une correspondance avec une expression rationnelle. Utilisée par {{jsxref("String.prototype.search()")}}.
+
{{jsxref("Symbol.split")}}
+
Une méthode qui découpe la chaîne à l'indice donné par la correspondance avec une expression rationnelle. Utilisée par {{jsxref("String.prototype.split()")}}.
+
+ +

Autres symboles

+ +
+
{{jsxref("Symbol.hasInstance")}}
+
Une méthode qui permet de déterminer si un constructeur reconnaît un objet comme son instance. Utilisé par {{jsxref("Opérateurs/instanceof", "instanceof")}}.
+
{{jsxref("Symbol.isConcatSpreadable")}}
+
Une valeur booléenne qui indique si un objet devrait être réduit à la concaténation des éléments de son tableau via  {{jsxref("Array.prototype.concat()")}}.
+
{{jsxref("Symbol.unscopables")}}
+
Un objet dont les noms des propriétés propres et héritées sont exclues de l'objet associé lors de l'utilisation de with.
+
{{jsxref("Symbol.species")}}
+
Un constructeur utilisé pour construire des objets dérivés.
+
{{jsxref("Symbol.toPrimitive")}}
+
Spécifié comme @@toPrimitive. Une méthode qui convertit un objet en sa valeur primitive.
+
{{jsxref("Symbol.toStringTag")}}
+
Spécifié comme @@toStringTag. Une chaîne de caractères utilisée pour la description d'un objet. Ce symbole est utilisé par {{jsxref("Object.prototype.toString()")}}.
+
+ +

Méthodes

+ +
+
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
+
Recherche parmi les symboles existants un symbole désigné par cette clé. S'il est trouvé, le symbole est renvoyé, sinon un nouveau symbole est créé et enregistré avec cette clé dans le registre global des symboles.
+
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
+
Pour un symbole donné, récupère la clé d'un symbole partagé depuis le registre global.
+
+ +

Prototype Symbol

+ +

Tous les symboles héritent de {{jsxref("Symbol.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Symbol/prototype','Propri.C3.A9t.C3.A9s')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/Symbol/prototype','M.C3.A9thodes')}}

+ +

Exemples

+ +

Utiliser l'opérateur typeof avec des symboles

+ +

L'opérateur {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} permet d'identifier des symboles :

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

Les symboles et les boucles for...in

+ +

Les symboles ne peuvent pas être énumérés dans les boucles for...in. De plus, la méthode {{jsxref("Object.getOwnPropertyNames()")}} ne renverra pas les propriétés identifiées par des symboles. La méthode {{jsxref("Object.getOwnPropertySymbols()")}} permet d'avoir accès à ces propriétés.

+ +
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); // enregistre "c" et "d"
+}
+ +

Les symboles et JSON.stringify()

+ +

Les propriétés identifiées par des symboles seront totalement ignorées par JSON.stringify():

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

Pour plus de détails, voir la page {{jsxref("JSON.stringify()")}}.

+ +

Utiliser les symboles enveloppés dans un objet

+ +

Lors qu'on on utilise un objet pour contenir la valeur du symbole et faire référence à une propriété, l'objet sera ramené au symbole d'origine :

+ +
var sym = Symbol("toto")
+var obj = {[sym]: 1};
+obj[sym];              // 1
+obj[Object(sym)];      // toujours 1
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html b/files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html deleted file mode 100644 index 4d106382a2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Symbol.isConcatSpreadable -slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/isConcatSpreadable ---- -
{{JSRef}}
- -

Le symbole connu Symbol.isConcatSpreadable est utilisé pour configurer la façon dont un tableau est aplati lors d'une concaténation via la méthode  {{jsxref("Array.prototype.concat()")}}.

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

Description

- -

Le symbole @@isConcatSpreadable (Symbol.isConcatSpreadable) peut être défini comme une propriété propre ou héritée. C'est une valeur booléenne qui contrôle le comportement des tableaux et des objets semblables à des tableaux :

- - - -

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

- -

Exemples

- -

Tableaux (Array)

- -

Par défaut, {{jsxref("Array.prototype.concat()")}} aplatit les tableaux pour le résultat de la concaténation :

- -
var alpha = ['a', 'b', 'c'],
-    numérique = [1, 2, 3];
-
-var alphaNumérique = alpha.concat(numérique);
-
-console.log(alphaNumérique);
-// Résultat : ['a', 'b', 'c', 1, 2, 3]
-
- -

En définissant Symbol.isConcatSpreadable avec false, on peut désactiver le comportement par défaut :

- -
var alpha = ['a', 'b', 'c'],
-    numérique = [1, 2, 3];
-
-numérique[Symbol.isConcatSpreadable] = false;
-var alphaNumérique = alpha.concat(numérique);
-
-console.log(alphaNumérique);
-// Résultat: ['a', 'b', 'c', [1, 2, 3] ]
-
- -

Objets semblables à des tableaux

- -

Pour les objets semblables à un tableau, par défaut, il n'y a pas de fusion. Il faut donc que Symbol.isConcatSpreadable vaille true pour aplatir le tableau :

- -
var x = [1, 2, 3];
-
-var fauxTableau = {
-  [Symbol.isConcatSpreadable]: true,
-  length: 2,
-  0: "coucou",
-  1: "monde"
-}
-
-x.concat(fauxTableau); // [1, 2, 3, "coucou", "monde"]
-
- -
-

Note : La propriété length indique ici le nombre de propriétés à ajouter au tableau.

-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}{{Spec2('ESDraft')}}Aucune modification.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md b/files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md new file mode 100644 index 0000000000..4d106382a2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.md @@ -0,0 +1,109 @@ +--- +title: Symbol.isConcatSpreadable +slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/isConcatSpreadable +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.isConcatSpreadable est utilisé pour configurer la façon dont un tableau est aplati lors d'une concaténation via la méthode  {{jsxref("Array.prototype.concat()")}}.

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

Description

+ +

Le symbole @@isConcatSpreadable (Symbol.isConcatSpreadable) peut être défini comme une propriété propre ou héritée. C'est une valeur booléenne qui contrôle le comportement des tableaux et des objets semblables à des tableaux :

+ + + +

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

+ +

Exemples

+ +

Tableaux (Array)

+ +

Par défaut, {{jsxref("Array.prototype.concat()")}} aplatit les tableaux pour le résultat de la concaténation :

+ +
var alpha = ['a', 'b', 'c'],
+    numérique = [1, 2, 3];
+
+var alphaNumérique = alpha.concat(numérique);
+
+console.log(alphaNumérique);
+// Résultat : ['a', 'b', 'c', 1, 2, 3]
+
+ +

En définissant Symbol.isConcatSpreadable avec false, on peut désactiver le comportement par défaut :

+ +
var alpha = ['a', 'b', 'c'],
+    numérique = [1, 2, 3];
+
+numérique[Symbol.isConcatSpreadable] = false;
+var alphaNumérique = alpha.concat(numérique);
+
+console.log(alphaNumérique);
+// Résultat: ['a', 'b', 'c', [1, 2, 3] ]
+
+ +

Objets semblables à des tableaux

+ +

Pour les objets semblables à un tableau, par défaut, il n'y a pas de fusion. Il faut donc que Symbol.isConcatSpreadable vaille true pour aplatir le tableau :

+ +
var x = [1, 2, 3];
+
+var fauxTableau = {
+  [Symbol.isConcatSpreadable]: true,
+  length: 2,
+  0: "coucou",
+  1: "monde"
+}
+
+x.concat(fauxTableau); // [1, 2, 3, "coucou", "monde"]
+
+ +
+

Note : La propriété length indique ici le nombre de propriétés à ajouter au tableau.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}{{Spec2('ESDraft')}}Aucune modification.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/iterator/index.html b/files/fr/web/javascript/reference/global_objects/symbol/iterator/index.html deleted file mode 100644 index 2b3d9bf367..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/iterator/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Symbol.iterator -slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/iterator ---- -
{{JSRef}}
- -

Le symbole Symbol.iterator définit l'itérateur par défaut d'un objet. C'est l'itérateur qui sera utilisé par for...of.

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

Description

- -

Lorsqu'on doit itérer sur un objet (par exemple avec une boucle for..of), sa méthode @@iterator est appelée sans argument et l'itérateur renvoyé par la méthode est utilisé pour récupérer les valeurs sur lesquelles itérer.

- -

Certains types natifs possèdent un comportement par défaut pour l'itération, d'autres types (tels qu'{{jsxref("Object")}}) n'ont pas de tel comportement. Les types natifs qui disposent d'une méthode @@iterator sont :

- - - -

Pour plus d'informations, voir aussi la page sur les protocoles d'itération.

- -

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

- -

Exemples

- -

Itérables définis par l'utilisateur

- -

Il est possible de construire un itérable de la façon suivante :

- -
var monItérable = {}
-monItérable[Symbol.iterator] = function* () {
-    yield 1;
-    yield 2;
-    yield 3;
-};
-[...monItérable] // [1, 2, 3]
-
- -

On peut également définir ces itérables via des propriétés calculées dans des déclarations de classe ou dans des littéraux objets :

- -
class Toto {
-  *[Symbol.iterator] () {
-    yield 1;
-    yield 2;
-    yield 3;
-  }
-}
-
-const monObj = {
-  *[Symbol.iterator] () {
-    yield "a";
-    yield "b";
-  }
-}
-
-[... new Toto] // [1, 2, 3]
-[... monObj]   // ["a", "b"]
-
- -

Itérables mal-formés

- -

Si la méthode @@iterator d'un itérable ne renvoie pas un itérateur, on dira que c'est un itérable mal-formé. Utiliser un tel itérable peut provoquer des erreurs lors de l'exécution :

- -
var itérableMalFormé = {}
-itérableMalFormé[Symbol.iterator] = () => 1
-[...itérableMalFormé] // TypeError: [] is not a function
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.iterator', 'Symbol.iterator')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/iterator/index.md b/files/fr/web/javascript/reference/global_objects/symbol/iterator/index.md new file mode 100644 index 0000000000..2b3d9bf367 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/iterator/index.md @@ -0,0 +1,121 @@ +--- +title: Symbol.iterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/iterator +--- +
{{JSRef}}
+ +

Le symbole Symbol.iterator définit l'itérateur par défaut d'un objet. C'est l'itérateur qui sera utilisé par for...of.

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

Description

+ +

Lorsqu'on doit itérer sur un objet (par exemple avec une boucle for..of), sa méthode @@iterator est appelée sans argument et l'itérateur renvoyé par la méthode est utilisé pour récupérer les valeurs sur lesquelles itérer.

+ +

Certains types natifs possèdent un comportement par défaut pour l'itération, d'autres types (tels qu'{{jsxref("Object")}}) n'ont pas de tel comportement. Les types natifs qui disposent d'une méthode @@iterator sont :

+ + + +

Pour plus d'informations, voir aussi la page sur les protocoles d'itération.

+ +

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

+ +

Exemples

+ +

Itérables définis par l'utilisateur

+ +

Il est possible de construire un itérable de la façon suivante :

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

On peut également définir ces itérables via des propriétés calculées dans des déclarations de classe ou dans des littéraux objets :

+ +
class Toto {
+  *[Symbol.iterator] () {
+    yield 1;
+    yield 2;
+    yield 3;
+  }
+}
+
+const monObj = {
+  *[Symbol.iterator] () {
+    yield "a";
+    yield "b";
+  }
+}
+
+[... new Toto] // [1, 2, 3]
+[... monObj]   // ["a", "b"]
+
+ +

Itérables mal-formés

+ +

Si la méthode @@iterator d'un itérable ne renvoie pas un itérateur, on dira que c'est un itérable mal-formé. Utiliser un tel itérable peut provoquer des erreurs lors de l'exécution :

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.iterator', 'Symbol.iterator')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.html b/files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.html deleted file mode 100644 index 804b089fe1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Symbol.keyFor() -slug: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/keyFor ---- -
{{JSRef}}
- -

La méthode Symbol.keyFor(sym) permet de récupérer la clé d'un symbole donné qui est partagé via le registre global des symboles.

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

Syntaxe

- -
Symbol.keyFor(sym);
- -

Paramètres

- -
-
sym
-
Le symbole dont on souhaite connaître la clé. Ce paramètre est obligatoire.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente la clé d'un symbole donné si celui-ci est trouvé dans le registre global ou {{jsxref("undefined")}} sinon.

- -

Exemples

- -
var symboleGlobal = Symbol.for("toto"); // on crée un symbole global
-Symbol.keyFor(symboleGlobal); // "toto"
-
-var symboleLocal = Symbol();
-Symbol.keyFor(symboleLocal); // undefined
-
-// les symboles connus ne sont pas dans le registre
-// global
-Symbol.keyFor(Symbol.iterator); // undefined
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.keyfor', 'Symbol.keyFor')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.keyfor', 'Symbol.keyFor')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.md b/files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.md new file mode 100644 index 0000000000..804b089fe1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/keyfor/index.md @@ -0,0 +1,77 @@ +--- +title: Symbol.keyFor() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/keyFor +--- +
{{JSRef}}
+ +

La méthode Symbol.keyFor(sym) permet de récupérer la clé d'un symbole donné qui est partagé via le registre global des symboles.

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

Syntaxe

+ +
Symbol.keyFor(sym);
+ +

Paramètres

+ +
+
sym
+
Le symbole dont on souhaite connaître la clé. Ce paramètre est obligatoire.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente la clé d'un symbole donné si celui-ci est trouvé dans le registre global ou {{jsxref("undefined")}} sinon.

+ +

Exemples

+ +
var symboleGlobal = Symbol.for("toto"); // on crée un symbole global
+Symbol.keyFor(symboleGlobal); // "toto"
+
+var symboleLocal = Symbol();
+Symbol.keyFor(symboleLocal); // undefined
+
+// les symboles connus ne sont pas dans le registre
+// global
+Symbol.keyFor(Symbol.iterator); // undefined
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.keyfor', 'Symbol.keyFor')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.keyfor', 'Symbol.keyFor')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/match/index.html b/files/fr/web/javascript/reference/global_objects/symbol/match/index.html deleted file mode 100644 index c1b0aed572..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/match/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Symbol.match -slug: Web/JavaScript/Reference/Global_Objects/Symbol/match -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/match -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/match ---- -
{{JSRef}}
- -

Le symbole Symbol.match définit la correspondance d'une expression rationnelle par rapport à une chaîne de caractères. Cette fonction est appelée par la méthode {{jsxref("String.prototype.match()")}}.

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

Description

- -

Cette fonction est également utilisée pour identifier les objets qui jouent un rôle avec les expressions rationnelles. Ainsi, les méthodes {{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} et {{jsxref("String.prototype.includes()")}} vérifient si leur premier argument est une expression rationnelle et lèvent une exception {{jsxref("TypeError")}} si c'est le cas. Si le symbole match est modifié et vaut une valeur false (ou équivalente), cela indique que l'objet ne doit pas être utilisé comme une expression rationnelle.

- -

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

- -

Exemples

- -

Le code suivant renverra une exception {{jsxref("TypeError")}} :

- -
"/truc/".startsWith(/truc/);
-
-// lève une TypeError car /truc/
-// est une expression rationnelle
-// et que Symbol.match n'a pas été modifié.
- -

Cependant, si Symbol.match vaut false, cette vérification isRegExp indiquera que l'objet à prendre en compte n'est pas une expression rationnelle. Les méthodes startsWith et endsWith ne déclencheront donc pas d'exception TypeError.

- -
var re = /toto/;
-re[Symbol.match] = false;
-"/toto/".startsWith(re); // true
-"/truc/".endsWith(re);   // false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.match', 'Symbol.match')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.match', 'Symbol.match')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/match/index.md b/files/fr/web/javascript/reference/global_objects/symbol/match/index.md new file mode 100644 index 0000000000..c1b0aed572 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/match/index.md @@ -0,0 +1,78 @@ +--- +title: Symbol.match +slug: Web/JavaScript/Reference/Global_Objects/Symbol/match +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/match +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/match +--- +
{{JSRef}}
+ +

Le symbole Symbol.match définit la correspondance d'une expression rationnelle par rapport à une chaîne de caractères. Cette fonction est appelée par la méthode {{jsxref("String.prototype.match()")}}.

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

Description

+ +

Cette fonction est également utilisée pour identifier les objets qui jouent un rôle avec les expressions rationnelles. Ainsi, les méthodes {{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} et {{jsxref("String.prototype.includes()")}} vérifient si leur premier argument est une expression rationnelle et lèvent une exception {{jsxref("TypeError")}} si c'est le cas. Si le symbole match est modifié et vaut une valeur false (ou équivalente), cela indique que l'objet ne doit pas être utilisé comme une expression rationnelle.

+ +

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

+ +

Exemples

+ +

Le code suivant renverra une exception {{jsxref("TypeError")}} :

+ +
"/truc/".startsWith(/truc/);
+
+// lève une TypeError car /truc/
+// est une expression rationnelle
+// et que Symbol.match n'a pas été modifié.
+ +

Cependant, si Symbol.match vaut false, cette vérification isRegExp indiquera que l'objet à prendre en compte n'est pas une expression rationnelle. Les méthodes startsWith et endsWith ne déclencheront donc pas d'exception TypeError.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.match', 'Symbol.match')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.match', 'Symbol.match')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/matchall/index.html b/files/fr/web/javascript/reference/global_objects/symbol/matchall/index.html deleted file mode 100644 index e3fa6b44aa..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/matchall/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Symbol.matchAll -slug: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll -tags: - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/matchAll ---- -
{{JSRef}}
- -

Le symbole connu Symbol.matchAll renvoie un itérateur qui fournit l'ensemble des correspondances entre une expression rationnelle et une chaîne de caractères. Cette fonction est implicitement appelée par la méthode {{jsxref("String.prototype.matchAll()")}}.

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

Description

- -
-

Ce symbole est utilisé par {{jsxref("String.prototype.matchAll()")}} et plus particulièrement par {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}}. Les deux lignes qui suivent renverront le même résultat :

- -
'abc'.matchAll(/a/);
-
-/a/[Symbol.matchAll]('abc');
- -

Cette méthode existe afin de personnaliser le comportement des correspondances pour les sous-classes de {{jsxref("RegExp")}}.

- -

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

-
- -

Exemples

- -

Voir les pages {{jsxref("String.prototype.matchAll()")}} et {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}} pour plus d'exemples.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-symbol.matchall', 'Symbol.matchAll')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/matchall/index.md b/files/fr/web/javascript/reference/global_objects/symbol/matchall/index.md new file mode 100644 index 0000000000..e3fa6b44aa --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/matchall/index.md @@ -0,0 +1,64 @@ +--- +title: Symbol.matchAll +slug: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +tags: + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/matchAll +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.matchAll renvoie un itérateur qui fournit l'ensemble des correspondances entre une expression rationnelle et une chaîne de caractères. Cette fonction est implicitement appelée par la méthode {{jsxref("String.prototype.matchAll()")}}.

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

Description

+ +
+

Ce symbole est utilisé par {{jsxref("String.prototype.matchAll()")}} et plus particulièrement par {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}}. Les deux lignes qui suivent renverront le même résultat :

+ +
'abc'.matchAll(/a/);
+
+/a/[Symbol.matchAll]('abc');
+ +

Cette méthode existe afin de personnaliser le comportement des correspondances pour les sous-classes de {{jsxref("RegExp")}}.

+ +

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

+
+ +

Exemples

+ +

Voir les pages {{jsxref("String.prototype.matchAll()")}} et {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}} pour plus d'exemples.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-symbol.matchall', 'Symbol.matchAll')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/replace/index.html b/files/fr/web/javascript/reference/global_objects/symbol/replace/index.html deleted file mode 100644 index 8b8e11ecbb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/replace/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Symbol.replace -slug: Web/JavaScript/Reference/Global_Objects/Symbol/replace -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/replace -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/replace ---- -
{{JSRef}}
- -

Le symbole connu Symbol.replace définit la méthode utilisée pour remplacer les correspondances trouvées dans une chaîne de caractères. Cette fonction est appelée par la méthode {{jsxref("String.prototype.replace()")}}.

- -

Pour plus d'informations, se référer aux pages sur {{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}} et {{jsxref("String.prototype.replace()")}}.

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.replace', 'Symbol.replace')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.replace', 'Symbol.replace')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/replace/index.md b/files/fr/web/javascript/reference/global_objects/symbol/replace/index.md new file mode 100644 index 0000000000..8b8e11ecbb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/replace/index.md @@ -0,0 +1,58 @@ +--- +title: Symbol.replace +slug: Web/JavaScript/Reference/Global_Objects/Symbol/replace +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/replace +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/replace +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.replace définit la méthode utilisée pour remplacer les correspondances trouvées dans une chaîne de caractères. Cette fonction est appelée par la méthode {{jsxref("String.prototype.replace()")}}.

+ +

Pour plus d'informations, se référer aux pages sur {{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}} et {{jsxref("String.prototype.replace()")}}.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.replace', 'Symbol.replace')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.replace', 'Symbol.replace')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/search/index.html b/files/fr/web/javascript/reference/global_objects/symbol/search/index.html deleted file mode 100644 index 0b517d7c13..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/search/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Symbol.search -slug: Web/JavaScript/Reference/Global_Objects/Symbol/search -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/search -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/search ---- -
{{JSRef}}
- -

Le symbole connu Symbol.search définit la méthode qui renvoie l'indice indiquant la position d'une correspondance trouvée dans une chaîne de caractères grâce à une expression rationnelle. Cette fonction est appelée par la méthode {{jsxref("String.prototype.search()")}}.

- -

Pour plus d'informations, se référer aux pages sur {{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}} et {{jsxref("String.prototype.search()")}}.

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.search', 'Symbol.search')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.search', 'Symbol.search')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/search/index.md b/files/fr/web/javascript/reference/global_objects/symbol/search/index.md new file mode 100644 index 0000000000..0b517d7c13 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/search/index.md @@ -0,0 +1,58 @@ +--- +title: Symbol.search +slug: Web/JavaScript/Reference/Global_Objects/Symbol/search +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/search +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/search +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.search définit la méthode qui renvoie l'indice indiquant la position d'une correspondance trouvée dans une chaîne de caractères grâce à une expression rationnelle. Cette fonction est appelée par la méthode {{jsxref("String.prototype.search()")}}.

+ +

Pour plus d'informations, se référer aux pages sur {{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}} et {{jsxref("String.prototype.search()")}}.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.search', 'Symbol.search')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.search', 'Symbol.search')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/species/index.html b/files/fr/web/javascript/reference/global_objects/symbol/species/index.html deleted file mode 100644 index 1d533ecbc4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/species/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Symbol.species -slug: Web/JavaScript/Reference/Global_Objects/Symbol/species -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/species -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/species ---- -
{{JSRef}}
- -

Le symbole Symbol.species correspond à une fonction utilisée comme constructeur pour créer des objets dérivés.

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

Description

- -

L'accesseur species permettent aux classes filles de surcharger le constructeur par défaut des objets.

- -

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

- -

Exemples

- -

Dans certains cas, vous pouvez avoir besoin de renvoyer {{jsxref("Array")}} pour les objets de votre classe dérivée MonArray. Cela permet par exemple d'utiliser le constructeur par défaut lors d'un appel à {{jsxref("Array.map", "map()")}}. De cette façon, ces méthodes renverront un objet Array plutôt qu'un objet MonArray. Grâce au symbole species, vous pouvez donc faire :

- -
class MonArray extends Array {
-  // On surcharge species avec le constructeur parent Array
-  static get [Symbol.species]() { return Array; }
-}
-var a = new MonArray(1,2,3);
-var mapped = a.map(x => x * x);
-
-console.log(mapped instanceof MonArray); // false
-console.log(mapped instanceof Array);    // true
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.species', 'Symbol.species')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.species', 'Symbol.species')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/species/index.md b/files/fr/web/javascript/reference/global_objects/symbol/species/index.md new file mode 100644 index 0000000000..1d533ecbc4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/species/index.md @@ -0,0 +1,72 @@ +--- +title: Symbol.species +slug: Web/JavaScript/Reference/Global_Objects/Symbol/species +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/species +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/species +--- +
{{JSRef}}
+ +

Le symbole Symbol.species correspond à une fonction utilisée comme constructeur pour créer des objets dérivés.

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

Description

+ +

L'accesseur species permettent aux classes filles de surcharger le constructeur par défaut des objets.

+ +

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

+ +

Exemples

+ +

Dans certains cas, vous pouvez avoir besoin de renvoyer {{jsxref("Array")}} pour les objets de votre classe dérivée MonArray. Cela permet par exemple d'utiliser le constructeur par défaut lors d'un appel à {{jsxref("Array.map", "map()")}}. De cette façon, ces méthodes renverront un objet Array plutôt qu'un objet MonArray. Grâce au symbole species, vous pouvez donc faire :

+ +
class MonArray extends Array {
+  // On surcharge species avec le constructeur parent Array
+  static get [Symbol.species]() { return Array; }
+}
+var a = new MonArray(1,2,3);
+var mapped = a.map(x => x * x);
+
+console.log(mapped instanceof MonArray); // false
+console.log(mapped instanceof Array);    // true
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.species', 'Symbol.species')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.species', 'Symbol.species')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/split/index.html b/files/fr/web/javascript/reference/global_objects/symbol/split/index.html deleted file mode 100644 index 46b881a57b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/split/index.html +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Symbol.split -slug: Web/JavaScript/Reference/Global_Objects/Symbol/split -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/split -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/split ---- -
{{JSRef}}
- -

Le symbole connu Symbol.split définit la méthode qui est utilisée pour découper une chaîne de caractères à l'emplacement où une correspondance a été trouvée grâce à une expression rationnelle. Cette fonction est appelée par la méthode {{jsxref("String.prototype.split()")}}.

- -

Pour plus d'informations, se référer aux pages sur {{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}} et {{jsxref("String.prototype.split()")}}.

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.split', 'Symbol.split')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.split', 'Symbol.split')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/split/index.md b/files/fr/web/javascript/reference/global_objects/symbol/split/index.md new file mode 100644 index 0000000000..46b881a57b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/split/index.md @@ -0,0 +1,58 @@ +--- +title: Symbol.split +slug: Web/JavaScript/Reference/Global_Objects/Symbol/split +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/split +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/split +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.split définit la méthode qui est utilisée pour découper une chaîne de caractères à l'emplacement où une correspondance a été trouvée grâce à une expression rationnelle. Cette fonction est appelée par la méthode {{jsxref("String.prototype.split()")}}.

+ +

Pour plus d'informations, se référer aux pages sur {{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}} et {{jsxref("String.prototype.split()")}}.

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.split', 'Symbol.split')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.split', 'Symbol.split')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.html b/files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.html deleted file mode 100644 index 61a0cc823f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Symbol.toPrimitive -slug: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toPrimitive ---- -
{{JSRef}}
- -

Le symbole « connu » Symbol.toPrimitive définit une fonction qui est appelée pour convertir un objet en une valeur primitive.

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

Description

- -

Lorsqu'on convertit un objet en une valeur primitive et que l'objet possède une propriété Symbol.toPrimitive dont la valeur est une fonction, la fonction est appelée avec une chaîne de caractère (hint) qui définit le type qu'on privilégie pour la valeur primitive. L'argument hint peut prendre l'une des valeurs suivantes : "number", "string" ou "default".

- -

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

- -

Exemples

- -

Dans l'exemple qui suit, on voit comment la propriété Symbol.toPrimitive peut modifier la valeur primitive obtenue lors de la conversion d'un objet.

- -
// Premier cas avec un objet sans Symbol.toPrimitive.
-let obj1 = {};
-console.log(+obj1);     // NaN
-console.log(`${obj1}`); // "[object Object]"
-console.log(obj1 + ""); // "[object Object]"
-
-// Second cas : l'objet a une propriété Symbol.toPrimitive
-var obj2 = {
-  [Symbol.toPrimitive](hint) {
-    if (hint === "number") {
-      return 10;
-    }
-    if (hint === "string") {
-      return "coucou";
-    }
-    return true;
-  }
-};
-console.log(+obj2);     // 10       -- hint vaut "number"
-console.log(`${obj2}`); // "coucou" -- hint vaut "string"
-console.log(obj2 + ""); // true     -- hint vaut "default"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationEtatCommentaires
{{SpecName('ES2015', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.md b/files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.md new file mode 100644 index 0000000000..61a0cc823f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/toprimitive/index.md @@ -0,0 +1,87 @@ +--- +title: Symbol.toPrimitive +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toPrimitive +--- +
{{JSRef}}
+ +

Le symbole « connu » Symbol.toPrimitive définit une fonction qui est appelée pour convertir un objet en une valeur primitive.

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

Description

+ +

Lorsqu'on convertit un objet en une valeur primitive et que l'objet possède une propriété Symbol.toPrimitive dont la valeur est une fonction, la fonction est appelée avec une chaîne de caractère (hint) qui définit le type qu'on privilégie pour la valeur primitive. L'argument hint peut prendre l'une des valeurs suivantes : "number", "string" ou "default".

+ +

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

+ +

Exemples

+ +

Dans l'exemple qui suit, on voit comment la propriété Symbol.toPrimitive peut modifier la valeur primitive obtenue lors de la conversion d'un objet.

+ +
// Premier cas avec un objet sans Symbol.toPrimitive.
+let obj1 = {};
+console.log(+obj1);     // NaN
+console.log(`${obj1}`); // "[object Object]"
+console.log(obj1 + ""); // "[object Object]"
+
+// Second cas : l'objet a une propriété Symbol.toPrimitive
+var obj2 = {
+  [Symbol.toPrimitive](hint) {
+    if (hint === "number") {
+      return 10;
+    }
+    if (hint === "string") {
+      return "coucou";
+    }
+    return true;
+  }
+};
+console.log(+obj2);     // 10       -- hint vaut "number"
+console.log(`${obj2}`); // "coucou" -- hint vaut "string"
+console.log(obj2 + ""); // true     -- hint vaut "default"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationEtatCommentaires
{{SpecName('ES2015', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/tosource/index.html b/files/fr/web/javascript/reference/global_objects/symbol/tosource/index.html deleted file mode 100644 index 45796e26bb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/tosource/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Symbol.prototype.toSource() -slug: Web/JavaScript/Reference/Global_Objects/Symbol/toSource -tags: - - JavaScript - - Méthode - - Non-standard - - Prototype - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toSource -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toSource ---- -
{{JSRef}} {{non-standard_header}}
- -

La méthode toSource() renvoie une chaîne de caractères représentant le code source de l'objet.

- -

L'utilisation de cette méthode est généralement interne au moteur JavaScript.

- -

Syntaxe

- -
Symbol.toSource();
-
-var sym = Symbol();
-sym.toSource();
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le code source de l'objet.

- -

Description

- -

La méthode toSource renvoie les valeurs suivantes :

- - - -

Spécifications

- -

Cette méthode ne fait partie d'aucun standard.

- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/tosource/index.md b/files/fr/web/javascript/reference/global_objects/symbol/tosource/index.md new file mode 100644 index 0000000000..45796e26bb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/tosource/index.md @@ -0,0 +1,59 @@ +--- +title: Symbol.prototype.toSource() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toSource +tags: + - JavaScript + - Méthode + - Non-standard + - Prototype + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toSource +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toSource +--- +
{{JSRef}} {{non-standard_header}}
+ +

La méthode toSource() renvoie une chaîne de caractères représentant le code source de l'objet.

+ +

L'utilisation de cette méthode est généralement interne au moteur JavaScript.

+ +

Syntaxe

+ +
Symbol.toSource();
+
+var sym = Symbol();
+sym.toSource();
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le code source de l'objet.

+ +

Description

+ +

La méthode toSource renvoie les valeurs suivantes :

+ + + +

Spécifications

+ +

Cette méthode ne fait partie d'aucun standard.

+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/tostring/index.html b/files/fr/web/javascript/reference/global_objects/symbol/tostring/index.html deleted file mode 100644 index 7ab3b55791..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/tostring/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Symbol.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/Symbol/toString -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaîne de caractères représentant l'objet Symbol.

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

Syntaxe

- -
Symbol().toString();
- -

Valeur de retour

- -

Une chaîne de caractères qui représente l'objet {{jsxref("Symbol")}}.

- -

Description

- -

L'objet {{jsxref("Symbol")}} surcharge la méthode toString() d'{{jsxref("Object")}} et n'hérite pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets Symbol, la méthode toString() renvoie représentation de l'objet sous forme d'une chaîne de caractères.

- -

Concaténation de chaînes et symboles

- -

Bien qu'il soit possible d'appeler toString() pour les symboles, il n'est pas possible de concaténer une chaîne de caractères avec ce type d'objet :

- -
Symbol("toto") + "machin";  // TypeError : Impossible de convertir un symbole en chaîne de caractères
- -

Exemples

- -
Symbol("desc").toString();   // "Symbol(desc)"
-
-// symboles connus
-Symbol.iterator.toString();  // "Symbol(Symbol.iterator)
-
-// symboles globaux
-Symbol.for("toto").toString() // "Symbol(toto)"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.prototype.tostring', 'Symbol.prototype.toString')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-symbol.prototype.tostring', 'Symbol.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/tostring/index.md b/files/fr/web/javascript/reference/global_objects/symbol/tostring/index.md new file mode 100644 index 0000000000..7ab3b55791 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/tostring/index.md @@ -0,0 +1,79 @@ +--- +title: Symbol.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toString +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaîne de caractères représentant l'objet Symbol.

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

Syntaxe

+ +
Symbol().toString();
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente l'objet {{jsxref("Symbol")}}.

+ +

Description

+ +

L'objet {{jsxref("Symbol")}} surcharge la méthode toString() d'{{jsxref("Object")}} et n'hérite pas de {{jsxref("Object.prototype.toString()")}}. Pour les objets Symbol, la méthode toString() renvoie représentation de l'objet sous forme d'une chaîne de caractères.

+ +

Concaténation de chaînes et symboles

+ +

Bien qu'il soit possible d'appeler toString() pour les symboles, il n'est pas possible de concaténer une chaîne de caractères avec ce type d'objet :

+ +
Symbol("toto") + "machin";  // TypeError : Impossible de convertir un symbole en chaîne de caractères
+ +

Exemples

+ +
Symbol("desc").toString();   // "Symbol(desc)"
+
+// symboles connus
+Symbol.iterator.toString();  // "Symbol(Symbol.iterator)
+
+// symboles globaux
+Symbol.for("toto").toString() // "Symbol(toto)"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.prototype.tostring', 'Symbol.prototype.toString')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-symbol.prototype.tostring', 'Symbol.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.html b/files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.html deleted file mode 100644 index a5c2a0a439..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Symbol.toStringTag -slug: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toStringTag ---- -
{{JSRef}}
- -

Le symbole connu Symbol.toStringTag est une propriété qui est une chaîne de caractères qui est utilisée pour la description textuelle par défaut d'un objet. Ce symbole est utilisé par le moteur JavaScript via la méthode {{jsxref("Object.prototype.toString()")}}.

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

Description

- -

La plupart des types JavaScript ont des étiquettes par défaut :

- -
Object.prototype.toString.call('toto');    // "[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]"
-// etc.
-
- -

D'autres ont le symbole natif toStringTag défini :

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

Lorsqu'on crée des classes personnalisées, JavaScript utilise l'étiquette "Object" par défaut :

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

Si on utilise le symbole toStringTag on peut définir une étiquette personnalisée :

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

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.md b/files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.md new file mode 100644 index 0000000000..a5c2a0a439 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/tostringtag/index.md @@ -0,0 +1,92 @@ +--- +title: Symbol.toStringTag +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/toStringTag +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.toStringTag est une propriété qui est une chaîne de caractères qui est utilisée pour la description textuelle par défaut d'un objet. Ce symbole est utilisé par le moteur JavaScript via la méthode {{jsxref("Object.prototype.toString()")}}.

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

Description

+ +

La plupart des types JavaScript ont des étiquettes par défaut :

+ +
Object.prototype.toString.call('toto');    // "[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]"
+// etc.
+
+ +

D'autres ont le symbole natif toStringTag défini :

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

Lorsqu'on crée des classes personnalisées, JavaScript utilise l'étiquette "Object" par défaut :

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

Si on utilise le symbole toStringTag on peut définir une étiquette personnalisée :

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

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.html b/files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.html deleted file mode 100644 index 4ec9b35407..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.html +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Symbol.unscopables -slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables -tags: - - ECMAScript 2015 - - JavaScript - - Propriété - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/unscopables ---- -
{{JSRef}}
- -

Le symbole connu Symbol.unscopables est utilisé afin de définir les noms des propriétés propres et héritées qui sont exclues de l'objet lors de l'utilisation de with sur l'objet en question.

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

Description

- -

Le symbole @@unscopables (Symbol.unscopables) peut être défini sur n'importe quel objet afin de ne pas exposer certaines propriétés lors des liaisons lexicales avec with. Note : en mode strict, l'instruction with n'est pas disponible et ce symbole est donc probablement moins nécessaire.

- -

En définissant une propriété comme true dans un objet unscopables, cela exclura la propriété de la portée lexicale. En définissant une propriété comme false, celle-ci pourra faire partie de la portée lexicale et être manipulée dans un bloc with.

- -

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

- -

Exemples

- -

Le code qui suit fonctionne bien pour ES5 et les versions antérieures. En revanche, pour ECMAScript 2015 (ES6) et les versions ultérieures où la méthode  {{jsxref("Array.prototype.keys()")}} existe, lorsqu'on utilise un environnement créé avec with, "keys" serait désormais la méthode et non la variable. C'est là que le symbole natif @@unscopables Array.prototype[@@unscopables] intervient et empêche d'explorer ces méthodes avec with.

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

On peut également manipuler unscopables sur ses propres objets :

- -
var obj = {
-  toto: 1,
-  truc: 2
-};
-
-obj[Symbol.unscopables] = {
-  toto: false,
-  truc: true
-};
-
-with(obj) {
-  console.log(toto); // 1
-  console.log(truc); // ReferenceError: truc is not defined
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.unscopables', 'Symbol.unscopables')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.md b/files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.md new file mode 100644 index 0000000000..4ec9b35407 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/unscopables/index.md @@ -0,0 +1,92 @@ +--- +title: Symbol.unscopables +slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +tags: + - ECMAScript 2015 + - JavaScript + - Propriété + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/unscopables +--- +
{{JSRef}}
+ +

Le symbole connu Symbol.unscopables est utilisé afin de définir les noms des propriétés propres et héritées qui sont exclues de l'objet lors de l'utilisation de with sur l'objet en question.

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

Description

+ +

Le symbole @@unscopables (Symbol.unscopables) peut être défini sur n'importe quel objet afin de ne pas exposer certaines propriétés lors des liaisons lexicales avec with. Note : en mode strict, l'instruction with n'est pas disponible et ce symbole est donc probablement moins nécessaire.

+ +

En définissant une propriété comme true dans un objet unscopables, cela exclura la propriété de la portée lexicale. En définissant une propriété comme false, celle-ci pourra faire partie de la portée lexicale et être manipulée dans un bloc with.

+ +

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

+ +

Exemples

+ +

Le code qui suit fonctionne bien pour ES5 et les versions antérieures. En revanche, pour ECMAScript 2015 (ES6) et les versions ultérieures où la méthode  {{jsxref("Array.prototype.keys()")}} existe, lorsqu'on utilise un environnement créé avec with, "keys" serait désormais la méthode et non la variable. C'est là que le symbole natif @@unscopables Array.prototype[@@unscopables] intervient et empêche d'explorer ces méthodes avec with.

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

On peut également manipuler unscopables sur ses propres objets :

+ +
var obj = {
+  toto: 1,
+  truc: 2
+};
+
+obj[Symbol.unscopables] = {
+  toto: false,
+  truc: true
+};
+
+with(obj) {
+  console.log(toto); // 1
+  console.log(truc); // ReferenceError: truc is not defined
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.unscopables', 'Symbol.unscopables')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/symbol/valueof/index.html b/files/fr/web/javascript/reference/global_objects/symbol/valueof/index.html deleted file mode 100644 index 48d99785a5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/symbol/valueof/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Symbol.prototype.valueOf() -slug: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - Symbol -translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/valueOf ---- -
{{JSRef}}
- -

La méthode valueOf() renvoie la valeur primitive correspondant à l'objet Symbol.

- -

Syntaxe

- -
Symbol().valueOf();
-
- -

Valeur de retour

- -

La valeur primitive de l'objet {{jsxref("Symbol")}} indiqué.

- -

Description

- -

La méthode valueOf de {{jsxref("Symbol")}} renvoie une valeur dont le type est le type primitif symbole à partir de l'objet Symbol donné.

- -

JavaScript appelle la méthode valueOf afin de convertir l'objet en une valeur primitive. La plupart du temps, il n'est pas nécessaire d'appeler explicitement la méthode valueOf. JavaScript l'appelle automatiquement dans les cas où une valeur primitive est attendue.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/symbol/valueof/index.md b/files/fr/web/javascript/reference/global_objects/symbol/valueof/index.md new file mode 100644 index 0000000000..48d99785a5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/symbol/valueof/index.md @@ -0,0 +1,63 @@ +--- +title: Symbol.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Symbol/valueOf +--- +
{{JSRef}}
+ +

La méthode valueOf() renvoie la valeur primitive correspondant à l'objet Symbol.

+ +

Syntaxe

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

Valeur de retour

+ +

La valeur primitive de l'objet {{jsxref("Symbol")}} indiqué.

+ +

Description

+ +

La méthode valueOf de {{jsxref("Symbol")}} renvoie une valeur dont le type est le type primitif symbole à partir de l'objet Symbol donné.

+ +

JavaScript appelle la méthode valueOf afin de convertir l'objet en une valeur primitive. La plupart du temps, il n'est pas nécessaire d'appeler explicitement la méthode valueOf. JavaScript l'appelle automatiquement dans les cas où une valeur primitive est attendue.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/syntaxerror/index.html b/files/fr/web/javascript/reference/global_objects/syntaxerror/index.html deleted file mode 100644 index bddaea8370..0000000000 --- a/files/fr/web/javascript/reference/global_objects/syntaxerror/index.html +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: SyntaxError -slug: Web/JavaScript/Reference/Global_Objects/SyntaxError -tags: - - Error - - JavaScript - - Object - - Reference - - SyntaxError -translation_of: Web/JavaScript/Reference/Global_Objects/SyntaxError -original_slug: Web/JavaScript/Reference/Objets_globaux/SyntaxError ---- -
{{JSRef}}
- -

L'objet SyntaxError représente une erreur qui se produit lors de l'interprétation d'un code dont la syntaxe est invalide.

- -

Description

- -

Une exception SyntaxError est levée lorsque le moteur JavaScript rencontre des entités lexicales invalide ou dans un ordre invalide par rapport à la grammaire du langage.

- -

Syntaxe

- -
new SyntaxError([message[, nomFichier[, numLigne]]])
- -

Paramètres

- -
-
message{{optional_inline}}
-
Une description, lisible par un humain, de l'erreur.
-
nomFichier {{optional_inline}}{{non-standard_inline}}
-
Le nom du fichier contenant le code provoquant l'erreur.
-
numLigne {{optional_inline}}{{non-standard_inline}}
-
Le numéro de la ligne du code qui a provoqué l'exception.
-
- -

Propriétés

- -
-
{{jsxref("SyntaxError.prototype")}}
-
Cette méthode permet d'ajouter des propriétés aux instance de SyntaxError.
-
- -

Méthodes

- -

L'objet global SyntaxError ne contient pas de méthodes directes. En revanche, il hérite de méthodes grâce à sa chaîne de prototypes.

- -

Instances de SyntaxError

- -

Propriétés

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/SyntaxError/prototype', 'Propriétés')}}
- -

Méthodes

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/SyntaxError/prototype', 'Méthodes')}}
- -

Exemples

- -

Intercepter une exception SyntaxError

- -
try {
-  eval('toto truc');
-} 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"
-}
-
- -

Créer une exception SyntaxError

- -
try {
-  throw new SyntaxError('Coucou', 'unFichier.js', 10);
-} catch (e) {
-  console.log(e instanceof SyntaxError); // true
-  console.log(e.message);                // "Coucou"
-  console.log(e.name);                   // "SyntaxError"
-  console.log(e.fileName);               // "unFichier.js"
-  console.log(e.lineNumber);             // 10
-  console.log(e.columnNumber);           // 0
-  console.log(e.stack);                  // "@Scratchpad/2:11:9\n"
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.4', 'SyntaxError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/syntaxerror/index.md b/files/fr/web/javascript/reference/global_objects/syntaxerror/index.md new file mode 100644 index 0000000000..bddaea8370 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/syntaxerror/index.md @@ -0,0 +1,130 @@ +--- +title: SyntaxError +slug: Web/JavaScript/Reference/Global_Objects/SyntaxError +tags: + - Error + - JavaScript + - Object + - Reference + - SyntaxError +translation_of: Web/JavaScript/Reference/Global_Objects/SyntaxError +original_slug: Web/JavaScript/Reference/Objets_globaux/SyntaxError +--- +
{{JSRef}}
+ +

L'objet SyntaxError représente une erreur qui se produit lors de l'interprétation d'un code dont la syntaxe est invalide.

+ +

Description

+ +

Une exception SyntaxError est levée lorsque le moteur JavaScript rencontre des entités lexicales invalide ou dans un ordre invalide par rapport à la grammaire du langage.

+ +

Syntaxe

+ +
new SyntaxError([message[, nomFichier[, numLigne]]])
+ +

Paramètres

+ +
+
message{{optional_inline}}
+
Une description, lisible par un humain, de l'erreur.
+
nomFichier {{optional_inline}}{{non-standard_inline}}
+
Le nom du fichier contenant le code provoquant l'erreur.
+
numLigne {{optional_inline}}{{non-standard_inline}}
+
Le numéro de la ligne du code qui a provoqué l'exception.
+
+ +

Propriétés

+ +
+
{{jsxref("SyntaxError.prototype")}}
+
Cette méthode permet d'ajouter des propriétés aux instance de SyntaxError.
+
+ +

Méthodes

+ +

L'objet global SyntaxError ne contient pas de méthodes directes. En revanche, il hérite de méthodes grâce à sa chaîne de prototypes.

+ +

Instances de SyntaxError

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/SyntaxError/prototype', 'Propriétés')}}
+ +

Méthodes

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/SyntaxError/prototype', 'Méthodes')}}
+ +

Exemples

+ +

Intercepter une exception SyntaxError

+ +
try {
+  eval('toto truc');
+} 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"
+}
+
+ +

Créer une exception SyntaxError

+ +
try {
+  throw new SyntaxError('Coucou', 'unFichier.js', 10);
+} catch (e) {
+  console.log(e instanceof SyntaxError); // true
+  console.log(e.message);                // "Coucou"
+  console.log(e.name);                   // "SyntaxError"
+  console.log(e.fileName);               // "unFichier.js"
+  console.log(e.lineNumber);             // 10
+  console.log(e.columnNumber);           // 0
+  console.log(e.stack);                  // "@Scratchpad/2:11:9\n"
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.4', 'SyntaxError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.html deleted file mode 100644 index 761dce12fe..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: TypedArray.prototype[@@iterator]() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator -tags: - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/@@iterator ---- -
{{JSRef}}
- -

La valeur initiale de la propriété @@iterator est le même objet fonction que la valeur initiale de {{jsxref("TypedArray.prototype.values()", "values")}}.

- -

Syntaxe

- -
typedarray[Symbol.iterator]()
- -

Valeur de retour

- -

Une fonction d'itération sur le tableau typé, par défaut, c'est la fonction {{jsxref("TypedArray.prototype.values()","values()")}}.

- -

Exemples

- -

Parcourir un tableau typé avec for...of

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-// prérequis : le navigateur doit supporter les boucles
-// for..of et les variables dont la portée est définie
-// par let
-for (let n of arr) {
-  console.log(n);
-}
-
- -

Autre méthode d'itération

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-var eArr = arr[Symbol.iterator]();
-console.log(eArr.next().value); // 10
-console.log(eArr.next().value); // 20
-console.log(eArr.next().value); // 30
-console.log(eArr.next().value); // 40
-console.log(eArr.next().value); // 50
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype-@@iterator', '%TypedArray%.prototype[@@iterator]()')}}{{Spec2('ES6')}}Définition initiale
{{SpecName('ESDraft', '#sec-%typedarray%.prototype-@@iterator', '%TypedArray%.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.@@iterator")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.md new file mode 100644 index 0000000000..761dce12fe --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/@@iterator/index.md @@ -0,0 +1,85 @@ +--- +title: TypedArray.prototype[@@iterator]() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator +tags: + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/@@iterator +--- +
{{JSRef}}
+ +

La valeur initiale de la propriété @@iterator est le même objet fonction que la valeur initiale de {{jsxref("TypedArray.prototype.values()", "values")}}.

+ +

Syntaxe

+ +
typedarray[Symbol.iterator]()
+ +

Valeur de retour

+ +

Une fonction d'itération sur le tableau typé, par défaut, c'est la fonction {{jsxref("TypedArray.prototype.values()","values()")}}.

+ +

Exemples

+ +

Parcourir un tableau typé avec for...of

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+// prérequis : le navigateur doit supporter les boucles
+// for..of et les variables dont la portée est définie
+// par let
+for (let n of arr) {
+  console.log(n);
+}
+
+ +

Autre méthode d'itération

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArr = arr[Symbol.iterator]();
+console.log(eArr.next().value); // 10
+console.log(eArr.next().value); // 20
+console.log(eArr.next().value); // 30
+console.log(eArr.next().value); // 40
+console.log(eArr.next().value); // 50
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype-@@iterator', '%TypedArray%.prototype[@@iterator]()')}}{{Spec2('ES6')}}Définition initiale
{{SpecName('ESDraft', '#sec-%typedarray%.prototype-@@iterator', '%TypedArray%.prototype[@@iterator]()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.@@iterator")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.html deleted file mode 100644 index fffeff1ac4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: get TypedArray[@@species] -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/@@species ---- -
{{JSRef}}
- -

La propriété d'accesseur TypedArray[@@species] renvoie le constructeur du tableau typé.

- -

Syntaxe

- -
TypedArray[Symbol.species]
-
-où TypedArray vaut :
-
-Int8Array
-Uint8Array
-Uint8ClampedArray
-Int16Array
-Uint16Array
-Int32Array
-Uint32Array
-Float32Array
-Float64Array
-
- -

Description

- -

L'accesseur species renvoie le constructeur par défaut pour les tableaux typés. Les constructeurs des sous-classes peuvent surcharger ce symbole pour modifier l'affectation du constructeur.

- -

Exemples

- -

La propriété species renvoie le constructeur par défaut qui est l'un des constructeurs de tableau typé (selon le type de tableau typé de l'objet) :

- -
Int8Array[Symbol.species];    // function Int8Array()
-Uint8Array[Symbol.species];   // function Uint8Array()
-Float32Array[Symbol.species]; // function Float32Array()
-
- -

Pour un objet construit sur mesure (par exemple une tableau MonTableauTypé), le symbole species de MonTableauTypé sera le constructeur MonTableauTypé. Mais on peut vouloir surcharger ce comportement pour renvoyer le constructeur du type parent :

- -
class MonTableauTypé extends Uint8Array {
-  // On surcharge species pour MonTableauTypé
-  // pour récupérer le constructeur Uint8Array
-  static get [Symbol.species]() { return Uint8Array; }
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%-@@species', 'get %TypedArray% [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%-@@species', 'get %TypedArray% [ @@species ]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.@@species")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.md new file mode 100644 index 0000000000..fffeff1ac4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/@@species/index.md @@ -0,0 +1,87 @@ +--- +title: get TypedArray[@@species] +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/@@species +--- +
{{JSRef}}
+ +

La propriété d'accesseur TypedArray[@@species] renvoie le constructeur du tableau typé.

+ +

Syntaxe

+ +
TypedArray[Symbol.species]
+
+où TypedArray vaut :
+
+Int8Array
+Uint8Array
+Uint8ClampedArray
+Int16Array
+Uint16Array
+Int32Array
+Uint32Array
+Float32Array
+Float64Array
+
+ +

Description

+ +

L'accesseur species renvoie le constructeur par défaut pour les tableaux typés. Les constructeurs des sous-classes peuvent surcharger ce symbole pour modifier l'affectation du constructeur.

+ +

Exemples

+ +

La propriété species renvoie le constructeur par défaut qui est l'un des constructeurs de tableau typé (selon le type de tableau typé de l'objet) :

+ +
Int8Array[Symbol.species];    // function Int8Array()
+Uint8Array[Symbol.species];   // function Uint8Array()
+Float32Array[Symbol.species]; // function Float32Array()
+
+ +

Pour un objet construit sur mesure (par exemple une tableau MonTableauTypé), le symbole species de MonTableauTypé sera le constructeur MonTableauTypé. Mais on peut vouloir surcharger ce comportement pour renvoyer le constructeur du type parent :

+ +
class MonTableauTypé extends Uint8Array {
+  // On surcharge species pour MonTableauTypé
+  // pour récupérer le constructeur Uint8Array
+  static get [Symbol.species]() { return Uint8Array; }
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%-@@species', 'get %TypedArray% [ @@species ]')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%-@@species', 'get %TypedArray% [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.@@species")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.html deleted file mode 100644 index 081dfd8855..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: TypedArray.prototype.buffer -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/buffer -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/buffer -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/buffer ---- -
{{JSRef}}
- -

La propriété buffer est un accesseur représentant l'{{jsxref("ArrayBuffer")}} représenté par le TypedArray lors de la construction de l'objet.

- -
{{EmbedInteractiveExample("pages/js/typedarray-buffer.html")}}
- -

Syntaxe

- -
typedArray.buffer
- -

Description

- -

La propriété buffer est un accesseur dont le mutateur correspondant vaut undefined. Cela signifie que cette propriété n'est accessible qu'en lecture seule. La valeur de la propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. TypedArray est un des objets TypedArray.

- -

Exemples

- -
var buffer = new ArrayBuffer(8);
-var uint16 = new Uint16Array(buffer);
-uint16.buffer; // ArrayBuffer { byteLength: 8 }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.buffer', 'TypedArray.prototype.buffer')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.buffer', 'TypedArray.prototype.buffer')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.buffer")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.md new file mode 100644 index 0000000000..081dfd8855 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/buffer/index.md @@ -0,0 +1,65 @@ +--- +title: TypedArray.prototype.buffer +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/buffer +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/buffer +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/buffer +--- +
{{JSRef}}
+ +

La propriété buffer est un accesseur représentant l'{{jsxref("ArrayBuffer")}} représenté par le TypedArray lors de la construction de l'objet.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-buffer.html")}}
+ +

Syntaxe

+ +
typedArray.buffer
+ +

Description

+ +

La propriété buffer est un accesseur dont le mutateur correspondant vaut undefined. Cela signifie que cette propriété n'est accessible qu'en lecture seule. La valeur de la propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. TypedArray est un des objets TypedArray.

+ +

Exemples

+ +
var buffer = new ArrayBuffer(8);
+var uint16 = new Uint16Array(buffer);
+uint16.buffer; // ArrayBuffer { byteLength: 8 }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.buffer', 'TypedArray.prototype.buffer')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.buffer', 'TypedArray.prototype.buffer')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.buffer")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.html deleted file mode 100644 index 16e7d36355..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: TypedArray.prototype.byteLength -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/byteLength ---- -
{{JSRef}}
- -

La propriété byteLength est un accesseur qui représente la longueur, exprimée en octets, du tableau typé à partir du début de l'{{jsxref("ArrayBuffer")}} correspondant.

- -
{{EmbedInteractiveExample("pages/js/typedarray-bytelength.html")}}
- -

Syntaxe

- -
typedarray.byteLength
- -

Description

- -

La propriété byteLength est un accesseur dont le mutateur correspondant vaut undefined, ce qui signifie qu'elle n'est accessible qu'en lecture. La valeur de la propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. Si l'objet TypedArray n'utilise pas de byteOffset ou une length, ce sera la propriété length de l'ArrayBuffer référencé par le tableau qui sera renvoyée. TypedArray est l'un des objets TypedArray.

- -

Exemples

- -
var tampon = new ArrayBuffer(8);
-
-var uint8 = new Uint8Array(tampon);
-uint8.byteLength; // 8 (correspond au byteLength du tampon correspondant)
-
-var uint8 = new Uint8Array(tampon, 1, 5);
-uint8.byteLength; // 5 (correspond à la longueur spécifiée dans le constructeur)
-
-var uint8 = new Uint8Array(tampon, 2);
-uint8.byteLength; // 6 (en raison du décalage utilisé pour la construction du Uint8Array)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.bytelength', 'TypedArray.prototype.byteLength')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.bytelength', 'TypedArray.prototype.byteLength')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.byteLength")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.md new file mode 100644 index 0000000000..16e7d36355 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/bytelength/index.md @@ -0,0 +1,72 @@ +--- +title: TypedArray.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/byteLength +--- +
{{JSRef}}
+ +

La propriété byteLength est un accesseur qui représente la longueur, exprimée en octets, du tableau typé à partir du début de l'{{jsxref("ArrayBuffer")}} correspondant.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-bytelength.html")}}
+ +

Syntaxe

+ +
typedarray.byteLength
+ +

Description

+ +

La propriété byteLength est un accesseur dont le mutateur correspondant vaut undefined, ce qui signifie qu'elle n'est accessible qu'en lecture. La valeur de la propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. Si l'objet TypedArray n'utilise pas de byteOffset ou une length, ce sera la propriété length de l'ArrayBuffer référencé par le tableau qui sera renvoyée. TypedArray est l'un des objets TypedArray.

+ +

Exemples

+ +
var tampon = new ArrayBuffer(8);
+
+var uint8 = new Uint8Array(tampon);
+uint8.byteLength; // 8 (correspond au byteLength du tampon correspondant)
+
+var uint8 = new Uint8Array(tampon, 1, 5);
+uint8.byteLength; // 5 (correspond à la longueur spécifiée dans le constructeur)
+
+var uint8 = new Uint8Array(tampon, 2);
+uint8.byteLength; // 6 (en raison du décalage utilisé pour la construction du Uint8Array)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.bytelength', 'TypedArray.prototype.byteLength')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.bytelength', 'TypedArray.prototype.byteLength')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.byteLength")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.html deleted file mode 100644 index d6430c0ce9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: TypedArray.prototype.byteOffset -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/byteOffset ---- -
{{JSRef}}
- -

La propriété byteOffset est un accesseur qui représente le décalage, exprimé en octets, entre le début du tableau typé par rapport au début du {{jsxref("ArrayBuffer")}} correspondant.

- -

Syntaxe

- -
typedarray.byteOffset
- -

Description

- -

La propriété byteOffset est un accesseur dont le mutateur correspondant vaut undefined, ce qui signifie qu'elle n'est accessible qu'en lecture seule. La valeur de cette propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. TypedArray est l'un des objets TypedArray.

- -

Exemples

- -
var tampon = new ArrayBuffer(8);
-
-var uint8 = new Uint8Array(tampon);
-uint8.byteOffset; // 0 (aucun décalage n'a été défini)
-
-var uint8 = new Uint8Array(tampon, 3);
-uint8.byteOffset; // 3 (correspond au décalage défini lors de la construction du Uint8Array)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.byteoffset', 'TypedArray.prototype.byteOffset')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.byteoffset', 'TypedArray.prototype.byteOffset')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.byteOffset")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.md new file mode 100644 index 0000000000..d6430c0ce9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/byteoffset/index.md @@ -0,0 +1,67 @@ +--- +title: TypedArray.prototype.byteOffset +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/byteOffset +--- +
{{JSRef}}
+ +

La propriété byteOffset est un accesseur qui représente le décalage, exprimé en octets, entre le début du tableau typé par rapport au début du {{jsxref("ArrayBuffer")}} correspondant.

+ +

Syntaxe

+ +
typedarray.byteOffset
+ +

Description

+ +

La propriété byteOffset est un accesseur dont le mutateur correspondant vaut undefined, ce qui signifie qu'elle n'est accessible qu'en lecture seule. La valeur de cette propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. TypedArray est l'un des objets TypedArray.

+ +

Exemples

+ +
var tampon = new ArrayBuffer(8);
+
+var uint8 = new Uint8Array(tampon);
+uint8.byteOffset; // 0 (aucun décalage n'a été défini)
+
+var uint8 = new Uint8Array(tampon, 3);
+uint8.byteOffset; // 3 (correspond au décalage défini lors de la construction du Uint8Array)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.byteoffset', 'TypedArray.prototype.byteOffset')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.byteoffset', 'TypedArray.prototype.byteOffset')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.byteOffset")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html deleted file mode 100644 index 62ed0da922..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: TypedArray.BYTES_PER_ELEMENT -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT -tags: - - JavaScript - - Propriété - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/BYTES_PER_ELEMENT ---- -
{{JSRef}}
- -

La propriété TypedArray.BYTES_PER_ELEMENT représente la taille, exprimée en octets, de chaque élément du tableau typé.

- -
{{EmbedInteractiveExample("pages/js/typedarray-bytes-per-element.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Syntaxe

- -
TypedArray.BYTES_PER_ELEMENT;
- -

Description

- -

La taille des éléments d'un tableau typé varie en fonction du type de TypedArray utilisé. Le nombre d'octets utilisé pour un élément sera différent en fonction du type de tableau. La propriété BYTES_PER_ELEMENT permet de savoir le nombre d'octets contenus dans chaque élément du tableau typé courant.

- -

Exemples

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

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Spécification englobée par ECMAScript 6.
{{SpecName('ES6', '#sec-typedarray.bytes_per_element', 'TypedArray.BYTES_PER_ELEMENT')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-typedarray.bytes_per_element', 'TypedArray.BYTES_PER_ELEMENT')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.BYTES_PER_ELEMENT")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.md new file mode 100644 index 0000000000..62ed0da922 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.md @@ -0,0 +1,79 @@ +--- +title: TypedArray.BYTES_PER_ELEMENT +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT +tags: + - JavaScript + - Propriété + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/BYTES_PER_ELEMENT +--- +
{{JSRef}}
+ +

La propriété TypedArray.BYTES_PER_ELEMENT représente la taille, exprimée en octets, de chaque élément du tableau typé.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-bytes-per-element.html")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

Syntaxe

+ +
TypedArray.BYTES_PER_ELEMENT;
+ +

Description

+ +

La taille des éléments d'un tableau typé varie en fonction du type de TypedArray utilisé. Le nombre d'octets utilisé pour un élément sera différent en fonction du type de tableau. La propriété BYTES_PER_ELEMENT permet de savoir le nombre d'octets contenus dans chaque élément du tableau typé courant.

+ +

Exemples

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Spécification englobée par ECMAScript 6.
{{SpecName('ES6', '#sec-typedarray.bytes_per_element', 'TypedArray.BYTES_PER_ELEMENT')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-typedarray.bytes_per_element', 'TypedArray.BYTES_PER_ELEMENT')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.BYTES_PER_ELEMENT")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.html deleted file mode 100644 index b2c33d295f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: TypedArray.prototype.copyWithin() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/copyWithin ---- -
{{JSRef}}
- -

La méthode copyWithin() permet de copier des éléments d'un tableau dans le tableau typé à partir de la position cible. Les éléments copiés sont ceux contenus entre les index début et fin. L'argument fin est optionnel, sa valeur par défaut correspondra à la longueur du tableau dont on souhaite copier les éléments. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.copyWithin")}}. TypedArray est l'un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-copywithin.html")}}
- -

Syntaxe

- -
typedarray.copyWithin(cible, début[, fin = this.length])
- -

Paramètres

- -
-
cible
-
La position, dans le tableau typé, à partir de laquelle on souhaite copier les éléments.
-
début
-
La position du tableau contenant les éléments à copier à partir de laquelle copier les éléments.
-
fin {{optional_inline}}
-
Paramètre optionnel. La position jusqu'à laquelle prendre les éléments à copier.
-
- -

Valeur de retour

- -

Le tableau typé, modifié par la fonction.

- -

Description

- -

Voir la page {{jsxref("Array.prototype.copyWithin")}} pour plus d'informations.

- -

Cette méthode remplace la méthode expérimentale {{jsxref("TypedArray.prototype.move()")}}.

- -

Exemples

- -
var buffer = new ArrayBuffer(8);
-var uint8 = new Uint8Array(buffer);
-uint8.set([1,2,3]);
-console.log(uint8); // Uint8Array [ 1, 2, 3, 0, 0, 0, 0, 0 ]
-uint8.copyWithin(3,0,3);
-console.log(uint8); // Uint8Array [ 1, 2, 3, 1, 2, 3, 0, 0 ]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype.copywithin', 'TypedArray.prototype.copyWithin')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.copywithin', 'TypedArray.prototype.copyWithin')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.copyWithin")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.md new file mode 100644 index 0000000000..b2c33d295f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/copywithin/index.md @@ -0,0 +1,84 @@ +--- +title: TypedArray.prototype.copyWithin() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/copyWithin +--- +
{{JSRef}}
+ +

La méthode copyWithin() permet de copier des éléments d'un tableau dans le tableau typé à partir de la position cible. Les éléments copiés sont ceux contenus entre les index début et fin. L'argument fin est optionnel, sa valeur par défaut correspondra à la longueur du tableau dont on souhaite copier les éléments. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.copyWithin")}}. TypedArray est l'un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-copywithin.html")}}
+ +

Syntaxe

+ +
typedarray.copyWithin(cible, début[, fin = this.length])
+ +

Paramètres

+ +
+
cible
+
La position, dans le tableau typé, à partir de laquelle on souhaite copier les éléments.
+
début
+
La position du tableau contenant les éléments à copier à partir de laquelle copier les éléments.
+
fin {{optional_inline}}
+
Paramètre optionnel. La position jusqu'à laquelle prendre les éléments à copier.
+
+ +

Valeur de retour

+ +

Le tableau typé, modifié par la fonction.

+ +

Description

+ +

Voir la page {{jsxref("Array.prototype.copyWithin")}} pour plus d'informations.

+ +

Cette méthode remplace la méthode expérimentale {{jsxref("TypedArray.prototype.move()")}}.

+ +

Exemples

+ +
var buffer = new ArrayBuffer(8);
+var uint8 = new Uint8Array(buffer);
+uint8.set([1,2,3]);
+console.log(uint8); // Uint8Array [ 1, 2, 3, 0, 0, 0, 0, 0 ]
+uint8.copyWithin(3,0,3);
+console.log(uint8); // Uint8Array [ 1, 2, 3, 1, 2, 3, 0, 0 ]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype.copywithin', 'TypedArray.prototype.copyWithin')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.copywithin', 'TypedArray.prototype.copyWithin')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.copyWithin")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/entries/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/entries/index.html deleted file mode 100644 index 3b861d745e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/entries/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: TypedArray.prototype.entries() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/entries -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/entries -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/entries ---- -
{{JSRef}}
- -

La méthode entries() renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau.

- -
{{EmbedInteractiveExample("pages/js/typedarray-entries.html")}}
- -

Syntaxe

- -
arr.entries()
- -

Valeur de retour

- -

Un nouvel objet Array Iterator.

- -

Exemples

- -

Parcourir un tableau avec une boucle for...of

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-var eArray = arr.entries();
-// prérequis nécessaire : le navigateur doit
-// supporter les boucles for..of
-// et les variables dont la portée est définie par let
-for (let n of eArray) {
-  console.log(n);
-}
-
- -

Une autre méthode d'itération

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-var eArr = arr.entries();
-console.log(eArr.next().value); // [0, 10]
-console.log(eArr.next().value); // [1, 20]
-console.log(eArr.next().value); // [2, 30]
-console.log(eArr.next().value); // [3, 40]
-console.log(eArr.next().value); // [4, 50]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.entries', '%TypedArray%.prototype.entries()')}}{{Spec2('ES2015')}} -

Définition initiale.

-
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.entries', '%TypedArray%.prototype.entries()')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.entries")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/entries/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/entries/index.md new file mode 100644 index 0000000000..3b861d745e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/entries/index.md @@ -0,0 +1,90 @@ +--- +title: TypedArray.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/entries +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/entries +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/entries +--- +
{{JSRef}}
+ +

La méthode entries() renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-entries.html")}}
+ +

Syntaxe

+ +
arr.entries()
+ +

Valeur de retour

+ +

Un nouvel objet Array Iterator.

+ +

Exemples

+ +

Parcourir un tableau avec une boucle for...of

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArray = arr.entries();
+// prérequis nécessaire : le navigateur doit
+// supporter les boucles for..of
+// et les variables dont la portée est définie par let
+for (let n of eArray) {
+  console.log(n);
+}
+
+ +

Une autre méthode d'itération

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArr = arr.entries();
+console.log(eArr.next().value); // [0, 10]
+console.log(eArr.next().value); // [1, 20]
+console.log(eArr.next().value); // [2, 30]
+console.log(eArr.next().value); // [3, 40]
+console.log(eArr.next().value); // [4, 50]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.entries', '%TypedArray%.prototype.entries()')}}{{Spec2('ES2015')}} +

Définition initiale.

+
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.entries', '%TypedArray%.prototype.entries()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.entries")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/every/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/every/index.html deleted file mode 100644 index 2ad3a1780f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/every/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: TypedArray.prototype.every() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/every -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/every -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/every ---- -
{{JSRef}}
- -

La méthode every() teste si tous les éléments du tableau typé satisfont une condition implémentée par la fonction de test fournie. Cette méthode utilise le même algorithme {{jsxref("Array.prototype.every()")}}. Pour le reste de cet article, TypedArray correspond à un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-every.html")}}
- -

Syntaxe

- -
typedarray.every(callback[, thisArg])>
- -

Paramètres

- -
-
callback
-
La fonction utilisée pour tester chaque élément du tableau. Elle utilise trois arguments : -
-
valeurCourante
-
L'élément du tableau typé qui est en cours de traitement.
-
index
-
L'indice de l'élément du tableau typé en cours de traitement.
-
array
-
Le tableau typé sur lequel on a appelé la méthode every.
-
-
-
thisArg
-
Paramètre optionnel, la valeur à utiliser en tant que this lors de l'exécution de callback.
-
- -

Valeur de retour

- -

true si la fonction de rappel obtient une valeur équivalente à vrai (truthy) pour chaque élément du tableau typé, false sinon.

- -

Description

- -

La méthode every exécute la fonction callback fournie pour chaque élément du tableau typé jusqu'à ce que callback renvoie une valeur fausse (une valeur qui vaut false lorsqu'elle est convertie en un booléen). Si un tel élément est trouvé, la méthode every renvoie immédiatement false. Dans le cas contraire, si callback renvoie une valeur vraie pour tous les éléments, la méthode every renverra true.

- -

callback est appelé avec trois arguments : la valeur de l'élément, l'indice de cet élément et le tableau qui est parcouru.

- -

Si le paramètre thisArg est utilisé, il sera passé à la fonction callback en tant que valeur this. Sinon, la valeur undefined sera utilisée comme valeur this. La valeur this définitivement prise en compte par la fonction callback est déterminée selon les règles usuelles de détermination de this.

- -

every ne modifie pas le tableau typé sur lequel elle a été appelée.

- -

Exemples

- -

Tester la taille des éléments d'un tableau typé

- -

Dans l'exemple suivant, on teste si tous les éléments du tableau typé sont supérieurs à 10 :

- -
function estGrand(element, index, array) {
-  return element >= 10;
-}
-new Uint8Array([12, 5, 8, 130, 44]).every(estGrand);   // false
-new Uint8Array([12, 54, 18, 130, 44]).every(estGrand); // true
- -

Tester les éléments d'un tableau typé avec les fonctions fléchées

- -

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour parvenir au même résultat :

- -
new Uint8Array([12, 5, 8, 130, 44]).every(elem => elem >= 10); // false
-new Uint8Array([12, 54, 18, 130, 44]).every(elem => elem >= 10); // true
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.every', 'TypedArray.prototype.every')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.every', 'TypedArray.prototype.every')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.every")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/every/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/every/index.md new file mode 100644 index 0000000000..2ad3a1780f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/every/index.md @@ -0,0 +1,107 @@ +--- +title: TypedArray.prototype.every() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/every +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/every +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/every +--- +
{{JSRef}}
+ +

La méthode every() teste si tous les éléments du tableau typé satisfont une condition implémentée par la fonction de test fournie. Cette méthode utilise le même algorithme {{jsxref("Array.prototype.every()")}}. Pour le reste de cet article, TypedArray correspond à un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-every.html")}}
+ +

Syntaxe

+ +
typedarray.every(callback[, thisArg])>
+ +

Paramètres

+ +
+
callback
+
La fonction utilisée pour tester chaque élément du tableau. Elle utilise trois arguments : +
+
valeurCourante
+
L'élément du tableau typé qui est en cours de traitement.
+
index
+
L'indice de l'élément du tableau typé en cours de traitement.
+
array
+
Le tableau typé sur lequel on a appelé la méthode every.
+
+
+
thisArg
+
Paramètre optionnel, la valeur à utiliser en tant que this lors de l'exécution de callback.
+
+ +

Valeur de retour

+ +

true si la fonction de rappel obtient une valeur équivalente à vrai (truthy) pour chaque élément du tableau typé, false sinon.

+ +

Description

+ +

La méthode every exécute la fonction callback fournie pour chaque élément du tableau typé jusqu'à ce que callback renvoie une valeur fausse (une valeur qui vaut false lorsqu'elle est convertie en un booléen). Si un tel élément est trouvé, la méthode every renvoie immédiatement false. Dans le cas contraire, si callback renvoie une valeur vraie pour tous les éléments, la méthode every renverra true.

+ +

callback est appelé avec trois arguments : la valeur de l'élément, l'indice de cet élément et le tableau qui est parcouru.

+ +

Si le paramètre thisArg est utilisé, il sera passé à la fonction callback en tant que valeur this. Sinon, la valeur undefined sera utilisée comme valeur this. La valeur this définitivement prise en compte par la fonction callback est déterminée selon les règles usuelles de détermination de this.

+ +

every ne modifie pas le tableau typé sur lequel elle a été appelée.

+ +

Exemples

+ +

Tester la taille des éléments d'un tableau typé

+ +

Dans l'exemple suivant, on teste si tous les éléments du tableau typé sont supérieurs à 10 :

+ +
function estGrand(element, index, array) {
+  return element >= 10;
+}
+new Uint8Array([12, 5, 8, 130, 44]).every(estGrand);   // false
+new Uint8Array([12, 54, 18, 130, 44]).every(estGrand); // true
+ +

Tester les éléments d'un tableau typé avec les fonctions fléchées

+ +

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour parvenir au même résultat :

+ +
new Uint8Array([12, 5, 8, 130, 44]).every(elem => elem >= 10); // false
+new Uint8Array([12, 54, 18, 130, 44]).every(elem => elem >= 10); // true
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.every', 'TypedArray.prototype.every')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.every', 'TypedArray.prototype.every')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.every")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/fill/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/fill/index.html deleted file mode 100644 index 4f7d43efd6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/fill/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: TypedArray.prototype.fill() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/fill -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArrays - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/fill -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/fill ---- -
{{JSRef}}
- -

La méthode fill() remplit les éléments d'un tableau typé contenu entre un indice de début et un indice de fin avec une valeur statique. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.fill()")}}. Dans le reste de cet article, TypedArray correspond à l'un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-fill.html")}}
- -

Syntaxe

- -
typedarray.fill(valeur[, début = 0[, fin = this.length]])
- -

Paramètres

- -
-
valeur
-
La valeur avec laquelle on souhaite remplir le tableau.
-
début
-
Paramètre optionnel qui représente l'indice à partir duquel remplir le tableau. La valeur par défaut est 0.
-
fin
-
Paramètre optionnel qui représente l'indice jusqu'auquel remplir le tableau. La valeur par défaut est la longueur du tableau (this.length).
-
- -

Valeur de retour

- -

Le tableau typé, modifié par la fonction.

- -

Description

- -

L'intervalle d'éléments à modifier est [début, fin).

- -

La méthode fill utilise jusqu'à trois arguments : valeur, début et fin. début et fin sont optionnels, leurs valeurs par défaut respectives sont 0 et la valeur de la propriété length de l'objet this.

- -

Si début est négatif, on le traite comme length+débutlength représente la longueur du tableau. Si fin est négative, on le traite comme length+fin.

- -

Exemples

- -
new Uint8Array([1, 2, 3]).fill(4);         // Uint8Array [4, 4, 4]
-new Uint8Array([1, 2, 3]).fill(4, 1);      // Uint8Array [1, 4, 4]
-new Uint8Array([1, 2, 3]).fill(4, 1, 2);   // Uint8Array [1, 4, 3]
-new Uint8Array([1, 2, 3]).fill(4, 1, 1);   // Uint8Array [1, 2, 3]
-new Uint8Array([1, 2, 3]).fill(4, -3, -2); // Uint8Array [4, 2, 3]
-
- -

Prothèse d'émulation (polyfill)

- -

Il n'existe pas d'objet global avec le nom TypedArray, la prothèse doit donc être appliquée uniquement si nécessaire, aussi {{jsxref("Array.prototype.fill()")}} pourra éventuellement être utilisé (voire la prothèse de cette dernière).

- -
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.fill
-if (!Uint8Array.prototype.fill) {
-  Uint8Array.prototype.fill = Array.prototype.fill;
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.fill', 'TypedArray.prototype.fill')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.fill', 'TypedArray.prototype.fill')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.fill")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/fill/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/fill/index.md new file mode 100644 index 0000000000..4f7d43efd6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/fill/index.md @@ -0,0 +1,97 @@ +--- +title: TypedArray.prototype.fill() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/fill +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArrays + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/fill +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/fill +--- +
{{JSRef}}
+ +

La méthode fill() remplit les éléments d'un tableau typé contenu entre un indice de début et un indice de fin avec une valeur statique. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.fill()")}}. Dans le reste de cet article, TypedArray correspond à l'un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-fill.html")}}
+ +

Syntaxe

+ +
typedarray.fill(valeur[, début = 0[, fin = this.length]])
+ +

Paramètres

+ +
+
valeur
+
La valeur avec laquelle on souhaite remplir le tableau.
+
début
+
Paramètre optionnel qui représente l'indice à partir duquel remplir le tableau. La valeur par défaut est 0.
+
fin
+
Paramètre optionnel qui représente l'indice jusqu'auquel remplir le tableau. La valeur par défaut est la longueur du tableau (this.length).
+
+ +

Valeur de retour

+ +

Le tableau typé, modifié par la fonction.

+ +

Description

+ +

L'intervalle d'éléments à modifier est [début, fin).

+ +

La méthode fill utilise jusqu'à trois arguments : valeur, début et fin. début et fin sont optionnels, leurs valeurs par défaut respectives sont 0 et la valeur de la propriété length de l'objet this.

+ +

Si début est négatif, on le traite comme length+débutlength représente la longueur du tableau. Si fin est négative, on le traite comme length+fin.

+ +

Exemples

+ +
new Uint8Array([1, 2, 3]).fill(4);         // Uint8Array [4, 4, 4]
+new Uint8Array([1, 2, 3]).fill(4, 1);      // Uint8Array [1, 4, 4]
+new Uint8Array([1, 2, 3]).fill(4, 1, 2);   // Uint8Array [1, 4, 3]
+new Uint8Array([1, 2, 3]).fill(4, 1, 1);   // Uint8Array [1, 2, 3]
+new Uint8Array([1, 2, 3]).fill(4, -3, -2); // Uint8Array [4, 2, 3]
+
+ +

Prothèse d'émulation (polyfill)

+ +

Il n'existe pas d'objet global avec le nom TypedArray, la prothèse doit donc être appliquée uniquement si nécessaire, aussi {{jsxref("Array.prototype.fill()")}} pourra éventuellement être utilisé (voire la prothèse de cette dernière).

+ +
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.fill
+if (!Uint8Array.prototype.fill) {
+  Uint8Array.prototype.fill = Array.prototype.fill;
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.fill', 'TypedArray.prototype.fill')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.fill', 'TypedArray.prototype.fill')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.fill")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/filter/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/filter/index.html deleted file mode 100644 index 122a6abaf5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/filter/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: TypedArray.prototype.filter() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/filter -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/filter -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/filter ---- -
{{JSRef}}
- -

La méthode filter() crée un nouveau tableau qui contient l'ensemble des éléments qui remplissent une condition fournie par la fonction de test passée en argument. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.filter()")}}. TypedArray est utilisé ici de façon générique pour représenter l'un des types de tableaux typés possibles.

- -
{{EmbedInteractiveExample("pages/js/typedarray-filter.html")}}
- -

Syntaxe

- -
typedarray.filter(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
Une fonction qui est utilisée pour tester chacun des éléments du tableau typé. Cette fonction est appelée avec trois arguments (élément, index, tableautypé). La fonction renvoie true si on souhaite conserver l'élément, false sinon.
-
thisArg {{optional_inline}}
-
La valeur à utiliser pour this lors de l'appel à callback.
-
- -

Valeur de retour

- -

Un nouveau tableau typé contenant les éléments qui remplissent la condition donnée par la fonction de rappel.

- -

Description

- -

La méthode filter() appelle une fonction callback appelée une fois pour chaque élément du tableau typé. Elle construit un nouveau tableau typé constitué des valeurs du tableau original pour lesquelles callback a renvoyé true. callback est appelée uniquement pour les éléments du tableau auxquels on a affecté une valeur, elle n'est pas appelé pour les éléments supprimés ou ceux qui n'ont jamais reçu de valeurs. Les éléments du tableau typé qui ne passent pas le test de la fonction ne sont pas inclus dans le nouveau tableau typé.

- -

callback est appelée avec trois arguments :

- -
    -
  1. la valeur de l'élément
  2. -
  3. l'indice de l'élément
  4. -
  5. le tableau typé courant
  6. -
- -

Si le paramètre thisArg est fourni, il sera utilisé comme objet this lors de l'appel de la fonction callback. Sinon, la valeur undefined sera utilisée à la place. Par ailleurs, la valeur de this accessible depuis la fonction callback est déterminée selon les règles usuelles déterminant la valeur this au sein d'une fonction.

- -

filter() ne modifie pas le tableau typé sur lequel elle a été appelée.

- -

La liste des éléments parcourus par filter() est définie avant la première invocation de la fonction callback. Les éléments qui sont ajoutés au tableau typé après le début de l'appel de filter() (grâce à la fonction callback par exemple) ne seront pas visités. Si des éléments existants du tableau typé ont modifiés ou supprimés, la valeur fournie à la fonction callback sera leur valeur au moment où filter() les visite - les éléments supprimés ne seront pas traités par la fonction.

- -

Exemples

- -

Filtrer les valeurs inférieures à un seuil

- -

Dans l'exemple qui suit, on utilise filter() pour créer un nouveau tableau typé qui contient uniquement les éléments supérieurs à 10.

- -
function supSeuil(élément, indice, tableauTypé) {
-  return élément >= 10;
-}
-new Uint8Array([12, 5, 8, 130, 44]).filter(supSeuil);
-// Uint8Array [ 12, 130, 44 ]
-
- -

Filtrer les éléments d'un tableau typé avec les fonctions fléchées

- -

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour réaliser le même test que montré précédemment :

- -
new Uint8Array([12, 5, 8, 130, 44]).filter(élém => élém >= 10);
-// Uint8Array [ 12, 130, 44 ]
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.filter', 'TypedArray.prototype.filter')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.filter', 'TypedArray.prototype.filter')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.filter")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/filter/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/filter/index.md new file mode 100644 index 0000000000..122a6abaf5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/filter/index.md @@ -0,0 +1,108 @@ +--- +title: TypedArray.prototype.filter() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/filter +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/filter +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/filter +--- +
{{JSRef}}
+ +

La méthode filter() crée un nouveau tableau qui contient l'ensemble des éléments qui remplissent une condition fournie par la fonction de test passée en argument. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.filter()")}}. TypedArray est utilisé ici de façon générique pour représenter l'un des types de tableaux typés possibles.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-filter.html")}}
+ +

Syntaxe

+ +
typedarray.filter(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
Une fonction qui est utilisée pour tester chacun des éléments du tableau typé. Cette fonction est appelée avec trois arguments (élément, index, tableautypé). La fonction renvoie true si on souhaite conserver l'élément, false sinon.
+
thisArg {{optional_inline}}
+
La valeur à utiliser pour this lors de l'appel à callback.
+
+ +

Valeur de retour

+ +

Un nouveau tableau typé contenant les éléments qui remplissent la condition donnée par la fonction de rappel.

+ +

Description

+ +

La méthode filter() appelle une fonction callback appelée une fois pour chaque élément du tableau typé. Elle construit un nouveau tableau typé constitué des valeurs du tableau original pour lesquelles callback a renvoyé true. callback est appelée uniquement pour les éléments du tableau auxquels on a affecté une valeur, elle n'est pas appelé pour les éléments supprimés ou ceux qui n'ont jamais reçu de valeurs. Les éléments du tableau typé qui ne passent pas le test de la fonction ne sont pas inclus dans le nouveau tableau typé.

+ +

callback est appelée avec trois arguments :

+ +
    +
  1. la valeur de l'élément
  2. +
  3. l'indice de l'élément
  4. +
  5. le tableau typé courant
  6. +
+ +

Si le paramètre thisArg est fourni, il sera utilisé comme objet this lors de l'appel de la fonction callback. Sinon, la valeur undefined sera utilisée à la place. Par ailleurs, la valeur de this accessible depuis la fonction callback est déterminée selon les règles usuelles déterminant la valeur this au sein d'une fonction.

+ +

filter() ne modifie pas le tableau typé sur lequel elle a été appelée.

+ +

La liste des éléments parcourus par filter() est définie avant la première invocation de la fonction callback. Les éléments qui sont ajoutés au tableau typé après le début de l'appel de filter() (grâce à la fonction callback par exemple) ne seront pas visités. Si des éléments existants du tableau typé ont modifiés ou supprimés, la valeur fournie à la fonction callback sera leur valeur au moment où filter() les visite - les éléments supprimés ne seront pas traités par la fonction.

+ +

Exemples

+ +

Filtrer les valeurs inférieures à un seuil

+ +

Dans l'exemple qui suit, on utilise filter() pour créer un nouveau tableau typé qui contient uniquement les éléments supérieurs à 10.

+ +
function supSeuil(élément, indice, tableauTypé) {
+  return élément >= 10;
+}
+new Uint8Array([12, 5, 8, 130, 44]).filter(supSeuil);
+// Uint8Array [ 12, 130, 44 ]
+
+ +

Filtrer les éléments d'un tableau typé avec les fonctions fléchées

+ +

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour réaliser le même test que montré précédemment :

+ +
new Uint8Array([12, 5, 8, 130, 44]).filter(élém => élém >= 10);
+// Uint8Array [ 12, 130, 44 ]
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.filter', 'TypedArray.prototype.filter')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.filter', 'TypedArray.prototype.filter')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.filter")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/find/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/find/index.html deleted file mode 100644 index e45999369d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/find/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: TypedArray.prototype.find() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/find -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/find -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/find ---- -
{{JSRef}}
- -

La méthode find() renvoie une valeur du tableau typé si un élément du tableau remplit la condition définie par la fonction de test fournie. Si aucun élément ne remplit la condition, la valeur {{jsxref("undefined")}} sera renvoyée. Pour la suite de cet article TypedArray correspond à l'un des types de tableaux typés.

- -

Voir également la page sur la méthohde {{jsxref("TypedArray.findIndex", "findIndex()")}} qui renvoie l'indice de l'élément trouvé (et non sa valeur).

- -
{{EmbedInteractiveExample("pages/js/typedarray-find.html")}}
- -

Syntaxe

- -
typedarray.find(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction à exécuter pour chaque valeur du tableau typé. Elle prend trois arguments : -
-
élément
-
L'élément du tableau typé en cours de traitement.
-
index
-
L'indice de l'élément du tableau typé en cours de traitement.
-
array
-
Le tableau sur lequel la méthode find a été appelée.
-
-
-
thisArg
-
Paramètre optionnel, il correspond à l'objet à utiliser en tant que this lors de l'exécution de la fonction callback.
-
- -

Valeur de retour

- -

Une valeur du tableau qui remplit la condition définie par la fonction de rappel, {{jsxref("undefined")}} sinon.

- -

Description

- -

La méthode find exécute la fonction callback une fois pour chacun des éléments présents dans le tableau typé jusqu'à ce que la fonction callback renvoie une valeur vraie. Si un tel élément est trouvé, find retourne immédiatement la valeur de cet élément, sinon find renvoie {{jsxref("undefined")}}. callback est appelée uniquement pour les indices du tableau typé qui possèdent une valeur, elle n'est pas appelée pour les indices qui ont été supprimés ou qui ne possèdent pas de valeurs.

- -

callback est invoquée avec trois arguments : la valeur de l'élément, son indice et le tableau typé parcouru.

- -

Si la paramètre thisArg est utilisé, il sera utilisé en tant que this pour chaque appel à callback. S'il n'est pas fourni, la valeur {{jsxref("undefined")}} sera utilisée.

- -

find ne modifie pas le tableau typé sur lequel elle est appelé.

- -

La liste des éléments traités par find est définie avant le premier appel à callback. Les éléments qui sont ajoutés au tableau typé après que l'appel à find ait commencé ne seront pas traités par callback. Si un élément du tableau qui n'a pas encore été traité est modifié par un appel précédent de callback, la valeur utilisée au moment où il est traité est celle qu'il aura lorsque find atteindra cet indice. Les éléments qui sont supprimés ne sont pas traités par la fonction.

- -

Exemples

- -

Trouver un nombre premier

- -

Dans l'exemple qui suit, on cherche un élément d'un tableau typé qui est un nombre premier (on renvoie undefined s'il n'y a pas de nombre premier).

- -
function estPremier(élément, index, array) {
-  var début = 2;
-  while (début <= Math.sqrt(élément)) {
-    if (élément % début++ < 1) {
-      return false;
-    }
-  }
-  return élément > 1;
-}
-
-var uint8 = new Uint8Array([4, 5, 8, 12]);
-console.log(uint8.find(estPremier)); // 5
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.find', '%TypedArray%.prototype.find')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.find', '%TypedArray%.prototype.find')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.find")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/find/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/find/index.md new file mode 100644 index 0000000000..e45999369d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/find/index.md @@ -0,0 +1,111 @@ +--- +title: TypedArray.prototype.find() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/find +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/find +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/find +--- +
{{JSRef}}
+ +

La méthode find() renvoie une valeur du tableau typé si un élément du tableau remplit la condition définie par la fonction de test fournie. Si aucun élément ne remplit la condition, la valeur {{jsxref("undefined")}} sera renvoyée. Pour la suite de cet article TypedArray correspond à l'un des types de tableaux typés.

+ +

Voir également la page sur la méthohde {{jsxref("TypedArray.findIndex", "findIndex()")}} qui renvoie l'indice de l'élément trouvé (et non sa valeur).

+ +
{{EmbedInteractiveExample("pages/js/typedarray-find.html")}}
+ +

Syntaxe

+ +
typedarray.find(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction à exécuter pour chaque valeur du tableau typé. Elle prend trois arguments : +
+
élément
+
L'élément du tableau typé en cours de traitement.
+
index
+
L'indice de l'élément du tableau typé en cours de traitement.
+
array
+
Le tableau sur lequel la méthode find a été appelée.
+
+
+
thisArg
+
Paramètre optionnel, il correspond à l'objet à utiliser en tant que this lors de l'exécution de la fonction callback.
+
+ +

Valeur de retour

+ +

Une valeur du tableau qui remplit la condition définie par la fonction de rappel, {{jsxref("undefined")}} sinon.

+ +

Description

+ +

La méthode find exécute la fonction callback une fois pour chacun des éléments présents dans le tableau typé jusqu'à ce que la fonction callback renvoie une valeur vraie. Si un tel élément est trouvé, find retourne immédiatement la valeur de cet élément, sinon find renvoie {{jsxref("undefined")}}. callback est appelée uniquement pour les indices du tableau typé qui possèdent une valeur, elle n'est pas appelée pour les indices qui ont été supprimés ou qui ne possèdent pas de valeurs.

+ +

callback est invoquée avec trois arguments : la valeur de l'élément, son indice et le tableau typé parcouru.

+ +

Si la paramètre thisArg est utilisé, il sera utilisé en tant que this pour chaque appel à callback. S'il n'est pas fourni, la valeur {{jsxref("undefined")}} sera utilisée.

+ +

find ne modifie pas le tableau typé sur lequel elle est appelé.

+ +

La liste des éléments traités par find est définie avant le premier appel à callback. Les éléments qui sont ajoutés au tableau typé après que l'appel à find ait commencé ne seront pas traités par callback. Si un élément du tableau qui n'a pas encore été traité est modifié par un appel précédent de callback, la valeur utilisée au moment où il est traité est celle qu'il aura lorsque find atteindra cet indice. Les éléments qui sont supprimés ne sont pas traités par la fonction.

+ +

Exemples

+ +

Trouver un nombre premier

+ +

Dans l'exemple qui suit, on cherche un élément d'un tableau typé qui est un nombre premier (on renvoie undefined s'il n'y a pas de nombre premier).

+ +
function estPremier(élément, index, array) {
+  var début = 2;
+  while (début <= Math.sqrt(élément)) {
+    if (élément % début++ < 1) {
+      return false;
+    }
+  }
+  return élément > 1;
+}
+
+var uint8 = new Uint8Array([4, 5, 8, 12]);
+console.log(uint8.find(estPremier)); // 5
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.find', '%TypedArray%.prototype.find')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.find', '%TypedArray%.prototype.find')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.find")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.html deleted file mode 100644 index 9cca0653d7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: TypedArray.prototype.findIndex() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/findIndex ---- -
{{JSRef}}
- -

La méthode findIndex() renvoie un indice d'un élément d'un tableau typé si cet élément remplit une condition définie par une fonction de test donnée. S'il n'y a aucun élément satisfaisant, -1 sera renvoyé.

- -

Voir aussi la méthode {{jsxref("TypedArray.find", "find()")}} qui renvoie la valeur de l'élément trouvé (au lieu de son indice).

- -
{{EmbedInteractiveExample("pages/js/typedarray-findindex.html")}}
- -

Syntaxe

- -
typedarray.findIndex(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction à exécuter pour chaque valeur du tableau typé. Elle prend trois arguments : -
-
élément
-
L'élément du tableau typé en cours de traitement.
-
index
-
L'indice de l'élément du tableau typé en cours de traitement.
-
array
-
Le tableau typé sur lequel la méthode findIndex a été appelée.
-
-
-
thisArg
-
Paramètre optionnel, l'objet à utiliser en tant que this pour les appels à callback.
-
- -

Valeur de retour

- -

Un indice du tableau pour lequel l'élément remplit la condition décrite par la fonction, -1 sinon.

- -

Description

- -

La méthode findIndex exécute la fonction callback une fois pour chacun des éléments présent dans le tableau typé jusqu'à ce que callback renvoie une valeur vraie pour un élément. Si un tel élément est trouvé, findIndex retournera immédiatement l'indice de cet élément. Sinon, findIndex renverra -1. callback est appelé uniquement pour les éléments du tableau qui possèdent une valeur, les éléments qui ont été supprimés ou qui n'ont pas de valeur ne sont pas traités.

- -

callback est appelé avec trois arguments : la valeur de l'élément, son indice et le tableau typé qui est parcouru.

- -

Si un paramètre thisArg a été fourni à findIndex, celui-ci sera utilisé en tant que this pour chaque appel de callback. Dans le cas contraire, la valeur {{jsxref("undefined")}} sera utilisée.

- -

findIndex ne modifie pas le tableau typé sur lequel elle a été appelée.

- -

La liste des éléments traités par findIndex est définie avant le premier appel à callback. Les éléments qui sont ajoutés au tableau typés après que findIndex ait débuté ne sont pas traités par callback. Si un élément est modifié par un appel à callback précédent, la valeur passée à callback lors du traitement sera celle au moment où findIndex traite l'indice de l'élément. Les éléments qui sont supprimés ne sont pas pris en compte.

- -

Exemples

- -

Dans l'exemple suivant, on utilise la méthode pour trouver l'indice d'un nombre premier dans le tableau typé (ou -1 dans le cas où il n'y a pas de nombre premier) :

- -
function estPremier(élément, index, array) {
-  var début = 2;
-  while (début <= Math.sqrt(élément)) {
-    if (élément % début++ < 1) {
-      return false;
-    }
-  }
-  return élément > 1;
-}
-
-var uint8 = new Uint8Array([4, 6, 8, 12]);
-var uint16 = new Uint16Array([4, 6, 7, 12]);
-
-console.log(uint8.findIndex(estPremier)); // -1, non trouvé
-console.log(uint16.findIndex(estPremier)); // 2
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.findindex', '%TypedArray%.prototype.findIndex')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.findindex', '%TypedArray%.prototype.findIndex')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.findIndex")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.md new file mode 100644 index 0000000000..9cca0653d7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/findindex/index.md @@ -0,0 +1,113 @@ +--- +title: TypedArray.prototype.findIndex() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/findIndex +--- +
{{JSRef}}
+ +

La méthode findIndex() renvoie un indice d'un élément d'un tableau typé si cet élément remplit une condition définie par une fonction de test donnée. S'il n'y a aucun élément satisfaisant, -1 sera renvoyé.

+ +

Voir aussi la méthode {{jsxref("TypedArray.find", "find()")}} qui renvoie la valeur de l'élément trouvé (au lieu de son indice).

+ +
{{EmbedInteractiveExample("pages/js/typedarray-findindex.html")}}
+ +

Syntaxe

+ +
typedarray.findIndex(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction à exécuter pour chaque valeur du tableau typé. Elle prend trois arguments : +
+
élément
+
L'élément du tableau typé en cours de traitement.
+
index
+
L'indice de l'élément du tableau typé en cours de traitement.
+
array
+
Le tableau typé sur lequel la méthode findIndex a été appelée.
+
+
+
thisArg
+
Paramètre optionnel, l'objet à utiliser en tant que this pour les appels à callback.
+
+ +

Valeur de retour

+ +

Un indice du tableau pour lequel l'élément remplit la condition décrite par la fonction, -1 sinon.

+ +

Description

+ +

La méthode findIndex exécute la fonction callback une fois pour chacun des éléments présent dans le tableau typé jusqu'à ce que callback renvoie une valeur vraie pour un élément. Si un tel élément est trouvé, findIndex retournera immédiatement l'indice de cet élément. Sinon, findIndex renverra -1. callback est appelé uniquement pour les éléments du tableau qui possèdent une valeur, les éléments qui ont été supprimés ou qui n'ont pas de valeur ne sont pas traités.

+ +

callback est appelé avec trois arguments : la valeur de l'élément, son indice et le tableau typé qui est parcouru.

+ +

Si un paramètre thisArg a été fourni à findIndex, celui-ci sera utilisé en tant que this pour chaque appel de callback. Dans le cas contraire, la valeur {{jsxref("undefined")}} sera utilisée.

+ +

findIndex ne modifie pas le tableau typé sur lequel elle a été appelée.

+ +

La liste des éléments traités par findIndex est définie avant le premier appel à callback. Les éléments qui sont ajoutés au tableau typés après que findIndex ait débuté ne sont pas traités par callback. Si un élément est modifié par un appel à callback précédent, la valeur passée à callback lors du traitement sera celle au moment où findIndex traite l'indice de l'élément. Les éléments qui sont supprimés ne sont pas pris en compte.

+ +

Exemples

+ +

Dans l'exemple suivant, on utilise la méthode pour trouver l'indice d'un nombre premier dans le tableau typé (ou -1 dans le cas où il n'y a pas de nombre premier) :

+ +
function estPremier(élément, index, array) {
+  var début = 2;
+  while (début <= Math.sqrt(élément)) {
+    if (élément % début++ < 1) {
+      return false;
+    }
+  }
+  return élément > 1;
+}
+
+var uint8 = new Uint8Array([4, 6, 8, 12]);
+var uint16 = new Uint16Array([4, 6, 7, 12]);
+
+console.log(uint8.findIndex(estPremier)); // -1, non trouvé
+console.log(uint16.findIndex(estPremier)); // 2
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.findindex', '%TypedArray%.prototype.findIndex')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.findindex', '%TypedArray%.prototype.findIndex')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.findIndex")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.html deleted file mode 100644 index 0ae4aab666..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: TypedArray.prototype.forEach() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/forEach -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/forEach -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/forEach ---- -
{{JSRef}}
- -

La méthode forEach() permet d'exécuter une fonction donnée sur chaque élément du tableau. Cette méthode implémente le même algorithme que {{jsxref("Array.prototype.forEach()")}}.

- -

Syntaxe

- -
tableauTypé.forEach(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction à utiliser pour chaque élément du tableau typé. Elle prend trois arguments : -
-
valeurÉlément
-
La valeur de l'élément traité actuellement.
-
indiceÉlément
-
L'indice de l'élément traité actuellement.
-
tableau
-
Le tableau parcouru par forEach().
-
-
-
thisArg
-
Optionnel. La valeur utilisée pour this lors de l'appel à callback().
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Description

- -

La méthode forEach() exécute la fonction callback() une fois pour chaque élément présent dans le tableau typé, par ordre d'indice croissant. Cette fonction n'est pas appelée pour les indices sur lesquels les éléments ont été supprimés ou n'ont pas été définis. callback() est cependant appelée pour les éléments qui portent la valeur {{jsxref("undefined")}}.

- -

callback() accepte trois arguments :

- - - -

Si le paramètre thisArg est fourni à forEach(), il sera la valeur du this utilisé par chaque exécution de callback(). Dans le cas contraire, la valeur {{jsxref("undefined")}} sera utilisée par défaut. Pour déterminer la valeur de this véritablement visible par callback() durant son exécution, les règles habituelles pour {{jsxref("Operators/this", "déterminer la valeur de this du point de vue d'une fonction")}} sont appliquées.

- -

L'ensemble des éléments visités par forEach() est fixé avant le premier appel à callback. Ainsi, les éléments qui sont ajoutés au tableau typé après que l'exécution de forEach() soit lancée ne seront pas traités. Cependant, si la valeur d'un élément à traiter est modifiée pendant l'exécution de forEach(), la valeur passée à callback() sera celle de l'élément au moment où il est traité. Si un élément est supprimé avant d'être visité, il ne sera pas traité.

- -

forEach() lance un appel à la fonction callback() pour chaque élément du tableau typé ; à la différence de {{jsxref("TypedArray.prototype.every()", "every()")}} et {{jsxref("TypedArray.prototype.some()", "some()")}} cette méthode renvoie toujours {{jsxref("undefined")}}.

- -

Exemples

- -

Exemple: Affichage du contenu d'un tableau typé

- -

Le code ci-dessous affiche une ligne pour chaque élément du tableau typé :

- -
function affichageContenuTableau(élément, index, tableau) {
-  console.log('a[' + index + '] = ' + élément);
-}
-
-new Uint8Array([0, 1, 2, 3]).forEach(affichageContenuTableau);
-// log :
-// a[0] = 0
-// a[1] = 1
-// a[2] = 2
-// a[3] = 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.foreach', '%TypedArray%.prototype.forEach')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.foreach', '%TypedArray%.prototype.forEach')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.forEach")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.md new file mode 100644 index 0000000000..0ae4aab666 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/foreach/index.md @@ -0,0 +1,113 @@ +--- +title: TypedArray.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/forEach +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/forEach +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/forEach +--- +
{{JSRef}}
+ +

La méthode forEach() permet d'exécuter une fonction donnée sur chaque élément du tableau. Cette méthode implémente le même algorithme que {{jsxref("Array.prototype.forEach()")}}.

+ +

Syntaxe

+ +
tableauTypé.forEach(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction à utiliser pour chaque élément du tableau typé. Elle prend trois arguments : +
+
valeurÉlément
+
La valeur de l'élément traité actuellement.
+
indiceÉlément
+
L'indice de l'élément traité actuellement.
+
tableau
+
Le tableau parcouru par forEach().
+
+
+
thisArg
+
Optionnel. La valeur utilisée pour this lors de l'appel à callback().
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Description

+ +

La méthode forEach() exécute la fonction callback() une fois pour chaque élément présent dans le tableau typé, par ordre d'indice croissant. Cette fonction n'est pas appelée pour les indices sur lesquels les éléments ont été supprimés ou n'ont pas été définis. callback() est cependant appelée pour les éléments qui portent la valeur {{jsxref("undefined")}}.

+ +

callback() accepte trois arguments :

+ + + +

Si le paramètre thisArg est fourni à forEach(), il sera la valeur du this utilisé par chaque exécution de callback(). Dans le cas contraire, la valeur {{jsxref("undefined")}} sera utilisée par défaut. Pour déterminer la valeur de this véritablement visible par callback() durant son exécution, les règles habituelles pour {{jsxref("Operators/this", "déterminer la valeur de this du point de vue d'une fonction")}} sont appliquées.

+ +

L'ensemble des éléments visités par forEach() est fixé avant le premier appel à callback. Ainsi, les éléments qui sont ajoutés au tableau typé après que l'exécution de forEach() soit lancée ne seront pas traités. Cependant, si la valeur d'un élément à traiter est modifiée pendant l'exécution de forEach(), la valeur passée à callback() sera celle de l'élément au moment où il est traité. Si un élément est supprimé avant d'être visité, il ne sera pas traité.

+ +

forEach() lance un appel à la fonction callback() pour chaque élément du tableau typé ; à la différence de {{jsxref("TypedArray.prototype.every()", "every()")}} et {{jsxref("TypedArray.prototype.some()", "some()")}} cette méthode renvoie toujours {{jsxref("undefined")}}.

+ +

Exemples

+ +

Exemple: Affichage du contenu d'un tableau typé

+ +

Le code ci-dessous affiche une ligne pour chaque élément du tableau typé :

+ +
function affichageContenuTableau(élément, index, tableau) {
+  console.log('a[' + index + '] = ' + élément);
+}
+
+new Uint8Array([0, 1, 2, 3]).forEach(affichageContenuTableau);
+// log :
+// a[0] = 0
+// a[1] = 1
+// a[2] = 2
+// a[3] = 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.foreach', '%TypedArray%.prototype.forEach')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.foreach', '%TypedArray%.prototype.forEach')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.forEach")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/from/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/from/index.html deleted file mode 100644 index 3e4f7a9953..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/from/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: TypedArray.from() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/from -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - TypedArray - - TypedArrays - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/from -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/from ---- -
{{JSRef}}
- -

La méthode TypedArray.from() crée un nouvel objet {{jsxref("TypedArray", "TypedArray", "#Les_objets_TypedArray")}} à partir d'un objet itérable ou d'un objet semblable à un tableau. Cette méthode est similaire à {{jsxref("Array.from()")}}.

- -

Syntaxe

- -
TypedArray.from(source[, mapFn[, thisArg]])
-
-où TypedArray est l'un de :
-
-Int8Array
-Uint8Array
-Uint8ClampedArray
-Int16Array
-Uint16Array
-Int32Array
-Uint32Array
-Float32Array
-Float64Array
-BigInt64Array
-BigUint64Array
-
- -

Paramètres

- -
-
source
-
Un objet semblable à un tableau ou un objet itérable, et à partir duquel on souhaite créer un tableau typé.
-
fonctionMap
-
Argument optionnel, une fonction à appliquer à chacun des éléments du tableau.
-
thisArg
-
Argument optionnel. La valeur à utiliser pour this lors de l'exécution de la fonction fonctionMap.
-
- -

Valeur de retour

- -

Une nouvelle instance de {{jsxref("TypedArray")}}.

- -

Description

- -

TypedArray.from() permet de créer des tableaux typés à partir :

- - - -

Array.from possède un paramètre optionnel fonctionMap, qui permet d'exécuter une fonction {{jsxref("Array.prototype.map", "map")}} sur chacun des éléments du tableau typé (ou de l'instance de la classe fille) qui est créé. Autrement dit TypedArray.from(obj, fonctionMap, thisArg) correspond exactement à TypedArray.from(obj).map(fonctionMap, thisArg).

- -

Il existe de légères différences entre {{jsxref("Array.from()")}} et TypedArray.from() :

- - - -

Exemples

- -
// Set (objet itérable)
-var s = new Set([1, 2, 3]);
-Uint8Array.from(s);
-// Uint8Array [ 1, 2, 3 ]
-
-
-// String
-Int16Array.from("123");
-// Int16Array [ 1, 2, 3 ]
-
-
-// En utilisant un fonction fléchée en tant que
-// fonctionMap pour manipuler les éléments
-Float32Array.from([1, 2, 3], x => x + x);
-// Float32Array [ 2, 4, 6 ]
-
-
-// Pour construire une séquence de nombres
-Uint8Array.from({length: 5}, (v, k) => k);
-// Uint8Array [ 0, 1, 2, 3, 4 ]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.from', '%TypedArray%.from')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.from', '%TypedArray%.from')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.from")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/from/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/from/index.md new file mode 100644 index 0000000000..3e4f7a9953 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/from/index.md @@ -0,0 +1,129 @@ +--- +title: TypedArray.from() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/from +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - TypedArray + - TypedArrays + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/from +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/from +--- +
{{JSRef}}
+ +

La méthode TypedArray.from() crée un nouvel objet {{jsxref("TypedArray", "TypedArray", "#Les_objets_TypedArray")}} à partir d'un objet itérable ou d'un objet semblable à un tableau. Cette méthode est similaire à {{jsxref("Array.from()")}}.

+ +

Syntaxe

+ +
TypedArray.from(source[, mapFn[, thisArg]])
+
+où TypedArray est l'un de :
+
+Int8Array
+Uint8Array
+Uint8ClampedArray
+Int16Array
+Uint16Array
+Int32Array
+Uint32Array
+Float32Array
+Float64Array
+BigInt64Array
+BigUint64Array
+
+ +

Paramètres

+ +
+
source
+
Un objet semblable à un tableau ou un objet itérable, et à partir duquel on souhaite créer un tableau typé.
+
fonctionMap
+
Argument optionnel, une fonction à appliquer à chacun des éléments du tableau.
+
thisArg
+
Argument optionnel. La valeur à utiliser pour this lors de l'exécution de la fonction fonctionMap.
+
+ +

Valeur de retour

+ +

Une nouvelle instance de {{jsxref("TypedArray")}}.

+ +

Description

+ +

TypedArray.from() permet de créer des tableaux typés à partir :

+ + + +

Array.from possède un paramètre optionnel fonctionMap, qui permet d'exécuter une fonction {{jsxref("Array.prototype.map", "map")}} sur chacun des éléments du tableau typé (ou de l'instance de la classe fille) qui est créé. Autrement dit TypedArray.from(obj, fonctionMap, thisArg) correspond exactement à TypedArray.from(obj).map(fonctionMap, thisArg).

+ +

Il existe de légères différences entre {{jsxref("Array.from()")}} et TypedArray.from() :

+ + + +

Exemples

+ +
// Set (objet itérable)
+var s = new Set([1, 2, 3]);
+Uint8Array.from(s);
+// Uint8Array [ 1, 2, 3 ]
+
+
+// String
+Int16Array.from("123");
+// Int16Array [ 1, 2, 3 ]
+
+
+// En utilisant un fonction fléchée en tant que
+// fonctionMap pour manipuler les éléments
+Float32Array.from([1, 2, 3], x => x + x);
+// Float32Array [ 2, 4, 6 ]
+
+
+// Pour construire une séquence de nombres
+Uint8Array.from({length: 5}, (v, k) => k);
+// Uint8Array [ 0, 1, 2, 3, 4 ]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.from', '%TypedArray%.from')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.from', '%TypedArray%.from')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.from")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/includes/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/includes/index.html deleted file mode 100644 index 3d145adb92..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/includes/index.html +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: TypedArray.prototype.includes() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/includes -tags: - - ECMAScript 2016 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/includes -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/includes ---- -
{{JSRef}}
- -

La méthode includes() détermine si un tableau typé possède un certain élément et renvoie true ou false selon le cas de figure. Cette méthode utilise le même algorithme que la méthode {{jsxref("Array.prototype.includes()")}}. Dans le reste de l'article TypedArray fait référence à un des types de tableau typé.

- -
{{EmbedInteractiveExample("pages/js/typedarray-includes.html")}}
- -

Syntaxe

- -
typedarray.includes(élémentRecherché[, indiceDébut]);
- -

Paramètres

- -
-
élémentRecherché
-
L'élément qu'on cherche au sein du tableau typé.
-
indiceDébut
-
Paramètre optionnel qui correspond à la position du tableau à partir de laquelle effectuer la recherche. La valeur par défaut est 0.
-
- -

Valeur de retour

- -

Un booléen indiquant la présence de l'élément (true s'il y est, false sinon).

- -

Exemples

- -
var uint8 = new Uint8Array([1,2,3]);
-uint8.includes(2);     // true
-uint8.includes(4);     // false
-uint8.includes(3, 3);  // false
-
-// Gestion de NaN (vrai uniquement pour Float32 et Float64)
-new Uint8Array([NaN]).includes(NaN); // false car NaN est converti en 0 par le constructeur
-new Float32Array([NaN]).includes(NaN); // true;
-new Float64Array([NaN]).includes(NaN); // true;
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES7', '#sec-%typedarray%.prototype.includes', 'TypedArray.prototype.includes')}}{{Spec2('ES7')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.includes', 'TypedArray.prototype.includes')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.includes")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/includes/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/includes/index.md new file mode 100644 index 0000000000..3d145adb92 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/includes/index.md @@ -0,0 +1,83 @@ +--- +title: TypedArray.prototype.includes() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/includes +tags: + - ECMAScript 2016 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/includes +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/includes +--- +
{{JSRef}}
+ +

La méthode includes() détermine si un tableau typé possède un certain élément et renvoie true ou false selon le cas de figure. Cette méthode utilise le même algorithme que la méthode {{jsxref("Array.prototype.includes()")}}. Dans le reste de l'article TypedArray fait référence à un des types de tableau typé.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-includes.html")}}
+ +

Syntaxe

+ +
typedarray.includes(élémentRecherché[, indiceDébut]);
+ +

Paramètres

+ +
+
élémentRecherché
+
L'élément qu'on cherche au sein du tableau typé.
+
indiceDébut
+
Paramètre optionnel qui correspond à la position du tableau à partir de laquelle effectuer la recherche. La valeur par défaut est 0.
+
+ +

Valeur de retour

+ +

Un booléen indiquant la présence de l'élément (true s'il y est, false sinon).

+ +

Exemples

+ +
var uint8 = new Uint8Array([1,2,3]);
+uint8.includes(2);     // true
+uint8.includes(4);     // false
+uint8.includes(3, 3);  // false
+
+// Gestion de NaN (vrai uniquement pour Float32 et Float64)
+new Uint8Array([NaN]).includes(NaN); // false car NaN est converti en 0 par le constructeur
+new Float32Array([NaN]).includes(NaN); // true;
+new Float64Array([NaN]).includes(NaN); // true;
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES7', '#sec-%typedarray%.prototype.includes', 'TypedArray.prototype.includes')}}{{Spec2('ES7')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.includes', 'TypedArray.prototype.includes')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.includes")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/index.html deleted file mode 100644 index c0ce667605..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/index.html +++ /dev/null @@ -1,283 +0,0 @@ ---- -title: TypedArray -slug: Web/JavaScript/Reference/Global_Objects/TypedArray -tags: - - JavaScript - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray ---- -
{{JSRef}}
- -

Un objet TypedArray décrit une vue organisée à la façon d'un tableau pour manipuler un tampon (buffer) de données binaires. TypedArray n'est pas une propriété globale, il n'existe pas non plus de constructeur TypedArray.  En revanche, plusieurs propriétés globales existent et leurs valeurs permettent de construire des tableaux typés (typed arrays) avec différents types de données. Ceux-ci sont listés ci-après. Les pages suivantes permettent de décrire les propriétés et méthodes qui peuvent être utilisées sur les différents tableaux typés.

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

Syntaxe

- -
new TypedArray(longueur);
-new TypedArray(tableauTypé);
-new TypedArray(objet);
-new TypedArray(tampon [, décalageEnOctet [, longueur]]);
-
-// où TypedArray() est l'un de :
-
-Int8Array();
-Uint8Array();
-Uint8ClampedArray();
-Int16Array();
-Uint16Array();
-Int32Array();
-Uint32Array();
-Float32Array();
-Float64Array();
-BigInt64Array();
-BigUint64Array();
-
- -

Paramètres

- -
-
longueur
-
Lorsque le constructeur est appelé avec un argument longueur, un tableau typé sera créé, contenant autant de zéros que longueur (par exemple avec une longueur de 3, on aura un tableau dont les trois éléments seront des zéros).
-
tableauTypé
-
Lorsque le constructeur est appelé avec un argument tableauTypé, qui peut être un tableau typé de n'importe quel type (par exemple Int32Array), le tableauTypé est copié dans un nouveau tableau typé. Chaque valeur du tableauTypé est convertie dans le type correspondant du nouveau tableau. Enfin, la longueur du tableau typé est fixée avec la longueur de tableauTypé.
-
objet
-
Lorsque le constructeur est invoqué avec un argument objet, un nouveau tableau typé est créé avec la méthode TypedArray.from().
-
tampon, décalageOctet, longueur
-
Lorsque le constructeur est appelé avec un tampon (buffer) ainsi qu'avec les paramètres optionnels décalageOctet et longueur, un nouveau tableau typé est créé comme une vue pour l'objet {{jsxref("ArrayBuffer")}}. Les paramètres décalageOctet et longueur permettent de définir l'intervalle de mémoire du buffer qui est présenté dans la vue qu'est le tableau typé. Si les deux derniers paramètres sont absents, l'ensemble du tampon sera considéré. Si longueur est absent, on considèrera l'ensemble de tampon à partir de l'octet décalageOctet.
-
- -

Description

- -

ECMAScript 2015 (ES6) définit un constructeur %TypedArray% qui est un [[Prototype]] de tous les constructeurs TypedArray. Ce constructeur n'est pas accessible directement. Il n'existe pas de  %TypedArray% global ou de propriété TypedArray.  Il est uniquement accessible via Object.getPrototypeOf(Int8Array.prototype) ou avec les méthodes semblables. L'ensemble des différents constructeurs TypedArrays hérite de propriétés communes de la fonction %TypedArray%. De plus, tous les prototypes des tableaux typés (TypedArray.prototype) ont %TypedArray%.prototype pour [[Prototype]].

- -

Le constructeur %TypedArray% en tant que tel n'est pas très utile. Toute tentative d'appel ou d'utilisation avec une expression new renverra TypeError, sauf quand il est utilisé par le moteur JavaScript lors de la création de l'objet quand le moteur supporte les sous-classes. À l'heure actuelle, il n'existe pas de tels moteurs, pour cette raison %TypedArray% est uniquement utile dans les fonctions d'émulation (polyfill) our pour les propriétés des différents constructeurs TypedArray.

- -

Lorsqu'on crée une instance de TypedArray (ex. une instance de Int8Array ou autre), un tampon de mémoire tableau est créé en interne par le moteur (si un objet ArrayBuffer est passé en argument, c'est celui-ci qui est utilisé). C'est l'adresse de cette mémoire tampon qui est sauvegardée comme une propriété interne à l'objet. Toutes les méthodes de %TypedArray%.prototype utiliseront ensuite cet espace pour les opérations.

- -

Accès aux propriétés

- -

Il est possible d'accéder aux éléments du tableau en utilisant la notation usuelle avec les crochets. Cependant, définir ou accéder à des propriétés indexées ne se fera pas avec la chaîne de prototypes, même si l'indice utilisé est en dehors des limites du tableau. Les propriétés indexées seront uniquement basées sur le contenu du {{jsxref("ArrayBuffer")}} et ne consulteront pas les propriétés des objets. En revanche, il est toujours possible d'utiliser des propriétés nommées, comme avec les autres objets.

- -
// Définir et accéder du contenu avec la syntaxe usuelle
-var int16 = new Int16Array(2);
-int16[0] = 42;
-console.log(int16[0]); // 42
-
-// Les propriétés indexées sur les prototypes ne sont pas consultées (Fx 25)
-Int8Array.prototype[20] = "toto";
-(new Int8Array(32))[20]; // 0
-// y compris en dehors des limites
-Int8Array.prototype[20] = "toto";
-(new Int8Array(8))[20]; // undefined
-// ou avec des index négatifs
-Int8Array.prototype[-1] = "toto";
-(new Int8Array(8))[-1]; // undefined
-
-// Mais il est possible d'utiliser des propriétés nommées (Fx 30)
-Int8Array.prototype.toto = "truc";
-(new Int8Array(32)).toto; // "truc" 
- -

Les objets TypedArray

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeIntervalleTaille (exprimée en octets)DescriptionType Web IDLType équivalent en C
{{jsxref("Int8Array")}}-128 à 1271Entier signé en complément à deux sur 8 bits.byteint8_t
{{jsxref("Uint8Array")}}0 à 2551Entier non signé sur 8 bits.octetuint8_t
{{jsxref("Uint8ClampedArray")}}0 à 2551Entier non signé sur 8 bits (compris entre 0 et 255).octetuint8_t
{{jsxref("Int16Array")}}-32768 à 327672Entier signé en complément à deux sur 16 bits.shortint16_t
{{jsxref("Uint16Array")}}0 à 655352Entier non signé sur 16 bits.unsigned shortuint16_t
{{jsxref("Int32Array")}}-2147483648 à 21474836474Entier signé en complément à deux sur 32 bits.longint32_t
{{jsxref("Uint32Array")}}0 à 42949672954Entier non signé sur 32 bits.unsigned longuint32_t
{{jsxref("Float32Array")}}1.2x10^-38 à 3.4x10^384Nombre flottant sur 32 bits selon la représentation IEEE (7 chiffres significatifs).unrestricted floatfloat
{{jsxref("Float64Array")}}5.0x10^-324 à 1.8x10^3088Nombre flottant sur 64 bits selon la représentation IEEE (16 chiffres significatifs).unrestricted doubledouble
{{jsxref("BigInt64Array")}}-2^63 à 2^63-18Nombre entier signé sur 64 bits en complément à deux.bigintint64_t (signed long long)
{{jsxref("BigUint64Array")}}0 à 2^64-18Nombre entier non signé sur 64 bits.bigintuint64_t (unsigned long long)
- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT")}}
-
Cette propriété renvoie un nombre correspondant à la taille d'un élément du tableau selon le type de tableau utilisé.
-
TypedArray.length
-
La propriété de longueur, elle vaut 3.
-
{{jsxref("TypedArray.name")}}
-
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur (par exemple "Int8Array").
-
{{jsxref("TypedArray.@@species", "get TypedArray[@@species]")}}
-
La fonction de construction utilisée pour créer des objets dérivés.
-
{{jsxref("TypedArray.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from()")}}
-
Cette méthode permet de créer un nouveau tableau typé à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of()")}}
-
Cette méthode permet de créer un nouveau tableau typé à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype TypedArray

- -

Toutes les instances de TypedArrays héritent de {{jsxref("TypedArray.prototype")}}.

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray/prototype','Propriétés')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray/prototype','Méthodes')}}

- -

Prothèse d'émulation (polyfill)

- -

La plupart des méthodes des tableaux typés peuvent être en partie émulées grâce aux méthodes rattachées à {{jsxref("Array")}} :

- -
var typedArrayTypes = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, ​​​Int32Array, Uint32Array, ​​​Float32Array, Float64Array];
-for (var k in typedArrayTypes){
-  for (var v in Array.prototype){
-    if (Array.prototype.hasOwnProperty(v) &&
-  ​​​​​         !typedArrayTypes[k].prototype.hasOwnProperty(v)){
-      typedArrayTypes[k].prototype[v] = Array.prototype[v];
-    }
-  }
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Défini comme TypedArray et interface ArrayBufferView avec les différents types de vues des tableaux typés. Cette spécification a été englobée dans ECMAScript 2015.
{{SpecName('ES6', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié les constructeurs TypedArray afin qu'ils utilisent l'opération ToIndex et puissent être utilisés sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), les constructeurs TypedArray doivent être utilisés avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur TypedArray comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Float64Array([1, 2, 3]);
-// TypeError: calling a builtin Float64Array constructor
-// without new is forbidden
- -
var dv = new Float64Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/index.md new file mode 100644 index 0000000000..c0ce667605 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/index.md @@ -0,0 +1,283 @@ +--- +title: TypedArray +slug: Web/JavaScript/Reference/Global_Objects/TypedArray +tags: + - JavaScript + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray +--- +
{{JSRef}}
+ +

Un objet TypedArray décrit une vue organisée à la façon d'un tableau pour manipuler un tampon (buffer) de données binaires. TypedArray n'est pas une propriété globale, il n'existe pas non plus de constructeur TypedArray.  En revanche, plusieurs propriétés globales existent et leurs valeurs permettent de construire des tableaux typés (typed arrays) avec différents types de données. Ceux-ci sont listés ci-après. Les pages suivantes permettent de décrire les propriétés et méthodes qui peuvent être utilisées sur les différents tableaux typés.

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

Syntaxe

+ +
new TypedArray(longueur);
+new TypedArray(tableauTypé);
+new TypedArray(objet);
+new TypedArray(tampon [, décalageEnOctet [, longueur]]);
+
+// où TypedArray() est l'un de :
+
+Int8Array();
+Uint8Array();
+Uint8ClampedArray();
+Int16Array();
+Uint16Array();
+Int32Array();
+Uint32Array();
+Float32Array();
+Float64Array();
+BigInt64Array();
+BigUint64Array();
+
+ +

Paramètres

+ +
+
longueur
+
Lorsque le constructeur est appelé avec un argument longueur, un tableau typé sera créé, contenant autant de zéros que longueur (par exemple avec une longueur de 3, on aura un tableau dont les trois éléments seront des zéros).
+
tableauTypé
+
Lorsque le constructeur est appelé avec un argument tableauTypé, qui peut être un tableau typé de n'importe quel type (par exemple Int32Array), le tableauTypé est copié dans un nouveau tableau typé. Chaque valeur du tableauTypé est convertie dans le type correspondant du nouveau tableau. Enfin, la longueur du tableau typé est fixée avec la longueur de tableauTypé.
+
objet
+
Lorsque le constructeur est invoqué avec un argument objet, un nouveau tableau typé est créé avec la méthode TypedArray.from().
+
tampon, décalageOctet, longueur
+
Lorsque le constructeur est appelé avec un tampon (buffer) ainsi qu'avec les paramètres optionnels décalageOctet et longueur, un nouveau tableau typé est créé comme une vue pour l'objet {{jsxref("ArrayBuffer")}}. Les paramètres décalageOctet et longueur permettent de définir l'intervalle de mémoire du buffer qui est présenté dans la vue qu'est le tableau typé. Si les deux derniers paramètres sont absents, l'ensemble du tampon sera considéré. Si longueur est absent, on considèrera l'ensemble de tampon à partir de l'octet décalageOctet.
+
+ +

Description

+ +

ECMAScript 2015 (ES6) définit un constructeur %TypedArray% qui est un [[Prototype]] de tous les constructeurs TypedArray. Ce constructeur n'est pas accessible directement. Il n'existe pas de  %TypedArray% global ou de propriété TypedArray.  Il est uniquement accessible via Object.getPrototypeOf(Int8Array.prototype) ou avec les méthodes semblables. L'ensemble des différents constructeurs TypedArrays hérite de propriétés communes de la fonction %TypedArray%. De plus, tous les prototypes des tableaux typés (TypedArray.prototype) ont %TypedArray%.prototype pour [[Prototype]].

+ +

Le constructeur %TypedArray% en tant que tel n'est pas très utile. Toute tentative d'appel ou d'utilisation avec une expression new renverra TypeError, sauf quand il est utilisé par le moteur JavaScript lors de la création de l'objet quand le moteur supporte les sous-classes. À l'heure actuelle, il n'existe pas de tels moteurs, pour cette raison %TypedArray% est uniquement utile dans les fonctions d'émulation (polyfill) our pour les propriétés des différents constructeurs TypedArray.

+ +

Lorsqu'on crée une instance de TypedArray (ex. une instance de Int8Array ou autre), un tampon de mémoire tableau est créé en interne par le moteur (si un objet ArrayBuffer est passé en argument, c'est celui-ci qui est utilisé). C'est l'adresse de cette mémoire tampon qui est sauvegardée comme une propriété interne à l'objet. Toutes les méthodes de %TypedArray%.prototype utiliseront ensuite cet espace pour les opérations.

+ +

Accès aux propriétés

+ +

Il est possible d'accéder aux éléments du tableau en utilisant la notation usuelle avec les crochets. Cependant, définir ou accéder à des propriétés indexées ne se fera pas avec la chaîne de prototypes, même si l'indice utilisé est en dehors des limites du tableau. Les propriétés indexées seront uniquement basées sur le contenu du {{jsxref("ArrayBuffer")}} et ne consulteront pas les propriétés des objets. En revanche, il est toujours possible d'utiliser des propriétés nommées, comme avec les autres objets.

+ +
// Définir et accéder du contenu avec la syntaxe usuelle
+var int16 = new Int16Array(2);
+int16[0] = 42;
+console.log(int16[0]); // 42
+
+// Les propriétés indexées sur les prototypes ne sont pas consultées (Fx 25)
+Int8Array.prototype[20] = "toto";
+(new Int8Array(32))[20]; // 0
+// y compris en dehors des limites
+Int8Array.prototype[20] = "toto";
+(new Int8Array(8))[20]; // undefined
+// ou avec des index négatifs
+Int8Array.prototype[-1] = "toto";
+(new Int8Array(8))[-1]; // undefined
+
+// Mais il est possible d'utiliser des propriétés nommées (Fx 30)
+Int8Array.prototype.toto = "truc";
+(new Int8Array(32)).toto; // "truc" 
+ +

Les objets TypedArray

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeIntervalleTaille (exprimée en octets)DescriptionType Web IDLType équivalent en C
{{jsxref("Int8Array")}}-128 à 1271Entier signé en complément à deux sur 8 bits.byteint8_t
{{jsxref("Uint8Array")}}0 à 2551Entier non signé sur 8 bits.octetuint8_t
{{jsxref("Uint8ClampedArray")}}0 à 2551Entier non signé sur 8 bits (compris entre 0 et 255).octetuint8_t
{{jsxref("Int16Array")}}-32768 à 327672Entier signé en complément à deux sur 16 bits.shortint16_t
{{jsxref("Uint16Array")}}0 à 655352Entier non signé sur 16 bits.unsigned shortuint16_t
{{jsxref("Int32Array")}}-2147483648 à 21474836474Entier signé en complément à deux sur 32 bits.longint32_t
{{jsxref("Uint32Array")}}0 à 42949672954Entier non signé sur 32 bits.unsigned longuint32_t
{{jsxref("Float32Array")}}1.2x10^-38 à 3.4x10^384Nombre flottant sur 32 bits selon la représentation IEEE (7 chiffres significatifs).unrestricted floatfloat
{{jsxref("Float64Array")}}5.0x10^-324 à 1.8x10^3088Nombre flottant sur 64 bits selon la représentation IEEE (16 chiffres significatifs).unrestricted doubledouble
{{jsxref("BigInt64Array")}}-2^63 à 2^63-18Nombre entier signé sur 64 bits en complément à deux.bigintint64_t (signed long long)
{{jsxref("BigUint64Array")}}0 à 2^64-18Nombre entier non signé sur 64 bits.bigintuint64_t (unsigned long long)
+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT")}}
+
Cette propriété renvoie un nombre correspondant à la taille d'un élément du tableau selon le type de tableau utilisé.
+
TypedArray.length
+
La propriété de longueur, elle vaut 3.
+
{{jsxref("TypedArray.name")}}
+
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur (par exemple "Int8Array").
+
{{jsxref("TypedArray.@@species", "get TypedArray[@@species]")}}
+
La fonction de construction utilisée pour créer des objets dérivés.
+
{{jsxref("TypedArray.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from()")}}
+
Cette méthode permet de créer un nouveau tableau typé à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of()")}}
+
Cette méthode permet de créer un nouveau tableau typé à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype TypedArray

+ +

Toutes les instances de TypedArrays héritent de {{jsxref("TypedArray.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray/prototype','Propriétés')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray/prototype','Méthodes')}}

+ +

Prothèse d'émulation (polyfill)

+ +

La plupart des méthodes des tableaux typés peuvent être en partie émulées grâce aux méthodes rattachées à {{jsxref("Array")}} :

+ +
var typedArrayTypes = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, ​​​Int32Array, Uint32Array, ​​​Float32Array, Float64Array];
+for (var k in typedArrayTypes){
+  for (var v in Array.prototype){
+    if (Array.prototype.hasOwnProperty(v) &&
+  ​​​​​         !typedArrayTypes[k].prototype.hasOwnProperty(v)){
+      typedArrayTypes[k].prototype[v] = Array.prototype[v];
+    }
+  }
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Défini comme TypedArray et interface ArrayBufferView avec les différents types de vues des tableaux typés. Cette spécification a été englobée dans ECMAScript 2015.
{{SpecName('ES6', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié les constructeurs TypedArray afin qu'ils utilisent l'opération ToIndex et puissent être utilisés sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), les constructeurs TypedArray doivent être utilisés avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur TypedArray comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Float64Array([1, 2, 3]);
+// TypeError: calling a builtin Float64Array constructor
+// without new is forbidden
+ +
var dv = new Float64Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.html deleted file mode 100644 index 028758d5e7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: TypedArray.prototype.indexOf() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/indexOf ---- -
{{JSRef}}
- -

La méthode indexOf() renvoie le premier indice (le plus petit) auquel on peut trouver un élément donné dans le tableau typé. Si l'élément n'est pas trouvé, la valeur de retour sera -1. L'algorithme utilisé pour cette méthode est le même que celui pour {{jsxref("Array.prototype.indexOf()")}}. Pour le reste de l'article TypedArray correspond à l'un des types de tableau typé.

- -
{{EmbedInteractiveExample("pages/js/typedarray-indexof.html")}}
- -

Syntaxe

- -
typedarray.indexOf(élémentRecherché[, indiceDébut = 0])
- -

Paramètres

- -
-
élémentRecherché
-
L'élément qu'on souhaite situer dans le tableau typé.
-
indiceDébut
-
Paramètre optionnel représentant l'indice à partir duquel commencer la recherche de l'élément. Si l'indice est supérieur ou égal à la longueur du tableau, la méthode renverra -1 et le tableau typé ne sera pas parcouru. Si la valeur fournie est négative, la recherche commencera à partir de l'élément situé à l'indice length-indiceDébut. Note : même si la valeur fournie est négative, le parcours du tableau typé s'effectuera toujours du plus petit index vers le plus grand. Si la valeur calculée pour l'indice de début est inférieure à 0, l'ensemble du tableau typé sera parcouru. La valeur par défaut de ce paramètre est 0 (tout le tableau est parcouru).
-
- -

Valeur de retour

- -

Le premier indice du tableau pour lequel l'élément a été trouvé, -1 s'il n'a pas été trouvé.

- -

Description

- -

indexOf compare élémentRecherché aux éléments du tableau typé en utilisant l'égalité stricte (celle utilisée par l'opérateur ===).

- -

Exemples

- -
var uint8 = new Uint8Array([2, 5, 9]);
-uint8.indexOf(2);     // 0
-uint8.indexOf(7);     // -1
-uint8.indexOf(9, 2);  // 2
-uint8.indexOf(2, -1); // -1
-uint8.indexOf(2, -3); // 0
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.indexof', 'TypedArray.prototype.indexOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.indexof', 'TypedArray.prototype.indexOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.indexOf")}}

- -

Notes de compatibilité

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.md new file mode 100644 index 0000000000..028758d5e7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/indexof/index.md @@ -0,0 +1,89 @@ +--- +title: TypedArray.prototype.indexOf() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/indexOf +--- +
{{JSRef}}
+ +

La méthode indexOf() renvoie le premier indice (le plus petit) auquel on peut trouver un élément donné dans le tableau typé. Si l'élément n'est pas trouvé, la valeur de retour sera -1. L'algorithme utilisé pour cette méthode est le même que celui pour {{jsxref("Array.prototype.indexOf()")}}. Pour le reste de l'article TypedArray correspond à l'un des types de tableau typé.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-indexof.html")}}
+ +

Syntaxe

+ +
typedarray.indexOf(élémentRecherché[, indiceDébut = 0])
+ +

Paramètres

+ +
+
élémentRecherché
+
L'élément qu'on souhaite situer dans le tableau typé.
+
indiceDébut
+
Paramètre optionnel représentant l'indice à partir duquel commencer la recherche de l'élément. Si l'indice est supérieur ou égal à la longueur du tableau, la méthode renverra -1 et le tableau typé ne sera pas parcouru. Si la valeur fournie est négative, la recherche commencera à partir de l'élément situé à l'indice length-indiceDébut. Note : même si la valeur fournie est négative, le parcours du tableau typé s'effectuera toujours du plus petit index vers le plus grand. Si la valeur calculée pour l'indice de début est inférieure à 0, l'ensemble du tableau typé sera parcouru. La valeur par défaut de ce paramètre est 0 (tout le tableau est parcouru).
+
+ +

Valeur de retour

+ +

Le premier indice du tableau pour lequel l'élément a été trouvé, -1 s'il n'a pas été trouvé.

+ +

Description

+ +

indexOf compare élémentRecherché aux éléments du tableau typé en utilisant l'égalité stricte (celle utilisée par l'opérateur ===).

+ +

Exemples

+ +
var uint8 = new Uint8Array([2, 5, 9]);
+uint8.indexOf(2);     // 0
+uint8.indexOf(7);     // -1
+uint8.indexOf(9, 2);  // 2
+uint8.indexOf(2, -1); // -1
+uint8.indexOf(2, -3); // 0
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.indexof', 'TypedArray.prototype.indexOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.indexof', 'TypedArray.prototype.indexOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.indexOf")}}

+ +

Notes de compatibilité

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/join/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/join/index.html deleted file mode 100644 index a55abeca68..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/join/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: TypedArray.prototype.join() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/join -tags: - - ECMAScript6 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/join -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/join ---- -
{{JSRef}}
- -

La méthode join() fusionne l'ensemble des éléments d'un tableau en une chaîne de caractères. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.join()")}}. Dans le reste de cet article TypedArray fait référence à l'un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-join.html")}}
- -

Syntaxe

- -
typedarray.join([séparateur = ',']);
- -

Paramètres

- -
-
séparateur
-
Paramètre optionnel qui définit la chaîne de caractères à utiliser pour séparer chaque élément. Si nécessaire, le séparateur sera converti en une chaîne de caractère. La valeur par défaut du paramètre est une virgule (",").
-
- -

Valeur de retour

- -

Une chaîne de caractères formée par la concaténation des différents éléments du tableau typé.

- -

Exemples

- -
var uint8 = new Uint8Array([1,2,3]);
-uint8.join();      // '1,2,3'
-uint8.join(' / '); // '1 / 2 / 3'
-uint8.join('');    // '123'
-
- -

Prothèse d'émulation (polyfill)

- -

Il n'existe pas d'objet global TypedArray, il faut donc ajouter une prothèse correspondant à chaque type de tableau typé.

- -
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.join
-if (!Uint8Array.prototype.join) {
-  Object.defineProperty(Uint8Array.prototype, 'join', {
-    value: Array.prototype.join
-  });
-}
-
- -

Mieux vaut ne pas ajouter de prothèses pour TypedArray.prototype si le moteur JavaScript ne prend pas en charge {{jsxref("Object.defineProperty()")}} car on ne peut pas les rendre non-énumérables.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.join', 'TypedArray.prototype.join')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.join', 'TypedArray.prototype.join')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.join")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/join/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/join/index.md new file mode 100644 index 0000000000..a55abeca68 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/join/index.md @@ -0,0 +1,89 @@ +--- +title: TypedArray.prototype.join() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/join +tags: + - ECMAScript6 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/join +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/join +--- +
{{JSRef}}
+ +

La méthode join() fusionne l'ensemble des éléments d'un tableau en une chaîne de caractères. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.join()")}}. Dans le reste de cet article TypedArray fait référence à l'un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-join.html")}}
+ +

Syntaxe

+ +
typedarray.join([séparateur = ',']);
+ +

Paramètres

+ +
+
séparateur
+
Paramètre optionnel qui définit la chaîne de caractères à utiliser pour séparer chaque élément. Si nécessaire, le séparateur sera converti en une chaîne de caractère. La valeur par défaut du paramètre est une virgule (",").
+
+ +

Valeur de retour

+ +

Une chaîne de caractères formée par la concaténation des différents éléments du tableau typé.

+ +

Exemples

+ +
var uint8 = new Uint8Array([1,2,3]);
+uint8.join();      // '1,2,3'
+uint8.join(' / '); // '1 / 2 / 3'
+uint8.join('');    // '123'
+
+ +

Prothèse d'émulation (polyfill)

+ +

Il n'existe pas d'objet global TypedArray, il faut donc ajouter une prothèse correspondant à chaque type de tableau typé.

+ +
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.join
+if (!Uint8Array.prototype.join) {
+  Object.defineProperty(Uint8Array.prototype, 'join', {
+    value: Array.prototype.join
+  });
+}
+
+ +

Mieux vaut ne pas ajouter de prothèses pour TypedArray.prototype si le moteur JavaScript ne prend pas en charge {{jsxref("Object.defineProperty()")}} car on ne peut pas les rendre non-énumérables.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.join', 'TypedArray.prototype.join')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.join', 'TypedArray.prototype.join')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.join")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/keys/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/keys/index.html deleted file mode 100644 index 647ea49a72..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/keys/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: TypedArray.prototype.keys() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/keys -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/keys -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/keys ---- -
{{JSRef}}
- -

La méthode keys() renvoie un nouvel objet Array Iterator contenant les clés pour chaque indice du tableau typé.

- -
{{EmbedInteractiveExample("pages/js/typedarray-keys.html")}}
- -

Syntaxe

- -
arr.keys()
- -

Valeur de retour

- -

Un nouvel objet Array Iterator.

- -

Exemples

- -

Parcourir un tableau avec for...of

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-var eArray = arr.keys();
-// prérequis : le navigateur doit supporter les
-// boucles for..of et les variables dont la portée
-// est définie par let
-for (let n of eArray) {
-  console.log(n);
-}
-
- -

Une autre méthode d'itération

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-var eArr = arr.keys();
-console.log(eArr.next().value); // 0
-console.log(eArr.next().value); // 1
-console.log(eArr.next().value); // 2
-console.log(eArr.next().value); // 3
-console.log(eArr.next().value); // 4
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.keys', '%TypedArray%.prototype.keys()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.keys', '%TypedArray%.prototype.keys()')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.keys")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/keys/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/keys/index.md new file mode 100644 index 0000000000..647ea49a72 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/keys/index.md @@ -0,0 +1,91 @@ +--- +title: TypedArray.prototype.keys() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/keys +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/keys +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/keys +--- +
{{JSRef}}
+ +

La méthode keys() renvoie un nouvel objet Array Iterator contenant les clés pour chaque indice du tableau typé.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-keys.html")}}
+ +

Syntaxe

+ +
arr.keys()
+ +

Valeur de retour

+ +

Un nouvel objet Array Iterator.

+ +

Exemples

+ +

Parcourir un tableau avec for...of

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArray = arr.keys();
+// prérequis : le navigateur doit supporter les
+// boucles for..of et les variables dont la portée
+// est définie par let
+for (let n of eArray) {
+  console.log(n);
+}
+
+ +

Une autre méthode d'itération

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArr = arr.keys();
+console.log(eArr.next().value); // 0
+console.log(eArr.next().value); // 1
+console.log(eArr.next().value); // 2
+console.log(eArr.next().value); // 3
+console.log(eArr.next().value); // 4
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.keys', '%TypedArray%.prototype.keys()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.keys', '%TypedArray%.prototype.keys()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.keys")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.html deleted file mode 100644 index 382e254d04..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: TypedArray.prototype.lastIndexOf() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/lastIndexOf ---- -
{{JSRef}}
- -

La méthode lastIndexOf() renvoie le dernier indice (le plus grand) pour lequel un élément donné est trouvé. Si l'élément cherché n'est pas trouvé, la valeur de retour sera -1. Le tableau typé est parcouru dans l'ordre des indices décroissants (de la fin vers le début) à partir de indexDépart. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.lastIndexOf()")}}. Dans le reste de l'article, TypedArray correspond à l'un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-lastindexof.html")}}
- -

Syntaxe

- -
typedarray.lastIndexOf(élémentRecherché[, indiceDépart = typedarray.length])
- -

Paramètres

- -
-
élémentRecherché
-
L'élément qu'on souhaite situer dans le tableau.
-
indiceDépart
-
Paramètre optionnel qui représente l'indice à partir duquel parcourir le tableau dans le sens inverse. La valeur par défaut correspond à la longueur du tableau (c'est-à-dire que tout le tableau sera parcouru). Si l'indice est supérieur ou égal à la longueur du tableau typé, tout le tableau typé sera parcouru. Si la valeur est négative, le parcours commencera à length+indiceDépart (le sens de parcours ne change pas). Si l'indice calculé est négatif, la valeur de retour sera -1 et le tableau ne sera pas parcouru.
-
- -

Valeur de retour

- -

Le dernier indice du tableau typé pour lequel l'élément a été trouvé ou -1 s'il n'a pas été trouvé.

- -

Description

- -

lastIndexOf compare élémentRecherché avec les éléments du tableau typé en utilisant l'égalité stricte (celle utilisée par l'opérateur ===).

- -

Exemples

- -
var uint8 = new Uint8Array([2, 5, 9, 2]);
-uint8.lastIndexOf(2);     // 3
-uint8.lastIndexOf(7);     // -1
-uint8.lastIndexOf(2, 3);  // 3
-uint8.lastIndexOf(2, 2);  // 0
-uint8.lastIndexOf(2, -2); // 0
-uint8.lastIndexOf(2, -1); // 3
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.lastindexof', 'TypedArray.prototype.lastIndexOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.lastindexof', 'TypedArray.prototype.lastIndexOf')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.lastIndexOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.md new file mode 100644 index 0000000000..382e254d04 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/lastindexof/index.md @@ -0,0 +1,84 @@ +--- +title: TypedArray.prototype.lastIndexOf() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/lastIndexOf +--- +
{{JSRef}}
+ +

La méthode lastIndexOf() renvoie le dernier indice (le plus grand) pour lequel un élément donné est trouvé. Si l'élément cherché n'est pas trouvé, la valeur de retour sera -1. Le tableau typé est parcouru dans l'ordre des indices décroissants (de la fin vers le début) à partir de indexDépart. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.lastIndexOf()")}}. Dans le reste de l'article, TypedArray correspond à l'un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-lastindexof.html")}}
+ +

Syntaxe

+ +
typedarray.lastIndexOf(élémentRecherché[, indiceDépart = typedarray.length])
+ +

Paramètres

+ +
+
élémentRecherché
+
L'élément qu'on souhaite situer dans le tableau.
+
indiceDépart
+
Paramètre optionnel qui représente l'indice à partir duquel parcourir le tableau dans le sens inverse. La valeur par défaut correspond à la longueur du tableau (c'est-à-dire que tout le tableau sera parcouru). Si l'indice est supérieur ou égal à la longueur du tableau typé, tout le tableau typé sera parcouru. Si la valeur est négative, le parcours commencera à length+indiceDépart (le sens de parcours ne change pas). Si l'indice calculé est négatif, la valeur de retour sera -1 et le tableau ne sera pas parcouru.
+
+ +

Valeur de retour

+ +

Le dernier indice du tableau typé pour lequel l'élément a été trouvé ou -1 s'il n'a pas été trouvé.

+ +

Description

+ +

lastIndexOf compare élémentRecherché avec les éléments du tableau typé en utilisant l'égalité stricte (celle utilisée par l'opérateur ===).

+ +

Exemples

+ +
var uint8 = new Uint8Array([2, 5, 9, 2]);
+uint8.lastIndexOf(2);     // 3
+uint8.lastIndexOf(7);     // -1
+uint8.lastIndexOf(2, 3);  // 3
+uint8.lastIndexOf(2, 2);  // 0
+uint8.lastIndexOf(2, -2); // 0
+uint8.lastIndexOf(2, -1); // 3
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.lastindexof', 'TypedArray.prototype.lastIndexOf')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.lastindexof', 'TypedArray.prototype.lastIndexOf')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.lastIndexOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/length/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/length/index.html deleted file mode 100644 index c7e8b1772d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/length/index.html +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: TypedArray.prototype.length -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/length -tags: - - JavaScript - - Propriété - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/length -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/length ---- -
{{JSRef}}
- -

La propriété length est un accesseur qui permet de représenter la longueur, en nombre d'éléments, d'un tableau typé.

- -
{{EmbedInteractiveExample("pages/js/typedarray-length.html")}}
- -

Syntaxe

- -
typedarray.length
- -

Description

- -

La propriété length est un accesseur dont le mutateur correspondant vaut undefined, ce qui signifie qu'elle n'est accessible qu'en lecture. La valeur de la propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. Si le TypedArray n'utilise pas de byteOffset ou de length, le résultat correspondra à la longueur du {{jsxref("ArrayBuffer")}} correspondant. TypedArray est l'un des objets TypedArray.

- -

Exemples

- -
var tampon = new ArrayBuffer(8);
-
-var uint8 = new Uint8Array(tampon);
-uint8.length; // 8 (correspond à la longueur du tampon/buffer)
-
-var uint8 = new Uint8Array(tampon, 1, 5);
-uint8.length; // 5 (correspond à la longueur définie lors de la construction)
-
-var uint8 = new Uint8Array(tampon, 2);
-uint8.length; // 6 (correspond à la longueur en prenant en compte le décalage utilisé)
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.length', 'TypedArray.prototype.length')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.length', 'TypedArray.prototype.length')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.length")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/length/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/length/index.md new file mode 100644 index 0000000000..c7e8b1772d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/length/index.md @@ -0,0 +1,72 @@ +--- +title: TypedArray.prototype.length +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/length +tags: + - JavaScript + - Propriété + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/length +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/length +--- +
{{JSRef}}
+ +

La propriété length est un accesseur qui permet de représenter la longueur, en nombre d'éléments, d'un tableau typé.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-length.html")}}
+ +

Syntaxe

+ +
typedarray.length
+ +

Description

+ +

La propriété length est un accesseur dont le mutateur correspondant vaut undefined, ce qui signifie qu'elle n'est accessible qu'en lecture. La valeur de la propriété est déterminée lors de la construction du TypedArray et ne peut pas être modifiée. Si le TypedArray n'utilise pas de byteOffset ou de length, le résultat correspondra à la longueur du {{jsxref("ArrayBuffer")}} correspondant. TypedArray est l'un des objets TypedArray.

+ +

Exemples

+ +
var tampon = new ArrayBuffer(8);
+
+var uint8 = new Uint8Array(tampon);
+uint8.length; // 8 (correspond à la longueur du tampon/buffer)
+
+var uint8 = new Uint8Array(tampon, 1, 5);
+uint8.length; // 5 (correspond à la longueur définie lors de la construction)
+
+var uint8 = new Uint8Array(tampon, 2);
+uint8.length; // 6 (correspond à la longueur en prenant en compte le décalage utilisé)
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES6', '#sec-get-%typedarray%.prototype.length', 'TypedArray.prototype.length')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-get-%typedarray%.prototype.length', 'TypedArray.prototype.length')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.length")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/map/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/map/index.html deleted file mode 100644 index 0819de5af5..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/map/index.html +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: TypedArray.prototype.map() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/map -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/map -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/map ---- -
{{JSRef}}
- -

La méthode map() crée un nouveau tableau typé dont les éléments sont les images des éléments du tableau typé courant par une fonction donnée. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.map()")}}. TypedArray est utilisé ici de façon générique pour représenter l'un des types de tableaux typés possibles.

- -
{{EmbedInteractiveExample("pages/js/typedarray-map.html")}}
- -

Syntaxe

- -
typedarray.map(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction qui renvoie l'élément à placer dans le nouveau tableau typé. Cette fonction utilise trois arguments : -
-
valeurCourante
-
La valeur de l'élément du tableau typé courant, celui traité par la fonction.
-
indice
-
L'indice de l'élément du tableau typé en cours de traitement.
-
tableauTypé
-
Le tableau typé sur lequel map() a été appelée.
-
-
-
thisArg
-
Paramètre optionnel. La valeur à utiliser pour this lors de l'appel à callback.
-
- -

Valeur de retour

- -

Un nouveau tableau typé.

- -

Description

- -

La méthode map() appelle la fonction callback() passée en argument une fois pour chaque élément du tableau typé pour construire un nouveau tableau à partir des résultats de la fonction. Les appels à callback sont effectués dans l'ordre du tableau typé. callback() n'est appelée que pour les éléments du tableaux qui ont une valeur, elle n'est pas appelée pour les éléments qui sont indéfinis ou qui ont été supprimés.

- -

callback() est appelée avec trois arguments : la valeur de l'élément, l'indice de cet élément et enfin le tableau typé courant.

- -

Si un paramètre thisArg est fourni pour map(), il sera passé à callback pour les différents appels et servira de valeur this. Par défaut, la valeur {{jsxref("undefined")}} sera passée à la fonction pour la valeur this. Par ailleurs, la valeur de this accessible depuis la fonction callback est déterminée selon les règles usuelles déterminant la valeur this au sein d'une fonction.

- -

map() ne modifie pas le tableau typé sur lequel elle a été appelée (indirectement, c'est la fonction callback qui pourra éventuellement modifier le tableau).

- -

La liste des éléments parcourus par map() est définie avant la première invocation de la fonction callback. Les éléments qui sont ajoutés au tableau typé après le début de l'appel de map() (grâce à la fonction callback par exemple) ne seront pas visités. Si des éléments existants du tableau typé ont modifiés ou supprimés, la valeur fournie à la fonction callback sera leur valeur au moment où map() les visite - les éléments supprimés ne seront pas traités par la fonction.

- -

Exemples

- -

Obtenir un tableau typé des racines carrées des éléments d'un premier tableau typé

- -

Dans l'exemple suivant, on crée un nouveau tableau typé dont les éléments seront les racines carrées respectives des éléments d'un tableau typé existant.

- -
var nombres = new Uint8Array([1, 4, 9]);
-var racines = nombres.map(Math.sqrt);
-// racines vaut désormais Uint8Array [1, 2, 3],
-// nombres vaut toujours Uint8Array [1, 4, 9]
-
- -

Utiliser map() avec une fonction qui prend un argument

- -

Ici, on illustre comment une fonction utilisant un argument peut être utilisée avec map(). Cet argument recevra automatiquement la valeur de chaque élément du tableau typé au fur et à mesure du parcours.

- -
var nombres = new Uint8Array([1, 4, 9]);
-var doubles = nombres.map(function(num) {
-  return num * 2;
-});
-// doubles vaut désormais Uint8Array [2, 8, 18]
-// nombres vaut toujours Uint8Array [1, 4, 9]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.map', 'TypedArray.prototype.map')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.map', 'TypedArray.prototype.map')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.map")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/map/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/map/index.md new file mode 100644 index 0000000000..0819de5af5 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/map/index.md @@ -0,0 +1,114 @@ +--- +title: TypedArray.prototype.map() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/map +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/map +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/map +--- +
{{JSRef}}
+ +

La méthode map() crée un nouveau tableau typé dont les éléments sont les images des éléments du tableau typé courant par une fonction donnée. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.map()")}}. TypedArray est utilisé ici de façon générique pour représenter l'un des types de tableaux typés possibles.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-map.html")}}
+ +

Syntaxe

+ +
typedarray.map(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction qui renvoie l'élément à placer dans le nouveau tableau typé. Cette fonction utilise trois arguments : +
+
valeurCourante
+
La valeur de l'élément du tableau typé courant, celui traité par la fonction.
+
indice
+
L'indice de l'élément du tableau typé en cours de traitement.
+
tableauTypé
+
Le tableau typé sur lequel map() a été appelée.
+
+
+
thisArg
+
Paramètre optionnel. La valeur à utiliser pour this lors de l'appel à callback.
+
+ +

Valeur de retour

+ +

Un nouveau tableau typé.

+ +

Description

+ +

La méthode map() appelle la fonction callback() passée en argument une fois pour chaque élément du tableau typé pour construire un nouveau tableau à partir des résultats de la fonction. Les appels à callback sont effectués dans l'ordre du tableau typé. callback() n'est appelée que pour les éléments du tableaux qui ont une valeur, elle n'est pas appelée pour les éléments qui sont indéfinis ou qui ont été supprimés.

+ +

callback() est appelée avec trois arguments : la valeur de l'élément, l'indice de cet élément et enfin le tableau typé courant.

+ +

Si un paramètre thisArg est fourni pour map(), il sera passé à callback pour les différents appels et servira de valeur this. Par défaut, la valeur {{jsxref("undefined")}} sera passée à la fonction pour la valeur this. Par ailleurs, la valeur de this accessible depuis la fonction callback est déterminée selon les règles usuelles déterminant la valeur this au sein d'une fonction.

+ +

map() ne modifie pas le tableau typé sur lequel elle a été appelée (indirectement, c'est la fonction callback qui pourra éventuellement modifier le tableau).

+ +

La liste des éléments parcourus par map() est définie avant la première invocation de la fonction callback. Les éléments qui sont ajoutés au tableau typé après le début de l'appel de map() (grâce à la fonction callback par exemple) ne seront pas visités. Si des éléments existants du tableau typé ont modifiés ou supprimés, la valeur fournie à la fonction callback sera leur valeur au moment où map() les visite - les éléments supprimés ne seront pas traités par la fonction.

+ +

Exemples

+ +

Obtenir un tableau typé des racines carrées des éléments d'un premier tableau typé

+ +

Dans l'exemple suivant, on crée un nouveau tableau typé dont les éléments seront les racines carrées respectives des éléments d'un tableau typé existant.

+ +
var nombres = new Uint8Array([1, 4, 9]);
+var racines = nombres.map(Math.sqrt);
+// racines vaut désormais Uint8Array [1, 2, 3],
+// nombres vaut toujours Uint8Array [1, 4, 9]
+
+ +

Utiliser map() avec une fonction qui prend un argument

+ +

Ici, on illustre comment une fonction utilisant un argument peut être utilisée avec map(). Cet argument recevra automatiquement la valeur de chaque élément du tableau typé au fur et à mesure du parcours.

+ +
var nombres = new Uint8Array([1, 4, 9]);
+var doubles = nombres.map(function(num) {
+  return num * 2;
+});
+// doubles vaut désormais Uint8Array [2, 8, 18]
+// nombres vaut toujours Uint8Array [1, 4, 9]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.map', 'TypedArray.prototype.map')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.map', 'TypedArray.prototype.map')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.map")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/name/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/name/index.html deleted file mode 100644 index 6c52d94874..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/name/index.html +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: TypedArray.name -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/name -tags: - - JavaScript - - Propriété - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/name -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/name ---- -
{{JSRef}}
- -

La propriété TypedArray.name est une chaîne de caractères représentant le nom du constructeur du tableau typé.

- -
{{EmbedInteractiveExample("pages/js/typedarray-name.html")}}
- - - -
{{js_property_attributes(0,0,0)}}
- -

Syntaxe

- -
TypedArray.name;
- -

Description

- -

Les objets TypedArray varient en fonction du nombre d'octets correspondant pour chaque élément du tableau et de la façon dont les octets sont interprétés. La propriété name permet de décrire le type de données du tableau. La première partie du nom peut être Int pour les tableaux d'entiers (Integer) ou Uint pour les tableaux d'entiers non signés (Unsigned Integer) ou Float pour les nombres décimaux (floating). La deuxième partie correspond au nombre de bits de chaque élément. Enfin, la troisième composante du nom est Array, ClampedArray étant un cas spécifique. Voir la page {{jsxref("Uint8ClampedArray")}} pour plus d'informations sur ce tableau typé.

- -

Exemples

- -
Int8Array.name;         // "Int8Array"
-Uint8Array.name;        // "Uint8Array"
-Uint8ClampedArray.name; // "Uint8ClampedArray"
-Int16Array.name;        // "Int16Array"
-Uint16Array.name;       // "Uint16Array"
-Int32Array.name;        // "Int32Array"
-Uint32Array.name;       // "Uint32Array"
-Float32Array.name;      // "Float32Array"
-Float64Array.name;      // "Float64Array"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-properties-of-the-typedarray-constructors', 'TypedArray.name')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-properties-of-the-typedarray-constructors', 'TypedArray.name')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.name")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/name/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/name/index.md new file mode 100644 index 0000000000..6c52d94874 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/name/index.md @@ -0,0 +1,74 @@ +--- +title: TypedArray.name +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/name +tags: + - JavaScript + - Propriété + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/name +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/name +--- +
{{JSRef}}
+ +

La propriété TypedArray.name est une chaîne de caractères représentant le nom du constructeur du tableau typé.

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

Syntaxe

+ +
TypedArray.name;
+ +

Description

+ +

Les objets TypedArray varient en fonction du nombre d'octets correspondant pour chaque élément du tableau et de la façon dont les octets sont interprétés. La propriété name permet de décrire le type de données du tableau. La première partie du nom peut être Int pour les tableaux d'entiers (Integer) ou Uint pour les tableaux d'entiers non signés (Unsigned Integer) ou Float pour les nombres décimaux (floating). La deuxième partie correspond au nombre de bits de chaque élément. Enfin, la troisième composante du nom est Array, ClampedArray étant un cas spécifique. Voir la page {{jsxref("Uint8ClampedArray")}} pour plus d'informations sur ce tableau typé.

+ +

Exemples

+ +
Int8Array.name;         // "Int8Array"
+Uint8Array.name;        // "Uint8Array"
+Uint8ClampedArray.name; // "Uint8ClampedArray"
+Int16Array.name;        // "Int16Array"
+Uint16Array.name;       // "Uint16Array"
+Int32Array.name;        // "Int32Array"
+Uint32Array.name;       // "Uint32Array"
+Float32Array.name;      // "Float32Array"
+Float64Array.name;      // "Float64Array"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-properties-of-the-typedarray-constructors', 'TypedArray.name')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-properties-of-the-typedarray-constructors', 'TypedArray.name')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.name")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/of/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/of/index.html deleted file mode 100644 index b03ce593e4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/of/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: TypedArray.of() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/of -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/of -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/of ---- -
{{JSRef}}
- -

La méthode TypedArray.of() crée un nouvel objet {{jsxref("TypedArray", "TypedArray", "#Les_objets_TypedArray")}} à partir d'un nombre variable d'arguments. Cette méthode est similaire à {{jsxref("Array.of()")}}.

- -

Syntaxe

- -
TypedArray.of(élément0[, élément1[, ...[, élémentN]]])
-
-où TypedArray est l'un de :
-
-Int8Array
-Uint8Array
-Uint8ClampedArray
-Int16Array
-Uint16Array
-Int32Array
-Uint32Array
-Float32Array
-Float64Array
-BigInt64Array
-BigUint64Array
- -

Paramètres

- -
-
élémentN
-
Les éléments avec lesquels on souhaite construire le nouveau tableau typé.
-
- -

Valeur de retour

- -

Une nouvelle instance de {{jsxref("TypedArray")}}.

- -

Description

- -

Il existe de légères différences entre {{jsxref("Array.of()")}} et TypedArray.of() :

- - - -

Exemples

- -
Uint8Array.of(1);            // Uint8Array [ 1 ]
-Int8Array.of("1", "2", "3"); // Int8Array [ 1, 2, 3 ]
-Float32Array.of(1, 2, 3);    // Float32Array [ 1, 2, 3 ]
-Int16Array.of(undefined);    // Int16Array [ 0 ]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.of', '%TypedArray%.of')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-%typedarray%.of', '%TypedArray%.of')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.of")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/of/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/of/index.md new file mode 100644 index 0000000000..b03ce593e4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/of/index.md @@ -0,0 +1,96 @@ +--- +title: TypedArray.of() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/of +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/of +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/of +--- +
{{JSRef}}
+ +

La méthode TypedArray.of() crée un nouvel objet {{jsxref("TypedArray", "TypedArray", "#Les_objets_TypedArray")}} à partir d'un nombre variable d'arguments. Cette méthode est similaire à {{jsxref("Array.of()")}}.

+ +

Syntaxe

+ +
TypedArray.of(élément0[, élément1[, ...[, élémentN]]])
+
+où TypedArray est l'un de :
+
+Int8Array
+Uint8Array
+Uint8ClampedArray
+Int16Array
+Uint16Array
+Int32Array
+Uint32Array
+Float32Array
+Float64Array
+BigInt64Array
+BigUint64Array
+ +

Paramètres

+ +
+
élémentN
+
Les éléments avec lesquels on souhaite construire le nouveau tableau typé.
+
+ +

Valeur de retour

+ +

Une nouvelle instance de {{jsxref("TypedArray")}}.

+ +

Description

+ +

Il existe de légères différences entre {{jsxref("Array.of()")}} et TypedArray.of() :

+ + + +

Exemples

+ +
Uint8Array.of(1);            // Uint8Array [ 1 ]
+Int8Array.of("1", "2", "3"); // Int8Array [ 1, 2, 3 ]
+Float32Array.of(1, 2, 3);    // Float32Array [ 1, 2, 3 ]
+Int16Array.of(undefined);    // Int16Array [ 0 ]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.of', '%TypedArray%.of')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-%typedarray%.of', '%TypedArray%.of')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.of")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.html deleted file mode 100644 index ef3e79f68f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: TypedArray.prototype.reduce() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reduce -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reduce -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/reduce ---- -
{{JSRef}}
- -

La méthode reduce() applique une fonction sur un accumulateur et chaque valeur du tableau typé (de la gauche vers la droite) afin de réduire le tableau en une seule valeur. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.reduce()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-reduce.html")}}
- -

Syntaxe

- -
typedarray.reduce(callback[, valeurInitiale])
- -

Paramètres

- -
-
callback
-
La fonction à exécuter sur chaque valeur du tableau typé. Elle utilise quatre arguments : -
-
valeurPrécédente
-
La valeur renvoyée précédemment par l'appel précédent à callback. Dans le cadre du premier élément, ce sera valeurInitiale si ce paramètre est fourni (voir ci-après).
-
valeurCourante
-
L'élément du tableau typé en cours de traitement
-
index
-
L'indice de l'élément du tableau typé en cours de traitement.
-
array
-
Le tableau typé pour lequel reduce a été appelée.
-
-
-
valeurInitiale
-
Paramètre optionnel qui correspond à l'objet à utiliser en tant que premier argument pour le premier appel à callback.
-
- -

Valeur de retour

- -

La valeur obtenue à partir de la réduction du tableau typé.

- -

Description

- -

reduce exécute la fonction callback une fois pour chaque élément présent dans le tableau typé (les éléments vides ou supprimés ne sont pas traités). La fonction callback utilise quatre arguments : la valeur initiale ou la valeur précédemment calculée, la valeur de l'élément courant, l'indice de l'élément courant et le tableau typé qui est parcouru.

- -

Lors du premier appel à la fonction callback, valeurPrécédente et valeurCourante peuvent être un ou deux valeurs différentes. Si valeurInitiale est fournie, valeurPrécédente sera alors égale à valeurInitiale et valeurCourante sera égale à la première valeur du tableau. Si le paramètre valeurInitiale n'est pas utilisé, valeurPrécédente sera égale au premier élément du tableau typé et valeurCourante sera égale au second élément.

- -

Si le tableau typé est vide et que le paramètre valeurInitiale n'a pas été fourni, une exception {{jsxref("TypeError")}} sera levée. SI le tableau typé ne possède qu'un seul élément et que valeurInitiale n'a pas été fourni (ou que valeurInitiale a été utilisée mais que le tableau typé est vide), la valeur unique sera renvoyée et callback ne sera pas appelée.

- -

Exemples

- -
var total = new Uint8Array([0, 1, 2, 3]).reduce(function(a, b) {
-  return a + b;
-});
-// total == 6
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype.reduce', '%TypedArray%.prototype.reduce')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reduce', '%TypedArray%.prototype.reduce')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.reduce")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.md new file mode 100644 index 0000000000..ef3e79f68f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/reduce/index.md @@ -0,0 +1,95 @@ +--- +title: TypedArray.prototype.reduce() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reduce +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reduce +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/reduce +--- +
{{JSRef}}
+ +

La méthode reduce() applique une fonction sur un accumulateur et chaque valeur du tableau typé (de la gauche vers la droite) afin de réduire le tableau en une seule valeur. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.reduce()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-reduce.html")}}
+ +

Syntaxe

+ +
typedarray.reduce(callback[, valeurInitiale])
+ +

Paramètres

+ +
+
callback
+
La fonction à exécuter sur chaque valeur du tableau typé. Elle utilise quatre arguments : +
+
valeurPrécédente
+
La valeur renvoyée précédemment par l'appel précédent à callback. Dans le cadre du premier élément, ce sera valeurInitiale si ce paramètre est fourni (voir ci-après).
+
valeurCourante
+
L'élément du tableau typé en cours de traitement
+
index
+
L'indice de l'élément du tableau typé en cours de traitement.
+
array
+
Le tableau typé pour lequel reduce a été appelée.
+
+
+
valeurInitiale
+
Paramètre optionnel qui correspond à l'objet à utiliser en tant que premier argument pour le premier appel à callback.
+
+ +

Valeur de retour

+ +

La valeur obtenue à partir de la réduction du tableau typé.

+ +

Description

+ +

reduce exécute la fonction callback une fois pour chaque élément présent dans le tableau typé (les éléments vides ou supprimés ne sont pas traités). La fonction callback utilise quatre arguments : la valeur initiale ou la valeur précédemment calculée, la valeur de l'élément courant, l'indice de l'élément courant et le tableau typé qui est parcouru.

+ +

Lors du premier appel à la fonction callback, valeurPrécédente et valeurCourante peuvent être un ou deux valeurs différentes. Si valeurInitiale est fournie, valeurPrécédente sera alors égale à valeurInitiale et valeurCourante sera égale à la première valeur du tableau. Si le paramètre valeurInitiale n'est pas utilisé, valeurPrécédente sera égale au premier élément du tableau typé et valeurCourante sera égale au second élément.

+ +

Si le tableau typé est vide et que le paramètre valeurInitiale n'a pas été fourni, une exception {{jsxref("TypeError")}} sera levée. SI le tableau typé ne possède qu'un seul élément et que valeurInitiale n'a pas été fourni (ou que valeurInitiale a été utilisée mais que le tableau typé est vide), la valeur unique sera renvoyée et callback ne sera pas appelée.

+ +

Exemples

+ +
var total = new Uint8Array([0, 1, 2, 3]).reduce(function(a, b) {
+  return a + b;
+});
+// total == 6
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype.reduce', '%TypedArray%.prototype.reduce')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reduce', '%TypedArray%.prototype.reduce')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.reduce")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.html deleted file mode 100644 index 13df61f9bd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: TypedArray.prototype.reduceRight() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/reduceRight ---- -
{{JSRef}}
- -

La méthode reduceRight() applique une fonction sur un accumulateur et chaque valeur du tableau typé (de la droite vers la gauche) afin de réduire le tableau en une seule valeur. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.reduceRight()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

- -

Syntaxe

- -
typedarray.reduceRight(callback[, valeurInitiale])
- -

Paramètres

- -
-
callback
-
La fonction à exécuter sur chaque valeur du tableau typé. Elle utilise quatre arguments : -
-
valeurPrécédente
-
La valeur renvoyée précédemment par l'appel précédent à callback. Dans le cadre du premier élément, ce sera valeurInitiale si ce paramètre est fourni (voir ci-après).
-
valeurCourante
-
L'élément du tableau typé en cours de traitement
-
index
-
L'indice de l'élément du tableau typé en cours de traitement.
-
array
-
Le tableau typé pour lequel reduceRight a été appelée.
-
-
-
valeurInitiale
-
Paramètre optionnel qui correspond à l'objet à utiliser en tant que premier argument pour le premier appel à callback.
-
- -

Valeur de retour

- -

La valeur obtenue à partir de la réduction du tableau typé.

- -

Description

- -

La méthode reduceRight exécute la fonction callback une fois pour chaque élément présent dans le tableau typé (les éléments vides ou supprimés ne sont pas traités). La fonction callback utilise quatre arguments : la valeur initiale ou la valeur précédemment calculée, la valeur de l'élément courant, l'indice de l'élément courant et le tableau typé qui est parcouru.

- -

L'appel à reduceRight utilisant la fonction callback ressemble à :

- -
typedarray.reduceRight(function(valeurPrécédente, valeurCourante, index, typedarray) {
-  // ...
-});
- -

Lors du premier appel à la fonction callback, valeurPrécédente et valeurCourante peuvent être un ou deux valeurs différentes. Si valeurInitiale est fournie, valeurPrécédente sera alors égale à valeurInitiale et valeurCourante sera égale à la première valeur du tableau. Si le paramètre valeurInitiale n'est pas utilisé, valeurPrécédente sera égale au premier élément du tableau typé et valeurCourante sera égale au second élément.

- -

Si le tableau typé est vide et que le paramètre valeurInitiale n'a pas été fourni, une exception {{jsxref("TypeError")}} sera levée. SI le tableau typé ne possède qu'un seul élément et que valeurInitiale n'a pas été fourni (ou que valeurInitiale a été utilisée mais que le tableau typé est vide), la valeur unique sera renvoyée et callback ne sera pas appelée.

- -

Exemples

- -
var total = new Uint8Array([0, 1, 2, 3]).reduceRight(function(a, b) {
-  return a + b;
-});
-// total == 6
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype.reduceRight', '%TypedArray%.prototype.reduceRight')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reduceRight', '%TypedArray%.prototype.reduceRight')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.reduceRight")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.md new file mode 100644 index 0000000000..13df61f9bd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/reduceright/index.md @@ -0,0 +1,99 @@ +--- +title: TypedArray.prototype.reduceRight() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/reduceRight +--- +
{{JSRef}}
+ +

La méthode reduceRight() applique une fonction sur un accumulateur et chaque valeur du tableau typé (de la droite vers la gauche) afin de réduire le tableau en une seule valeur. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.reduceRight()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

+ +

Syntaxe

+ +
typedarray.reduceRight(callback[, valeurInitiale])
+ +

Paramètres

+ +
+
callback
+
La fonction à exécuter sur chaque valeur du tableau typé. Elle utilise quatre arguments : +
+
valeurPrécédente
+
La valeur renvoyée précédemment par l'appel précédent à callback. Dans le cadre du premier élément, ce sera valeurInitiale si ce paramètre est fourni (voir ci-après).
+
valeurCourante
+
L'élément du tableau typé en cours de traitement
+
index
+
L'indice de l'élément du tableau typé en cours de traitement.
+
array
+
Le tableau typé pour lequel reduceRight a été appelée.
+
+
+
valeurInitiale
+
Paramètre optionnel qui correspond à l'objet à utiliser en tant que premier argument pour le premier appel à callback.
+
+ +

Valeur de retour

+ +

La valeur obtenue à partir de la réduction du tableau typé.

+ +

Description

+ +

La méthode reduceRight exécute la fonction callback une fois pour chaque élément présent dans le tableau typé (les éléments vides ou supprimés ne sont pas traités). La fonction callback utilise quatre arguments : la valeur initiale ou la valeur précédemment calculée, la valeur de l'élément courant, l'indice de l'élément courant et le tableau typé qui est parcouru.

+ +

L'appel à reduceRight utilisant la fonction callback ressemble à :

+ +
typedarray.reduceRight(function(valeurPrécédente, valeurCourante, index, typedarray) {
+  // ...
+});
+ +

Lors du premier appel à la fonction callback, valeurPrécédente et valeurCourante peuvent être un ou deux valeurs différentes. Si valeurInitiale est fournie, valeurPrécédente sera alors égale à valeurInitiale et valeurCourante sera égale à la première valeur du tableau. Si le paramètre valeurInitiale n'est pas utilisé, valeurPrécédente sera égale au premier élément du tableau typé et valeurCourante sera égale au second élément.

+ +

Si le tableau typé est vide et que le paramètre valeurInitiale n'a pas été fourni, une exception {{jsxref("TypeError")}} sera levée. SI le tableau typé ne possède qu'un seul élément et que valeurInitiale n'a pas été fourni (ou que valeurInitiale a été utilisée mais que le tableau typé est vide), la valeur unique sera renvoyée et callback ne sera pas appelée.

+ +

Exemples

+ +
var total = new Uint8Array([0, 1, 2, 3]).reduceRight(function(a, b) {
+  return a + b;
+});
+// total == 6
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES6', '#sec-%typedarray%.prototype.reduceRight', '%TypedArray%.prototype.reduceRight')}}{{Spec2('ES6')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reduceRight', '%TypedArray%.prototype.reduceRight')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.reduceRight")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.html deleted file mode 100644 index 66222aa510..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: TypedArray.prototype.reverse() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reverse -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reverse -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/reverse ---- -
{{JSRef}}
- -

La méthode reverse() inverse les éléments d'un tableau. Le premier élément du tableau typé devient le dernier, le dernier élément devient le premier et ainsi de suite. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.reverse()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-reverse.html")}}
- -

Syntaxe

- -
typedarray.reverse();
- -

Valeur de retour

- -

Le tableau typé dont les éléments ont été inversés.

- -

Exemples

- -
var uint8 = new Uint8Array([1, 2, 3]);
-uint8.reverse();
-
-console.log(uint8); // Uint8Array [3, 2, 1]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.reverse', 'TypedArray.prototype.reverse')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reverse', 'TypedArray.prototype.reverse')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.reverse")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.md new file mode 100644 index 0000000000..66222aa510 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/reverse/index.md @@ -0,0 +1,67 @@ +--- +title: TypedArray.prototype.reverse() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/reverse +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/reverse +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/reverse +--- +
{{JSRef}}
+ +

La méthode reverse() inverse les éléments d'un tableau. Le premier élément du tableau typé devient le dernier, le dernier élément devient le premier et ainsi de suite. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.reverse()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-reverse.html")}}
+ +

Syntaxe

+ +
typedarray.reverse();
+ +

Valeur de retour

+ +

Le tableau typé dont les éléments ont été inversés.

+ +

Exemples

+ +
var uint8 = new Uint8Array([1, 2, 3]);
+uint8.reverse();
+
+console.log(uint8); // Uint8Array [3, 2, 1]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.reverse', 'TypedArray.prototype.reverse')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.reverse', 'TypedArray.prototype.reverse')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.reverse")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/set/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/set/index.html deleted file mode 100644 index e66c8815da..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/set/index.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: TypedArray.prototype.set() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/set -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/set -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/set ---- -
{{JSRef}}
- -

La méthode set() permet d'enregistrer plusieurs valeurs dans le tableau typé à partir d'un tableau donné.

- -
{{EmbedInteractiveExample("pages/js/typedarray-set.html")}}
- -

Syntaxe

- -
typedArr.set(tableau [, décalage])
-typedArr.set(tableauTypé [, décalage])
-
- -

Paramètres

- -
-
tableau
-
Le tableau à partir duquel on copie les valeurs. Toutes les valeurs du tableau source seront copiées dans le tableau cible sauf si la longueur du tableau cible est trop courte en fonction du décalage défini et de la longueur du tableau source : dans ce cas, un exception sera renvoyée.
-
tableauTypé
-
Si le tableau source est un tableau typé, il se peut que les deux tableaux partagent le même {{jsxref("ArrayBuffer")}} ; le moteur effectuera alors une copie intelligente entre le tableau source et le tableau ciblé.
-
décalage {{optional_inline}}
-
Le décalage, exprimé en nombre d'éléments, à partir duquel copier les valeurs du tableau source dans le tableau cible. Si le paramètre n'est pas utilisé, la valeur par défaut sera 0 (ce qui correspond au cas où les éléments seront copiés au début du tableau).
-
- -

Valeur de retour

- -

{{jsxref("undefined")}}.

- -

Exceptions

- -
-
{{jsxref("RangeError")}}
-
Cette exception est renvoyée lorsque le décalage est tel que des valeurs seraient enregistrées en dehors du tableau typé.
-
- -

Exemples

- -
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 ]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée avec ECMAScript 6.
{{SpecName('ES6', '#sec-%typedarray%.prototype.set-array-offset', 'TypedArray.prototype.set')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.set-array-offset', 'TypedArray.prototype.set')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.set")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/set/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/set/index.md new file mode 100644 index 0000000000..e66c8815da --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/set/index.md @@ -0,0 +1,94 @@ +--- +title: TypedArray.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/set +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/set +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/set +--- +
{{JSRef}}
+ +

La méthode set() permet d'enregistrer plusieurs valeurs dans le tableau typé à partir d'un tableau donné.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-set.html")}}
+ +

Syntaxe

+ +
typedArr.set(tableau [, décalage])
+typedArr.set(tableauTypé [, décalage])
+
+ +

Paramètres

+ +
+
tableau
+
Le tableau à partir duquel on copie les valeurs. Toutes les valeurs du tableau source seront copiées dans le tableau cible sauf si la longueur du tableau cible est trop courte en fonction du décalage défini et de la longueur du tableau source : dans ce cas, un exception sera renvoyée.
+
tableauTypé
+
Si le tableau source est un tableau typé, il se peut que les deux tableaux partagent le même {{jsxref("ArrayBuffer")}} ; le moteur effectuera alors une copie intelligente entre le tableau source et le tableau ciblé.
+
décalage {{optional_inline}}
+
Le décalage, exprimé en nombre d'éléments, à partir duquel copier les valeurs du tableau source dans le tableau cible. Si le paramètre n'est pas utilisé, la valeur par défaut sera 0 (ce qui correspond au cas où les éléments seront copiés au début du tableau).
+
+ +

Valeur de retour

+ +

{{jsxref("undefined")}}.

+ +

Exceptions

+ +
+
{{jsxref("RangeError")}}
+
Cette exception est renvoyée lorsque le décalage est tel que des valeurs seraient enregistrées en dehors du tableau typé.
+
+ +

Exemples

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée avec ECMAScript 6.
{{SpecName('ES6', '#sec-%typedarray%.prototype.set-array-offset', 'TypedArray.prototype.set')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.set-array-offset', 'TypedArray.prototype.set')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.set")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/slice/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/slice/index.html deleted file mode 100644 index 14a77b759d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/slice/index.html +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: TypedArray.prototype.slice() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/slice -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays - - polyfill -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/slice -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/slice ---- -
{{JSRef}}
- -

La méthode slice() renvoie une copie superficielle (shallow copy) d'un fragment du tableau typé courant dans un nouveau tableau typé. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.slice()")}}. TypedArray est utilisé par la suite de façon générique pour réprésenter l'un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-slice.html")}}
- -

Syntaxe

- -
typedarray.slice([début[, fin]])
- -

Paramètres

- -
-
début {{optional_inline}}
-
L'indice (compté à partir de zéro) à partir duquel commencer le fragment. Si l'indice fourni est négatif, début indiquera le décalage par rapport à la fin de la séquence. Par exemple, slice(-2) extrait les deux derniers éléments de la séquence. Par défaut, si début n'est pas utilisé, slice() commencera à partir de l'indice 0.
-
fin {{optional_inline}}
-
L'indice (compté à partir de zéro) jusqu'auquel extraire le fragment. Le fragment obtenu n'incluera pas l'élément situé à l'indice fin. slice(1,4) extrait par exemple à partir du deuxième élément et jusqu'au quatrième (c'est-à-dire les éléments dont les indices respectifs sont 1, 2, et 3). Si l'indice utilisé est négatif, fin indiquera le décalage par rapport à la fin de la séquence. Ainsi, slice(2,-1) extraira à partir du troisième élément et jusqu'à l'avant dernier élément (compris). Par défaut, si fin n'est pas utilisé, slice() extraira les éléments jusqu'à la fin de la séquence (arr.length).
-
- -

Valeur de retour

- -

Un nouveau tableau typé qui contient les éléments extraits.

- -

Description

- -

La méthode slice() ne modifie pas le tableau typé courant, elle renvoie une copie superficielle (shallow copy) du tableau typé original.

- -

Si un nouvel élément est ajouté à l'un des deux tableaux typés, l'autre ne sera pas impacté.

- -

Exemples

- -
var uint8 = new Uint8Array([1,2,3]);
-uint8.slice(1);   // Uint8Array [ 2, 3 ]
-uint8.slice(2);   // Uint8Array [ 3 ]
-uint8.slice(-2);  // Uint8Array [ 2, 3 ]
-uint8.slice(0,1); // Uint8Array [ 1 ]
- -

Prothèse d'émulation (polyfill)

- -

Il n'existe pas d'objet global intitulé TypedArray, la prothèse doit donc uniquement être employée si nécessaire :

- -
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice
-if (!Uint8Array.prototype.slice) {
-  Object.defineProperty(Uint8Array.prototype, 'slice', {
-    value: function (begin, end){
-      return new Uint8Array(Array.prototype.slice.call(this, begin, end));
-    }
-  });
-}
-
- -

De plus cette prothèse n'est pas parfaite car elle renvoie une instance d'Array et pas de Uint8Array. Elle manque donc des propriétés normalement associées aux objets TypedArray.

- -

S'il faut également prendre en charge les moteurs JavaScript qui ne prennent pas en charge la méthode {{jsxref("Object.defineProperty")}}, mieux vaut ne pas ajouter de prothèse du tout pour TypedArray.prototype car on ne peut pas les rendre non-énumérables.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.slice', '%TypedArray%.prototype.slice')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.slice', '%TypedArray%.prototype.slice')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.slice")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/slice/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/slice/index.md new file mode 100644 index 0000000000..14a77b759d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/slice/index.md @@ -0,0 +1,101 @@ +--- +title: TypedArray.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/slice +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays + - polyfill +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/slice +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/slice +--- +
{{JSRef}}
+ +

La méthode slice() renvoie une copie superficielle (shallow copy) d'un fragment du tableau typé courant dans un nouveau tableau typé. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.slice()")}}. TypedArray est utilisé par la suite de façon générique pour réprésenter l'un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-slice.html")}}
+ +

Syntaxe

+ +
typedarray.slice([début[, fin]])
+ +

Paramètres

+ +
+
début {{optional_inline}}
+
L'indice (compté à partir de zéro) à partir duquel commencer le fragment. Si l'indice fourni est négatif, début indiquera le décalage par rapport à la fin de la séquence. Par exemple, slice(-2) extrait les deux derniers éléments de la séquence. Par défaut, si début n'est pas utilisé, slice() commencera à partir de l'indice 0.
+
fin {{optional_inline}}
+
L'indice (compté à partir de zéro) jusqu'auquel extraire le fragment. Le fragment obtenu n'incluera pas l'élément situé à l'indice fin. slice(1,4) extrait par exemple à partir du deuxième élément et jusqu'au quatrième (c'est-à-dire les éléments dont les indices respectifs sont 1, 2, et 3). Si l'indice utilisé est négatif, fin indiquera le décalage par rapport à la fin de la séquence. Ainsi, slice(2,-1) extraira à partir du troisième élément et jusqu'à l'avant dernier élément (compris). Par défaut, si fin n'est pas utilisé, slice() extraira les éléments jusqu'à la fin de la séquence (arr.length).
+
+ +

Valeur de retour

+ +

Un nouveau tableau typé qui contient les éléments extraits.

+ +

Description

+ +

La méthode slice() ne modifie pas le tableau typé courant, elle renvoie une copie superficielle (shallow copy) du tableau typé original.

+ +

Si un nouvel élément est ajouté à l'un des deux tableaux typés, l'autre ne sera pas impacté.

+ +

Exemples

+ +
var uint8 = new Uint8Array([1,2,3]);
+uint8.slice(1);   // Uint8Array [ 2, 3 ]
+uint8.slice(2);   // Uint8Array [ 3 ]
+uint8.slice(-2);  // Uint8Array [ 2, 3 ]
+uint8.slice(0,1); // Uint8Array [ 1 ]
+ +

Prothèse d'émulation (polyfill)

+ +

Il n'existe pas d'objet global intitulé TypedArray, la prothèse doit donc uniquement être employée si nécessaire :

+ +
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice
+if (!Uint8Array.prototype.slice) {
+  Object.defineProperty(Uint8Array.prototype, 'slice', {
+    value: function (begin, end){
+      return new Uint8Array(Array.prototype.slice.call(this, begin, end));
+    }
+  });
+}
+
+ +

De plus cette prothèse n'est pas parfaite car elle renvoie une instance d'Array et pas de Uint8Array. Elle manque donc des propriétés normalement associées aux objets TypedArray.

+ +

S'il faut également prendre en charge les moteurs JavaScript qui ne prennent pas en charge la méthode {{jsxref("Object.defineProperty")}}, mieux vaut ne pas ajouter de prothèse du tout pour TypedArray.prototype car on ne peut pas les rendre non-énumérables.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.slice', '%TypedArray%.prototype.slice')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.slice', '%TypedArray%.prototype.slice')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.slice")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/some/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/some/index.html deleted file mode 100644 index a0ce1c602a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/some/index.html +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: TypedArray.prototype.some() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/some -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/some -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/some ---- -
{{JSRef}}
- -

La méthode some() teste si certains éléments du tableau typé remplissent une condition décrite par la fonction de test donnée. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.some()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-some.html")}}
- -

Syntaxe

- -
typedarray.some(callback[, thisArg])
- -

Paramètres

- -
-
callback
-
La fonction à tester pour chaque élément. Elle prend trois arguments : -
-
valeurCourante
-
L'élément du tableau typé en cours de traitement.
-
index
-
L'indice de l'élément du tableau typé en cours de traitement.
-
array
-
Le tableau typé sur lequel la méthode some a été appelée.
-
-
-
thisArg
-
Paramètre optionnel, la valeur à utiliser en tant que this lors de l'exécution de callback.
-
- -

Valeur de retour

- -

true si la fonction de rappel renvoie une valeur équivalente à true pour chaque élément du tableau typé, false sinon.

- -

Description

- -

La méthode some exécute la fonction callback fournie pour chaque élément du tableau typé jusqu'à ce que callback renvoie une valeur vraie (une valeur qui vaut true lorsqu'elle est convertie en un booléen). Si un tel élément est trouvé, la méthode some renvoie immédiatement true. Dans le cas contraire, si callback renvoie une valeur fausse pour tous les éléments, la méthode some renverra false.

- -

callback est appelé avec trois arguments : la valeur de l'élément, l'indice de cet élément et le tableau qui est parcouru.

- -

Si le paramètre thisArg est utilisé, il sera passé à la fonction callback en tant que valeur this. Sinon, la valeur undefined sera utilisée comme valeur this. La valeur this définitivement prise en compte par la fonction callback est déterminée selon les règles usuelles de détermination de this.

- -

some ne modifie pas le tableau typé sur lequel elle a été appelée.

- -

Exemples

- -

Tester la valeur des éléments d'un tableau typé

- -

Dans l'exemple qui suit, on teste s'il existe au moins un élément du tableau typé qui est supérieur à 10.

- -
function supérieurÀ10(élément, index, array) {
-  return élément > 10;
-}
-new Uint8Array([2, 5, 8, 1, 4]).some(supérieurÀ10);  // false
-new Uint8Array([12, 5, 8, 1, 4]).some(supérieurÀ10); // true
-
- -

Tester la valeur des éléments avec les fonctions fléchées

- -

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour arriver au même résultat :

- -
new Uint8Array([2, 5, 8, 1, 4]).some(elem => elem > 10); // false
-new Uint8Array([12, 5, 8, 1, 4]).some(elem => elem > 10); // true
- -

Prothèse d'émulation (polyfill)

- -

Il n'existe pas d'objet global intitulé TypedArray, la prothèse doit donc uniquement être employée si nécessaire :

- -
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice
-if (!Uint8Array.prototype.some) {
-  Object.defineProperty(Uint8Array.prototype, 'some', {
-    value: Array.prototype.some
-  });
-}
-
- -

S'il faut également prendre en charge les moteurs JavaScript qui ne prennent pas en charge la méthode {{jsxref("Object.defineProperty")}}, mieux vaut ne pas ajouter de prothèse du tout pour TypedArray.prototype car on ne peut pas les rendre non-énumérables.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.some', 'TypedArray.prototype.some')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.some', 'TypedArray.prototype.some')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.some")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/some/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/some/index.md new file mode 100644 index 0000000000..a0ce1c602a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/some/index.md @@ -0,0 +1,122 @@ +--- +title: TypedArray.prototype.some() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/some +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/some +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/some +--- +
{{JSRef}}
+ +

La méthode some() teste si certains éléments du tableau typé remplissent une condition décrite par la fonction de test donnée. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.some()")}}. Dans le reste de cet article TypedArray correspond à un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-some.html")}}
+ +

Syntaxe

+ +
typedarray.some(callback[, thisArg])
+ +

Paramètres

+ +
+
callback
+
La fonction à tester pour chaque élément. Elle prend trois arguments : +
+
valeurCourante
+
L'élément du tableau typé en cours de traitement.
+
index
+
L'indice de l'élément du tableau typé en cours de traitement.
+
array
+
Le tableau typé sur lequel la méthode some a été appelée.
+
+
+
thisArg
+
Paramètre optionnel, la valeur à utiliser en tant que this lors de l'exécution de callback.
+
+ +

Valeur de retour

+ +

true si la fonction de rappel renvoie une valeur équivalente à true pour chaque élément du tableau typé, false sinon.

+ +

Description

+ +

La méthode some exécute la fonction callback fournie pour chaque élément du tableau typé jusqu'à ce que callback renvoie une valeur vraie (une valeur qui vaut true lorsqu'elle est convertie en un booléen). Si un tel élément est trouvé, la méthode some renvoie immédiatement true. Dans le cas contraire, si callback renvoie une valeur fausse pour tous les éléments, la méthode some renverra false.

+ +

callback est appelé avec trois arguments : la valeur de l'élément, l'indice de cet élément et le tableau qui est parcouru.

+ +

Si le paramètre thisArg est utilisé, il sera passé à la fonction callback en tant que valeur this. Sinon, la valeur undefined sera utilisée comme valeur this. La valeur this définitivement prise en compte par la fonction callback est déterminée selon les règles usuelles de détermination de this.

+ +

some ne modifie pas le tableau typé sur lequel elle a été appelée.

+ +

Exemples

+ +

Tester la valeur des éléments d'un tableau typé

+ +

Dans l'exemple qui suit, on teste s'il existe au moins un élément du tableau typé qui est supérieur à 10.

+ +
function supérieurÀ10(élément, index, array) {
+  return élément > 10;
+}
+new Uint8Array([2, 5, 8, 1, 4]).some(supérieurÀ10);  // false
+new Uint8Array([12, 5, 8, 1, 4]).some(supérieurÀ10); // true
+
+ +

Tester la valeur des éléments avec les fonctions fléchées

+ +

Les fonctions fléchées permettent d'utiliser une syntaxe plus concise pour arriver au même résultat :

+ +
new Uint8Array([2, 5, 8, 1, 4]).some(elem => elem > 10); // false
+new Uint8Array([12, 5, 8, 1, 4]).some(elem => elem > 10); // true
+ +

Prothèse d'émulation (polyfill)

+ +

Il n'existe pas d'objet global intitulé TypedArray, la prothèse doit donc uniquement être employée si nécessaire :

+ +
// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice
+if (!Uint8Array.prototype.some) {
+  Object.defineProperty(Uint8Array.prototype, 'some', {
+    value: Array.prototype.some
+  });
+}
+
+ +

S'il faut également prendre en charge les moteurs JavaScript qui ne prennent pas en charge la méthode {{jsxref("Object.defineProperty")}}, mieux vaut ne pas ajouter de prothèse du tout pour TypedArray.prototype car on ne peut pas les rendre non-énumérables.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.some', 'TypedArray.prototype.some')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.some', 'TypedArray.prototype.some')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.some")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/sort/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/sort/index.html deleted file mode 100644 index ed4f466418..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/sort/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: TypedArray.prototype.sort() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/sort -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/sort -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/sort ---- -
{{JSRef}}
- -

La méthode sort() permet de trier numériquement les éléments d'un tableau typé, à même ce tableau. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.sort()")}} en triant les valeurs par ordre numérique plutôt que par ordre lexicographique. Par la suite, TypedArray désigne l'un des types de tableau typé here.

- -
{{EmbedInteractiveExample("pages/js/typedarray-sort.html")}}
- -

Syntaxe

- -
typedarray.sort([fonctionComparaison])
- -

Paramètres

- -
-
fonctionComparaison {{optional_inline}}
-
Cette fonction définit l'ordre de tri à appliquer.
-
- -

Valeur de retour

- -

Le tableau typé trié.

- -

Exemples

- -

Pour plus d'exemples, voir la page sur la méthode {{jsxref("Array.prototype.sort()")}}.

- -
var nombres = new Uint8Array([40, 1, 5, 200]);
-nombres.sort();
-// Uint8Array [ 1, 5, 40, 200 ]
-// Contrairement aux tableaux classiques (Array), une fonction
-// de comparaison n'est pas nécessaire pour les nombres
-
-var nombres2 = [40, 1, 5, 200];
-nombres2.sort();
-// Les éléments d'un tableau classique sont triés comme des chaînes
-// [1, 200, 40, 5]
-
-function comparaisonNombres(a, b) {
-  return a - b;
-}
-
-nombres.sort(comparaisonNombres);
-// [ 1, 5, 40, 200 ]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.sort', 'TypedArray.prototype.sort')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.sort', 'TypedArray.prototype.sort')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.sort")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/sort/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/sort/index.md new file mode 100644 index 0000000000..ed4f466418 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/sort/index.md @@ -0,0 +1,89 @@ +--- +title: TypedArray.prototype.sort() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/sort +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/sort +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/sort +--- +
{{JSRef}}
+ +

La méthode sort() permet de trier numériquement les éléments d'un tableau typé, à même ce tableau. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.sort()")}} en triant les valeurs par ordre numérique plutôt que par ordre lexicographique. Par la suite, TypedArray désigne l'un des types de tableau typé here.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-sort.html")}}
+ +

Syntaxe

+ +
typedarray.sort([fonctionComparaison])
+ +

Paramètres

+ +
+
fonctionComparaison {{optional_inline}}
+
Cette fonction définit l'ordre de tri à appliquer.
+
+ +

Valeur de retour

+ +

Le tableau typé trié.

+ +

Exemples

+ +

Pour plus d'exemples, voir la page sur la méthode {{jsxref("Array.prototype.sort()")}}.

+ +
var nombres = new Uint8Array([40, 1, 5, 200]);
+nombres.sort();
+// Uint8Array [ 1, 5, 40, 200 ]
+// Contrairement aux tableaux classiques (Array), une fonction
+// de comparaison n'est pas nécessaire pour les nombres
+
+var nombres2 = [40, 1, 5, 200];
+nombres2.sort();
+// Les éléments d'un tableau classique sont triés comme des chaînes
+// [1, 200, 40, 5]
+
+function comparaisonNombres(a, b) {
+  return a - b;
+}
+
+nombres.sort(comparaisonNombres);
+// [ 1, 5, 40, 200 ]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.sort', 'TypedArray.prototype.sort')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.sort', 'TypedArray.prototype.sort')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.sort")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.html deleted file mode 100644 index 7e7d20243d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: TypedArray.prototype.subarray() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/subarray -tags: - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/subarray -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/subarray ---- -
{{JSRef}}
- -

La méthode subarray() permet de renvoyer un nouvel objet TypedArray basé sur le même {{jsxref("ArrayBuffer")}} et dont les éléments sont du même type que l'objet TypedArray courant. Le paramètre début est à considérer au sens large et le paramètre end est à considérer au sens strict. TypedArray est l'un des types de tableaux typés.

- -
{{EmbedInteractiveExample("pages/js/typedarray-subarray.html")}}
- -

Syntaxe

- -
typedarray.subarray([début[,fin]])
-
- -

Paramètres

- -
-
début{{optional_inline}}
-
L'élément à partir duquel commencer le nouveau tableau typé. Cet élément initial sera inclus dans le nouveau tableau (sens large). Si la valeur n'est pas définie, tout le tableau sera inclus dans la nouvelle vue.
-
fin{{optional_inline}}
-
L'élément auquel finir le nouveau tableau typé. Cet élément ne fera pas partie du nouveau tableau (sens strict). Si ce paramètre n'est pas utilisé, tous les éléments contenus à partir de début jusqu'à la fin du tableau courant seront inclus dans la nouvelle vue.
-
- -

Valeur de retour

- -

Un nouvel objet {{jsxref("TypedArray")}}.

- -

Description

- -

L'intervalle défini par début et fin est redimensionné si besoin pour être un intervalle valide en regard du tableau courant. Si la longueur du nouveau tableau est négative, elle est ramenée à zéro. Si début ou fin a une valeur négative, on prendra en compte la position à partir de la fin du tableau et non à partir du début de celui-ci.

- -

On notera que cette méthode permet de créer un nouvelle vue sur le tampon (buffer) existant, tous les changements apportés via le nouvel objet impacteront le tableau typé initial et vice versa.

- -

Exemples

- -
var buffer = new ArrayBuffer(8);
-var uint8 = new Uint8Array(buffer);
-uint8.set([1,2,3]);
-
-console.log(uint8); // Uint8Array [ 1, 2, 3, 0, 0, 0, 0, 0 ]
-
-var sub = uint8.subarray(0,4);
-
-console.log(sub);   // Uint8Array [ 1, 2, 3, 0 ]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 6.
{{SpecName('ES6', '#sec-%typedarray%.prototype.subarray', 'TypedArray.prototype.subarray')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.subarray', 'TypedArray.prototype.subarray')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.subarray")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.md new file mode 100644 index 0000000000..7e7d20243d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/subarray/index.md @@ -0,0 +1,93 @@ +--- +title: TypedArray.prototype.subarray() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/subarray +tags: + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/subarray +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/subarray +--- +
{{JSRef}}
+ +

La méthode subarray() permet de renvoyer un nouvel objet TypedArray basé sur le même {{jsxref("ArrayBuffer")}} et dont les éléments sont du même type que l'objet TypedArray courant. Le paramètre début est à considérer au sens large et le paramètre end est à considérer au sens strict. TypedArray est l'un des types de tableaux typés.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-subarray.html")}}
+ +

Syntaxe

+ +
typedarray.subarray([début[,fin]])
+
+ +

Paramètres

+ +
+
début{{optional_inline}}
+
L'élément à partir duquel commencer le nouveau tableau typé. Cet élément initial sera inclus dans le nouveau tableau (sens large). Si la valeur n'est pas définie, tout le tableau sera inclus dans la nouvelle vue.
+
fin{{optional_inline}}
+
L'élément auquel finir le nouveau tableau typé. Cet élément ne fera pas partie du nouveau tableau (sens strict). Si ce paramètre n'est pas utilisé, tous les éléments contenus à partir de début jusqu'à la fin du tableau courant seront inclus dans la nouvelle vue.
+
+ +

Valeur de retour

+ +

Un nouvel objet {{jsxref("TypedArray")}}.

+ +

Description

+ +

L'intervalle défini par début et fin est redimensionné si besoin pour être un intervalle valide en regard du tableau courant. Si la longueur du nouveau tableau est négative, elle est ramenée à zéro. Si début ou fin a une valeur négative, on prendra en compte la position à partir de la fin du tableau et non à partir du début de celui-ci.

+ +

On notera que cette méthode permet de créer un nouvelle vue sur le tampon (buffer) existant, tous les changements apportés via le nouvel objet impacteront le tableau typé initial et vice versa.

+ +

Exemples

+ +
var buffer = new ArrayBuffer(8);
+var uint8 = new Uint8Array(buffer);
+uint8.set([1,2,3]);
+
+console.log(uint8); // Uint8Array [ 1, 2, 3, 0, 0, 0, 0, 0 ]
+
+var sub = uint8.subarray(0,4);
+
+console.log(sub);   // Uint8Array [ 1, 2, 3, 0 ]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 6.
{{SpecName('ES6', '#sec-%typedarray%.prototype.subarray', 'TypedArray.prototype.subarray')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.subarray', 'TypedArray.prototype.subarray')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.subarray")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html deleted file mode 100644 index b7eab6f284..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: TypedArray.prototype.toLocaleString() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/toLocaleString ---- -
{{JSRef}}
- -

La méthode toLocaleString() renvoie une chaîne de caractères uqi représente les éléments du tableau typé. Les éléments sont convertis en chaînes de caractères et séparés par une chaîne de caractères qui est fonction de la locale (la virgule « , » par exemple). Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.toLocaleString()")}} et vu que les éléments d'un tableau typé sont des nombres, elle utilise le même algorithme que {{jsxref("Number.prototype.toLocaleString()")}} pour chaque élément. Dans la suite de cet article, TypedArray fait référence à l'un des types de tableau typé listés ici.

- -

Syntaxe

- -
typedarray.toLocaleString([locales [, options]]);
- -

Paramètres

- -
{{page('/fr/docs/Web/JavaScript/Référence/Objets_globaux/NumberFormat', 'Paramètres')}}
- -

Valeur de retour

- -

Une chaîne de caractères qui représente les éléments du tableau typé.

- -

Exemples

- -
var uint = new Uint32Array([2000, 500, 8123, 12, 4212]);
-
-uint.toLocaleString();
-// Si on utilise la locale de-DE
-// "2.000,500,8.123,12,4.212"
-
-uint.toLocaleString("en-US");
-// "2,000,500,8,123,12,4,212"
-
-uint.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
-// "¥2,000,¥500,¥8,123,¥12,¥4,212"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.tolocalestring', 'TypedArray.prototype.toLocaleString')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.tolocalestring', 'TypedArray.prototype.toLocaleString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.toLocaleString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.md new file mode 100644 index 0000000000..b7eab6f284 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/tolocalestring/index.md @@ -0,0 +1,77 @@ +--- +title: TypedArray.prototype.toLocaleString() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/toLocaleString +--- +
{{JSRef}}
+ +

La méthode toLocaleString() renvoie une chaîne de caractères uqi représente les éléments du tableau typé. Les éléments sont convertis en chaînes de caractères et séparés par une chaîne de caractères qui est fonction de la locale (la virgule « , » par exemple). Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.toLocaleString()")}} et vu que les éléments d'un tableau typé sont des nombres, elle utilise le même algorithme que {{jsxref("Number.prototype.toLocaleString()")}} pour chaque élément. Dans la suite de cet article, TypedArray fait référence à l'un des types de tableau typé listés ici.

+ +

Syntaxe

+ +
typedarray.toLocaleString([locales [, options]]);
+ +

Paramètres

+ +
{{page('/fr/docs/Web/JavaScript/Référence/Objets_globaux/NumberFormat', 'Paramètres')}}
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente les éléments du tableau typé.

+ +

Exemples

+ +
var uint = new Uint32Array([2000, 500, 8123, 12, 4212]);
+
+uint.toLocaleString();
+// Si on utilise la locale de-DE
+// "2.000,500,8.123,12,4.212"
+
+uint.toLocaleString("en-US");
+// "2,000,500,8,123,12,4,212"
+
+uint.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
+// "¥2,000,¥500,¥8,123,¥12,¥4,212"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.tolocalestring', 'TypedArray.prototype.toLocaleString')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.tolocalestring', 'TypedArray.prototype.toLocaleString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.toLocaleString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.html deleted file mode 100644 index 860990180c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: TypedArray.prototype.toString() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/toString -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/toString -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/toString ---- -
{{JSRef}}
- -

La méthode toString() renvoie une chaîne de caractères qui représente le tableau typé et ses éléments. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.toString()")}}. Dans la suite de cet article, TypedArray fait référence à l'un des types de tableau typé listés ici.

- -
{{EmbedInteractiveExample("pages/js/typedarray-tostring.html")}}
- -

Syntaxe

- -
typedarray.toString()
- -

Valeur de retour

- -

Une chaîne de caractères qui représente les éléments du tableau typé.

- -

Description

- -

Les objets {{jsxref("TypedArray")}} surchargent la méthode toString de {{jsxref("Object")}}. Pour les objets TypedArray, la méthode toString fusionne le tableau et renovoie une chaîne de caractères contenant les éléments du tableau, chacun séparés par une virgule. Par exemple :

- -
var numbers = new Uint8Array([2, 5, 8, 1, 4])
-numbers.toString(); // "2,5,8,1,4"
-
- -

JavaScript appelle automatiquement la méthode toString() lorsqu'un tableau typé doit être manipulé sous une forme textuelle (par exemple lorsqu'il est utilisé avec une chaîne de caractères dans une concaténation).

- -

Compatibilité

- -

Si un navigateur ne prend pas encore en charge la méthode TypedArray.prototype.toString(), le moteur JavaScript utilisera la méthode toString rattachée à {{jsxref("Object")}} :

- -
var numbers = new Uint8Array([2, 5, 8, 1, 4])
-numbers.toString(); // "[object Uint8Array]"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.tostring', 'TypedArray.prototype.toString')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.toString")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.md new file mode 100644 index 0000000000..860990180c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/tostring/index.md @@ -0,0 +1,76 @@ +--- +title: TypedArray.prototype.toString() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/toString +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/toString +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/toString +--- +
{{JSRef}}
+ +

La méthode toString() renvoie une chaîne de caractères qui représente le tableau typé et ses éléments. Cette méthode utilise le même algorithme que {{jsxref("Array.prototype.toString()")}}. Dans la suite de cet article, TypedArray fait référence à l'un des types de tableau typé listés ici.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-tostring.html")}}
+ +

Syntaxe

+ +
typedarray.toString()
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente les éléments du tableau typé.

+ +

Description

+ +

Les objets {{jsxref("TypedArray")}} surchargent la méthode toString de {{jsxref("Object")}}. Pour les objets TypedArray, la méthode toString fusionne le tableau et renovoie une chaîne de caractères contenant les éléments du tableau, chacun séparés par une virgule. Par exemple :

+ +
var numbers = new Uint8Array([2, 5, 8, 1, 4])
+numbers.toString(); // "2,5,8,1,4"
+
+ +

JavaScript appelle automatiquement la méthode toString() lorsqu'un tableau typé doit être manipulé sous une forme textuelle (par exemple lorsqu'il est utilisé avec une chaîne de caractères dans une concaténation).

+ +

Compatibilité

+ +

Si un navigateur ne prend pas encore en charge la méthode TypedArray.prototype.toString(), le moteur JavaScript utilisera la méthode toString rattachée à {{jsxref("Object")}} :

+ +
var numbers = new Uint8Array([2, 5, 8, 1, 4])
+numbers.toString(); // "[object Uint8Array]"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.tostring', 'TypedArray.prototype.toString')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.tostring', 'Array.prototype.toString')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.toString")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/values/index.html b/files/fr/web/javascript/reference/global_objects/typedarray/values/index.html deleted file mode 100644 index 202b7278a6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typedarray/values/index.html +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: TypedArray.prototype.values() -slug: Web/JavaScript/Reference/Global_Objects/TypedArray/values -tags: - - ECMAScript 2015 - - Iterator - - JavaScript - - Méthode - - Prototype - - Reference - - TypedArray - - TypedArrays -translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/values -original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/values ---- -
{{JSRef}}
- -

La méthode values() renvoie un nouvel objet Array Iterator qui contient les valeurs pour chaque indice du tableau.

- -
{{EmbedInteractiveExample("pages/js/typedarray-values.html")}}
- -

Syntaxe

- -
typedArr.values()
- -

Valeur de retour

- -

Un nouvel objet Array Iterator.

- -

Exemples

- -

Parcourir le tableau typé avec for...of

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-var eArray = arr.values();
-// prérequis : le navigateur doit supporter les boucles
-// for..of et les variables dont la portée est définie
-// par let
-for (let n of eArray) {
-  console.log(n);
-}
-
- -

Une autre méthode d'itération

- -
var arr = new Uint8Array([10, 20, 30, 40, 50]);
-var eArr = arr.values();
-console.log(eArr.next().value); // 10
-console.log(eArr.next().value); // 20
-console.log(eArr.next().value); // 30
-console.log(eArr.next().value); // 40
-console.log(eArr.next().value); // 50
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.values', '%TypedArray%.prototype.values()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.values', '%TypedArray%.prototype.values()')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.TypedArray.values")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typedarray/values/index.md b/files/fr/web/javascript/reference/global_objects/typedarray/values/index.md new file mode 100644 index 0000000000..202b7278a6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typedarray/values/index.md @@ -0,0 +1,89 @@ +--- +title: TypedArray.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/TypedArray/values +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Méthode + - Prototype + - Reference + - TypedArray + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/values +original_slug: Web/JavaScript/Reference/Objets_globaux/TypedArray/values +--- +
{{JSRef}}
+ +

La méthode values() renvoie un nouvel objet Array Iterator qui contient les valeurs pour chaque indice du tableau.

+ +
{{EmbedInteractiveExample("pages/js/typedarray-values.html")}}
+ +

Syntaxe

+ +
typedArr.values()
+ +

Valeur de retour

+ +

Un nouvel objet Array Iterator.

+ +

Exemples

+ +

Parcourir le tableau typé avec for...of

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArray = arr.values();
+// prérequis : le navigateur doit supporter les boucles
+// for..of et les variables dont la portée est définie
+// par let
+for (let n of eArray) {
+  console.log(n);
+}
+
+ +

Une autre méthode d'itération

+ +
var arr = new Uint8Array([10, 20, 30, 40, 50]);
+var eArr = arr.values();
+console.log(eArr.next().value); // 10
+console.log(eArr.next().value); // 20
+console.log(eArr.next().value); // 30
+console.log(eArr.next().value); // 40
+console.log(eArr.next().value); // 50
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-%typedarray%.prototype.values', '%TypedArray%.prototype.values()')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-%typedarray%.prototype.values', '%TypedArray%.prototype.values()')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.TypedArray.values")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/typeerror/index.html b/files/fr/web/javascript/reference/global_objects/typeerror/index.html deleted file mode 100644 index 16ae2f8e1b..0000000000 --- a/files/fr/web/javascript/reference/global_objects/typeerror/index.html +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: TypeError -slug: Web/JavaScript/Reference/Global_Objects/TypeError -tags: - - Error - - JavaScript - - Object - - Reference - - TypeError -translation_of: Web/JavaScript/Reference/Global_Objects/TypeError -original_slug: Web/JavaScript/Reference/Objets_globaux/TypeError ---- -
{{JSRef}}
- -

L'objet TypeError représente une erreur qui intervient lorsque la valeur n'est pas du type attendu.

- -

Syntaxe

- -
new TypeError([message[, nomFichier[, numLigne]]])
- -

Paramètres

- -
-
message
-
Paramètre optionnel. Une description de l'erreur dans un format compréhensible par un humain.
-
nomFichier {{Non-standard_inline}}
-
Paramètre optionnel. Le nom du fichier contenant le code qui a causé l'erreur.
-
numLigne {{Non-standard_inline}}
-
Paramètre optionnel. Le numéro de ligne du code qui a causé l'erreur
-
- -

Description

- -

Une exception TypeError est levée lorsque qu'un argument ou un opérande est utilisé avec une fonction ou un opérateur incompatible avec le type attendu.

- -

Propriétés

- -
-
{{jsxref("TypeError.prototype")}}
-
Permet d'ajouter des propriétés aux instances de TypeError.
-
- -

Méthodes

- -

L'objet global TypeError ne contient pas de méthodes qui lui sont propres. Il possède malgré tout des méthodes héritées via sa chaîne de prototypes.

- -

Instances de TypeError

- -

Propriétés

- -

{{ page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypeError/prototype', 'Propri.C3.A9t.C3.A9s') }}

- -

Méthodes

- -

{{ page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypeError/prototype', 'M.C3.A9thodes') }}

- -

Exemples

- -

Intercepter une exception TypeError

- -
try {
-  null.f();
-} catch (e) {
-  console.log(e instanceof TypeError); // true
-  console.log(e.message);              // "null has no properties"
-  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"
-}
-
- -

Créer une exception TypeError

- -
try {
-  throw new TypeError('Coucou', "unFichier.js", 10);
-} catch (e) {
-  console.log(e instanceof TypeError); // true
-  console.log(e.message);              // "Coucou"
-  console.log(e.name);                 // "TypeError"
-  console.log(e.fileName);             // "unFichier.js"
-  console.log(e.lineNumber);           // 10
-  console.log(e.columnNumber);         // 0
-  console.log(e.stack);                // "@Scratchpad/2:2:9\n"
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3', '#sec-15.11.6.5', 'TypeError')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.5', 'TypeError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-typeerror', 'TypeError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-typeerror', 'TypeError')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/typeerror/index.md b/files/fr/web/javascript/reference/global_objects/typeerror/index.md new file mode 100644 index 0000000000..16ae2f8e1b --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/typeerror/index.md @@ -0,0 +1,130 @@ +--- +title: TypeError +slug: Web/JavaScript/Reference/Global_Objects/TypeError +tags: + - Error + - JavaScript + - Object + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Global_Objects/TypeError +original_slug: Web/JavaScript/Reference/Objets_globaux/TypeError +--- +
{{JSRef}}
+ +

L'objet TypeError représente une erreur qui intervient lorsque la valeur n'est pas du type attendu.

+ +

Syntaxe

+ +
new TypeError([message[, nomFichier[, numLigne]]])
+ +

Paramètres

+ +
+
message
+
Paramètre optionnel. Une description de l'erreur dans un format compréhensible par un humain.
+
nomFichier {{Non-standard_inline}}
+
Paramètre optionnel. Le nom du fichier contenant le code qui a causé l'erreur.
+
numLigne {{Non-standard_inline}}
+
Paramètre optionnel. Le numéro de ligne du code qui a causé l'erreur
+
+ +

Description

+ +

Une exception TypeError est levée lorsque qu'un argument ou un opérande est utilisé avec une fonction ou un opérateur incompatible avec le type attendu.

+ +

Propriétés

+ +
+
{{jsxref("TypeError.prototype")}}
+
Permet d'ajouter des propriétés aux instances de TypeError.
+
+ +

Méthodes

+ +

L'objet global TypeError ne contient pas de méthodes qui lui sont propres. Il possède malgré tout des méthodes héritées via sa chaîne de prototypes.

+ +

Instances de TypeError

+ +

Propriétés

+ +

{{ page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypeError/prototype', 'Propri.C3.A9t.C3.A9s') }}

+ +

Méthodes

+ +

{{ page('fr/docs/Web/JavaScript/Reference/Objets_globaux/TypeError/prototype', 'M.C3.A9thodes') }}

+ +

Exemples

+ +

Intercepter une exception TypeError

+ +
try {
+  null.f();
+} catch (e) {
+  console.log(e instanceof TypeError); // true
+  console.log(e.message);              // "null has no properties"
+  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"
+}
+
+ +

Créer une exception TypeError

+ +
try {
+  throw new TypeError('Coucou', "unFichier.js", 10);
+} catch (e) {
+  console.log(e instanceof TypeError); // true
+  console.log(e.message);              // "Coucou"
+  console.log(e.name);                 // "TypeError"
+  console.log(e.fileName);             // "unFichier.js"
+  console.log(e.lineNumber);           // 10
+  console.log(e.columnNumber);         // 0
+  console.log(e.stack);                // "@Scratchpad/2:2:9\n"
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3', '#sec-15.11.6.5', 'TypeError')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.5', 'TypeError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-typeerror', 'TypeError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-typeerror', 'TypeError')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/uint16array/index.html b/files/fr/web/javascript/reference/global_objects/uint16array/index.html deleted file mode 100644 index 97cdc87d6a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/uint16array/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Uint16Array -slug: Web/JavaScript/Reference/Global_Objects/Uint16Array -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays - - Uint16Array -translation_of: Web/JavaScript/Reference/Global_Objects/Uint16Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Uint16Array ---- -
{{JSRef}}
- -

Le tableau typé Uint16Array permet de représenter un tableau d'entiers non signés représentés sur 16 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

- -

Syntaxe

- -
new Uint16Array(); // apparu avec ES2017
-new Uint16Array(longueur);
-new Uint16Array(tableauTypé);
-new Uint16Array(objet);
-new Uint16Array(tampon [, décalage [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint16Array.BYTES_PER_ELEMENT")}}
-
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'Uint16Array, ce sera 2.
-
Uint16Array.length
-
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Uint16Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Uint16Array.name")}}
-
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint16Array ce sera : "Uint16Array".
-
{{jsxref("TypedArray.prototype", "Uint16Array.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from","Uint16Array.from()")}}
-
Cette méthode permet de créer un Uint16Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of","Uint16Array.of()")}}
-
Cette méthode permet de créer un Uint16Array à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype Uint16Array

- -

Tous les objets Uint16Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Uint16Array.prototype.constructor
-
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint16Array.
-
{{jsxref("TypedArray.prototype.buffer", "Uint16Array.prototype.buffer")}} {{readonlyInline}}
-
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint16Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Uint16Array.prototype.byteLength")}} {{readonlyInline}}
-
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint16Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Uint16Array.prototype.byteOffset")}} {{readonlyInline}}
-
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Uint16Array.prototype.length")}} {{readonlyInline}}
-
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint16Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Uint16Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Uint16Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Uint16Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Uint16Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Uint16Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Uint16Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Uint16Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Uint16Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Uint16Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Uint16Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Uint16Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Uint16Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Uint16Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Uint16Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Uint16Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint16Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Uint16Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Uint16Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Uint16Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Uint16Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Uint16Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Uint16Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Uint16Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Uint16Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Uint16Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Uint16Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Uint16Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Uint16Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Uint16Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet Uint16Array :

- -
// Construction à partir d'une longueur
-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
-
-// Construction à partir d'un tableau
-var arr = new Uint16Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un tableau typé
-var x = new Uint16Array([21, 31]);
-var y = new Uint16Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(8);
-var z = new Uint16Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var uint16 = new Uint16Array(iterable);
-// Uint16Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint16Array afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Uint16Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Uint16Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Uint16Array([1, 2, 3]);
-// TypeError: calling a builtin Uint16Array constructor
-// without new is forbidden
- -
var dv = new Uint16Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/uint16array/index.md b/files/fr/web/javascript/reference/global_objects/uint16array/index.md new file mode 100644 index 0000000000..97cdc87d6a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/uint16array/index.md @@ -0,0 +1,205 @@ +--- +title: Uint16Array +slug: Web/JavaScript/Reference/Global_Objects/Uint16Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays + - Uint16Array +translation_of: Web/JavaScript/Reference/Global_Objects/Uint16Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Uint16Array +--- +
{{JSRef}}
+ +

Le tableau typé Uint16Array permet de représenter un tableau d'entiers non signés représentés sur 16 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

+ +

Syntaxe

+ +
new Uint16Array(); // apparu avec ES2017
+new Uint16Array(longueur);
+new Uint16Array(tableauTypé);
+new Uint16Array(objet);
+new Uint16Array(tampon [, décalage [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint16Array.BYTES_PER_ELEMENT")}}
+
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'Uint16Array, ce sera 2.
+
Uint16Array.length
+
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Uint16Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Uint16Array.name")}}
+
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint16Array ce sera : "Uint16Array".
+
{{jsxref("TypedArray.prototype", "Uint16Array.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from","Uint16Array.from()")}}
+
Cette méthode permet de créer un Uint16Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of","Uint16Array.of()")}}
+
Cette méthode permet de créer un Uint16Array à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype Uint16Array

+ +

Tous les objets Uint16Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Uint16Array.prototype.constructor
+
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint16Array.
+
{{jsxref("TypedArray.prototype.buffer", "Uint16Array.prototype.buffer")}} {{readonlyInline}}
+
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint16Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Uint16Array.prototype.byteLength")}} {{readonlyInline}}
+
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint16Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint16Array.prototype.byteOffset")}} {{readonlyInline}}
+
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Uint16Array.prototype.length")}} {{readonlyInline}}
+
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint16Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint16Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Uint16Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Uint16Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Uint16Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Uint16Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Uint16Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Uint16Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Uint16Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Uint16Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Uint16Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Uint16Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Uint16Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Uint16Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Uint16Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Uint16Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint16Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Uint16Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Uint16Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Uint16Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Uint16Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Uint16Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Uint16Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Uint16Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Uint16Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Uint16Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Uint16Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Uint16Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Uint16Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Uint16Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet Uint16Array :

+ +
// Construction à partir d'une longueur
+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
+
+// Construction à partir d'un tableau
+var arr = new Uint16Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un tableau typé
+var x = new Uint16Array([21, 31]);
+var y = new Uint16Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint16Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint16 = new Uint16Array(iterable);
+// Uint16Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint16Array afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Uint16Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Uint16Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Uint16Array([1, 2, 3]);
+// TypeError: calling a builtin Uint16Array constructor
+// without new is forbidden
+ +
var dv = new Uint16Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/uint32array/index.html b/files/fr/web/javascript/reference/global_objects/uint32array/index.html deleted file mode 100644 index 10e2b1e58c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/uint32array/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Uint32Array -slug: Web/JavaScript/Reference/Global_Objects/Uint32Array -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays - - Uint32Array -translation_of: Web/JavaScript/Reference/Global_Objects/Uint32Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Uint32Array ---- -
{{JSRef}}
- -

Le tableau typé Uint32Array permet de représenter un tableau d'entiers non signés représentés sur 32 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

- -

Syntaxe

- -
new Uint32Array(); // apparu avec ES2017
-new Uint32Array(longueur);
-new Uint32Array(tableauTypé);
-new Uint32Array(objet);
-new Uint32Array(tampon [, décalage [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint32Array.BYTES_PER_ELEMENT")}}
-
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'Uint32Array, ce sera 4.
-
Uint32Array.length
-
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Uint32Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Uint32Array.name")}}
-
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint32Array ce sera : "Uint32Array".
-
{{jsxref("TypedArray.prototype", "Uint32Array.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "Uint32Array.from()")}}
-
Cette méthode permet de créer un nouveau tableau typé Uint32Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "Uint32Array.of()")}}
-
Cette méthode permet de créer un nouvel objet Uint32Array à partir d'un nombre d'arguments variables. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype Uint32Array

- -

Tous les objets Uint32Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Uint32Array.prototype.constructor
-
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint32Array.
-
{{jsxref("TypedArray.prototype.buffer", "Uint32Array.prototype.buffer")}} {{readonlyInline}}
-
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint32Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Uint32Array.prototype.byteLength")}} {{readonlyInline}}
-
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint32Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Uint32Array.prototype.byteOffset")}} {{readonlyInline}}
-
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Uint32Array.prototype.length")}} {{readonlyInline}}
-
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint32Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Uint32Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Uint32Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Uint32Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Uint32Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Uint32Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Uint32Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Uint32Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Uint32Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Uint32Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Uint32Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Uint32Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Uint32Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Uint32Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Uint32Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Uint32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint32Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Uint32Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Uint32Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Uint32Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Uint32Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Uint32Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Uint32Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Uint32Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Uint32Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Uint32Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Uint32Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Uint32Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Uint32Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Uint32Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de créer un objet Uint32Array :

- -
// Construction à partir d'une longueur
-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
-
-// Construction à partir d'un tableau
-var arr = new Uint32Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un tableau typé
-var x = new Uint32Array([21, 31]);
-var y = new Uint32Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(16);
-var z = new Uint32Array(buffer, 0, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var uint32 = new Uint32Array(iterable);
-// Uint32Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint32Array afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Uint32Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Uint32Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Uint32Array([1, 2, 3]);
-// TypeError: calling a builtin Uint32Array constructor
-// without new is forbidden
- -
var dv = new Uint32Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/uint32array/index.md b/files/fr/web/javascript/reference/global_objects/uint32array/index.md new file mode 100644 index 0000000000..10e2b1e58c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/uint32array/index.md @@ -0,0 +1,205 @@ +--- +title: Uint32Array +slug: Web/JavaScript/Reference/Global_Objects/Uint32Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays + - Uint32Array +translation_of: Web/JavaScript/Reference/Global_Objects/Uint32Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Uint32Array +--- +
{{JSRef}}
+ +

Le tableau typé Uint32Array permet de représenter un tableau d'entiers non signés représentés sur 32 bits, où l'ordre des octets correspond à celui de la plateforme utilisée. Si on souhaite contrôler l'ordre des octets utilisé (le « boutisme »), on utilisera un objet {{jsxref("DataView")}} à la place. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

+ +

Syntaxe

+ +
new Uint32Array(); // apparu avec ES2017
+new Uint32Array(longueur);
+new Uint32Array(tableauTypé);
+new Uint32Array(objet);
+new Uint32Array(tampon [, décalage [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint32Array.BYTES_PER_ELEMENT")}}
+
Cette propriété renvoie un nombre correspondant à la quantité d'octets pour un élément du tableau. Dans le cas d'Uint32Array, ce sera 4.
+
Uint32Array.length
+
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Uint32Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Uint32Array.name")}}
+
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint32Array ce sera : "Uint32Array".
+
{{jsxref("TypedArray.prototype", "Uint32Array.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "Uint32Array.from()")}}
+
Cette méthode permet de créer un nouveau tableau typé Uint32Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "Uint32Array.of()")}}
+
Cette méthode permet de créer un nouvel objet Uint32Array à partir d'un nombre d'arguments variables. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype Uint32Array

+ +

Tous les objets Uint32Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Uint32Array.prototype.constructor
+
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint32Array.
+
{{jsxref("TypedArray.prototype.buffer", "Uint32Array.prototype.buffer")}} {{readonlyInline}}
+
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint32Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Uint32Array.prototype.byteLength")}} {{readonlyInline}}
+
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint32Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint32Array.prototype.byteOffset")}} {{readonlyInline}}
+
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Uint32Array.prototype.length")}} {{readonlyInline}}
+
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint32Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint32Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Uint32Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Uint32Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Uint32Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Uint32Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Uint32Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Uint32Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Uint32Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Uint32Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Uint32Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Uint32Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Uint32Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Uint32Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Uint32Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Uint32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint32Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Uint32Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Uint32Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Uint32Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Uint32Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Uint32Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Uint32Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Uint32Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Uint32Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Uint32Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Uint32Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Uint32Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Uint32Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Uint32Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de créer un objet Uint32Array :

+ +
// Construction à partir d'une longueur
+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
+
+// Construction à partir d'un tableau
+var arr = new Uint32Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un tableau typé
+var x = new Uint32Array([21, 31]);
+var y = new Uint32Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Uint32Array(buffer, 0, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint32 = new Uint32Array(iterable);
+// Uint32Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015.
{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint32Array afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Uint32Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Uint32Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Uint32Array([1, 2, 3]);
+// TypeError: calling a builtin Uint32Array constructor
+// without new is forbidden
+ +
var dv = new Uint32Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/uint8array/index.html b/files/fr/web/javascript/reference/global_objects/uint8array/index.html deleted file mode 100644 index d041a440d2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/uint8array/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: Uint8Array -slug: Web/JavaScript/Reference/Global_Objects/Uint8Array -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays - - Uint8Array -translation_of: Web/JavaScript/Reference/Global_Objects/Uint8Array -original_slug: Web/JavaScript/Reference/Objets_globaux/Uint8Array ---- -
{{JSRef}}
- -

Le tableau typé Uint8Array représente un tableau d'entiers non signés, représentés sur 8 bits. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

- -

Syntaxe

- -
new Uint8Array(); // apparu avec ES2017
-new Uint8Array(longueur);
-new Uint8Array(tableauTypé);
-new Uint8Array(objet);
-new Uint8Array(tampon [, décalage [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8Array.BYTES_PER_ELEMENT")}}
-
Cette propriété renvoie la taille d'un élément du tableau, en octets. En l'occurence, pour Uint8Array ce sera 1.
-
Uint8Array.length
-
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Uint8Array.name")}}
-
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint8Array ce sera : "Uint8Array".
-
{{jsxref("TypedArray.prototype", "Uint8Array.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "Uint8Array.from()")}}
-
Cette méthode permet de créer un nouvel objet Uint8Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "Uint8Array.of()")}}
-
Cette méthode permet de créer un nouvel objet Uint8Array à partir d'un nombre variables d'arguments. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype Uint8Array

- -

Tous les objets Uint8Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Uint8Array.prototype.constructor
-
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint8Array.
-
{{jsxref("TypedArray.prototype.buffer", "Uint8Array.prototype.buffer")}} {{readonlyInline}}
-
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint8Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Uint8Array.prototype.byteLength")}} {{readonlyInline}}
-
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint8Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Uint8Array.prototype.byteOffset")}} {{readonlyInline}}
-
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}} {{readonlyInline}}
-
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint8Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Uint8Array.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Uint8Array.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Uint8Array.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Uint8Array.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Uint8Array.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Uint8Array.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Uint8Array.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Uint8Array.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Uint8Array.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Uint8Array.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Uint8Array.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Uint8Array.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Uint8Array.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Uint8Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Uint8Array.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Uint8Array.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Uint8Array.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Uint8Array.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Uint8Array.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Uint8Array.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Uint8Array.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Uint8Array.prototype.subarray()")}}
-
Renvoie un nouvel objet Uint8Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Uint8Array.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Uint8Array.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Uint8Array.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Uint8Array.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façons de construire un objet Uint8Array :

- -
// Construction à partir d'une longueur
-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
-
-// Construction à partir d'un tableau
-var arr = new Uint8Array([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un tableau typé
-var x = new Uint8Array([21, 31]);
-var y = new Uint8Array(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(8);
-var z = new Uint8Array(buffer, 1, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var uint8 = new Uint8Array(iterable);
-// Uint8Array[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015.
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint8Array afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Uint8Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Uint8Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Uint8Array([1, 2, 3]);
-// TypeError: calling a builtin Uint8Array constructor
-// without new is forbidden
- -
var dv = new Uint8Array([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/uint8array/index.md b/files/fr/web/javascript/reference/global_objects/uint8array/index.md new file mode 100644 index 0000000000..d041a440d2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/uint8array/index.md @@ -0,0 +1,205 @@ +--- +title: Uint8Array +slug: Web/JavaScript/Reference/Global_Objects/Uint8Array +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays + - Uint8Array +translation_of: Web/JavaScript/Reference/Global_Objects/Uint8Array +original_slug: Web/JavaScript/Reference/Objets_globaux/Uint8Array +--- +
{{JSRef}}
+ +

Le tableau typé Uint8Array représente un tableau d'entiers non signés, représentés sur 8 bits. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

+ +

Syntaxe

+ +
new Uint8Array(); // apparu avec ES2017
+new Uint8Array(longueur);
+new Uint8Array(tableauTypé);
+new Uint8Array(objet);
+new Uint8Array(tampon [, décalage [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8Array.BYTES_PER_ELEMENT")}}
+
Cette propriété renvoie la taille d'un élément du tableau, en octets. En l'occurence, pour Uint8Array ce sera 1.
+
Uint8Array.length
+
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'élément, voir {{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Uint8Array.name")}}
+
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint8Array ce sera : "Uint8Array".
+
{{jsxref("TypedArray.prototype", "Uint8Array.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "Uint8Array.from()")}}
+
Cette méthode permet de créer un nouvel objet Uint8Array à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "Uint8Array.of()")}}
+
Cette méthode permet de créer un nouvel objet Uint8Array à partir d'un nombre variables d'arguments. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype Uint8Array

+ +

Tous les objets Uint8Array héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Uint8Array.prototype.constructor
+
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint8Array.
+
{{jsxref("TypedArray.prototype.buffer", "Uint8Array.prototype.buffer")}} {{readonlyInline}}
+
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint8Array Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Uint8Array.prototype.byteLength")}} {{readonlyInline}}
+
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint8Array à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint8Array.prototype.byteOffset")}} {{readonlyInline}}
+
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}} {{readonlyInline}}
+
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint8Array. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Uint8Array.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Uint8Array.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Uint8Array.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Uint8Array.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Uint8Array.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Uint8Array.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Uint8Array.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Uint8Array.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Uint8Array.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Uint8Array.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Uint8Array.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Uint8Array.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Uint8Array.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Uint8Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Uint8Array.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Uint8Array.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Uint8Array.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Uint8Array.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Uint8Array.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Uint8Array.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Uint8Array.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Uint8Array.prototype.subarray()")}}
+
Renvoie un nouvel objet Uint8Array qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Uint8Array.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Uint8Array.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Uint8Array.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Uint8Array.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façons de construire un objet Uint8Array :

+ +
// Construction à partir d'une longueur
+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
+
+// Construction à partir d'un tableau
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un tableau typé
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint8 = new Uint8Array(iterable);
+// Uint8Array[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015.
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint8Array afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Uint8Array doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler un constructeur Uint8Array comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Uint8Array([1, 2, 3]);
+// TypeError: calling a builtin Uint8Array constructor
+// without new is forbidden
+ +
var dv = new Uint8Array([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.html b/files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.html deleted file mode 100644 index 8a6dc95446..0000000000 --- a/files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.html +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: Uint8ClampedArray -slug: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray -tags: - - Constructor - - JavaScript - - Reference - - TypedArray - - TypedArrays - - Uint8ClampedArray -translation_of: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray -original_slug: Web/JavaScript/Reference/Objets_globaux/Uint8ClampedArray ---- -
{{JSRef}}
- -

Le tableau typé Uint8ClampedArray permet de représenter un tableau d'entiers non signés représentés sur 8 bits, dont les valeurs sont ramenées entre 0 et 255. Si une valeur non-entière est fournie, elle sera arrondie à l'entier le plus proche. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

- -

Syntaxe

- -
new Uint8ClampedArray(); // apparu avec ES2017
-new Uint8ClampedArray(longueur);
-new Uint8ClampedArray(tableauTypé);
-new Uint8ClampedArray(objet);
-new Uint8ClampedArray(tampon [, décalage [, longueur]]);
- -

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

- -

Propriétés

- -
-
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8ClampedArray.BYTES_PER_ELEMENT")}}
-
Cette propriété renvoie la taille d'un élément du tableau, en octets. En l'occurence, pour Uint8ClampedArray ce sera 1.
-
Uint8ClampedArray.length
-
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'éléments, voir {{jsxref("TypedArray.prototype.length", "Uint8ClampedArray.prototype.length")}}.
-
{{jsxref("TypedArray.name", "Uint8ClampedArray.name")}}
-
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint8ClampedArray ce sera : "Uint8ClampedArray".
-
{{jsxref("TypedArray.prototype", "Uint8ClampedArray.prototype")}}
-
Le prototype des objets TypedArray.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.from", "Uint8ClampedArray.from()")}}
-
Cette méthode permet de créer un nouvel objet Uint8ClampedArray à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
-
{{jsxref("TypedArray.of", "Uint8ClampedArray.of()")}}
-
Cette méthode permet de créer un nouvel objet Uint8ClampedArray à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
-
- -

Prototype Uint8ClampedArray

- -

Tous les objets Uint8ClampedArray héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

- -

Propriétés

- -
-
Uint8ClampedArray.prototype.constructor
-
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint8ClampedArray.
-
{{jsxref("TypedArray.prototype.buffer", "Uint8ClampedArray.prototype.buffer")}} {{readonlyInline}}
-
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint8ClampedArray Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteLength", "Uint8ClampedArray.prototype.byteLength")}} {{readonlyInline}}
-
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint8ClampedArray à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.byteOffset", "Uint8ClampedArray.prototype.byteOffset")}} {{readonlyInline}}
-
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
{{jsxref("TypedArray.prototype.length", "Uint8ClampedArray.prototype.length")}} {{readonlyInline}}
-
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint8ClampedArray. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
-
- -

Méthodes

- -
-
{{jsxref("TypedArray.copyWithin", "Uint8ClampedArray.prototype.copyWithin()")}}
-
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.entries", "Uint8ClampedArray.prototype.entries()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
-
{{jsxref("TypedArray.every", "Uint8ClampedArray.prototype.every()")}}
-
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
-
{{jsxref("TypedArray.fill", "Uint8ClampedArray.prototype.fill()")}}
-
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
-
{{jsxref("TypedArray.filter", "Uint8ClampedArray.prototype.filter()")}}
-
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
-
{{jsxref("TypedArray.find", "Uint8ClampedArray.prototype.find()")}}
-
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
-
{{jsxref("TypedArray.findIndex", "Uint8ClampedArray.prototype.findIndex()")}}
-
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
-
{{jsxref("TypedArray.forEach", "Uint8ClampedArray.prototype.forEach()")}}
-
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
-
{{jsxref("TypedArray.includes", "Uint8ClampedArray.prototype.includes()")}}
-
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
-
{{jsxref("TypedArray.indexOf", "Uint8ClampedArray.prototype.indexOf()")}}
-
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
-
{{jsxref("TypedArray.join", "Uint8ClampedArray.prototype.join()")}}
-
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
-
{{jsxref("TypedArray.keys", "Uint8ClampedArray.prototype.keys()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
-
{{jsxref("TypedArray.lastIndexOf", "Uint8ClampedArray.prototype.lastIndexOf()")}}
-
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
-
{{jsxref("TypedArray.map", "Uint8ClampedArray.prototype.map()")}}
-
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
-
{{jsxref("TypedArray.move", "Uint8ClampedArray.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
-
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint8ClampedArray.prototype.copyWithin()")}}.
-
{{jsxref("TypedArray.reduce", "Uint8ClampedArray.prototype.reduce()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
-
{{jsxref("TypedArray.reduceRight", "Uint8ClampedArray.prototype.reduceRight()")}}
-
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
-
{{jsxref("TypedArray.reverse", "Uint8ClampedArray.prototype.reverse()")}}
-
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
-
{{jsxref("TypedArray.set", "Uint8ClampedArray.prototype.set()")}}
-
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
-
{{jsxref("TypedArray.slice", "Uint8ClampedArray.prototype.slice()")}}
-
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
-
{{jsxref("TypedArray.some", "Uint8ClampedArray.prototype.some()")}}
-
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
-
{{jsxref("TypedArray.sort", "Uint8ClampedArray.prototype.sort()")}}
-
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
-
{{jsxref("TypedArray.subarray", "Uint8ClampedArray.prototype.subarray()")}}
-
Renvoie un nouvel objet Uint8ClampedArray qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
-
{{jsxref("TypedArray.values", "Uint8ClampedArray.prototype.values()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
-
{{jsxref("TypedArray.toLocaleString", "Uint8ClampedArray.prototype.toLocaleString()")}}
-
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
-
{{jsxref("TypedArray.toString", "Uint8ClampedArray.prototype.toString()")}}
-
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
-
{{jsxref("TypedArray.@@iterator", "Uint8ClampedArray.prototype[@@iterator]()")}}
-
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
-
- -

Exemples

- -

Différentes façon de créer un objet Uint8ClampedArray :

- -
// Construction à partir d'une longueur
-var uintc8 = new Uint8ClampedArray(2);
-uintc8[0] = 42;
-uintc8[1] = 1337;
-console.log(uintc8[0]); // 42
-console.log(uintc8[1]); // 255 (valeur ramenée à 255)
-console.log(uintc8.length); // 2
-console.log(uintc8.BYTES_PER_ELEMENT); // 1
-
-// Construction à partir d'un tableau
-var arr = new Uint8ClampedArray([21,31]);
-console.log(arr[1]); // 31
-
-// Construction à partir d'un autre TypedArray
-var x = new Uint8ClampedArray([21, 31]);
-var y = new Uint8ClampedArray(x);
-console.log(y[0]); // 21
-
-// Construction à partir d'un ArrayBuffer
-var buffer = new ArrayBuffer(8);
-var z = new Uint8ClampedArray(buffer, 1, 4);
-
-// Construction à partir d'un itérable
-var iterable = function*(){ yield* [1,2,3]; }();
-var uintc8 = new Uint8ClampedArray(iterable);
-// Uint8ClampedArray[1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint8ClampedArray afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
- -

Compatibilité des navigateurs

- -

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

- -

Notes de compatibilité

- -

À partir d'ECMAScript 2015 (ES6), Uint8ClampedArray doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler Uint8ClampedArray comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

- -
var dv = Uint8ClampedArray([1, 2, 3]);
-// TypeError: calling a builtin Uint8ClampedArray constructor
-// without new is forbidden
- -
var dv = new Uint8ClampedArray([1, 2, 3]);
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.md b/files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.md new file mode 100644 index 0000000000..8a6dc95446 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/uint8clampedarray/index.md @@ -0,0 +1,207 @@ +--- +title: Uint8ClampedArray +slug: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray +tags: + - Constructor + - JavaScript + - Reference + - TypedArray + - TypedArrays + - Uint8ClampedArray +translation_of: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray +original_slug: Web/JavaScript/Reference/Objets_globaux/Uint8ClampedArray +--- +
{{JSRef}}
+ +

Le tableau typé Uint8ClampedArray permet de représenter un tableau d'entiers non signés représentés sur 8 bits, dont les valeurs sont ramenées entre 0 et 255. Si une valeur non-entière est fournie, elle sera arrondie à l'entier le plus proche. Les éléments du tableau sont initialisés à 0. Une fois que le tableau est construit, on peut manipuler ses différents éléments grâce aux méthodes de l'objet ou grâce à la notation usuelle (avec les crochets).

+ +

Syntaxe

+ +
new Uint8ClampedArray(); // apparu avec ES2017
+new Uint8ClampedArray(longueur);
+new Uint8ClampedArray(tableauTypé);
+new Uint8ClampedArray(objet);
+new Uint8ClampedArray(tampon [, décalage [, longueur]]);
+ +

Pour plus d'informations sur la syntaxe du constructeur et le rôle des différents paramètres, voir la page TypedArray.

+ +

Propriétés

+ +
+
{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8ClampedArray.BYTES_PER_ELEMENT")}}
+
Cette propriété renvoie la taille d'un élément du tableau, en octets. En l'occurence, pour Uint8ClampedArray ce sera 1.
+
Uint8ClampedArray.length
+
La propriété de longueur statique qui vaut 3. Pour connaître le nombre d'éléments, voir {{jsxref("TypedArray.prototype.length", "Uint8ClampedArray.prototype.length")}}.
+
{{jsxref("TypedArray.name", "Uint8ClampedArray.name")}}
+
Cette propriété renvoie la chaîne de caractères correspondant au nom du constructeur. Pour Uint8ClampedArray ce sera : "Uint8ClampedArray".
+
{{jsxref("TypedArray.prototype", "Uint8ClampedArray.prototype")}}
+
Le prototype des objets TypedArray.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.from", "Uint8ClampedArray.from()")}}
+
Cette méthode permet de créer un nouvel objet Uint8ClampedArray à partir d'un itérable ou d'un objet semblable à un tableau. Voir aussi {{jsxref("Array.from()")}}.
+
{{jsxref("TypedArray.of", "Uint8ClampedArray.of()")}}
+
Cette méthode permet de créer un nouvel objet Uint8ClampedArray à partir d'un nombre variable d'arguments. Voir aussi {{jsxref("Array.of()")}}.
+
+ +

Prototype Uint8ClampedArray

+ +

Tous les objets Uint8ClampedArray héritent de {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.

+ +

Propriétés

+ +
+
Uint8ClampedArray.prototype.constructor
+
Cette propriété renvoie la fonction qui a créé l'instance du prototype. Par défaut, ce sera le constructeur Uint8ClampedArray.
+
{{jsxref("TypedArray.prototype.buffer", "Uint8ClampedArray.prototype.buffer")}} {{readonlyInline}}
+
Cette propriété renvoie l'objet {{jsxref("ArrayBuffer")}} référencé par l'objet Uint8ClampedArray Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteLength", "Uint8ClampedArray.prototype.byteLength")}} {{readonlyInline}}
+
Cette propriété renvoie la longueur, exprimée en octets, de l'objet Uint8ClampedArray à partir du début de l'objet {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.byteOffset", "Uint8ClampedArray.prototype.byteOffset")}} {{readonlyInline}}
+
Cette propriété renvoie le décalage, en nombre d'octets, entre le début du tableau typé courant et du début du {{jsxref("ArrayBuffer")}} correspondant. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
{{jsxref("TypedArray.prototype.length", "Uint8ClampedArray.prototype.length")}} {{readonlyInline}}
+
Cette propriété renvoie le nombre d'éléments contenus dans le tableau Uint8ClampedArray. Elle est déterminée lors de la construction et est accessible uniquement en lecture seule.
+
+ +

Méthodes

+ +
+
{{jsxref("TypedArray.copyWithin", "Uint8ClampedArray.prototype.copyWithin()")}}
+
Copie une suite d'éléments d'un tableau dans le tableau. Voir également {{jsxref("Array.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.entries", "Uint8ClampedArray.prototype.entries()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les paires clé/valeur pour chaque indice du tableau. Voir également {{jsxref("Array.prototype.entries()")}}.
+
{{jsxref("TypedArray.every", "Uint8ClampedArray.prototype.every()")}}
+
Teste si l'ensemble des éléments du tableau remplissent une certaine condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.every()")}}.
+
{{jsxref("TypedArray.fill", "Uint8ClampedArray.prototype.fill()")}}
+
Remplit les éléments d'un tableau avec une certaine valeur pour les éléments compris entre un indice de début et un indice de fin. Voir également {{jsxref("Array.prototype.fill()")}}.
+
{{jsxref("TypedArray.filter", "Uint8ClampedArray.prototype.filter()")}}
+
Crée un nouveau tableau dont tous les éléments proviennent de ce tableau et respectent une condition fournie par une fonction de test. Voir également {{jsxref("Array.prototype.filter()")}}.
+
{{jsxref("TypedArray.find", "Uint8ClampedArray.prototype.find()")}}
+
Renvoie une valeur trouvée dans le tableau s'il existe un élément du tableau qui satisfait une condition fournie par une fonction de test, s'il n'y a pas de tel élément undefined sera renvoyé. Voir également {{jsxref("Array.prototype.find()")}}.
+
{{jsxref("TypedArray.findIndex", "Uint8ClampedArray.prototype.findIndex()")}}
+
Renvoie l'indice d'un élément qui satisfait une condition fournie par une fonction de test, si aucun élément ne remplit la condition -1 sera renvoyé. Voir également {{jsxref("Array.prototype.findIndex()")}}.
+
{{jsxref("TypedArray.forEach", "Uint8ClampedArray.prototype.forEach()")}}
+
Appelle une fonction pour chacun des élément du tableau. Voir également {{jsxref("Array.prototype.forEach()")}}.
+
{{jsxref("TypedArray.includes", "Uint8ClampedArray.prototype.includes()")}}
+
Détermine si le tableau typé contient un élément donné. Cette méthode renvoie true ou false selon le cas de figure. Voir également {{jsxref("Array.prototype.includes()")}}.
+
{{jsxref("TypedArray.indexOf", "Uint8ClampedArray.prototype.indexOf()")}}
+
Renvoie le premier indice (le plus petit) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.indexOf()")}}.
+
{{jsxref("TypedArray.join", "Uint8ClampedArray.prototype.join()")}}
+
Fusionne l'ensemble des éléments du tableau en une chaîne de caractères. Voir également {{jsxref("Array.prototype.join()")}}.
+
{{jsxref("TypedArray.keys", "Uint8ClampedArray.prototype.keys()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les clés de chaque indice du tableau. Voir également {{jsxref("Array.prototype.keys()")}}.
+
{{jsxref("TypedArray.lastIndexOf", "Uint8ClampedArray.prototype.lastIndexOf()")}}
+
Renvoie le dernier indice (le plus élevé) d'un élément du tableau qui est égal à la valeur fournie. Si aucun élément ne correspond, la valeur -1 sera renvoyée. Voir également {{jsxref("Array.prototype.lastIndexOf()")}}.
+
{{jsxref("TypedArray.map", "Uint8ClampedArray.prototype.map()")}}
+
Crée un nouveau tableau dont les éléments sont les images des éléments du tableau courant par une fonction donnée. Voir également {{jsxref("Array.prototype.map()")}}.
+
{{jsxref("TypedArray.move", "Uint8ClampedArray.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}
+
Ancienne version, non-standard, de {{jsxref("TypedArray.copyWithin", "Uint8ClampedArray.prototype.copyWithin()")}}.
+
{{jsxref("TypedArray.reduce", "Uint8ClampedArray.prototype.reduce()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de gauche à droite) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduce()")}}.
+
{{jsxref("TypedArray.reduceRight", "Uint8ClampedArray.prototype.reduceRight()")}}
+
Applique une fonction sur un accumulateur et chaque élément du tableau (de droite à gauche) afin de réduire le tableau en une seule valeur. Voir également {{jsxref("Array.prototype.reduceRight()")}}.
+
{{jsxref("TypedArray.reverse", "Uint8ClampedArray.prototype.reverse()")}}
+
Inverse l'ordre des éléments d'un tableau. Le premier élément du tableau devient le dernier et le dernier devient le premier (et ainsi de suite). Voir également {{jsxref("Array.prototype.reverse()")}}.
+
{{jsxref("TypedArray.set", "Uint8ClampedArray.prototype.set()")}}
+
Enregistre plusieurs valeurs dans le tableau typé à partir de valeurs d'un autre tableau.
+
{{jsxref("TypedArray.slice", "Uint8ClampedArray.prototype.slice()")}}
+
Extrait un fragment d'un tableau et renvoie ce fragment. Voir également {{jsxref("Array.prototype.slice()")}}.
+
{{jsxref("TypedArray.some", "Uint8ClampedArray.prototype.some()")}}
+
Renvoie true si au moins un des éléments remplit une condition donnée par une fonction de test. Voir également {{jsxref("Array.prototype.some()")}}.
+
{{jsxref("TypedArray.sort", "Uint8ClampedArray.prototype.sort()")}}
+
Trie les éléments du tableau et renvoie ce tableau. Voir également {{jsxref("Array.prototype.sort()")}}.
+
{{jsxref("TypedArray.subarray", "Uint8ClampedArray.prototype.subarray()")}}
+
Renvoie un nouvel objet Uint8ClampedArray qui est le fragment du tableau courant, entre les indices de début et de fin donnés.
+
{{jsxref("TypedArray.values", "Uint8ClampedArray.prototype.values()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau. Voir également {{jsxref("Array.prototype.values()")}}.
+
{{jsxref("TypedArray.toLocaleString", "Uint8ClampedArray.prototype.toLocaleString()")}}
+
Renvoie une chaîne de caractères localisée qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toLocaleString()")}}.
+
{{jsxref("TypedArray.toString", "Uint8ClampedArray.prototype.toString()")}}
+
Renvoie une chaîne de caractère qui représente le tableau et ses éléments. Voir également {{jsxref("Array.prototype.toString()")}}.
+
{{jsxref("TypedArray.@@iterator", "Uint8ClampedArray.prototype[@@iterator]()")}}
+
Renvoie un nouvel objet Array Iterator qui contient les valeurs correspondantes à chaque indice du tableau.
+
+ +

Exemples

+ +

Différentes façon de créer un objet Uint8ClampedArray :

+ +
// Construction à partir d'une longueur
+var uintc8 = new Uint8ClampedArray(2);
+uintc8[0] = 42;
+uintc8[1] = 1337;
+console.log(uintc8[0]); // 42
+console.log(uintc8[1]); // 255 (valeur ramenée à 255)
+console.log(uintc8.length); // 2
+console.log(uintc8.BYTES_PER_ELEMENT); // 1
+
+// Construction à partir d'un tableau
+var arr = new Uint8ClampedArray([21,31]);
+console.log(arr[1]); // 31
+
+// Construction à partir d'un autre TypedArray
+var x = new Uint8ClampedArray([21, 31]);
+var y = new Uint8ClampedArray(x);
+console.log(y[0]); // 21
+
+// Construction à partir d'un ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8ClampedArray(buffer, 1, 4);
+
+// Construction à partir d'un itérable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uintc8 = new Uint8ClampedArray(iterable);
+// Uint8ClampedArray[1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Englobée par ECMAScript 2015
{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}{{Spec2('ES6')}}Définition initiale au sein d'un standard ECMA. new est obligatoire.
{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}{{Spec2('ESDraft')}}ECMAScript 2017 a modifié le constructeur Uint8ClampedArray afin qu'il utilise l'opération ToIndex et qu'il puisse être utilisé sans argument.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Notes de compatibilité

+ +

À partir d'ECMAScript 2015 (ES6), Uint8ClampedArray doit être utilisé avec {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Appeler Uint8ClampedArray comme une fonction, sans new, provoquera une exception {{jsxref("TypeError")}}.

+ +
var dv = Uint8ClampedArray([1, 2, 3]);
+// TypeError: calling a builtin Uint8ClampedArray constructor
+// without new is forbidden
+ +
var dv = new Uint8ClampedArray([1, 2, 3]);
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/undefined/index.html b/files/fr/web/javascript/reference/global_objects/undefined/index.html deleted file mode 100644 index 07af77f642..0000000000 --- a/files/fr/web/javascript/reference/global_objects/undefined/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: undefined -slug: Web/JavaScript/Reference/Global_Objects/undefined -tags: - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/undefined -original_slug: Web/JavaScript/Reference/Objets_globaux/undefined ---- -
{{jsSidebar("Objects")}}
- -

La propriété globale undefined représente la valeur undefined. Cette valeur est l'un des types primitifs de JavaScript.

- -

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

- -
{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}
- -

Syntaxe

- -
undefined
- -

Description

- -

undefined est une propriété de l'objet global, c'est-à-dire qu'elle est accessible globalement. La valeur initiale d'undefined est la valeur primitive undefined.

- -

Dans les navigateurs modernes, d'après la spécification ECMAScript 5, undefined est une propriété non-configurable et non accessible en écriture. Si, toutefois, elle peut être modifiée dans l'environnement utilisé, il faut éviter de l'écraser.

- -

Une variable pour laquelle aucune valeur n'a été assignée sera de type undefined. Une méthode ou instruction renvoie également undefined si la variable à évaluer n'a pas de valeur assignée. Une fonction renvoie undefined si aucune valeur n'a été {{jsxref("Instructions/return", "retournée","",1)}}.

- -
-

Attention : Puisque undefined n'est pas un mot réservé du langage JavaScript, il peut être utilisé comme identifiant (nom de variable) dans toute portée autre que la portée globale. Ceci est une très mauvaise idée pour la lisibilité du code et sa maintenabilité.

- -
// À NE PAS FAIRE
-
-// écrit "toto string" dans la console
-(function() { var undefined = 'toto'; console.log(undefined, typeof undefined); })();
-
-// écrit "toto string" dans la console
-(function(undefined) { console.log(undefined, typeof undefined); })('toto');
-
-
- -

Exemples

- -

L'égalité stricte et undefined

- -

Il est possible d'utiliser undefined et les opérateurs stricts pour l''égalité et l'inégalité strictes afin de déterminer si une variable a une valeur affectée. Dans le code qui suit, la variable x n'est pas initialisée et la première instruction if sera évaluée à true (vrai).

- -
var x;
-if (x === undefined) {
-   // ces instructions seront exécutées
-}
-if (x !== undefined) {
-   // ces instructions ne seront pas exécutées
-}
-
- -
-

Note : L'opérateur d'égalité stricte doit être utilisé ici plutôt que l'opérateur d'égalité simple. En effet, x == undefined vérifie également si x vaut null, tandis que l'égalité stricte ne le fait pas. null n'est pas équivalent à undefined. Voir la page sur les {{jsxref("Opérateurs/Opérateurs_de_comparaison","opérateurs de comparaison","",1)}} pour plus de détails.

-
- -

L'opérateur typeof et undefined

- -

L'opérateur {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} peut également être utilisé :

- -
var x;
-if (typeof x == 'undefined') {
-   // ces instructions seront exécutées
-}
-
- -

Une des raisons pour utiliser {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} est qu'il ne renverra pas d'erreur si la variable n'a pas été définie :

- -
// x n'a pas encore été défini
-if (typeof x === 'undefined') { // donnera true sans erreur
-   // ces instructions seront exécutées
-}
-
-if (x === undefined) { // déclenche une ReferenceError
-
-}
-
- -

L'opérateur void et undefined

- -

L'opérateur {{jsxref("Opérateurs/L_opérateur_void", "void")}} est une troisième solution.

- -
var x;
-if (x === void 0) {
-   // ces instructions seront exécutées
-}
-
-// y n'a pas été défini avant
-if (y === void 0) {
-   // déclenche une ReferenceError: y is not defined
-   // (contrairement à `typeof`)
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1', '#sec-4.3.9', 'undefined')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.1.1.3', 'undefined')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-undefined', 'undefined')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-undefined', 'undefined')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

diff --git a/files/fr/web/javascript/reference/global_objects/undefined/index.md b/files/fr/web/javascript/reference/global_objects/undefined/index.md new file mode 100644 index 0000000000..07af77f642 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/undefined/index.md @@ -0,0 +1,134 @@ +--- +title: undefined +slug: Web/JavaScript/Reference/Global_Objects/undefined +tags: + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/undefined +original_slug: Web/JavaScript/Reference/Objets_globaux/undefined +--- +
{{jsSidebar("Objects")}}
+ +

La propriété globale undefined représente la valeur undefined. Cette valeur est l'un des types primitifs de JavaScript.

+ +

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

+ +
{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}
+ +

Syntaxe

+ +
undefined
+ +

Description

+ +

undefined est une propriété de l'objet global, c'est-à-dire qu'elle est accessible globalement. La valeur initiale d'undefined est la valeur primitive undefined.

+ +

Dans les navigateurs modernes, d'après la spécification ECMAScript 5, undefined est une propriété non-configurable et non accessible en écriture. Si, toutefois, elle peut être modifiée dans l'environnement utilisé, il faut éviter de l'écraser.

+ +

Une variable pour laquelle aucune valeur n'a été assignée sera de type undefined. Une méthode ou instruction renvoie également undefined si la variable à évaluer n'a pas de valeur assignée. Une fonction renvoie undefined si aucune valeur n'a été {{jsxref("Instructions/return", "retournée","",1)}}.

+ +
+

Attention : Puisque undefined n'est pas un mot réservé du langage JavaScript, il peut être utilisé comme identifiant (nom de variable) dans toute portée autre que la portée globale. Ceci est une très mauvaise idée pour la lisibilité du code et sa maintenabilité.

+ +
// À NE PAS FAIRE
+
+// écrit "toto string" dans la console
+(function() { var undefined = 'toto'; console.log(undefined, typeof undefined); })();
+
+// écrit "toto string" dans la console
+(function(undefined) { console.log(undefined, typeof undefined); })('toto');
+
+
+ +

Exemples

+ +

L'égalité stricte et undefined

+ +

Il est possible d'utiliser undefined et les opérateurs stricts pour l''égalité et l'inégalité strictes afin de déterminer si une variable a une valeur affectée. Dans le code qui suit, la variable x n'est pas initialisée et la première instruction if sera évaluée à true (vrai).

+ +
var x;
+if (x === undefined) {
+   // ces instructions seront exécutées
+}
+if (x !== undefined) {
+   // ces instructions ne seront pas exécutées
+}
+
+ +
+

Note : L'opérateur d'égalité stricte doit être utilisé ici plutôt que l'opérateur d'égalité simple. En effet, x == undefined vérifie également si x vaut null, tandis que l'égalité stricte ne le fait pas. null n'est pas équivalent à undefined. Voir la page sur les {{jsxref("Opérateurs/Opérateurs_de_comparaison","opérateurs de comparaison","",1)}} pour plus de détails.

+
+ +

L'opérateur typeof et undefined

+ +

L'opérateur {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} peut également être utilisé :

+ +
var x;
+if (typeof x == 'undefined') {
+   // ces instructions seront exécutées
+}
+
+ +

Une des raisons pour utiliser {{jsxref("Opérateurs/L_opérateur_typeof", "typeof")}} est qu'il ne renverra pas d'erreur si la variable n'a pas été définie :

+ +
// x n'a pas encore été défini
+if (typeof x === 'undefined') { // donnera true sans erreur
+   // ces instructions seront exécutées
+}
+
+if (x === undefined) { // déclenche une ReferenceError
+
+}
+
+ +

L'opérateur void et undefined

+ +

L'opérateur {{jsxref("Opérateurs/L_opérateur_void", "void")}} est une troisième solution.

+ +
var x;
+if (x === void 0) {
+   // ces instructions seront exécutées
+}
+
+// y n'a pas été défini avant
+if (y === void 0) {
+   // déclenche une ReferenceError: y is not defined
+   // (contrairement à `typeof`)
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1', '#sec-4.3.9', 'undefined')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.3.
{{SpecName('ES5.1', '#sec-15.1.1.3', 'undefined')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-undefined', 'undefined')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-undefined', 'undefined')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

diff --git a/files/fr/web/javascript/reference/global_objects/unescape/index.html b/files/fr/web/javascript/reference/global_objects/unescape/index.html deleted file mode 100644 index dbb70f0962..0000000000 --- a/files/fr/web/javascript/reference/global_objects/unescape/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: unescape() -slug: Web/JavaScript/Reference/Global_Objects/unescape -tags: - - Déprécié - - JavaScript -translation_of: Web/JavaScript/Reference/Global_Objects/unescape -original_slug: Web/JavaScript/Reference/Objets_globaux/unescape ---- -
{{jsSidebar("Objects")}}
- -

Attention : Bien que unescape(…) ne soit pas strictement obsolète (au sens où elle n'a pas été retirée des standards), elle est définie au sein de l'Annexe B du standard ECMA-262 qui commence par : - -

… L'ensemble des fonctionnalités et comportements définis dans cette annexe possède une ou plusieurs caractéristiques indésirables. En l'absence d'une utilisation historique, ces fonctionnalités seraient retirés de la spécification. …
-… Les développeurs ne devraient pas utiliser ces fonctionnalités et comportements ou présupposer qu'elles existent lors de l'écriture de nouveau code ECMAScript. …
-

-
- -

La fonction dépréciée unescape() calcule une nouvelle chaîne de caractères et remplace les séquences d'échappement hexadécimales par les caractères qu'elles représentent. Les séquences d'échappement peuvent provenir de la fonction {{jsxref("escape")}}. Cette méthode est obsolète, c'est pourquoi il est conseillé d'utiliser {{jsxref("decodeURI")}} ou {{jsxref("decodeURIComponent")}} à la place.

- -

Note : unescape() ne doit pas être utilisée pour décoder les URI. À la place, utilisez decodeURI.

- -

Syntaxe

- -
unescape(str)
- -

Paramètres

- -
-
str
-
La chaîne de caractères à décoder.
-
- -

Valeur de retour

- -

Une nouvelle chaîne de caractères dont les caractères ont été décodés.

- -

Description

- -

La fonction unescape est une propriété de l'objet global.

- -

Exemples

- -
unescape("abc123");     // "abc123"
-unescape("%E4%F6%FC");  // "äöü"
-unescape("%u0107");     // "ć"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-unescape-string', 'unescape')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
{{SpecName('ES6', '#sec-unescape-string', 'unescape')}}{{Spec2('ES6')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
{{SpecName('ES5.1', '#sec-B.2.2', 'unescape')}}{{Spec2('ES5.1')}}Définie dans l'annexe B (informative) sur la compatibilité.
{{SpecName('ES1', '#sec-15.1.2.5', 'unescape')}}{{Spec2('ES1')}}Définition initiale
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/unescape/index.md b/files/fr/web/javascript/reference/global_objects/unescape/index.md new file mode 100644 index 0000000000..dbb70f0962 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/unescape/index.md @@ -0,0 +1,91 @@ +--- +title: unescape() +slug: Web/JavaScript/Reference/Global_Objects/unescape +tags: + - Déprécié + - JavaScript +translation_of: Web/JavaScript/Reference/Global_Objects/unescape +original_slug: Web/JavaScript/Reference/Objets_globaux/unescape +--- +
{{jsSidebar("Objects")}}
+ +

Attention : Bien que unescape(…) ne soit pas strictement obsolète (au sens où elle n'a pas été retirée des standards), elle est définie au sein de l'Annexe B du standard ECMA-262 qui commence par : + +

… L'ensemble des fonctionnalités et comportements définis dans cette annexe possède une ou plusieurs caractéristiques indésirables. En l'absence d'une utilisation historique, ces fonctionnalités seraient retirés de la spécification. …
+… Les développeurs ne devraient pas utiliser ces fonctionnalités et comportements ou présupposer qu'elles existent lors de l'écriture de nouveau code ECMAScript. …
+

+
+ +

La fonction dépréciée unescape() calcule une nouvelle chaîne de caractères et remplace les séquences d'échappement hexadécimales par les caractères qu'elles représentent. Les séquences d'échappement peuvent provenir de la fonction {{jsxref("escape")}}. Cette méthode est obsolète, c'est pourquoi il est conseillé d'utiliser {{jsxref("decodeURI")}} ou {{jsxref("decodeURIComponent")}} à la place.

+ +

Note : unescape() ne doit pas être utilisée pour décoder les URI. À la place, utilisez decodeURI.

+ +

Syntaxe

+ +
unescape(str)
+ +

Paramètres

+ +
+
str
+
La chaîne de caractères à décoder.
+
+ +

Valeur de retour

+ +

Une nouvelle chaîne de caractères dont les caractères ont été décodés.

+ +

Description

+ +

La fonction unescape est une propriété de l'objet global.

+ +

Exemples

+ +
unescape("abc123");     // "abc123"
+unescape("%E4%F6%FC");  // "äöü"
+unescape("%u0107");     // "ć"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-unescape-string', 'unescape')}}{{Spec2('ESDraft')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
{{SpecName('ES6', '#sec-unescape-string', 'unescape')}}{{Spec2('ES6')}}Définie dans l'annexe B (normative) pour les fonctionnalités additionnelles d'ECMAScript pour les navigateurs Web.
{{SpecName('ES5.1', '#sec-B.2.2', 'unescape')}}{{Spec2('ES5.1')}}Définie dans l'annexe B (informative) sur la compatibilité.
{{SpecName('ES1', '#sec-15.1.2.5', 'unescape')}}{{Spec2('ES1')}}Définition initiale
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/uneval/index.html b/files/fr/web/javascript/reference/global_objects/uneval/index.html deleted file mode 100644 index 31b0b47555..0000000000 --- a/files/fr/web/javascript/reference/global_objects/uneval/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: uneval() -slug: Web/JavaScript/Reference/Global_Objects/uneval -tags: - - Fonction - - JavaScript - - Non-standard - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/uneval -original_slug: Web/JavaScript/Reference/Objets_globaux/uneval ---- -
{{jsSidebar("Objects")}}{{Non-standard_header}}
- -

La fonction uneval() renvoie une chaîne de caractères représentant le code source d'un objet.

- -

Syntaxe

- -
uneval(objet)
- -

Paramètres

- -
-
objet
-
Une instruction ou une expression JavaScript.
-
- -

Valeur de retour

- -

Une chaîne de caractères qui représente le code source de l'objet indiqué.

- -

Note : Le résultat obtenu ne sera pas une représentation JSON valide de l'objet.

- -

Description

- -

uneval() est une fonction disponible au plus haut niveau et n'est rattachée à aucun objet.

- -

Exemples

- -
var a = 1;
-uneval(a); // renvoie une chaîne qui contient 1
-
-var b = "1";
-uneval(b) // renvoie une chaîne qui contient "1"
-
-uneval(function toto(){}); // renvoie "(function toto(){})"
-
-
-var a = uneval(function toto(){return 'salut'});
-var toto = eval(a);
-toto(); // renvoie "salut"
-
- -

Spécifications

- -

Cette méthode ne fait partie d'aucune spécification.

- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/uneval/index.md b/files/fr/web/javascript/reference/global_objects/uneval/index.md new file mode 100644 index 0000000000..31b0b47555 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/uneval/index.md @@ -0,0 +1,68 @@ +--- +title: uneval() +slug: Web/JavaScript/Reference/Global_Objects/uneval +tags: + - Fonction + - JavaScript + - Non-standard + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/uneval +original_slug: Web/JavaScript/Reference/Objets_globaux/uneval +--- +
{{jsSidebar("Objects")}}{{Non-standard_header}}
+ +

La fonction uneval() renvoie une chaîne de caractères représentant le code source d'un objet.

+ +

Syntaxe

+ +
uneval(objet)
+ +

Paramètres

+ +
+
objet
+
Une instruction ou une expression JavaScript.
+
+ +

Valeur de retour

+ +

Une chaîne de caractères qui représente le code source de l'objet indiqué.

+ +

Note : Le résultat obtenu ne sera pas une représentation JSON valide de l'objet.

+ +

Description

+ +

uneval() est une fonction disponible au plus haut niveau et n'est rattachée à aucun objet.

+ +

Exemples

+ +
var a = 1;
+uneval(a); // renvoie une chaîne qui contient 1
+
+var b = "1";
+uneval(b) // renvoie une chaîne qui contient "1"
+
+uneval(function toto(){}); // renvoie "(function toto(){})"
+
+
+var a = uneval(function toto(){return 'salut'});
+var toto = eval(a);
+toto(); // renvoie "salut"
+
+ +

Spécifications

+ +

Cette méthode ne fait partie d'aucune spécification.

+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/urierror/index.html b/files/fr/web/javascript/reference/global_objects/urierror/index.html deleted file mode 100644 index 3b83e72f11..0000000000 --- a/files/fr/web/javascript/reference/global_objects/urierror/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: URIError -slug: Web/JavaScript/Reference/Global_Objects/URIError -tags: - - Error - - JavaScript - - Object - - Reference - - URIError -translation_of: Web/JavaScript/Reference/Global_Objects/URIError -original_slug: Web/JavaScript/Reference/Objets_globaux/URIError ---- -
{{JSRef}}
- -

L'objet URIError représente une erreur renvoyée lorsqu'une fonction de manipulation d'URI a été utilisée de façon inappropriée.

- -

Syntaxe

- -
new URIError([message[, nomFichier[, numéroLigne]]])
- -

Paramètres

- -
-
message
-
Ce paramètre est optionnel. Il correspond à un chaîne de caractères décrivant l'erreur de façon compréhensible.
-
nomFichier {{non-standard_inline}}
-
Ce paramètre est optionnel. Il correspond au nom du fichier contenant le code à l'origine de l'exception.
-
numéroLigne {{non-standard_inline}}
-
Ce paramètre est optionnel. Il correspond au numéro de la ligne dans le fichier contenant le code qui a entraîné l'exception.
-
- -

Description

- -

Une exception URIError est lancée lorsque les fonctions de gestion d'URI reçoivent une URI mal formée.

- -

Propriétés

- -
-
{{jsxref("URIError.prototype")}}
-
Cette propriété permet d'ajouter des propriétés à un objet URIError.
-
- -

Méthodes

- -

L'objet global URIError ne contient aucune méthode qui lui soit directement attachée. Cependant, il hérite de certaines méthodes grâce à sa chaîne de prototypes.

- -

Instances d'URIError

- -

Propriétés

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/URIError/prototype', 'Propriétés')}}
- -

Méthodes

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/URIError/prototype', 'Méthodes')}}
- -

Exemples

- -

Intercepter une exception URIError

- -
try {
-  decodeURIComponent('%');
-} catch (e) {
-  console.log(e instanceof URIError); // true
-  console.log(e.message);             // "malformed URI sequence"
-  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"
-}
-
- -

Créer une exception URIError

- -
try {
-  throw new URIError('Coucou', 'monFichier.js', 10);
-} catch (e) {
-  console.log(e instanceof URIError); // true
-  console.log(e.message);             // "Coucou"
-  console.log(e.name);                // "URIError"
-  console.log(e.fileName);            // "monFichier.js"
-  console.log(e.lineNumber);          // 10
-  console.log(e.columnNumber);        // 0
-  console.log(e.stack);               // "@Scratchpad/2:2:9\n"
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES3', '#sec-15.11.6.6', 'URIError')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.6', 'URIError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-urierror', 'URIError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-urierror', 'URIError')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/urierror/index.md b/files/fr/web/javascript/reference/global_objects/urierror/index.md new file mode 100644 index 0000000000..3b83e72f11 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/urierror/index.md @@ -0,0 +1,134 @@ +--- +title: URIError +slug: Web/JavaScript/Reference/Global_Objects/URIError +tags: + - Error + - JavaScript + - Object + - Reference + - URIError +translation_of: Web/JavaScript/Reference/Global_Objects/URIError +original_slug: Web/JavaScript/Reference/Objets_globaux/URIError +--- +
{{JSRef}}
+ +

L'objet URIError représente une erreur renvoyée lorsqu'une fonction de manipulation d'URI a été utilisée de façon inappropriée.

+ +

Syntaxe

+ +
new URIError([message[, nomFichier[, numéroLigne]]])
+ +

Paramètres

+ +
+
message
+
Ce paramètre est optionnel. Il correspond à un chaîne de caractères décrivant l'erreur de façon compréhensible.
+
nomFichier {{non-standard_inline}}
+
Ce paramètre est optionnel. Il correspond au nom du fichier contenant le code à l'origine de l'exception.
+
numéroLigne {{non-standard_inline}}
+
Ce paramètre est optionnel. Il correspond au numéro de la ligne dans le fichier contenant le code qui a entraîné l'exception.
+
+ +

Description

+ +

Une exception URIError est lancée lorsque les fonctions de gestion d'URI reçoivent une URI mal formée.

+ +

Propriétés

+ +
+
{{jsxref("URIError.prototype")}}
+
Cette propriété permet d'ajouter des propriétés à un objet URIError.
+
+ +

Méthodes

+ +

L'objet global URIError ne contient aucune méthode qui lui soit directement attachée. Cependant, il hérite de certaines méthodes grâce à sa chaîne de prototypes.

+ +

Instances d'URIError

+ +

Propriétés

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/URIError/prototype', 'Propriétés')}}
+ +

Méthodes

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/URIError/prototype', 'Méthodes')}}
+ +

Exemples

+ +

Intercepter une exception URIError

+ +
try {
+  decodeURIComponent('%');
+} catch (e) {
+  console.log(e instanceof URIError); // true
+  console.log(e.message);             // "malformed URI sequence"
+  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"
+}
+
+ +

Créer une exception URIError

+ +
try {
+  throw new URIError('Coucou', 'monFichier.js', 10);
+} catch (e) {
+  console.log(e instanceof URIError); // true
+  console.log(e.message);             // "Coucou"
+  console.log(e.name);                // "URIError"
+  console.log(e.fileName);            // "monFichier.js"
+  console.log(e.lineNumber);          // 10
+  console.log(e.columnNumber);        // 0
+  console.log(e.stack);               // "@Scratchpad/2:2:9\n"
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES3', '#sec-15.11.6.6', 'URIError')}}{{Spec2('ES3')}}Définition initiale.
{{SpecName('ES5.1', '#sec-15.11.6.6', 'URIError')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-urierror', 'URIError')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-urierror', 'URIError')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/clear/index.html b/files/fr/web/javascript/reference/global_objects/weakmap/clear/index.html deleted file mode 100644 index f270e94820..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakmap/clear/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: WeakMap.prototype.clear() -slug: Web/JavaScript/Reference/Global_Objects/WeakMap/clear -tags: - - JavaScript - - Méthode - - Obsolete - - Prototype - - Reference - - WeakMap -translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/clear -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/clear ---- -
{{JSRef}} {{obsolete_header}}
- -

La méthode clear() permettait de retirer tous les éléments d'un objet WeakMap mais celle-ci ne fait plus partie d'ECMAScript.

- -

Syntaxe

- -
wm.clear();
- -

Exemples

- -
var wm = new WeakMap();
-var obj = {};
-
-wm.set(obj, "toto");
-wm.set(window, "truc");
-
-wm.has(obj); // true
-wm.has(window); // true
-
-wm.clear();
-
-wm.has(obj);  // false
-wm.has(window);  // false
-
- -

Spécifications

- -

Cette méthode ne fait partie d'aucune spécification ou brouillon. Cette méthode a fait partie du brouillon ECMAScript 6 jusqu'à la révision 28 (version du 14 octobre 2014) mais a été retiré par la suite. Cette méthode ne fait pas partie du standard final.

- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakMap.clear")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/clear/index.md b/files/fr/web/javascript/reference/global_objects/weakmap/clear/index.md new file mode 100644 index 0000000000..f270e94820 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakmap/clear/index.md @@ -0,0 +1,51 @@ +--- +title: WeakMap.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/clear +tags: + - JavaScript + - Méthode + - Obsolete + - Prototype + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/clear +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/clear +--- +
{{JSRef}} {{obsolete_header}}
+ +

La méthode clear() permettait de retirer tous les éléments d'un objet WeakMap mais celle-ci ne fait plus partie d'ECMAScript.

+ +

Syntaxe

+ +
wm.clear();
+ +

Exemples

+ +
var wm = new WeakMap();
+var obj = {};
+
+wm.set(obj, "toto");
+wm.set(window, "truc");
+
+wm.has(obj); // true
+wm.has(window); // true
+
+wm.clear();
+
+wm.has(obj);  // false
+wm.has(window);  // false
+
+ +

Spécifications

+ +

Cette méthode ne fait partie d'aucune spécification ou brouillon. Cette méthode a fait partie du brouillon ECMAScript 6 jusqu'à la révision 28 (version du 14 octobre 2014) mais a été retiré par la suite. Cette méthode ne fait pas partie du standard final.

+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakMap.clear")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/delete/index.html b/files/fr/web/javascript/reference/global_objects/weakmap/delete/index.html deleted file mode 100644 index 6f042da1f2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakmap/delete/index.html +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: WeakMap.prototype.delete() -slug: Web/JavaScript/Reference/Global_Objects/WeakMap/delete -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - WeakMap -translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/delete -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/delete ---- -
{{JSRef}}
- -

La méthode delete() retire un élément donné de l'objet {{jsxref("WeakMap")}}.

- -
{{EmbedInteractiveExample("pages/js/weakmap-prototype-delete.html")}}
- -

Syntaxe

- -
wm.delete(clé);
- -

Paramètre

- -
-
clé
-
Il correspond à la clé de l'élément qu'on souhaite retirer de l'objet WeakMap.
-
- -

Valeur de retour

- -

true si un élément de l'objet WeakMap a bien été retiré, false si la clé n'a pas été trouvée ou si la clé n'est pas un objet.

- -

Exemples

- -
var wm = new WeakMap();
-wm.set(window, "toto");
-
-wm.delete(window); // Renvoie true. La suppression a bien eu lieu.
-
-wm.has(window);    // Renvoie false. L'objet window n'est plus dans la WeakMap.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakMap.delete")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/delete/index.md b/files/fr/web/javascript/reference/global_objects/weakmap/delete/index.md new file mode 100644 index 0000000000..6f042da1f2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakmap/delete/index.md @@ -0,0 +1,75 @@ +--- +title: WeakMap.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/delete +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/delete +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/delete +--- +
{{JSRef}}
+ +

La méthode delete() retire un élément donné de l'objet {{jsxref("WeakMap")}}.

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-delete.html")}}
+ +

Syntaxe

+ +
wm.delete(clé);
+ +

Paramètre

+ +
+
clé
+
Il correspond à la clé de l'élément qu'on souhaite retirer de l'objet WeakMap.
+
+ +

Valeur de retour

+ +

true si un élément de l'objet WeakMap a bien été retiré, false si la clé n'a pas été trouvée ou si la clé n'est pas un objet.

+ +

Exemples

+ +
var wm = new WeakMap();
+wm.set(window, "toto");
+
+wm.delete(window); // Renvoie true. La suppression a bien eu lieu.
+
+wm.has(window);    // Renvoie false. L'objet window n'est plus dans la WeakMap.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakMap.delete")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/get/index.html b/files/fr/web/javascript/reference/global_objects/weakmap/get/index.html deleted file mode 100644 index 5b6165d7a1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakmap/get/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: WeakMap.prototype.get() -slug: Web/JavaScript/Reference/Global_Objects/WeakMap/get -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - WeakMap -translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/get -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/get ---- -
{{JSRef}}
- -

La méthode get() permet de renvoyer un élément donné d'un objet WeakMap.

- -
{{EmbedInteractiveExample("pages/js/weakmap-prototype-get.html")}}
- -

Syntaxe

- -
wm.get(clé);
- -

Paramètre

- -
-
clé
-
Ce paramètre est obligatoire. Il correspond à la clé de l'élément qu'on souhaite récupérer depuis l'objet WeakMap.
-
- -

Valeur de retour

- -

L'élément associé à la clé donnée ou undefined si la clé ne peut pas être trouvée dans l'objet WeakMap.

- -

Exemples

- -
var wm = new WeakMap();
-wm.set(window, "toto");
-
-wm.get(window); // Renvoie "toto"
-wm.get("machin");  // Renvoie undefined.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakMap.get")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/get/index.md b/files/fr/web/javascript/reference/global_objects/weakmap/get/index.md new file mode 100644 index 0000000000..5b6165d7a1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakmap/get/index.md @@ -0,0 +1,76 @@ +--- +title: WeakMap.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/get +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/get +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/get +--- +
{{JSRef}}
+ +

La méthode get() permet de renvoyer un élément donné d'un objet WeakMap.

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-get.html")}}
+ +

Syntaxe

+ +
wm.get(clé);
+ +

Paramètre

+ +
+
clé
+
Ce paramètre est obligatoire. Il correspond à la clé de l'élément qu'on souhaite récupérer depuis l'objet WeakMap.
+
+ +

Valeur de retour

+ +

L'élément associé à la clé donnée ou undefined si la clé ne peut pas être trouvée dans l'objet WeakMap.

+ +

Exemples

+ +
var wm = new WeakMap();
+wm.set(window, "toto");
+
+wm.get(window); // Renvoie "toto"
+wm.get("machin");  // Renvoie undefined.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakMap.get")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/has/index.html b/files/fr/web/javascript/reference/global_objects/weakmap/has/index.html deleted file mode 100644 index 69fd37a8e4..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakmap/has/index.html +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: WeakMap.prototype.has() -slug: Web/JavaScript/Reference/Global_Objects/WeakMap/has -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - WeakMap -translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/has -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/has ---- -
{{JSRef}}
- -

La méthode has() renvoie un booléen qui indique s'il existe (ou non) un élément avec une clé donnée au sein de l'objet WeakMap.

- -
{{EmbedInteractiveExample("pages/js/weakmap-prototype-has.html")}}
- -

Syntaxe

- -
wm.has(clé);
- -

Paramètre

- -
-
clé
-
Ce paramètre est obligatoire. Il correspond à la clé de l'élément dont on souhaite savoir s'il est présent dans l'objet WeakMap.
-
- -

Valeur de retour

- -

La méthode renvoie true s'il existe un élément du WeakMap avec la clé donné, false sinon.

- -

Exemples

- -
var wm = new WeakMap();
-wm.set(window, "toto");
-
-wm.has(window); // renvoie true
-wm.has("machin");  // renvoie false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakMap.has")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/has/index.md b/files/fr/web/javascript/reference/global_objects/weakmap/has/index.md new file mode 100644 index 0000000000..69fd37a8e4 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakmap/has/index.md @@ -0,0 +1,76 @@ +--- +title: WeakMap.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/has +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/has +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/has +--- +
{{JSRef}}
+ +

La méthode has() renvoie un booléen qui indique s'il existe (ou non) un élément avec une clé donnée au sein de l'objet WeakMap.

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-has.html")}}
+ +

Syntaxe

+ +
wm.has(clé);
+ +

Paramètre

+ +
+
clé
+
Ce paramètre est obligatoire. Il correspond à la clé de l'élément dont on souhaite savoir s'il est présent dans l'objet WeakMap.
+
+ +

Valeur de retour

+ +

La méthode renvoie true s'il existe un élément du WeakMap avec la clé donné, false sinon.

+ +

Exemples

+ +
var wm = new WeakMap();
+wm.set(window, "toto");
+
+wm.has(window); // renvoie true
+wm.has("machin");  // renvoie false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakMap.has")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/index.html b/files/fr/web/javascript/reference/global_objects/weakmap/index.html deleted file mode 100644 index 6dd5ddfcd3..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakmap/index.html +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: WeakMap -slug: Web/JavaScript/Reference/Global_Objects/WeakMap -tags: - - ECMAScript 2015 - - JavaScript - - Reference - - WeakMap -translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap ---- -
{{JSRef}}
- -

L'objet WeakMap représente une collection de paires clé-valeur dont les clés sont des objets et pour lesquelles les références sont « faibles » et les valeurs des valeurs quelconques.

- -
-

Note : vous pouvez en savoir plus sur les WeakMap en lisant l'article sur les collections à clé.

-
- -

Syntaxe

- -
new WeakMap([itérable])
-
- -

Paramètres

- -
-
itérable
-
Paramètre optionnel. Un tableau (objet Array) ou tout autre objet itérable dont les éléments sont des paires composées d'une clé et d'une valeur (des tableaux de 2 éléments). Chaque paire sera ajoutée à la carte (map en anglais). {{jsxref("null")}} sera traité comme {{jsxref("undefined")}}.
-
- -

Description

- -

Les clés des objets WeakMap sont nécessairement du type Object. {{Glossary("Primitive", "Des types de données primitifs")}} ne sont pas autorisés pour les clés (ex : un {{jsxref("Symbol")}} ne peut pas être une clé dans un WeakMap).

- -

Les clés d'une WeakMap sont référencées faiblement. Cela signifie que s'il n'existe aucune autre référence « forte » vers la clé, l'élément (la clé et la valeur) sera retiré de la WeakMap par le ramasse-miettes.

- -

Pourquoi WeakMap ?

- -

Avec un certain recul, on peut voir que cette API aurait pu être implémentée en JavaScript grâce à deux tableaux (un tableau pour stocker les clés, l'autre pour les valeurs) associées à 4 méthodes.

- -

Une telle implémentation présente deux inconvénients principaux. Le premier est que la recherche serait effectué en O(n) (avec n le nombre de clés). Le second inconvénient concerne les fuites mémoires. Si la carte (map) est construite manuellement, le tableau contenant les clés serait obligé de garder les références vers les objets que sont les clés, ce qui les empêcheraient d'être nettoyés par le ramasse-miette. Grâce aux objets natifs WeakMap, les références vers les clés sont faibles (weak) ce qui permet au ramasse miette de nettoyer l'objet au cas où il n'y aurait pas d'autres références vers cet objet.

- -

Étant donné que les références sont faibles, il est impossible d'énumérer les clés des objets WeakMap (c'est-à-dire qu'on ne dispose pas d'une méthode renvoyant la liste des clés). Si c'était le cas, la liste dépendrait d'un état lié au ramasse-miette et il n'y aurait pas de façon déterministe de connaître le résultat. Si vous souhaitez avoir une liste de clés, vous devriez plutôt utiliser un objet {{jsxref("Map")}}.

- -

Propriétés

- -
-
WeakMap.length
-
La valeur de la propriété length vaut 0.
-
{{jsxref("WeakMap.prototype")}}
-
Cette propriété représente le prototype du constructeur WeakMap. Il permet d'ajouter des propriétés pour toutes les instances de WeakMap.
-
- -

Instances de WeakMap

- -

Toutes les instances de WeakMap héritent de {{jsxref("WeakMap.prototype")}}.

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakMap/prototype','Properties')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakMap/prototype','Methods')}}

- -

Exemples

- -

Utiliser WeakMap

- -
var wm1 = new WeakMap(),
-    wm2 = new WeakMap(),
-    wm3 = new WeakMap();
-var o1 = {},
-    o2 = function(){},
-    o3 = window;
-
-wm1.set(o1, 37);
-wm1.set(o2, "azerty");
-wm2.set(o1, o2); // une valeur peut être n'importe quoi, y compris un objet ou une fonction
-wm2.set(o3, undefined);
-wm2.set(wm1, wm2); // Les clés et les valeurs peuvent n'importe quels objets, y compris des WeakMap
-
-wm1.get(o2); // "azerty"
-wm2.get(o2); // undefined car il n'y a pas de valeur pour o2 sur wm2
-wm2.get(o3); // undefined car c'est la valeur utilisée
-
-wm1.has(o2); // true
-wm2.has(o2); // false
-wm2.has(o3); // true (même si la valeur est 'undefined')
-
-wm3.set(o1, 37);
-wm3.get(o1); // 37
-
-wm1.has(o1);   // true
-wm1.delete(o1);
-wm1.has(o1);   // false
-
-
- -

Implémenter une classe semblable à WeakMap avec une méthode .clear()

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

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-weakmap-objects', 'WeakMap')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-weakmap-objects', 'WeakMap')}}{{Spec2('ES2015')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/index.md b/files/fr/web/javascript/reference/global_objects/weakmap/index.md new file mode 100644 index 0000000000..6dd5ddfcd3 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakmap/index.md @@ -0,0 +1,162 @@ +--- +title: WeakMap +slug: Web/JavaScript/Reference/Global_Objects/WeakMap +tags: + - ECMAScript 2015 + - JavaScript + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap +--- +
{{JSRef}}
+ +

L'objet WeakMap représente une collection de paires clé-valeur dont les clés sont des objets et pour lesquelles les références sont « faibles » et les valeurs des valeurs quelconques.

+ +
+

Note : vous pouvez en savoir plus sur les WeakMap en lisant l'article sur les collections à clé.

+
+ +

Syntaxe

+ +
new WeakMap([itérable])
+
+ +

Paramètres

+ +
+
itérable
+
Paramètre optionnel. Un tableau (objet Array) ou tout autre objet itérable dont les éléments sont des paires composées d'une clé et d'une valeur (des tableaux de 2 éléments). Chaque paire sera ajoutée à la carte (map en anglais). {{jsxref("null")}} sera traité comme {{jsxref("undefined")}}.
+
+ +

Description

+ +

Les clés des objets WeakMap sont nécessairement du type Object. {{Glossary("Primitive", "Des types de données primitifs")}} ne sont pas autorisés pour les clés (ex : un {{jsxref("Symbol")}} ne peut pas être une clé dans un WeakMap).

+ +

Les clés d'une WeakMap sont référencées faiblement. Cela signifie que s'il n'existe aucune autre référence « forte » vers la clé, l'élément (la clé et la valeur) sera retiré de la WeakMap par le ramasse-miettes.

+ +

Pourquoi WeakMap ?

+ +

Avec un certain recul, on peut voir que cette API aurait pu être implémentée en JavaScript grâce à deux tableaux (un tableau pour stocker les clés, l'autre pour les valeurs) associées à 4 méthodes.

+ +

Une telle implémentation présente deux inconvénients principaux. Le premier est que la recherche serait effectué en O(n) (avec n le nombre de clés). Le second inconvénient concerne les fuites mémoires. Si la carte (map) est construite manuellement, le tableau contenant les clés serait obligé de garder les références vers les objets que sont les clés, ce qui les empêcheraient d'être nettoyés par le ramasse-miette. Grâce aux objets natifs WeakMap, les références vers les clés sont faibles (weak) ce qui permet au ramasse miette de nettoyer l'objet au cas où il n'y aurait pas d'autres références vers cet objet.

+ +

Étant donné que les références sont faibles, il est impossible d'énumérer les clés des objets WeakMap (c'est-à-dire qu'on ne dispose pas d'une méthode renvoyant la liste des clés). Si c'était le cas, la liste dépendrait d'un état lié au ramasse-miette et il n'y aurait pas de façon déterministe de connaître le résultat. Si vous souhaitez avoir une liste de clés, vous devriez plutôt utiliser un objet {{jsxref("Map")}}.

+ +

Propriétés

+ +
+
WeakMap.length
+
La valeur de la propriété length vaut 0.
+
{{jsxref("WeakMap.prototype")}}
+
Cette propriété représente le prototype du constructeur WeakMap. Il permet d'ajouter des propriétés pour toutes les instances de WeakMap.
+
+ +

Instances de WeakMap

+ +

Toutes les instances de WeakMap héritent de {{jsxref("WeakMap.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakMap/prototype','Properties')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakMap/prototype','Methods')}}

+ +

Exemples

+ +

Utiliser WeakMap

+ +
var wm1 = new WeakMap(),
+    wm2 = new WeakMap(),
+    wm3 = new WeakMap();
+var o1 = {},
+    o2 = function(){},
+    o3 = window;
+
+wm1.set(o1, 37);
+wm1.set(o2, "azerty");
+wm2.set(o1, o2); // une valeur peut être n'importe quoi, y compris un objet ou une fonction
+wm2.set(o3, undefined);
+wm2.set(wm1, wm2); // Les clés et les valeurs peuvent n'importe quels objets, y compris des WeakMap
+
+wm1.get(o2); // "azerty"
+wm2.get(o2); // undefined car il n'y a pas de valeur pour o2 sur wm2
+wm2.get(o3); // undefined car c'est la valeur utilisée
+
+wm1.has(o2); // true
+wm2.has(o2); // false
+wm2.has(o3); // true (même si la valeur est 'undefined')
+
+wm3.set(o1, 37);
+wm3.get(o1); // 37
+
+wm1.has(o1);   // true
+wm1.delete(o1);
+wm1.has(o1);   // false
+
+
+ +

Implémenter une classe semblable à WeakMap avec une méthode .clear()

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

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-weakmap-objects', 'WeakMap')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-weakmap-objects', 'WeakMap')}}{{Spec2('ES2015')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/set/index.html b/files/fr/web/javascript/reference/global_objects/weakmap/set/index.html deleted file mode 100644 index 40181140c0..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakmap/set/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: WeakMap.prototype.set() -slug: Web/JavaScript/Reference/Global_Objects/WeakMap/set -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - WeakMap -translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/set -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/set ---- -
s{{JSRef}}
- -

La méthode set() permet d'ajouter un nouvel élément avec une clé et une valeur à un objet WeakMap.

- -
{{EmbedInteractiveExample("pages/js/weakmap-prototype-set.html")}}
- -

Syntaxe

- -
wm.set(clé, valeur);
- -

Paramètres

- -
-
clé
-
Ce paramètre est obligatoire et doit être un objet. Il correspond à la clé de l'élément qu'on souhaite ajouter à l'objet WeakMap.
-
valeur
-
Ce paramètre est obligatoire et peut avoir n'importe quel type. Il correspond à la valeur de l'élément qu'on souhaite ajouter à l'objet WeakMap.
-
- -

Valeur de retour

- -

Cette méthode renvoie l'objet WeakMap potentiellement mis à jour.

- -

Exemples

- -
var wm = new WeakMap();
-var obj = {};
-
-// Ajouter un nouvel élément à la WeakMap
-wm.set(obj, "toto").set(window, "truc"); // on peut chaîner les instructions
-
-// Mettre à jour un élément de la WeakMap
-wm.set(obj, "machin");
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakMap.set")}}

- -

Notes relatives à Firefox

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/set/index.md b/files/fr/web/javascript/reference/global_objects/weakmap/set/index.md new file mode 100644 index 0000000000..40181140c0 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakmap/set/index.md @@ -0,0 +1,87 @@ +--- +title: WeakMap.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/WeakMap/set +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - WeakMap +translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/set +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap/set +--- +
s{{JSRef}}
+ +

La méthode set() permet d'ajouter un nouvel élément avec une clé et une valeur à un objet WeakMap.

+ +
{{EmbedInteractiveExample("pages/js/weakmap-prototype-set.html")}}
+ +

Syntaxe

+ +
wm.set(clé, valeur);
+ +

Paramètres

+ +
+
clé
+
Ce paramètre est obligatoire et doit être un objet. Il correspond à la clé de l'élément qu'on souhaite ajouter à l'objet WeakMap.
+
valeur
+
Ce paramètre est obligatoire et peut avoir n'importe quel type. Il correspond à la valeur de l'élément qu'on souhaite ajouter à l'objet WeakMap.
+
+ +

Valeur de retour

+ +

Cette méthode renvoie l'objet WeakMap potentiellement mis à jour.

+ +

Exemples

+ +
var wm = new WeakMap();
+var obj = {};
+
+// Ajouter un nouvel élément à la WeakMap
+wm.set(obj, "toto").set(window, "truc"); // on peut chaîner les instructions
+
+// Mettre à jour un élément de la WeakMap
+wm.set(obj, "machin");
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakMap.set")}}

+ +

Notes relatives à Firefox

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakset/add/index.html b/files/fr/web/javascript/reference/global_objects/weakset/add/index.html deleted file mode 100644 index dea306520c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakset/add/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: WeakSet.prototype.add() -slug: Web/JavaScript/Reference/Global_Objects/WeakSet/add -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - WeakSet -translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/add -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet/add ---- -
{{JSRef}}
- -

La méthode add() permet d'ajouter un nouvel objet à un objet WeakSet.

- -
{{EmbedInteractiveExample("pages/js/weakset-prototype-add.html", "taller")}}
- -

Syntaxe

- -
ws.add(valeur);
- -

Paramètres

- -
-
valeur
-
Ce paramètre est obligatoire. Il correspond à l'objet qu'on souhaite ajouter à l'ensemble WeakSet.
-
- -

Valeur de retour

- -

L'objet {{jsxref("WeakSet")}}.

- -

Exemples

- -
var ws = new WeakSet();
-
-ws.add(window); // on ajouter l'objet window à l'objet WeakSet
-
-ws.has(window); // tru
-
-// WeakSet ne peut contenir que des objets
-ws.add(1);
-// TypeError: Invalid value used in weak set -> Chrome
-// TypeError: 1 is not a non-null obect -> Firefox
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset.prototype.add', 'WeakSet.prototype.add')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset.prototype.add', 'WeakSet.prototype.add')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakSet.add")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakset/add/index.md b/files/fr/web/javascript/reference/global_objects/weakset/add/index.md new file mode 100644 index 0000000000..dea306520c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakset/add/index.md @@ -0,0 +1,81 @@ +--- +title: WeakSet.prototype.add() +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/add +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/add +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet/add +--- +
{{JSRef}}
+ +

La méthode add() permet d'ajouter un nouvel objet à un objet WeakSet.

+ +
{{EmbedInteractiveExample("pages/js/weakset-prototype-add.html", "taller")}}
+ +

Syntaxe

+ +
ws.add(valeur);
+ +

Paramètres

+ +
+
valeur
+
Ce paramètre est obligatoire. Il correspond à l'objet qu'on souhaite ajouter à l'ensemble WeakSet.
+
+ +

Valeur de retour

+ +

L'objet {{jsxref("WeakSet")}}.

+ +

Exemples

+ +
var ws = new WeakSet();
+
+ws.add(window); // on ajouter l'objet window à l'objet WeakSet
+
+ws.has(window); // tru
+
+// WeakSet ne peut contenir que des objets
+ws.add(1);
+// TypeError: Invalid value used in weak set -> Chrome
+// TypeError: 1 is not a non-null obect -> Firefox
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset.prototype.add', 'WeakSet.prototype.add')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset.prototype.add', 'WeakSet.prototype.add')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakSet.add")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakset/delete/index.html b/files/fr/web/javascript/reference/global_objects/weakset/delete/index.html deleted file mode 100644 index 0acea3aeee..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakset/delete/index.html +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: WeakSet.prototype.delete() -slug: Web/JavaScript/Reference/Global_Objects/WeakSet/delete -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - WeakSet -translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/delete -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet/delete ---- -
{{JSRef}}
- -

La méthode delete() permet de retirer un élément donné d'un objet WeakSet.

- -
{{EmbedInteractiveExample("pages/js/weakset-prototype-delete.html")}}
- -

Syntaxe

- -
ws.delete(valeur);
- -

Paramètre

- -
-
valeur
-
Ce paramètre est obligatoire. Il correspond à l'objet qu'on souhaite retirer de l'ensemble WeakSet.
-
- -

Valeur de retour

- -

true si un élément de l'objet WeakSet a bien été retiré, false sinon (dans le cas où la clé n'a pas été trouvée ou si la clé n'est pas un objet).

- -

Exemples

- -
var ws = new WeakSet();
-var obj = {};
-
-ws.add(window);
-
-ws.delete(obj);    // Renvoie false. Aucun objet obj n'a été trouvé ni retiré.
-ws.delete(window); // Renvoie true, l'objet window a pu être retiré.
-
-ws.has(window);    // Renvoie false, window n'appartient plus au WeakSet.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset.prototype.delete', 'WeakSet.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset.prototype.delete', 'WeakSet.prototype.delete')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakSet.delete")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakset/delete/index.md b/files/fr/web/javascript/reference/global_objects/weakset/delete/index.md new file mode 100644 index 0000000000..0acea3aeee --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakset/delete/index.md @@ -0,0 +1,79 @@ +--- +title: WeakSet.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/delete +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/delete +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet/delete +--- +
{{JSRef}}
+ +

La méthode delete() permet de retirer un élément donné d'un objet WeakSet.

+ +
{{EmbedInteractiveExample("pages/js/weakset-prototype-delete.html")}}
+ +

Syntaxe

+ +
ws.delete(valeur);
+ +

Paramètre

+ +
+
valeur
+
Ce paramètre est obligatoire. Il correspond à l'objet qu'on souhaite retirer de l'ensemble WeakSet.
+
+ +

Valeur de retour

+ +

true si un élément de l'objet WeakSet a bien été retiré, false sinon (dans le cas où la clé n'a pas été trouvée ou si la clé n'est pas un objet).

+ +

Exemples

+ +
var ws = new WeakSet();
+var obj = {};
+
+ws.add(window);
+
+ws.delete(obj);    // Renvoie false. Aucun objet obj n'a été trouvé ni retiré.
+ws.delete(window); // Renvoie true, l'objet window a pu être retiré.
+
+ws.has(window);    // Renvoie false, window n'appartient plus au WeakSet.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset.prototype.delete', 'WeakSet.prototype.delete')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset.prototype.delete', 'WeakSet.prototype.delete')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakSet.delete")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakset/has/index.html b/files/fr/web/javascript/reference/global_objects/weakset/has/index.html deleted file mode 100644 index 4b1e5ddf92..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakset/has/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: WeakSet.prototype.has() -slug: Web/JavaScript/Reference/Global_Objects/WeakSet/has -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Prototype - - Reference - - WeakSet -translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/has -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet/has ---- -
{{JSRef}}
- -

La méthode has() renvoie un booléen indiquant si un objet donné est contenu dans l'ensemble WeakSet.

- -
{{EmbedInteractiveExample("pages/js/weakset-prototype-has.html")}}
- -

Syntaxe

- -
ws.has(valeur);
- -

Paramètres

- -
-
valeur
-
Ce paramètre est obligatoire. Il représente l'objet dont on souhaite savoir s'il est, ou non, présent dans l'objet WeakSet.
-
- -

Valeur renvoyée

- -
-
Booléen
-
La méthode renvoie true si l'objet WeakSet contient bien un élément avec la valeur donnée, false sinon.
-
- -

Exemples

- -
var ws = new WeakSet();
-var obj = {};
-ws.add(window);
-
-mySet.has(window);  // renvoie true
-mySet.has(obj);     // renvoie false
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset.prototype.has', 'WeakSet.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset.prototype.has', 'WeakSet.prototype.has')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WeakSet.has")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakset/has/index.md b/files/fr/web/javascript/reference/global_objects/weakset/has/index.md new file mode 100644 index 0000000000..4b1e5ddf92 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakset/has/index.md @@ -0,0 +1,80 @@ +--- +title: WeakSet.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/WeakSet/has +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Prototype + - Reference + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/has +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet/has +--- +
{{JSRef}}
+ +

La méthode has() renvoie un booléen indiquant si un objet donné est contenu dans l'ensemble WeakSet.

+ +
{{EmbedInteractiveExample("pages/js/weakset-prototype-has.html")}}
+ +

Syntaxe

+ +
ws.has(valeur);
+ +

Paramètres

+ +
+
valeur
+
Ce paramètre est obligatoire. Il représente l'objet dont on souhaite savoir s'il est, ou non, présent dans l'objet WeakSet.
+
+ +

Valeur renvoyée

+ +
+
Booléen
+
La méthode renvoie true si l'objet WeakSet contient bien un élément avec la valeur donnée, false sinon.
+
+ +

Exemples

+ +
var ws = new WeakSet();
+var obj = {};
+ws.add(window);
+
+mySet.has(window);  // renvoie true
+mySet.has(obj);     // renvoie false
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset.prototype.has', 'WeakSet.prototype.has')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset.prototype.has', 'WeakSet.prototype.has')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WeakSet.has")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/weakset/index.html b/files/fr/web/javascript/reference/global_objects/weakset/index.html deleted file mode 100644 index d9709e78fd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/weakset/index.html +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: WeakSet -slug: Web/JavaScript/Reference/Global_Objects/WeakSet -tags: - - ECMAScript 2015 - - JavaScript - - Reference - - WeakSet -translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet -original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet ---- -
{{JSRef}}
- -

L'objet WeakSet permet de créer un ensemble dont les objets sont contenus avec des références faibles.

- -

Syntaxe

- -
new WeakSet([itérable]);
- -

Paramètre

- -
-
itérable
-
Si un objet itérable est présent comme argument, ses éléments seront ajoutés au nouvel objet WeakSet. {{jsxref("null")}} est traité comme {{jsxref("undefined")}}.
-
- -

Exemples

- -
var ws = new WeakSet();
-var toto = {};
-var truc = {};
-
-ws.add(toto);
-ws.add(truc);
-
-ws.has(toto);  // true
-ws.has(truc);  // true
-
-ws.delete(toto); // retire toto de l'ensemble
-ws.has(toto);    // false, toto a été enlevé
-
- -

On notera que toto !== truc. Bien que ce soient des objets similaires, ce ne sont pas les mêmes objets. Aussi, les deux sont ajoutés à l'ensemble.

- -

Description

- -

Les WeakSet sont des ensembles d'objets. Un objet présent dans un objet WeakSet ne peut apparaître qu'une seule fois, il est unique pour un WeakSet donné.

- -

Les principales différences avec l'objet {{jsxref("Set")}} sont les suivantes :

- - - -

Propriétés

- -
-
WeakSet.length
-
La valeur de la propriété length est 0.
-
{{jsxref("WeakSet.prototype")}}
-
Cette propriété représente le prototype pour le constructeur WeakSet. Il permet d'ajouter des propriétés pour tous les objets WeakSet.
-
- -

Instances de WeakSet

- -

Toutes les instances de WeakSet héritent de {{jsxref("WeakSet.prototype")}}.

- -

Propriétés

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakSet/prototype','Propri.C3.A9t.C3.A9s')}}

- -

Méthodes

- -

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakSet/prototype','M.C3.A9thodes')}}

- -

Exemples

- -

Détecter les références circulaires

- -

Les fonctions récursives doivent faire attention aux structures de données circulaire qu'elles consommeraient. Les objets WeakSets peuvent être utilisé pour ça :

- -
// Appeler un callback sur ce qui est stocké dans un objet
-function execRecursively(fn, subject, _refs = null){
-  if(!_refs)
-    _refs = new WeakSet();
-
-  // On évite une récursion infinie
-  if(_refs.has(subject))
-    return;
-
-  fn(subject);
-  if("object" === typeof subject){
-    _refs.add(subject);
-    for(let key in subject)
-      execRecursively(fn, subject[key], _refs);
-  }
-}
-
-const toto = {
-  toto: "Toto",
-  truc: {
-    truc: "Truc"
-  }
-};
-
-toto.truc.machin = toto; // Référence circulaire !
-execRecursively(obj => console.log(obj), toto);
-
- -

Ici, on a un objet WeakSet qui est créé lors de la première exécution et qui est passé ensuite à chaque appel qui suit (via l'argument interne _refs). Le nombre d'objets ou l'ordre de parcours n'a pas d'importance et un objet WeakSet est donc plus adapté (y compris en termes de performances) qu'un {{jsxref("Set")}}, notamment si un grand nombre d'objets sont concernés.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/weakset/index.md b/files/fr/web/javascript/reference/global_objects/weakset/index.md new file mode 100644 index 0000000000..d9709e78fd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/weakset/index.md @@ -0,0 +1,145 @@ +--- +title: WeakSet +slug: Web/JavaScript/Reference/Global_Objects/WeakSet +tags: + - ECMAScript 2015 + - JavaScript + - Reference + - WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet +original_slug: Web/JavaScript/Reference/Objets_globaux/WeakSet +--- +
{{JSRef}}
+ +

L'objet WeakSet permet de créer un ensemble dont les objets sont contenus avec des références faibles.

+ +

Syntaxe

+ +
new WeakSet([itérable]);
+ +

Paramètre

+ +
+
itérable
+
Si un objet itérable est présent comme argument, ses éléments seront ajoutés au nouvel objet WeakSet. {{jsxref("null")}} est traité comme {{jsxref("undefined")}}.
+
+ +

Exemples

+ +
var ws = new WeakSet();
+var toto = {};
+var truc = {};
+
+ws.add(toto);
+ws.add(truc);
+
+ws.has(toto);  // true
+ws.has(truc);  // true
+
+ws.delete(toto); // retire toto de l'ensemble
+ws.has(toto);    // false, toto a été enlevé
+
+ +

On notera que toto !== truc. Bien que ce soient des objets similaires, ce ne sont pas les mêmes objets. Aussi, les deux sont ajoutés à l'ensemble.

+ +

Description

+ +

Les WeakSet sont des ensembles d'objets. Un objet présent dans un objet WeakSet ne peut apparaître qu'une seule fois, il est unique pour un WeakSet donné.

+ +

Les principales différences avec l'objet {{jsxref("Set")}} sont les suivantes :

+ + + +

Propriétés

+ +
+
WeakSet.length
+
La valeur de la propriété length est 0.
+
{{jsxref("WeakSet.prototype")}}
+
Cette propriété représente le prototype pour le constructeur WeakSet. Il permet d'ajouter des propriétés pour tous les objets WeakSet.
+
+ +

Instances de WeakSet

+ +

Toutes les instances de WeakSet héritent de {{jsxref("WeakSet.prototype")}}.

+ +

Propriétés

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakSet/prototype','Propri.C3.A9t.C3.A9s')}}

+ +

Méthodes

+ +

{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakSet/prototype','M.C3.A9thodes')}}

+ +

Exemples

+ +

Détecter les références circulaires

+ +

Les fonctions récursives doivent faire attention aux structures de données circulaire qu'elles consommeraient. Les objets WeakSets peuvent être utilisé pour ça :

+ +
// Appeler un callback sur ce qui est stocké dans un objet
+function execRecursively(fn, subject, _refs = null){
+  if(!_refs)
+    _refs = new WeakSet();
+
+  // On évite une récursion infinie
+  if(_refs.has(subject))
+    return;
+
+  fn(subject);
+  if("object" === typeof subject){
+    _refs.add(subject);
+    for(let key in subject)
+      execRecursively(fn, subject[key], _refs);
+  }
+}
+
+const toto = {
+  toto: "Toto",
+  truc: {
+    truc: "Truc"
+  }
+};
+
+toto.truc.machin = toto; // Référence circulaire !
+execRecursively(obj => console.log(obj), toto);
+
+ +

Ici, on a un objet WeakSet qui est créé lors de la première exécution et qui est passé ensuite à chaque appel qui suit (via l'argument interne _refs). Le nombre d'objets ou l'ordre de parcours n'a pas d'importance et un objet WeakSet est donc plus adapté (y compris en termes de performances) qu'un {{jsxref("Set")}}, notamment si un grand nombre d'objets sont concernés.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/compile/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/compile/index.html deleted file mode 100644 index 5e98ae5ba7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/compile/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: WebAssembly.compile() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile -tags: - - API - - JavaScript - - Méthode - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/compile ---- -
{{JSRef}}
- -

La méthode WebAssembly.compile(), permet de compiler un module ({{jsxref("WebAssembly.Module")}} à partir d'un code binaire WebAssembly. Cette fonction est utile lorsqu'il est nécessaire de compiler un module avant de l'instancier (dans les autres cas, la méthode {{jsxref("WebAssembly.instantiate()")}} sera plus pertinente).

- -

Syntaxe

- -
Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);
- -

Paramètres

- -
-
bufferSource
-
Un tableau typé ou un {{jsxref("ArrayBuffer")}} contenant le bytecode du module WebAssembly qu'on souhaite compiler.
-
- -

Valeur de retour

- -

Une promesse ({{jsxref("Promise")}}) dont la valeur de résolution est une instance de {{jsxref("WebAssembly.Module")}} qui représente le module compilé.

- -

Exceptions

- - - -

Exemples

- -

Dans l'exemple qui suit, on compile le bytecode simple.wasm grâce à la méthode compile() puis on envoie le contenu à un worker grâce à la méthode postMessage().

- -
var worker = new Worker("wasm_worker.js");
-
-fetch('simple.wasm').then(response =>
-  response.arrayBuffer()
-).then(bytes =>
-  WebAssembly.compile(bytes)
-).then(mod =>
-  worker.postMessage(mod)
-);
- -
-

Note : Dans la plupart des cas, mieux vaudra utiliser {{jsxref("WebAssembly.compileStreaming()")}} qui est plus efficace que compile().

-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblycompile', 'compile()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.compile")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/compile/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/compile/index.md new file mode 100644 index 0000000000..5e98ae5ba7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/compile/index.md @@ -0,0 +1,86 @@ +--- +title: WebAssembly.compile() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +tags: + - API + - JavaScript + - Méthode + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/compile +--- +
{{JSRef}}
+ +

La méthode WebAssembly.compile(), permet de compiler un module ({{jsxref("WebAssembly.Module")}} à partir d'un code binaire WebAssembly. Cette fonction est utile lorsqu'il est nécessaire de compiler un module avant de l'instancier (dans les autres cas, la méthode {{jsxref("WebAssembly.instantiate()")}} sera plus pertinente).

+ +

Syntaxe

+ +
Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);
+ +

Paramètres

+ +
+
bufferSource
+
Un tableau typé ou un {{jsxref("ArrayBuffer")}} contenant le bytecode du module WebAssembly qu'on souhaite compiler.
+
+ +

Valeur de retour

+ +

Une promesse ({{jsxref("Promise")}}) dont la valeur de résolution est une instance de {{jsxref("WebAssembly.Module")}} qui représente le module compilé.

+ +

Exceptions

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on compile le bytecode simple.wasm grâce à la méthode compile() puis on envoie le contenu à un worker grâce à la méthode postMessage().

+ +
var worker = new Worker("wasm_worker.js");
+
+fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(bytes =>
+  WebAssembly.compile(bytes)
+).then(mod =>
+  worker.postMessage(mod)
+);
+ +
+

Note : Dans la plupart des cas, mieux vaudra utiliser {{jsxref("WebAssembly.compileStreaming()")}} qui est plus efficace que compile().

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblycompile', 'compile()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.compile")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.html deleted file mode 100644 index 0807afd7da..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: WebAssembly.CompileError() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError -tags: - - API - - CompileError - - Constructeur - - Error - - JavaScript - - NativeError - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/CompileError ---- -
{{JSRef}}
- -

Le constructeur WebAssembly.CompileError() permet de créer une nouvelle instance de CompileError qui indique qu'une erreur s'est produite lors du décodage du code WebAssembly ou lors de sa validation.

- -

Syntaxe

- -
new WebAssembly.CompileError(message, nomFichier, numeroLigne)
- -

Paramètres

- -
-
message {{optional_inline}}
-
Une description, compréhensible par un humain, de l'erreur qui s'est produite.
-
nomFichier {{optional_inline}}{{non-standard_inline}}
-
Le nom du fichier contenant le code à l'origine de l'exception.
-
numeroLigne {{optional_inline}}{{non-standard_inline}}
-
Le numéro de la ligne du fichier à l'origine de l'exception.
-
- -

Propriétés

- -

Le constructeur CompileError ne possède aucune propriété propre. En revanche, il hérite de certaines propriétés via sa chaîne de prototypes.

- -
-
WebAssembly.CompileError.prototype.constructor
-
Définit la fonction qui crée le prototype d'une instance.
-
{{jsxref("Error.prototype.message", "WebAssembly.CompileError.prototype.message")}}
-
Le message qui décrit l'erreur. Bien qu'ECMA-262 indique que  l'instance devrait fournir sa propre propriété message, pour SpiderMonkey, celle-ci est héritée depuis {{jsxref("Error.prototype.message")}}.
-
{{jsxref("Error.prototype.name", "WebAssembly.CompileError.prototype.name")}}
-
Le nom de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.fileName", "WebAssembly.CompileError.prototype.fileName")}}
-
Le chemin vers le fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.lineNumber", "WebAssembly.CompileError.prototype.lineNumber")}}
-
Le numéro de la ligne dans le fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.columnNumber", "WebAssembly.CompileError.prototype.columnNumber")}}
-
Le numéro de la colonne dans la ligne du fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.stack", "WebAssembly.CompileError.prototype.stack")}}
-
La pile d'appel. Cette propriété est héritée via {{jsxref("Error")}}.
-
- -

Méthodes

- -

Le constructeur CompileError ne contient aucune méthode qui lui soit propre. En revanche, il hérite de certaines méthodes grâce à sa chaîne de prototypes.

- -
-
{{jsxref("Error.prototype.toSource", "WebAssembly.CompileError.prototype.toSource()")}}
-
Cette méthode renvoie un code qui pourrait provoquer la même erreur. Elle est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.toString", "WebAssembly.CompileError.prototype.toString()")}}
-
Cette méthode renvoie une chaîne de caractères qui représente l'objet de l'erreur. Elle est héritée via {{jsxref("Error")}}.
-
- -

Exemples

- -

Le fragment de code qui suit crée une instance de CompileError puis imprime ses détails dans la console :

- -
try {
-  throw new WebAssembly.CompileError('Coucou', 'unFichier', 10);
-} catch (e) {
-  console.log(e instanceof CompileError); // true
-  console.log(e.message);                 // "Coucou"
-  console.log(e.name);                    // "CompileError"
-  console.log(e.fileName);                // "unFichier"
-  console.log(e.lineNumber);              // 10
-  console.log(e.columnNumber);            // 0
-  console.log(e.stack);                   // la pile d'appel pour le code
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}Brouillon pour la définition Initiale de WebAssembly.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}Définition des types standards pour NativeError.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.CompileError")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.md new file mode 100644 index 0000000000..0807afd7da --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/compileerror/index.md @@ -0,0 +1,117 @@ +--- +title: WebAssembly.CompileError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError +tags: + - API + - CompileError + - Constructeur + - Error + - JavaScript + - NativeError + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/CompileError +--- +
{{JSRef}}
+ +

Le constructeur WebAssembly.CompileError() permet de créer une nouvelle instance de CompileError qui indique qu'une erreur s'est produite lors du décodage du code WebAssembly ou lors de sa validation.

+ +

Syntaxe

+ +
new WebAssembly.CompileError(message, nomFichier, numeroLigne)
+ +

Paramètres

+ +
+
message {{optional_inline}}
+
Une description, compréhensible par un humain, de l'erreur qui s'est produite.
+
nomFichier {{optional_inline}}{{non-standard_inline}}
+
Le nom du fichier contenant le code à l'origine de l'exception.
+
numeroLigne {{optional_inline}}{{non-standard_inline}}
+
Le numéro de la ligne du fichier à l'origine de l'exception.
+
+ +

Propriétés

+ +

Le constructeur CompileError ne possède aucune propriété propre. En revanche, il hérite de certaines propriétés via sa chaîne de prototypes.

+ +
+
WebAssembly.CompileError.prototype.constructor
+
Définit la fonction qui crée le prototype d'une instance.
+
{{jsxref("Error.prototype.message", "WebAssembly.CompileError.prototype.message")}}
+
Le message qui décrit l'erreur. Bien qu'ECMA-262 indique que  l'instance devrait fournir sa propre propriété message, pour SpiderMonkey, celle-ci est héritée depuis {{jsxref("Error.prototype.message")}}.
+
{{jsxref("Error.prototype.name", "WebAssembly.CompileError.prototype.name")}}
+
Le nom de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.fileName", "WebAssembly.CompileError.prototype.fileName")}}
+
Le chemin vers le fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.lineNumber", "WebAssembly.CompileError.prototype.lineNumber")}}
+
Le numéro de la ligne dans le fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.columnNumber", "WebAssembly.CompileError.prototype.columnNumber")}}
+
Le numéro de la colonne dans la ligne du fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.stack", "WebAssembly.CompileError.prototype.stack")}}
+
La pile d'appel. Cette propriété est héritée via {{jsxref("Error")}}.
+
+ +

Méthodes

+ +

Le constructeur CompileError ne contient aucune méthode qui lui soit propre. En revanche, il hérite de certaines méthodes grâce à sa chaîne de prototypes.

+ +
+
{{jsxref("Error.prototype.toSource", "WebAssembly.CompileError.prototype.toSource()")}}
+
Cette méthode renvoie un code qui pourrait provoquer la même erreur. Elle est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.toString", "WebAssembly.CompileError.prototype.toString()")}}
+
Cette méthode renvoie une chaîne de caractères qui représente l'objet de l'erreur. Elle est héritée via {{jsxref("Error")}}.
+
+ +

Exemples

+ +

Le fragment de code qui suit crée une instance de CompileError puis imprime ses détails dans la console :

+ +
try {
+  throw new WebAssembly.CompileError('Coucou', 'unFichier', 10);
+} catch (e) {
+  console.log(e instanceof CompileError); // true
+  console.log(e.message);                 // "Coucou"
+  console.log(e.name);                    // "CompileError"
+  console.log(e.fileName);                // "unFichier"
+  console.log(e.lineNumber);              // 10
+  console.log(e.columnNumber);            // 0
+  console.log(e.stack);                   // la pile d'appel pour le code
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}Brouillon pour la définition Initiale de WebAssembly.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}Définition des types standards pour NativeError.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.CompileError")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html deleted file mode 100644 index 539c7b3e2f..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: WebAssembly.compileStreaming() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming -tags: - - API - - JavaScript - - Méthode - - Object - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/compileStreaming ---- -
{{JSRef}}
- -

La fonction WebAssembly.compileStreaming() permet de compiler un module WebAssembly (c'est-à-dire un objet {{jsxref("WebAssembly.Module")}}) depuis un flux source. Cette fonction est utile si on doit compiler un module avant de l'instancier séparement, sinon on utilisera plutôt {{jsxref("WebAssembly.instantiateStreaming()")}}.

- -

Syntaxe

- -
Promise<WebAssembly.Module> WebAssembly.compileStreaming(source);
- -

Paramètres

- -
-
source
-
Un objet {{domxref("Response")}} ou une promesse qui sera résolue avec un objet {{domxref("Response")}} qui représentee la source du module .wasm qu'on souhaite manipuler comme un flux et compiler.
-
- -

Valeur de retour

- -

Un objet Promise dont la valeur de résolution est un objet {{jsxref("WebAssembly.Module")}} qui représente le module compilé.

- -

Exceptions

- - - -

Exemples

- -

Dans l'exemple suivant (également disponible sur GitHub : compile-streaming.html et avec le résultat live), on récupère un flux dedpuis un module .wasm puis on le compile en un objet {{jsxref("WebAssembly.Module")}}. La fonction compileStreaming()  acceptant une promesse pour un objet {{domxref("Response")}}, on peut directement passer l'appel à  {{domxref("WindowOrWorkerGlobalScope.fetch()")}} qui transfèrera la réponse dès que la promesse sera tenue.

- -
var importObject = { imports: { imported_func: arg => console.log(arg) } };
-
-WebAssembly.compileStreaming(fetch('simple.wasm'))
-.then(module => WebAssembly.instantiate(module, importObject))
-.then(instance => instance.exports.exported_func());
- -

Le module est ensuite instancié grâce à la fonction {{jsxref("WebAssembly.instantiate()")}}. Enfin, on appelle la fonction exportée.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly Embedding', '#webassemblycompilestreaming', 'compileStreaming()')}}{{Spec2('WebAssembly Embedding')}}Brouillon pour la définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.compileStreaming")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.md new file mode 100644 index 0000000000..539c7b3e2f --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/compilestreaming/index.md @@ -0,0 +1,80 @@ +--- +title: WebAssembly.compileStreaming() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +tags: + - API + - JavaScript + - Méthode + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/compileStreaming +--- +
{{JSRef}}
+ +

La fonction WebAssembly.compileStreaming() permet de compiler un module WebAssembly (c'est-à-dire un objet {{jsxref("WebAssembly.Module")}}) depuis un flux source. Cette fonction est utile si on doit compiler un module avant de l'instancier séparement, sinon on utilisera plutôt {{jsxref("WebAssembly.instantiateStreaming()")}}.

+ +

Syntaxe

+ +
Promise<WebAssembly.Module> WebAssembly.compileStreaming(source);
+ +

Paramètres

+ +
+
source
+
Un objet {{domxref("Response")}} ou une promesse qui sera résolue avec un objet {{domxref("Response")}} qui représentee la source du module .wasm qu'on souhaite manipuler comme un flux et compiler.
+
+ +

Valeur de retour

+ +

Un objet Promise dont la valeur de résolution est un objet {{jsxref("WebAssembly.Module")}} qui représente le module compilé.

+ +

Exceptions

+ + + +

Exemples

+ +

Dans l'exemple suivant (également disponible sur GitHub : compile-streaming.html et avec le résultat live), on récupère un flux dedpuis un module .wasm puis on le compile en un objet {{jsxref("WebAssembly.Module")}}. La fonction compileStreaming()  acceptant une promesse pour un objet {{domxref("Response")}}, on peut directement passer l'appel à  {{domxref("WindowOrWorkerGlobalScope.fetch()")}} qui transfèrera la réponse dès que la promesse sera tenue.

+ +
var importObject = { imports: { imported_func: arg => console.log(arg) } };
+
+WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(module => WebAssembly.instantiate(module, importObject))
+.then(instance => instance.exports.exported_func());
+ +

Le module est ensuite instancié grâce à la fonction {{jsxref("WebAssembly.instantiate()")}}. Enfin, on appelle la fonction exportée.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly Embedding', '#webassemblycompilestreaming', 'compileStreaming()')}}{{Spec2('WebAssembly Embedding')}}Brouillon pour la définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.compileStreaming")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/global/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/global/index.html deleted file mode 100644 index d31849c70e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/global/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: WebAssembly.Global -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global -tags: - - API - - Constructor - - JavaScript - - Reference - - TopicStub - - WebAssembly - - global -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Global ---- -
{{JSRef}}
- -

Un objet WebAssembly.Global représente une instance d'une variable globale, accessible depuis le code JavaScript et importable/exportable pour un ou plusieurs modules WebAssembly ({{jsxref("WebAssembly.Module")}}). Cela permet de lier dynamiquement plusieurs modules.

- -

Syntaxe

- -
var maGlobale = new WebAssembly.Global(descripteur, valeur);
- -

Paramètres

- -
-
descripteur
-
Un dictionnaire GlobalDescriptor qui contient deux propriétés : -
    -
  • value : une valeur {{domxref("USVString")}} qui représente le type de donnée de la variable globale. Ce type peut être i32, i64, f32 ou f64.
  • -
  • mutable : un booléen qui indique si la variable globale peut être modifiée ou non. Par défaut, cette propriété vaut false.
  • -
-
-
valeur
-
La valeur que la variable doit contenir. Ce peut être n'importe quelle valeur qui respecte le type de donnée de la variable. Si aucune valeur n'est indiquée, c'est une valeur nulle typée qui est utilisée, tel qu'indiqué dans l'algorithme DefaultValue.
-
- -

Propriétés

- -

Aucune.

- -

Instances de WebAssembly.Global

- -

Toutes les instances de Global héritent du prototype du constructeur Global(). Ce prototype peut être modifié afin d'avoir un impact sur l'ensemble des instances de Global.

- -

Propriétés des instances

- -

{{page('/fr/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Propriétés')}}

- -

Méthodes des instances

- -

{{page('/fr/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Méthodes')}}

- -

Exemples

- -

Dans l'exemple suivant, on montre comment créer une nouvelle instance globale grâce au constructeur WebAssembly.Global(). Cette instance globale est définie avec le type i32 et est indiquée comme modifiable. Sa valeur initiale est 0.

- -

On change ensuite la valeur de la variable globale en la passant à 42 grâce à la propriété Global.value puis en la passant à 43 grâce à la fonction incGlobal() qui a été exportée depuis le module global.wasm (cette fonction ajoute 1 à n'imorte quelle valeur puis renvoie cette nouvelle valeur).

- -
const output = document.getElementById('output');
-
-function assertEq(msg, got, expected) {
-    output.innerHTML += `Testing ${msg}: `;
-    if (got !== expected)
-        output.innerHTML += `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
-    else
-        output.innerHTML += `SUCCESS! Got: ${got}<br>`;
-}
-
-assertEq("WebAssembly.Global exists", typeof WebAssembly.Global, "function");
-
-const global = new WebAssembly.Global({value:'i32', mutable:true}, 0);
-
-WebAssembly.instantiateStreaming(fetch('global.wasm'), { js: { global } })
-.then(({instance}) => {
-    assertEq("getting initial value from wasm", instance.exports.getGlobal(), 0);
-    global.value = 42;
-    assertEq("getting JS-updated value from wasm", instance.exports.getGlobal(), 42);
-    instance.exports.incGlobal();
-    assertEq("getting wasm-updated value from JS", global.value, 43);
-});
- -
-

Note : Cet exemple est utilisable sur GitHub et son code source est également disponible.

-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#globals', 'WebAssembly.Global()')}}{{Spec2('WebAssembly JS')}}Brouillon de spécification initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Global")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/global/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/global/index.md new file mode 100644 index 0000000000..d31849c70e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/global/index.md @@ -0,0 +1,116 @@ +--- +title: WebAssembly.Global +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global +tags: + - API + - Constructor + - JavaScript + - Reference + - TopicStub + - WebAssembly + - global +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Global +--- +
{{JSRef}}
+ +

Un objet WebAssembly.Global représente une instance d'une variable globale, accessible depuis le code JavaScript et importable/exportable pour un ou plusieurs modules WebAssembly ({{jsxref("WebAssembly.Module")}}). Cela permet de lier dynamiquement plusieurs modules.

+ +

Syntaxe

+ +
var maGlobale = new WebAssembly.Global(descripteur, valeur);
+ +

Paramètres

+ +
+
descripteur
+
Un dictionnaire GlobalDescriptor qui contient deux propriétés : +
    +
  • value : une valeur {{domxref("USVString")}} qui représente le type de donnée de la variable globale. Ce type peut être i32, i64, f32 ou f64.
  • +
  • mutable : un booléen qui indique si la variable globale peut être modifiée ou non. Par défaut, cette propriété vaut false.
  • +
+
+
valeur
+
La valeur que la variable doit contenir. Ce peut être n'importe quelle valeur qui respecte le type de donnée de la variable. Si aucune valeur n'est indiquée, c'est une valeur nulle typée qui est utilisée, tel qu'indiqué dans l'algorithme DefaultValue.
+
+ +

Propriétés

+ +

Aucune.

+ +

Instances de WebAssembly.Global

+ +

Toutes les instances de Global héritent du prototype du constructeur Global(). Ce prototype peut être modifié afin d'avoir un impact sur l'ensemble des instances de Global.

+ +

Propriétés des instances

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Propriétés')}}

+ +

Méthodes des instances

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Méthodes')}}

+ +

Exemples

+ +

Dans l'exemple suivant, on montre comment créer une nouvelle instance globale grâce au constructeur WebAssembly.Global(). Cette instance globale est définie avec le type i32 et est indiquée comme modifiable. Sa valeur initiale est 0.

+ +

On change ensuite la valeur de la variable globale en la passant à 42 grâce à la propriété Global.value puis en la passant à 43 grâce à la fonction incGlobal() qui a été exportée depuis le module global.wasm (cette fonction ajoute 1 à n'imorte quelle valeur puis renvoie cette nouvelle valeur).

+ +
const output = document.getElementById('output');
+
+function assertEq(msg, got, expected) {
+    output.innerHTML += `Testing ${msg}: `;
+    if (got !== expected)
+        output.innerHTML += `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
+    else
+        output.innerHTML += `SUCCESS! Got: ${got}<br>`;
+}
+
+assertEq("WebAssembly.Global exists", typeof WebAssembly.Global, "function");
+
+const global = new WebAssembly.Global({value:'i32', mutable:true}, 0);
+
+WebAssembly.instantiateStreaming(fetch('global.wasm'), { js: { global } })
+.then(({instance}) => {
+    assertEq("getting initial value from wasm", instance.exports.getGlobal(), 0);
+    global.value = 42;
+    assertEq("getting JS-updated value from wasm", instance.exports.getGlobal(), 42);
+    instance.exports.incGlobal();
+    assertEq("getting wasm-updated value from JS", global.value, 43);
+});
+ +
+

Note : Cet exemple est utilisable sur GitHub et son code source est également disponible.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#globals', 'WebAssembly.Global()')}}{{Spec2('WebAssembly JS')}}Brouillon de spécification initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Global")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/index.html deleted file mode 100644 index eb71d2c673..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: WebAssembly -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly -tags: - - API - - JavaScript - - Object - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly ---- -
{{JSRef}}
- -

L'objet JavaScript WebAssembly est un objet global qui agit comme un espace de noms (namespace) pour les différentes fonctionnalités JavaScript relatives à WebAssembly.

- -

À la différence des autres objets globaux, WebAssembly n'est pas un constructeur (au même titre que {{jsxref("Math")}} qui agit comme un espace de noms pour les constantes et fonctions mathématiques ou comme {{jsxref("Intl")}} qui centralise les constructeurs et les opérations relatives à l'internationalisation).

- -

Description

- -

L'objet WebAssembly est notamment utilisé pour :

- - - -

Méthodes

- -
-
{{jsxref("WebAssembly.instantiate()")}}
-
La méthode qu'on utilisera la plupart du temps pour compiler et instancier du code WebAssembly, elle renvoie une promesse qui est résolue en une Instance ou en une Instance et un Module.
-
{{jsxref("WebAssembly.instantiateStreaming()")}}
-
Cette méthode peremet de compiler et d'instancier un module WebAssembly à partir d'un flux source (streamed source). Elle renvoie à la fois un objet Module et sa première Instance.
-
{{jsxref("WebAssembly.compile()")}}
-
Cette méthode permet de compiler un {{jsxref("WebAssembly.Module")}} à partir de bytecode  WebAssembly, l'instanciation doit alors être effectuée dans une autre étape.
-
{{jsxref("WebAssembly.compileStreaming()")}}
-
Cette méthode permet de compiler un module {{jsxref("WebAssembly.Module")}} à partir d'un flux source (streamed source). L'instanciation devra alors être réalisée avec une autre étape.
-
{{jsxref("WebAssembly.validate()")}}
-
Cette méthode permet de valider un tableau typé censé contenir du bytecode WebAssembly : elle renvoie true si les octets forment un code WebAssembly valide ou false sinon.
-
- -

Constructeurs

- -
-
{{jsxref("WebAssembly.Global()")}}
-
Ce constructeur permet de créer un nouvel objet WebAssembly Global.
-
{{jsxref("WebAssembly.Module()")}}
-
Ce constructeur permet de créer un objet WebAssembly Module.
-
{{jsxref("WebAssembly.Instance()")}}
-
Ce constructeur permet de créer un objet WebAssembly Instance.
-
{{jsxref("WebAssembly.Memory()")}}
-
Ce constructeur permet de créer un objet WebAssembly Memory.
-
{{jsxref("WebAssembly.Table()")}}
-
Ce constructeur permet de créer un objet WebAssembly Table.
-
{{jsxref("WebAssembly.CompileError()")}}
-
Ce constructeur permet de créer un objet WebAssembly CompileError.
-
{{jsxref("WebAssembly.LinkError()")}}
-
Ce constructeur permet de créer un objet WebAssembly LinkError.
-
{{jsxref("WebAssembly.RuntimeError()")}}
-
Ce constructeur permet de créer un objet WebAssembly RuntimeError.
-
- -

Exemples

- -

L'exemple suivant (cf. le fichier instantiate-streaming.html sur GitHub et le résultat obtenu) permet de récupérer le module WebAssembly via un flux depuis une source, de le compiler, puis de l'instancier. La promesse est résolue avec un objet ResultObject. La méthode instantiateStreaming() accepte une promesse pour l'argument {{domxref("Response")}}, on peut lui passer directement un appel à {{domxref("WindowOrWorkerGlobalScope.fetch()")}} qui passera ensuite la réponse à la fonction lors de la complétion de la promesse.

- -
var importObject = { imports: { imported_func: arg => console.log(arg) } };
-
-WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
-.then(obj => obj.instance.exports.exported_func());
- -

On accède alors à la propriété de l'instance ResultObject puis on appelle la fonction exportée.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale.
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/index.md new file mode 100644 index 0000000000..eb71d2c673 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/index.md @@ -0,0 +1,105 @@ +--- +title: WebAssembly +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly +tags: + - API + - JavaScript + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly +--- +
{{JSRef}}
+ +

L'objet JavaScript WebAssembly est un objet global qui agit comme un espace de noms (namespace) pour les différentes fonctionnalités JavaScript relatives à WebAssembly.

+ +

À la différence des autres objets globaux, WebAssembly n'est pas un constructeur (au même titre que {{jsxref("Math")}} qui agit comme un espace de noms pour les constantes et fonctions mathématiques ou comme {{jsxref("Intl")}} qui centralise les constructeurs et les opérations relatives à l'internationalisation).

+ +

Description

+ +

L'objet WebAssembly est notamment utilisé pour :

+ + + +

Méthodes

+ +
+
{{jsxref("WebAssembly.instantiate()")}}
+
La méthode qu'on utilisera la plupart du temps pour compiler et instancier du code WebAssembly, elle renvoie une promesse qui est résolue en une Instance ou en une Instance et un Module.
+
{{jsxref("WebAssembly.instantiateStreaming()")}}
+
Cette méthode peremet de compiler et d'instancier un module WebAssembly à partir d'un flux source (streamed source). Elle renvoie à la fois un objet Module et sa première Instance.
+
{{jsxref("WebAssembly.compile()")}}
+
Cette méthode permet de compiler un {{jsxref("WebAssembly.Module")}} à partir de bytecode  WebAssembly, l'instanciation doit alors être effectuée dans une autre étape.
+
{{jsxref("WebAssembly.compileStreaming()")}}
+
Cette méthode permet de compiler un module {{jsxref("WebAssembly.Module")}} à partir d'un flux source (streamed source). L'instanciation devra alors être réalisée avec une autre étape.
+
{{jsxref("WebAssembly.validate()")}}
+
Cette méthode permet de valider un tableau typé censé contenir du bytecode WebAssembly : elle renvoie true si les octets forment un code WebAssembly valide ou false sinon.
+
+ +

Constructeurs

+ +
+
{{jsxref("WebAssembly.Global()")}}
+
Ce constructeur permet de créer un nouvel objet WebAssembly Global.
+
{{jsxref("WebAssembly.Module()")}}
+
Ce constructeur permet de créer un objet WebAssembly Module.
+
{{jsxref("WebAssembly.Instance()")}}
+
Ce constructeur permet de créer un objet WebAssembly Instance.
+
{{jsxref("WebAssembly.Memory()")}}
+
Ce constructeur permet de créer un objet WebAssembly Memory.
+
{{jsxref("WebAssembly.Table()")}}
+
Ce constructeur permet de créer un objet WebAssembly Table.
+
{{jsxref("WebAssembly.CompileError()")}}
+
Ce constructeur permet de créer un objet WebAssembly CompileError.
+
{{jsxref("WebAssembly.LinkError()")}}
+
Ce constructeur permet de créer un objet WebAssembly LinkError.
+
{{jsxref("WebAssembly.RuntimeError()")}}
+
Ce constructeur permet de créer un objet WebAssembly RuntimeError.
+
+ +

Exemples

+ +

L'exemple suivant (cf. le fichier instantiate-streaming.html sur GitHub et le résultat obtenu) permet de récupérer le module WebAssembly via un flux depuis une source, de le compiler, puis de l'instancier. La promesse est résolue avec un objet ResultObject. La méthode instantiateStreaming() accepte une promesse pour l'argument {{domxref("Response")}}, on peut lui passer directement un appel à {{domxref("WindowOrWorkerGlobalScope.fetch()")}} qui passera ensuite la réponse à la fonction lors de la complétion de la promesse.

+ +
var importObject = { imports: { imported_func: arg => console.log(arg) } };
+
+WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
+.then(obj => obj.instance.exports.exported_func());
+ +

On accède alors à la propriété de l'instance ResultObject puis on appelle la fonction exportée.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale.
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.html deleted file mode 100644 index 86bece9671..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.html +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: WebAssembly.Instance.prototype.exports -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports -tags: - - API - - Experimental - - JavaScript - - Propriété - - Reference - - WebAssembly - - instance -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/exports ---- -
{{JSRef}}
- -

La propriété exports du prototype de {{jsxref("WebAssembly.Instance")}} est une propriété en lecture seul qui renvoie un objet dont les propriétés sont les différentes fonctions exportées depuis l'instance du module WebAssembly. Cela permet d'y accéder et de les manipuler en JavaScript.

- -
instance.exports
- -

Exemples

- -

Après avoir récupéré le bytecode WebAssembly grâce à la méthode fetch(), on le compile et on instancie le module grâce à la fonction {{jsxref("WebAssembly.instantiateStreaming()")}}. Lorsqu'on utilise cette fonction, on importe une fonction dans le module. Ensuite, on appelle une fonction WebAssembly exportée qui est exposée via l'instance.

- -
var importObject = {
-  imports: {
-    imported_func: function(arg) {
-      console.log(arg);
-    }
-  }
-};
-WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
-.then(obj => obj.instance.exports.exported_func());
- -
-

Note : Voir le fichier index.html sur GitHub (ainsi que la démonstration) pour un exemple.

-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyinstance-objects', 'WebAssembly.Instance objects')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Instance.exports")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.md new file mode 100644 index 0000000000..86bece9671 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/instance/exports/index.md @@ -0,0 +1,68 @@ +--- +title: WebAssembly.Instance.prototype.exports +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports +tags: + - API + - Experimental + - JavaScript + - Propriété + - Reference + - WebAssembly + - instance +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/exports +--- +
{{JSRef}}
+ +

La propriété exports du prototype de {{jsxref("WebAssembly.Instance")}} est une propriété en lecture seul qui renvoie un objet dont les propriétés sont les différentes fonctions exportées depuis l'instance du module WebAssembly. Cela permet d'y accéder et de les manipuler en JavaScript.

+ +
instance.exports
+ +

Exemples

+ +

Après avoir récupéré le bytecode WebAssembly grâce à la méthode fetch(), on le compile et on instancie le module grâce à la fonction {{jsxref("WebAssembly.instantiateStreaming()")}}. Lorsqu'on utilise cette fonction, on importe une fonction dans le module. Ensuite, on appelle une fonction WebAssembly exportée qui est exposée via l'instance.

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
+.then(obj => obj.instance.exports.exported_func());
+ +
+

Note : Voir le fichier index.html sur GitHub (ainsi que la démonstration) pour un exemple.

+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyinstance-objects', 'WebAssembly.Instance objects')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Instance.exports")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instance/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/instance/index.html deleted file mode 100644 index 1fceef26d9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/instance/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: WebAssembly.Instance() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance -tags: - - API - - Constructeur - - JavaScript - - Reference - - WebAssembly - - instance -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance ---- -
{{JSRef}}
- -

Un objet WebAssembly.Instance représente un objet exécutable, avec un état, qui est une instance d'un module WebAssembly. Un objet Instance contient l'ensemble des fonctions WebAssembly exportées qui permettent d'invoquer du code WebAssembly depuis du code JavaScript.

- -

Le constructeur WebAssembly.Instance() peut être appelé afin de créer, de façon synchrone, une instance d'un {{jsxref("WebAssembly.Module")}} donné. Toutefois, pour obtenir une instance, on utilisera généralement la fonction asynchrone {{jsxref("WebAssembly.instantiateStreaming()")}}.

- -

Syntaxe

- -
-

Attention :L'instanciation de modules volumineux peut être coûteuse en temps/ressource. Instance() ne doit être utilisée que lorsqu'une instanciation synchrone est nécessaire. Pour tous les autres cas, c'est la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} qui devrait être utilisée.

-
- -
var monInstance = new WebAssembly.Instance(module, importObject);
- -

Paramètres

- -
-
module
-
L'objet WebAssembly.Module qu'on souhaite instancier.
-
importObject {{optional_inline}}
-
Un objet qui contient des valeurs à importer dans l'instance. Ce peuvent être des fonctions ou des objets WebAssembly.Memory. Il doit exister une propriété correspondante pour chaque import, si ce n'est pas le cas, un exception WebAssembly.LinkError sera levée.
-
- -

Instances d'Instance

- -

Toutes les instances du type Instance héritent du prototype du constructeur Instance(). Celui-ci peut être modifié afin de modifier l'ensemble des instances de Instance.

- -

Propriétés

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/prototype', 'Propriétés')}}

- -

Méthodes

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/prototype', 'Méthodes')}}

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyinstance-objects', 'Instance')}}{{Spec2('WebAssembly JS')}}Définition initiale dans un brouillon de spécification.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Instance")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instance/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/instance/index.md new file mode 100644 index 0000000000..1fceef26d9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/instance/index.md @@ -0,0 +1,78 @@ +--- +title: WebAssembly.Instance() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +tags: + - API + - Constructeur + - JavaScript + - Reference + - WebAssembly + - instance +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance +--- +
{{JSRef}}
+ +

Un objet WebAssembly.Instance représente un objet exécutable, avec un état, qui est une instance d'un module WebAssembly. Un objet Instance contient l'ensemble des fonctions WebAssembly exportées qui permettent d'invoquer du code WebAssembly depuis du code JavaScript.

+ +

Le constructeur WebAssembly.Instance() peut être appelé afin de créer, de façon synchrone, une instance d'un {{jsxref("WebAssembly.Module")}} donné. Toutefois, pour obtenir une instance, on utilisera généralement la fonction asynchrone {{jsxref("WebAssembly.instantiateStreaming()")}}.

+ +

Syntaxe

+ +
+

Attention :L'instanciation de modules volumineux peut être coûteuse en temps/ressource. Instance() ne doit être utilisée que lorsqu'une instanciation synchrone est nécessaire. Pour tous les autres cas, c'est la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} qui devrait être utilisée.

+
+ +
var monInstance = new WebAssembly.Instance(module, importObject);
+ +

Paramètres

+ +
+
module
+
L'objet WebAssembly.Module qu'on souhaite instancier.
+
importObject {{optional_inline}}
+
Un objet qui contient des valeurs à importer dans l'instance. Ce peuvent être des fonctions ou des objets WebAssembly.Memory. Il doit exister une propriété correspondante pour chaque import, si ce n'est pas le cas, un exception WebAssembly.LinkError sera levée.
+
+ +

Instances d'Instance

+ +

Toutes les instances du type Instance héritent du prototype du constructeur Instance(). Celui-ci peut être modifié afin de modifier l'ensemble des instances de Instance.

+ +

Propriétés

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/prototype', 'Propriétés')}}

+ +

Méthodes

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/WebAssembly/Instance/prototype', 'Méthodes')}}

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyinstance-objects', 'Instance')}}{{Spec2('WebAssembly JS')}}Définition initiale dans un brouillon de spécification.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Instance")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.html deleted file mode 100644 index 5ec32f1f87..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: WebAssembly.instantiate() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate -tags: - - API - - JavaScript - - Méthode - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/instantiate ---- -
{{JSRef}}
- -

La fonction WebAssembly.instantiate() permet de compiler et d'instancier du code WebAssembly. Cette fonction possède deux formes :

- - - -
-

Attention : Tant que faire se peut, utiliser la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} car elle est plus efficace et récupère, compile et instancie un module en une seule étape à partir du bytecode et il n'est pas nécessaire de passer par une conversion en {{jsxref("ArrayBuffer")}}.

-
- -

Syntaxe

- -

Première forme : utiliser le bytecode WebAssembly

- -
Promise<ResultObject> WebAssembly.instantiate(bufferSource, importObject);
-
- -

Paramètres

- -
-
bufferSource
-
Un tableau typé ou un {{jsxref("ArrayBuffer")}} qui contient le bytecode du module WebAssembly qu'on souhaite compiler.
-
importObject {{optional_inline}}
-
Un objet qui contient les valeurs à importer dans l'instance qui sera créée. Ces valeurs peuvent être des fonctions ou des objets {{jsxref("WebAssembly.Memory")}}. Il doit y avoir une propriété correspondante au sein du module compilé pour chacun des imports, si ce n'est pas le cas, une exception {{jsxref("WebAssembly.LinkError")}} sera levée.
-
- -

Valeur de retour

- -

Une promesse qui est résoluee en un objet qui contient deux champs :

- - - -

Exceptions

- - - -

Seconde forme : utiliser une instance d'un module

- -
Promise<WebAssembly.Instance> WebAssembly.instantiate(module, importObject);
-
- -

Paramètres

- -
-
module
-
L'objet {{jsxref("WebAssembly.Module")}} qui doit être instancié.
-
importObject {{optional_inline}}
-
Un objet qui contient les valeurs à importer dans l'instance qui sera créée. Ces valeurs peuvent être des fonctions ou des objets {{jsxref("WebAssembly.Memory")}}. Il doit y avoir une propriété correspondante au sein du module compilé pour chacun des imports, si ce n'est pas le cas, une exception {{jsxref("WebAssembly.LinkError")}} sera levée.
-
- -

Valeur de retour

- -

Une promesse qui est résolue en un objet {{jsxref("WebAssembly.Instance")}}.

- -

Exceptions

- - - -

Exemples

- -
-

Note : Dans la plupart des cas, on utilisera plus vraisemblablement {{jsxref("WebAssembly.instantiateStreaming()")}} qui est plus efficace que instantiate().

-
- -

Première forme

- -

Après avoir récupéré le bytecode WebAssembly grâce à fetch(), on compile et on instancie le module grâce à la fonction  {{jsxref("WebAssembly.instantiate()")}} et on importe une fonction JavaScript dans le module lors de cette étape. Ensuite, on invoque une fonction WebAssembly exportée via l'instance.

- -
var importObject = {
-  imports: {
-    imported_func: function(arg) {
-      console.log(arg);
-    }
-  }
-};
-
-fetch('simple.wasm').then(response =>
-  response.arrayBuffer()
-).then(bytes =>
-  WebAssembly.instantiate(bytes, importObject)
-).then(result =>
-  result.instance.exports.exported_func()
-);
- -
-

Note : Voir le fichier index.html sur GitHub (ainsi que la démonstration associée) qui contient un exemple analogue et qui utilise la fonction utilitaire fetchAndInstantiate().

-
- -

Seconde forme

- -

Dans l'exemple qui suit (tiré du fichier index-compile.html sur GitHub et qui dispose d'une démonstration), on compile le bytecode du module chargé simple.wasm grâce à la fonction {{jsxref("WebAssembly.compileStreaming()")}} puis on envoie le résultat à un worker grâce à la méthode {{domxref("Worker.postMessage", "postMessage()")}}.

- -
var worker = new Worker("wasm_worker.js");
-
-WebAssembly.compileStreaming(fetch('simple.wasm'))
-.then(mod =>
-  worker.postMessage(mod)
-);
- -

Dans le worker (cf. wasm_worker.js), on définit un objet d'import qui sera utilisé par le module puis on paramètre un gestionnaire d'évènement afin de recevoir le module depuis le thread principal. Lorsqu'on reçoit le module, on en crée une instance grâce à la méthode {{jsxref("WebAssembly.instantiate()")}} puis on appelle une fonction exportée depuis le module.

- -
var importObject = {
-  imports: {
-    imported_func: function(arg) {
-      console.log(arg);
-    }
-  }
-};
-
-onmessage = function(e) {
-  console.log('module reçu depuis le thread principal');
-  var mod = e.data;
-
-  WebAssembly.instantiate(mod, importObject).then(function(instance) {
-    instance.exports.exported_func();
-  });
-};
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyinstantiate', 'instantiate()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.instantiate")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.md new file mode 100644 index 0000000000..5ec32f1f87 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/instantiate/index.md @@ -0,0 +1,172 @@ +--- +title: WebAssembly.instantiate() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate +tags: + - API + - JavaScript + - Méthode + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/instantiate +--- +
{{JSRef}}
+ +

La fonction WebAssembly.instantiate() permet de compiler et d'instancier du code WebAssembly. Cette fonction possède deux formes :

+ + + +
+

Attention : Tant que faire se peut, utiliser la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} car elle est plus efficace et récupère, compile et instancie un module en une seule étape à partir du bytecode et il n'est pas nécessaire de passer par une conversion en {{jsxref("ArrayBuffer")}}.

+
+ +

Syntaxe

+ +

Première forme : utiliser le bytecode WebAssembly

+ +
Promise<ResultObject> WebAssembly.instantiate(bufferSource, importObject);
+
+ +

Paramètres

+ +
+
bufferSource
+
Un tableau typé ou un {{jsxref("ArrayBuffer")}} qui contient le bytecode du module WebAssembly qu'on souhaite compiler.
+
importObject {{optional_inline}}
+
Un objet qui contient les valeurs à importer dans l'instance qui sera créée. Ces valeurs peuvent être des fonctions ou des objets {{jsxref("WebAssembly.Memory")}}. Il doit y avoir une propriété correspondante au sein du module compilé pour chacun des imports, si ce n'est pas le cas, une exception {{jsxref("WebAssembly.LinkError")}} sera levée.
+
+ +

Valeur de retour

+ +

Une promesse qui est résoluee en un objet qui contient deux champs :

+ + + +

Exceptions

+ + + +

Seconde forme : utiliser une instance d'un module

+ +
Promise<WebAssembly.Instance> WebAssembly.instantiate(module, importObject);
+
+ +

Paramètres

+ +
+
module
+
L'objet {{jsxref("WebAssembly.Module")}} qui doit être instancié.
+
importObject {{optional_inline}}
+
Un objet qui contient les valeurs à importer dans l'instance qui sera créée. Ces valeurs peuvent être des fonctions ou des objets {{jsxref("WebAssembly.Memory")}}. Il doit y avoir une propriété correspondante au sein du module compilé pour chacun des imports, si ce n'est pas le cas, une exception {{jsxref("WebAssembly.LinkError")}} sera levée.
+
+ +

Valeur de retour

+ +

Une promesse qui est résolue en un objet {{jsxref("WebAssembly.Instance")}}.

+ +

Exceptions

+ + + +

Exemples

+ +
+

Note : Dans la plupart des cas, on utilisera plus vraisemblablement {{jsxref("WebAssembly.instantiateStreaming()")}} qui est plus efficace que instantiate().

+
+ +

Première forme

+ +

Après avoir récupéré le bytecode WebAssembly grâce à fetch(), on compile et on instancie le module grâce à la fonction  {{jsxref("WebAssembly.instantiate()")}} et on importe une fonction JavaScript dans le module lors de cette étape. Ensuite, on invoque une fonction WebAssembly exportée via l'instance.

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(bytes =>
+  WebAssembly.instantiate(bytes, importObject)
+).then(result =>
+  result.instance.exports.exported_func()
+);
+ +
+

Note : Voir le fichier index.html sur GitHub (ainsi que la démonstration associée) qui contient un exemple analogue et qui utilise la fonction utilitaire fetchAndInstantiate().

+
+ +

Seconde forme

+ +

Dans l'exemple qui suit (tiré du fichier index-compile.html sur GitHub et qui dispose d'une démonstration), on compile le bytecode du module chargé simple.wasm grâce à la fonction {{jsxref("WebAssembly.compileStreaming()")}} puis on envoie le résultat à un worker grâce à la méthode {{domxref("Worker.postMessage", "postMessage()")}}.

+ +
var worker = new Worker("wasm_worker.js");
+
+WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(mod =>
+  worker.postMessage(mod)
+);
+ +

Dans le worker (cf. wasm_worker.js), on définit un objet d'import qui sera utilisé par le module puis on paramètre un gestionnaire d'évènement afin de recevoir le module depuis le thread principal. Lorsqu'on reçoit le module, on en crée une instance grâce à la méthode {{jsxref("WebAssembly.instantiate()")}} puis on appelle une fonction exportée depuis le module.

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+onmessage = function(e) {
+  console.log('module reçu depuis le thread principal');
+  var mod = e.data;
+
+  WebAssembly.instantiate(mod, importObject).then(function(instance) {
+    instance.exports.exported_func();
+  });
+};
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyinstantiate', 'instantiate()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.instantiate")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html deleted file mode 100644 index a9cbf1ead2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: WebAssembly.instantiateStreaming() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming -tags: - - API - - JavaScript - - Méthode - - Object - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/instantiateStreaming ---- -
{{JSRef}}
- -

La fonction WebAssembly.instantiateStreaming() permet de compiler et d'instancier un module WebAssembly depuis un flux source. C'est la méthode la plus efficace, et la plus optimisée, permettant de charger du code WebAssembly.

- -

Syntaxe

- -
Promise<ResultObject> WebAssembly.instantiateStreaming(source, importObject);
- -

Paramètres

- -
-
source
-
Un objet {{domxref("Response")}} ou une promesse qui sera tenue avec une valeur {{domxref("Response")}} qui représente la source du module .wasm dont on souhaite récupérer le flux, la compiler puis l'instanciere.
-
importObject {{optional_inline}}
-
Un objet qui contient les valeurs qui doivent être importées dans le nouvel objet Instance résultant. Cela peut être des fonctions ou des objets {{jsxref("WebAssembly.Memory")}}. Il est nécessaire qu'il y ait une propriété correspondante pour chaque import déclaré dans le module compilé, sinon, une exception WebAssembly.LinkError sera levée.
-
- -

Valeur de retour

- -

Un objet Promise dont la valeur de résolution est un objet ResultObject contenant deux champs :

- - - -

Exceptions

- - - -

Examples

- -

Dans l'exemple suivant (également disponible sur GitHub : instantiate-streaming.html et avec le résultat live), on récupère le flux d'un module .wasm depuis une source, on le compile et on l'instancie. La promesse est alors résolue avec un objet ResultObject. La méthode instantiateStreaming()  acceptant une promesse fournissant un objet {{domxref("Response")}}, on peut directement l'appel de {{domxref("WindowOrWorkerGlobalScope.fetch()")}} en argument qui transfèrera la réponse lorsque la promesse résultante sera tenue.

- -
var importObject = { imports: { imported_func: arg => console.log(arg) } };
-
-WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
-.then(obj => obj.instance.exports.exported_func());
- -

Ensuite, on accède au champ instance de l'objet ResultObject afin de pouvoir invoquer une des fonctions exportées.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly Embedding', '#webassemblyinstantiatestreaming', 'instantiateStreaming()')}}{{Spec2('WebAssembly Embedding')}}Brouillon de définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.instantiateStreaming")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.md new file mode 100644 index 0000000000..a9cbf1ead2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.md @@ -0,0 +1,87 @@ +--- +title: WebAssembly.instantiateStreaming() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming +tags: + - API + - JavaScript + - Méthode + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/instantiateStreaming +--- +
{{JSRef}}
+ +

La fonction WebAssembly.instantiateStreaming() permet de compiler et d'instancier un module WebAssembly depuis un flux source. C'est la méthode la plus efficace, et la plus optimisée, permettant de charger du code WebAssembly.

+ +

Syntaxe

+ +
Promise<ResultObject> WebAssembly.instantiateStreaming(source, importObject);
+ +

Paramètres

+ +
+
source
+
Un objet {{domxref("Response")}} ou une promesse qui sera tenue avec une valeur {{domxref("Response")}} qui représente la source du module .wasm dont on souhaite récupérer le flux, la compiler puis l'instanciere.
+
importObject {{optional_inline}}
+
Un objet qui contient les valeurs qui doivent être importées dans le nouvel objet Instance résultant. Cela peut être des fonctions ou des objets {{jsxref("WebAssembly.Memory")}}. Il est nécessaire qu'il y ait une propriété correspondante pour chaque import déclaré dans le module compilé, sinon, une exception WebAssembly.LinkError sera levée.
+
+ +

Valeur de retour

+ +

Un objet Promise dont la valeur de résolution est un objet ResultObject contenant deux champs :

+ + + +

Exceptions

+ + + +

Examples

+ +

Dans l'exemple suivant (également disponible sur GitHub : instantiate-streaming.html et avec le résultat live), on récupère le flux d'un module .wasm depuis une source, on le compile et on l'instancie. La promesse est alors résolue avec un objet ResultObject. La méthode instantiateStreaming()  acceptant une promesse fournissant un objet {{domxref("Response")}}, on peut directement l'appel de {{domxref("WindowOrWorkerGlobalScope.fetch()")}} en argument qui transfèrera la réponse lorsque la promesse résultante sera tenue.

+ +
var importObject = { imports: { imported_func: arg => console.log(arg) } };
+
+WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject)
+.then(obj => obj.instance.exports.exported_func());
+ +

Ensuite, on accède au champ instance de l'objet ResultObject afin de pouvoir invoquer une des fonctions exportées.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly Embedding', '#webassemblyinstantiatestreaming', 'instantiateStreaming()')}}{{Spec2('WebAssembly Embedding')}}Brouillon de définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.instantiateStreaming")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.html deleted file mode 100644 index fe881933bb..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: WebAssembly.LinkError() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError -tags: - - API - - Constructeur - - JavaScript - - LinkError - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/LinkError ---- -
{{JSRef}}
- -

Le constructeur WebAssembly.LinkError() permet de créer un nouvel objet WebAssembly LinkError qui indique qu'une erreur s'est produite lors de l'instanciation du module (en plus des trappes provenant de la fonction initiale).

- -

Syntaxe

- -
new WebAssembly.LinkError(message, nomFichier, numeroLigne)
- -

Paramètres

- -
-
message {{optional_inline}}
-
Une description, compréhensible par un humain, de l'erreur qui s'est produite.
-
nomFichier {{optional_inline}}{{non-standard_inline}}
-
Le nom du fichier qui contient le code à l'origine de l'exception.
-
numeroLigne {{optional_inline}}{{non-standard_inline}}
-
Le numéro de ligne dans le fichier contenant le code à l'origine de l'exception.
-
- -

Propriétés

- -

Le constructeur LinkError ne contient pas de propriétés qui lui soient propres. Il hérite cependant de certaines propriétés via sa chaîne de prototypes.

- -
-
WebAssembly.LinkError.prototype.constructor
-
Cette propriété est la fonction qui permet de créer le prototype de l'instance.
-
{{jsxref("Error.prototype.message", "WebAssembly.LinkError.prototype.message")}}
-
Le message d'erreur. Bien qu'ECMA-262 indique que l'objet doive fournir sa propre propriété message, dans SpiderMonkey, celle-ci est héritée depuis {{jsxref("Error.prototype.message")}}.
-
{{jsxref("Error.prototype.name", "WebAssembly.LinkError.prototype.name")}}
-
Le nom de l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.fileName", "WebAssembly.LinkError.prototype.fileName")}}
-
Le chemin du fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.lineNumber", "WebAssembly.LinkError.prototype.lineNumber")}}
-
Le numéro de ligne dans le fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.columnNumber", "WebAssembly.LinkError.prototype.columnNumber")}}
-
Le numéro de la colonne dans la ligne du fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.stack", "WebAssembly.LinkError.prototype.stack")}}
-
La pile d'appels à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
-
- -

Méthodes

- -

Le constructeur LinkError ne contient pas de méthodes qui lui soient propres. Il hérite toutefois de méthodes grâce à sa chaîne de prototypes.

- -
-
{{jsxref("Error.prototype.toSource", "WebAssembly.LinkError.prototype.toSource()")}}
-
Cette méthode renvoie un code qui pourrait être évalué et causere la même erreur. Elle est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.toString", "WebAssembly.LinkError.prototype.toString()")}}
-
Cette méthode renvoie une chaîne de caractères qui représente l'objet de l'erreur. Elle est héritée via {{jsxref("Error")}}.
-
- -

Exemples

- -

Dans le fragment de code qui suit, on crée un nouvelle instance de LinkError puis on imprime les détails dans la console :

- -
try {
-  throw new WebAssembly.LinkError('Coucou', 'unFichier', 10);
-} catch (e) {
-  console.log(e instanceof LinkError); // true
-  console.log(e.message);                 // "Coucou"
-  console.log(e.name);                    // "LinkError"
-  console.log(e.fileName);                // "unFichier"
-  console.log(e.lineNumber);              // 10
-  console.log(e.columnNumber);            // 0
-  console.log(e.stack);                   // renvoie la pile d'appels
-                                          // à l'origine de l'erreur
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}Définition des types standards NativeError.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.LinkError")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.md new file mode 100644 index 0000000000..fe881933bb --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/linkerror/index.md @@ -0,0 +1,116 @@ +--- +title: WebAssembly.LinkError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError +tags: + - API + - Constructeur + - JavaScript + - LinkError + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/LinkError +--- +
{{JSRef}}
+ +

Le constructeur WebAssembly.LinkError() permet de créer un nouvel objet WebAssembly LinkError qui indique qu'une erreur s'est produite lors de l'instanciation du module (en plus des trappes provenant de la fonction initiale).

+ +

Syntaxe

+ +
new WebAssembly.LinkError(message, nomFichier, numeroLigne)
+ +

Paramètres

+ +
+
message {{optional_inline}}
+
Une description, compréhensible par un humain, de l'erreur qui s'est produite.
+
nomFichier {{optional_inline}}{{non-standard_inline}}
+
Le nom du fichier qui contient le code à l'origine de l'exception.
+
numeroLigne {{optional_inline}}{{non-standard_inline}}
+
Le numéro de ligne dans le fichier contenant le code à l'origine de l'exception.
+
+ +

Propriétés

+ +

Le constructeur LinkError ne contient pas de propriétés qui lui soient propres. Il hérite cependant de certaines propriétés via sa chaîne de prototypes.

+ +
+
WebAssembly.LinkError.prototype.constructor
+
Cette propriété est la fonction qui permet de créer le prototype de l'instance.
+
{{jsxref("Error.prototype.message", "WebAssembly.LinkError.prototype.message")}}
+
Le message d'erreur. Bien qu'ECMA-262 indique que l'objet doive fournir sa propre propriété message, dans SpiderMonkey, celle-ci est héritée depuis {{jsxref("Error.prototype.message")}}.
+
{{jsxref("Error.prototype.name", "WebAssembly.LinkError.prototype.name")}}
+
Le nom de l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.fileName", "WebAssembly.LinkError.prototype.fileName")}}
+
Le chemin du fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.lineNumber", "WebAssembly.LinkError.prototype.lineNumber")}}
+
Le numéro de ligne dans le fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.columnNumber", "WebAssembly.LinkError.prototype.columnNumber")}}
+
Le numéro de la colonne dans la ligne du fichier qui a entraîné l'erreur. Cette propriété est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.stack", "WebAssembly.LinkError.prototype.stack")}}
+
La pile d'appels à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
+
+ +

Méthodes

+ +

Le constructeur LinkError ne contient pas de méthodes qui lui soient propres. Il hérite toutefois de méthodes grâce à sa chaîne de prototypes.

+ +
+
{{jsxref("Error.prototype.toSource", "WebAssembly.LinkError.prototype.toSource()")}}
+
Cette méthode renvoie un code qui pourrait être évalué et causere la même erreur. Elle est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.toString", "WebAssembly.LinkError.prototype.toString()")}}
+
Cette méthode renvoie une chaîne de caractères qui représente l'objet de l'erreur. Elle est héritée via {{jsxref("Error")}}.
+
+ +

Exemples

+ +

Dans le fragment de code qui suit, on crée un nouvelle instance de LinkError puis on imprime les détails dans la console :

+ +
try {
+  throw new WebAssembly.LinkError('Coucou', 'unFichier', 10);
+} catch (e) {
+  console.log(e instanceof LinkError); // true
+  console.log(e.message);                 // "Coucou"
+  console.log(e.name);                    // "LinkError"
+  console.log(e.fileName);                // "unFichier"
+  console.log(e.lineNumber);              // 10
+  console.log(e.columnNumber);            // 0
+  console.log(e.stack);                   // renvoie la pile d'appels
+                                          // à l'origine de l'erreur
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}Définition des types standards NativeError.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.LinkError")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html deleted file mode 100644 index cd6e68ecec..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: WebAssembly.Memory.prototype.buffer -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer -tags: - - API - - JavaScript - - Propriété - - Reference - - WebAssembly - - memory -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory/buffer ---- -
{{JSRef}}
- -

La propriété buffer, rattachée au prototype de l'objet Memory, renvoie le tampon (buffer) contenu dans l'espace mémoire.

- -
memory.buffer
-
- -

Exemples

- -

Dans l'exemple suivant (cf. le fichier memory.html sur GitHub ainsi que le résultat obtenu), on récupère puis on instancie le bytecode memory.wasm grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} tout en important la mémoire créée à la ligne précédente. Ensuite, on enregistre certaines valeurs dans cette mémoire puis on exporte une fonction afin de l'utiliser pour additionner certaines valeurs.

- -
WebAssembly.instantiateStreaming(fetch('memory.wasm'), { js: { mem: memory } })
-.then(obj => {
-  var i32 = new Uint32Array(memory.buffer);
-  for (var i = 0; i < 10; i++) {
-    i32[i] = i;
-  }
-  var sum = obj.instance.exports.accumulate(0, 10);
-  console.log(sum);
-});
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymemoryprototypebuffer', 'buffer')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Memory.buffer")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.md new file mode 100644 index 0000000000..cd6e68ecec --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/memory/buffer/index.md @@ -0,0 +1,64 @@ +--- +title: WebAssembly.Memory.prototype.buffer +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer +tags: + - API + - JavaScript + - Propriété + - Reference + - WebAssembly + - memory +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory/buffer +--- +
{{JSRef}}
+ +

La propriété buffer, rattachée au prototype de l'objet Memory, renvoie le tampon (buffer) contenu dans l'espace mémoire.

+ +
memory.buffer
+
+ +

Exemples

+ +

Dans l'exemple suivant (cf. le fichier memory.html sur GitHub ainsi que le résultat obtenu), on récupère puis on instancie le bytecode memory.wasm grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} tout en important la mémoire créée à la ligne précédente. Ensuite, on enregistre certaines valeurs dans cette mémoire puis on exporte une fonction afin de l'utiliser pour additionner certaines valeurs.

+ +
WebAssembly.instantiateStreaming(fetch('memory.wasm'), { js: { mem: memory } })
+.then(obj => {
+  var i32 = new Uint32Array(memory.buffer);
+  for (var i = 0; i < 10; i++) {
+    i32[i] = i;
+  }
+  var sum = obj.instance.exports.accumulate(0, 10);
+  console.log(sum);
+});
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymemoryprototypebuffer', 'buffer')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Memory.buffer")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.html deleted file mode 100644 index 7d4426fc4a..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: WebAssembly.Memory.prototype.grow() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow -tags: - - API - - JavaScript - - Méthode - - Reference - - WebAssembly - - memory -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory/grow ---- -
{{JSRef}}
- -

La méthode grow(), rattachée au prototype de l'objet Memory, permet d'augmenter la taille de l'espace mémoire correspondant d'un nombre de pages WebAssembly.

- -

Syntaxe

- -
memory.grow(nombre);
-
- -

Paramètres

- -
-
nombre
-
Le nombre de pages WebAssembly duquel on veut augmenter l'espace mémoire correspondant à l'objet courant (une page mémoire WebAssembly correspond à 64 Ko).
-
- -

Valeur de retour

- -

La taille de l'espace mémoire avant l'extension, exprimée en nombre de pages WebAssembly.

- -

Exemples

- -

Dans le code qui suit, on crée une instance de Memory qui mesure initialement 1 page (soit 64 Ko) et dont la taille maximale est de 10 pages (soit 6,4 Mo).

- -
var memory = new WebAssembly.Memory({initial:10, maximum:100});
- -

Ensuite, on augmente la taille de l'espace mémoire d'une page grâce à la méthode :

- -
const bytesPerPage = 64 * 1024;
-console.log(memory.buffer.byteLength / bytesPerPage);  // "1"
-console.log(memory.grow(1));                           // "1"
-console.log(memory.buffer.byteLength / bytesPerPage);  // "2"
- -

On voit ici que la valeur de grow() indique l'espace utilisé avant l'agrandissement de la mémoire.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymemoryprototypegrow', 'grow()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Memory.grow")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.md new file mode 100644 index 0000000000..7d4426fc4a --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/memory/grow/index.md @@ -0,0 +1,78 @@ +--- +title: WebAssembly.Memory.prototype.grow() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow +tags: + - API + - JavaScript + - Méthode + - Reference + - WebAssembly + - memory +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory/grow +--- +
{{JSRef}}
+ +

La méthode grow(), rattachée au prototype de l'objet Memory, permet d'augmenter la taille de l'espace mémoire correspondant d'un nombre de pages WebAssembly.

+ +

Syntaxe

+ +
memory.grow(nombre);
+
+ +

Paramètres

+ +
+
nombre
+
Le nombre de pages WebAssembly duquel on veut augmenter l'espace mémoire correspondant à l'objet courant (une page mémoire WebAssembly correspond à 64 Ko).
+
+ +

Valeur de retour

+ +

La taille de l'espace mémoire avant l'extension, exprimée en nombre de pages WebAssembly.

+ +

Exemples

+ +

Dans le code qui suit, on crée une instance de Memory qui mesure initialement 1 page (soit 64 Ko) et dont la taille maximale est de 10 pages (soit 6,4 Mo).

+ +
var memory = new WebAssembly.Memory({initial:10, maximum:100});
+ +

Ensuite, on augmente la taille de l'espace mémoire d'une page grâce à la méthode :

+ +
const bytesPerPage = 64 * 1024;
+console.log(memory.buffer.byteLength / bytesPerPage);  // "1"
+console.log(memory.grow(1));                           // "1"
+console.log(memory.buffer.byteLength / bytesPerPage);  // "2"
+ +

On voit ici que la valeur de grow() indique l'espace utilisé avant l'agrandissement de la mémoire.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymemoryprototypegrow', 'grow()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Memory.grow")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/memory/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/memory/index.html deleted file mode 100644 index 5c5d36d7cd..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/memory/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: WebAssembly.Memory() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory -tags: - - API - - Constructeur - - JavaScript - - Object - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory ---- -
{{JSRef}}
- -

Le constructeur WebAssembly.Memory() crée un nouvel objet Memory dont la propriété {{jsxref("WebAssembly/Memory/buffer","buffer")}} est un {{jsxref("ArrayBuffer")}} redimensionnable qui contient les octets de mémoire bruts accessibles par une instance WebAssembly.

- -

Un espace mémoire créé depuis du code JavaScript ou depuis du code WebAssembly sera accessible et modifiable (mutable) depuis JavaScript et depuis WebAssembly.

- -

Syntaxe

- -
var maMemoire = new WebAssembly.Memory(descripteurMemoire);
- -

Paramètres

- -
-
descripteurMemoire
-
Un objet qui contient les propriétés suivantes : -
-
initial
-
La taille initiale de cet espace mémoire WebAssembly, exprimée en nombre de pages WebAssembly.
-
maximum {{optional_inline}}
-
La taille maximale autorisée pour cet espace mémoire WebAssembly, exprimée en nombre de pages WebAssembly. Lorsque ce paramètre est utilisé, il est fournit comme indication au moteur pour que celui-ci réserve l'espace mémoire correspondant. Toutefois, le moteur peut choisir d'ignorer cette indication. Dans la plupart des cas, il n'est pas nécessaire d'indiquer un maximum pour les modules WebAssembly.
-
-
-
- -
-

Note : Une page mémoire WebAssembly correspond à une taille fixe de 65 536 octets, soit environ 64 Ko.

-
- -

Exceptions

- - - -

Méthodes du constructeur Memory

- -

Aucune.

- -

Instances de Memory

- -

Toutes les instances de Memory héritent des propriétés du prototype du constructeur Memory() qui peut être utilisé afin de modifier le comportement de l'ensemble des instances de Memory.

- -

Propriétés

- -
-
Memory.prototype.constructor
-
Renvoie la fonction qui a créé l'instance de l'objet. Par défaut, c'est le constructeur {{jsxref("WebAssembly.Memory()")}}.
-
{{jsxref("WebAssembly/Memory/buffer","Memory.prototype.buffer")}}
-
Une propriété d'accesseur qui renvoie le tampon contenu dans l'espace mémoire.
-
- -

Méthodes

- -
-
{{jsxref("WebAssembly/Memory/grow","Memory.prototype.grow()")}}
-
Cette méthode permet d'augmenter la taille de l'espace mémoire d'un nombre de pages donné (dont chacune mesure 64 Ko).
-
- -

Exemples

- -

Il existe deux façons de créer un objet WebAssembly.Memory. La première consiste à le créer explicitement en JavaScript. Avec l'instruction qui suit, on crée un espace mémoire avec une taille initiale de 10 pages (soit 640 Ko) et une taille maximale de 100 pages (soit 6,4 Mo).

- -
var memoire = new WebAssembly.Memory({initial:10, maximum:100});
- -

La seconde méthode permettant d'obtenir un objet WebAssembly.Memory est de l'exporter depuis un module WebAssembly. Dans l'exemple suivant (cf. le fichier memory.html sur GitHub ainsi que le résultat obtenu) on récupère et on instancie le bytecode memory.wasm grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} tout en important la mémoire créée à la ligne précédente. Ensuite, on enregistre des valeurs au sein de cette mémoire puis on exporte une fonction qu'on utilise pour additionner certaines valeurs.

- -
WebAssembly.instantiateStreaming(fetch('memory.wasm'), { js: { mem: memory } })
-.then(obj => {
-  var i32 = new Uint32Array(memory.buffer);
-  for (var i = 0; i < 10; i++) {
-    i32[i] = i;
-  }
-  var sum = obj.instance.exports.accumulate(0, 10);
-  console.log(sum);
-});
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymemory-objects', 'Memory')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Memory")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/memory/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/memory/index.md new file mode 100644 index 0000000000..5c5d36d7cd --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/memory/index.md @@ -0,0 +1,120 @@ +--- +title: WebAssembly.Memory() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +tags: + - API + - Constructeur + - JavaScript + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Memory +--- +
{{JSRef}}
+ +

Le constructeur WebAssembly.Memory() crée un nouvel objet Memory dont la propriété {{jsxref("WebAssembly/Memory/buffer","buffer")}} est un {{jsxref("ArrayBuffer")}} redimensionnable qui contient les octets de mémoire bruts accessibles par une instance WebAssembly.

+ +

Un espace mémoire créé depuis du code JavaScript ou depuis du code WebAssembly sera accessible et modifiable (mutable) depuis JavaScript et depuis WebAssembly.

+ +

Syntaxe

+ +
var maMemoire = new WebAssembly.Memory(descripteurMemoire);
+ +

Paramètres

+ +
+
descripteurMemoire
+
Un objet qui contient les propriétés suivantes : +
+
initial
+
La taille initiale de cet espace mémoire WebAssembly, exprimée en nombre de pages WebAssembly.
+
maximum {{optional_inline}}
+
La taille maximale autorisée pour cet espace mémoire WebAssembly, exprimée en nombre de pages WebAssembly. Lorsque ce paramètre est utilisé, il est fournit comme indication au moteur pour que celui-ci réserve l'espace mémoire correspondant. Toutefois, le moteur peut choisir d'ignorer cette indication. Dans la plupart des cas, il n'est pas nécessaire d'indiquer un maximum pour les modules WebAssembly.
+
+
+
+ +
+

Note : Une page mémoire WebAssembly correspond à une taille fixe de 65 536 octets, soit environ 64 Ko.

+
+ +

Exceptions

+ + + +

Méthodes du constructeur Memory

+ +

Aucune.

+ +

Instances de Memory

+ +

Toutes les instances de Memory héritent des propriétés du prototype du constructeur Memory() qui peut être utilisé afin de modifier le comportement de l'ensemble des instances de Memory.

+ +

Propriétés

+ +
+
Memory.prototype.constructor
+
Renvoie la fonction qui a créé l'instance de l'objet. Par défaut, c'est le constructeur {{jsxref("WebAssembly.Memory()")}}.
+
{{jsxref("WebAssembly/Memory/buffer","Memory.prototype.buffer")}}
+
Une propriété d'accesseur qui renvoie le tampon contenu dans l'espace mémoire.
+
+ +

Méthodes

+ +
+
{{jsxref("WebAssembly/Memory/grow","Memory.prototype.grow()")}}
+
Cette méthode permet d'augmenter la taille de l'espace mémoire d'un nombre de pages donné (dont chacune mesure 64 Ko).
+
+ +

Exemples

+ +

Il existe deux façons de créer un objet WebAssembly.Memory. La première consiste à le créer explicitement en JavaScript. Avec l'instruction qui suit, on crée un espace mémoire avec une taille initiale de 10 pages (soit 640 Ko) et une taille maximale de 100 pages (soit 6,4 Mo).

+ +
var memoire = new WebAssembly.Memory({initial:10, maximum:100});
+ +

La seconde méthode permettant d'obtenir un objet WebAssembly.Memory est de l'exporter depuis un module WebAssembly. Dans l'exemple suivant (cf. le fichier memory.html sur GitHub ainsi que le résultat obtenu) on récupère et on instancie le bytecode memory.wasm grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}} tout en important la mémoire créée à la ligne précédente. Ensuite, on enregistre des valeurs au sein de cette mémoire puis on exporte une fonction qu'on utilise pour additionner certaines valeurs.

+ +
WebAssembly.instantiateStreaming(fetch('memory.wasm'), { js: { mem: memory } })
+.then(obj => {
+  var i32 = new Uint32Array(memory.buffer);
+  for (var i = 0; i < 10; i++) {
+    i32[i] = i;
+  }
+  var sum = obj.instance.exports.accumulate(0, 10);
+  console.log(sum);
+});
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymemory-objects', 'Memory')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Memory")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.html deleted file mode 100644 index dd76bbe66d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: WebAssembly.Module.customSections() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections -tags: - - API - - Constructeur - - JavaScript - - Module - - Méthode - - Object - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/customSections ---- -
{{JSRef}}
- -

La méthode WebAssembly.customSections() renvoie un tableau qui contient les sections personnalisées (custom sections) disponibles dans un module WebAssembly et qui ont un nom donné.

- -

Syntaxe

- -
var custSec = WebAssembly.Module.customSections(module, nomSection);
- -

Paramètres

- -
-
module
-
L'objet {{jsxref("WebAssembly.Module")}} pour lequel on veut obtenir les sections personnalisées.
-
nomSection
-
Le nom de la section personnalisée qu'on souhaite obtenir.
-
- -

Valeur de retour

- -

Un tableau contenant des {{domxref("ArrayBuffer")}} dont chacun contient les données d'une section personnalisée du module qui correspond à nomSection.

- -

Exceptions

- -

Si le module passé en argument n'est pas une instance de {{jsxref("WebAssembly.Module")}}, la méthode lèvera une exception {{jsxref("TypeError")}}.

- -

Les sections personnalisées

- -

Un module wasm contient une série de sections. La plupart de ces sections sont spécifiées et validées par la spécification WebAssembly mais les modules peuvent contenir certaines sections « personnalisées » (custom sections) qui sont ignorées lors de la phase de validation. Pour plus d'informations, consulter l'article sur les structures de haut niveau qui détaille la structure des sections et les différences entre les sections normales (« connues ») et les sections personnalisées.

- -

Cela permet aux développeurs d'inclure des données personnalisées dans un module WebAssembly pour d'autres desseins. Par exemple, on peut avoir une section personnalisée name, qui permet aux développeurs de fournir des noms pour les fonctions et les variables locales du module (à la façon des « symboles » utilisé pour les programmes compilés).

- -

Le format WebAssembly ne possède actuellement aucune syntaxe pour ajouter une section personnalisée. Il est toutefois possible d'ajouter une section nommée au module wasm pendant la conversion du texte vers .wasm. La commande wast2wasm, disponible avec l'outil wabt, possède une option --debug-names qui permet de créer un module .wasm avec une section personnalisée name :

- -
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
- -

Exemples

- -

Dans l'exemple qui suit (tiré de ce fichier source et de cette démonstration), on compile et on instancie le bytecode simple-name-section.wasm et on importe une fonction JavaScript dans le module lors de cette étape. Ensuite, on exporte une fonction depuis le module grâce à Instance.exports.

- -

On faut aussi une vérification sur WebAssembly.Module.customSections pour vérifier si celle-ci contient une section personnalisée "name" dont on vérifie si la longueur est supérieure à 0. Ce module contenant une section name, les appels à console.log() sont exécutés et montrent que le tableau renvoyé par la méthode contient des objets {{domxref("ArrayBuffer")}}.

- -
WebAssembly.compileStreaming(fetch('simple-name-section.wasm'))
-.then(function(mod) {
-  var nameSections = WebAssembly.Module.customSections(mod, "name");
-  if (nameSections.length != 0) {
-    console.log("Le module contient une section nommée");
-    console.log(nameSections[0]);
-  };
-});
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymodulecustomsections', 'customSections()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Module.customSections")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.md new file mode 100644 index 0000000000..dd76bbe66d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/module/customsections/index.md @@ -0,0 +1,95 @@ +--- +title: WebAssembly.Module.customSections() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections +tags: + - API + - Constructeur + - JavaScript + - Module + - Méthode + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/customSections +--- +
{{JSRef}}
+ +

La méthode WebAssembly.customSections() renvoie un tableau qui contient les sections personnalisées (custom sections) disponibles dans un module WebAssembly et qui ont un nom donné.

+ +

Syntaxe

+ +
var custSec = WebAssembly.Module.customSections(module, nomSection);
+ +

Paramètres

+ +
+
module
+
L'objet {{jsxref("WebAssembly.Module")}} pour lequel on veut obtenir les sections personnalisées.
+
nomSection
+
Le nom de la section personnalisée qu'on souhaite obtenir.
+
+ +

Valeur de retour

+ +

Un tableau contenant des {{domxref("ArrayBuffer")}} dont chacun contient les données d'une section personnalisée du module qui correspond à nomSection.

+ +

Exceptions

+ +

Si le module passé en argument n'est pas une instance de {{jsxref("WebAssembly.Module")}}, la méthode lèvera une exception {{jsxref("TypeError")}}.

+ +

Les sections personnalisées

+ +

Un module wasm contient une série de sections. La plupart de ces sections sont spécifiées et validées par la spécification WebAssembly mais les modules peuvent contenir certaines sections « personnalisées » (custom sections) qui sont ignorées lors de la phase de validation. Pour plus d'informations, consulter l'article sur les structures de haut niveau qui détaille la structure des sections et les différences entre les sections normales (« connues ») et les sections personnalisées.

+ +

Cela permet aux développeurs d'inclure des données personnalisées dans un module WebAssembly pour d'autres desseins. Par exemple, on peut avoir une section personnalisée name, qui permet aux développeurs de fournir des noms pour les fonctions et les variables locales du module (à la façon des « symboles » utilisé pour les programmes compilés).

+ +

Le format WebAssembly ne possède actuellement aucune syntaxe pour ajouter une section personnalisée. Il est toutefois possible d'ajouter une section nommée au module wasm pendant la conversion du texte vers .wasm. La commande wast2wasm, disponible avec l'outil wabt, possède une option --debug-names qui permet de créer un module .wasm avec une section personnalisée name :

+ +
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
+ +

Exemples

+ +

Dans l'exemple qui suit (tiré de ce fichier source et de cette démonstration), on compile et on instancie le bytecode simple-name-section.wasm et on importe une fonction JavaScript dans le module lors de cette étape. Ensuite, on exporte une fonction depuis le module grâce à Instance.exports.

+ +

On faut aussi une vérification sur WebAssembly.Module.customSections pour vérifier si celle-ci contient une section personnalisée "name" dont on vérifie si la longueur est supérieure à 0. Ce module contenant une section name, les appels à console.log() sont exécutés et montrent que le tableau renvoyé par la méthode contient des objets {{domxref("ArrayBuffer")}}.

+ +
WebAssembly.compileStreaming(fetch('simple-name-section.wasm'))
+.then(function(mod) {
+  var nameSections = WebAssembly.Module.customSections(mod, "name");
+  if (nameSections.length != 0) {
+    console.log("Le module contient une section nommée");
+    console.log(nameSections[0]);
+  };
+});
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymodulecustomsections', 'customSections()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Module.customSections")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.html deleted file mode 100644 index d16223a07c..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: WebAssembly.Module.exports() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports -tags: - - API - - Constructeur - - JavaScript - - Module - - Méthode - - Object - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/exports ---- -
{{JSRef}}
- -

La fonction WebAssembly.Module.exports() renvoie un tableau qui contient les descriptions des exports déclarés pour un module donné.

- -

Syntaxe

- -
var exports = WebAssembly.Module.exports(module);
- -

Paramètres

- -
-
module
-
Un objet {{jsxref("WebAssembly.Module")}}.
-
- -

Valeur de retour

- -

Un tableau qui contient des objets représentants les fonctions exportés du module passé en argument.

- -

Exceptions

- -

Si l'argument n'est pas une instance de {{jsxref("WebAssembly.Module")}}, une exception {{jsxref("TypeError")}} sera levée.

- -

Exemples

- -

Dans l'exemple suivant (basé sur le fichier index-compile.html disponible sur GitHub avec la démonstration correspondante), on compile le bytecode simple.wasm grâce à la fonction {{jsxref("WebAssembly.compileStreaming()")}} puis on envoie le résultat à un worker grâce à la méthode postMessage().

- -
var worker = new Worker("wasm_worker.js");
-
-WebAssembly.compileStreaming(fetch("simple.wasm"))
-.then(mod =>
-  worker.postMessage(mod)
-);
- -

Dans le worker (cf. wasm_worker.js), on définit un objet d'import pour le module puis on paramètre un gestionnaire d'évènement afin de recevoir le module depuis le thread principal. Lorsqu'on reçoit le module, on en crée une instance via la méthode {{jsxref("WebAssembly.Instantiate()")}} puis on appelle une fonction exportée et enfin, on affiche les informations relatives aux exports disponibles grâce à WebAssembly.Module.exports.

- -
var importObject = {
-  imports: {
-    imported_func: function(arg) {
-      console.log(arg);
-    }
-  }
-};
-
-onmessage = function(e) {
-  console.log('module reçu du thread principal');
-  var mod = e.data;
-
-  WebAssembly.instantiate(mod, importObject).then(function(instance) {
-    instance.exports.exported_func();
-  });
-
-  var exports = WebAssembly.Module.exports(mod);
-  console.log(exports[0]);
-};
- -

La valeur exports[0] ressemblera alors à :

- -
{ name: "exported_func", kind: "function" }
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymoduleexports', 'exports()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Module.exports")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.md new file mode 100644 index 0000000000..d16223a07c --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/module/exports/index.md @@ -0,0 +1,105 @@ +--- +title: WebAssembly.Module.exports() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports +tags: + - API + - Constructeur + - JavaScript + - Module + - Méthode + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/exports +--- +
{{JSRef}}
+ +

La fonction WebAssembly.Module.exports() renvoie un tableau qui contient les descriptions des exports déclarés pour un module donné.

+ +

Syntaxe

+ +
var exports = WebAssembly.Module.exports(module);
+ +

Paramètres

+ +
+
module
+
Un objet {{jsxref("WebAssembly.Module")}}.
+
+ +

Valeur de retour

+ +

Un tableau qui contient des objets représentants les fonctions exportés du module passé en argument.

+ +

Exceptions

+ +

Si l'argument n'est pas une instance de {{jsxref("WebAssembly.Module")}}, une exception {{jsxref("TypeError")}} sera levée.

+ +

Exemples

+ +

Dans l'exemple suivant (basé sur le fichier index-compile.html disponible sur GitHub avec la démonstration correspondante), on compile le bytecode simple.wasm grâce à la fonction {{jsxref("WebAssembly.compileStreaming()")}} puis on envoie le résultat à un worker grâce à la méthode postMessage().

+ +
var worker = new Worker("wasm_worker.js");
+
+WebAssembly.compileStreaming(fetch("simple.wasm"))
+.then(mod =>
+  worker.postMessage(mod)
+);
+ +

Dans le worker (cf. wasm_worker.js), on définit un objet d'import pour le module puis on paramètre un gestionnaire d'évènement afin de recevoir le module depuis le thread principal. Lorsqu'on reçoit le module, on en crée une instance via la méthode {{jsxref("WebAssembly.Instantiate()")}} puis on appelle une fonction exportée et enfin, on affiche les informations relatives aux exports disponibles grâce à WebAssembly.Module.exports.

+ +
var importObject = {
+  imports: {
+    imported_func: function(arg) {
+      console.log(arg);
+    }
+  }
+};
+
+onmessage = function(e) {
+  console.log('module reçu du thread principal');
+  var mod = e.data;
+
+  WebAssembly.instantiate(mod, importObject).then(function(instance) {
+    instance.exports.exported_func();
+  });
+
+  var exports = WebAssembly.Module.exports(mod);
+  console.log(exports[0]);
+};
+ +

La valeur exports[0] ressemblera alors à :

+ +
{ name: "exported_func", kind: "function" }
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymoduleexports', 'exports()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Module.exports")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.html deleted file mode 100644 index ac039a3fc7..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.html +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: WebAssembly.Module.imports() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports -tags: - - API - - JavaScript - - Module - - Méthode - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/imports ---- -
{{JSRef}}
- -

La méthode WebAssembly.imports() renvoie un tableau qui contient les références des fonctions importées qui sont disponibles dans un module WebAssembly donné.

- -

Syntaxe

- -
var arrImport = WebAssembly.Module.imports(module);
- -

Paramètres

- -
-
module
-
Une instance de {{jsxref("WebAssembly.Module")}}.
-
- -

Valeur de retour

- -

Un tableau qui contient des objets représentant les fonctions importées du module passé en argument.

- -

Exceptions

- -

Si module n'est pas une instance de {{jsxref("WebAssembly.Module")}}, une exception {{jsxref("TypeError")}} sera levée.

- -

Exemples

- -

Dans l'exemple qui suit, on compile le module simple.wasm puis on parcourt ses imports (cf. aussi le code sur GitHub et l'exemple live)

- -
WebAssembly.compileStreaming(fetch('simple.wasm'))
-.then(function(mod) {
-  var imports = WebAssembly.Module.imports(mod);
-  console.log(imports[0]);
-});
-
- -

Le résultat affiché dans la console ressemble alors à :

- -
{ module: "imports", name: "imported_func", kind: "function" }
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymoduleimports', 'imports()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Module.imports")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.md new file mode 100644 index 0000000000..ac039a3fc7 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/module/imports/index.md @@ -0,0 +1,81 @@ +--- +title: WebAssembly.Module.imports() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports +tags: + - API + - JavaScript + - Module + - Méthode + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/imports +--- +
{{JSRef}}
+ +

La méthode WebAssembly.imports() renvoie un tableau qui contient les références des fonctions importées qui sont disponibles dans un module WebAssembly donné.

+ +

Syntaxe

+ +
var arrImport = WebAssembly.Module.imports(module);
+ +

Paramètres

+ +
+
module
+
Une instance de {{jsxref("WebAssembly.Module")}}.
+
+ +

Valeur de retour

+ +

Un tableau qui contient des objets représentant les fonctions importées du module passé en argument.

+ +

Exceptions

+ +

Si module n'est pas une instance de {{jsxref("WebAssembly.Module")}}, une exception {{jsxref("TypeError")}} sera levée.

+ +

Exemples

+ +

Dans l'exemple qui suit, on compile le module simple.wasm puis on parcourt ses imports (cf. aussi le code sur GitHub et l'exemple live)

+ +
WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(function(mod) {
+  var imports = WebAssembly.Module.imports(mod);
+  console.log(imports[0]);
+});
+
+ +

Le résultat affiché dans la console ressemble alors à :

+ +
{ module: "imports", name: "imported_func", kind: "function" }
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymoduleimports', 'imports()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Module.imports")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/module/index.html deleted file mode 100644 index cd6b46e8a9..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/module/index.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: WebAssembly.Module() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module -tags: - - Constructeur - - JavaScript - - Module - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module ---- -
{{JSRef}}
- -

Un objet WebAssembly.Module contient du code WebAssembly, sans état et qui a déjà été compilé par le navigateur. Ce code peut être partagé avec des web worker et être instancié à plusieurs reprises. Pour instancier le module, on pourra appeler la forme secondaire de {{jsxref("WebAssembly.instantiate()")}}.

- -

Le constructeur WebAssembly.Module() peut être appelé de façon synchrone pour compiler du code WebAssembly. Toutefois, on utilisera généralement la fonction asynchrone {{jsxref("WebAssembly.compile()")}} qui permet de compiler du bytecode.

- -

Syntaxe

- -
-

Attention : La compilation de modules volumineux peut être consommatrice de ressources et de temps. Le constructeur Module() doit uniqument être utilisé lorsqu'il faut absolument avoir une compilation  synchrone. Pour tous les autres cas de figures, on privilégiera la méthode asynchrone {{jsxref("WebAssembly.compileStreaming()")}}.

-
- -
var monModule = new WebAssembly.Module(bufferSource);
- -

Paramètres

- -
-
bufferSource
-
Un tableau typé ou un {{jsxref("ArrayBuffer")}} qui contient le bytecode du module WebAssembly qu'on souhaite compiler.
-
- -

Méthodes du constructeur Module

- -
-
{{jsxref("Objets_globaux/WebAssembly/Module/customSections", "WebAssembly.Module.customSections()")}}
-
Pour un module donné et une chaîne de caractères donnée, cette méthode renvoie une copie des sections personnalisées (custom sections) du module qui ont le nom correspondant à la chaîne.
-
{{jsxref("Objets_globaux/WebAssembly/Module/exports", "WebAssembly.Module.exports()")}}
-
Pour un module donné, cette méthode renvoie un tableau dont les éléments sont des descriptions des exports déclarés.
-
{{jsxref("Objets_globaux/WebAssembly/Module/imports", "WebAssembly.Module.imports()")}}
-
Pour un module donné, cette méthode renvoie un tableau dont les éléments sont des descriptions des imports déclarés.
-
- -

Instances de Module

- -

Toutes les instances de Module héritent du prototype du constructeur Module(), celui-ci peut être modifié afin de moifier le comportement de l'ensemble des instances de Module.

- -

Propriétés

- -

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/prototype', 'Propriétés')}}

- -

Méthodes

- -

Les instances de Module ne disposent pas de méthodes en propre.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymodule-objects', 'WebAssembly.Module()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Module")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/module/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/module/index.md new file mode 100644 index 0000000000..cd6b46e8a9 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/module/index.md @@ -0,0 +1,86 @@ +--- +title: WebAssembly.Module() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module +tags: + - Constructeur + - JavaScript + - Module + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module +--- +
{{JSRef}}
+ +

Un objet WebAssembly.Module contient du code WebAssembly, sans état et qui a déjà été compilé par le navigateur. Ce code peut être partagé avec des web worker et être instancié à plusieurs reprises. Pour instancier le module, on pourra appeler la forme secondaire de {{jsxref("WebAssembly.instantiate()")}}.

+ +

Le constructeur WebAssembly.Module() peut être appelé de façon synchrone pour compiler du code WebAssembly. Toutefois, on utilisera généralement la fonction asynchrone {{jsxref("WebAssembly.compile()")}} qui permet de compiler du bytecode.

+ +

Syntaxe

+ +
+

Attention : La compilation de modules volumineux peut être consommatrice de ressources et de temps. Le constructeur Module() doit uniqument être utilisé lorsqu'il faut absolument avoir une compilation  synchrone. Pour tous les autres cas de figures, on privilégiera la méthode asynchrone {{jsxref("WebAssembly.compileStreaming()")}}.

+
+ +
var monModule = new WebAssembly.Module(bufferSource);
+ +

Paramètres

+ +
+
bufferSource
+
Un tableau typé ou un {{jsxref("ArrayBuffer")}} qui contient le bytecode du module WebAssembly qu'on souhaite compiler.
+
+ +

Méthodes du constructeur Module

+ +
+
{{jsxref("Objets_globaux/WebAssembly/Module/customSections", "WebAssembly.Module.customSections()")}}
+
Pour un module donné et une chaîne de caractères donnée, cette méthode renvoie une copie des sections personnalisées (custom sections) du module qui ont le nom correspondant à la chaîne.
+
{{jsxref("Objets_globaux/WebAssembly/Module/exports", "WebAssembly.Module.exports()")}}
+
Pour un module donné, cette méthode renvoie un tableau dont les éléments sont des descriptions des exports déclarés.
+
{{jsxref("Objets_globaux/WebAssembly/Module/imports", "WebAssembly.Module.imports()")}}
+
Pour un module donné, cette méthode renvoie un tableau dont les éléments sont des descriptions des imports déclarés.
+
+ +

Instances de Module

+ +

Toutes les instances de Module héritent du prototype du constructeur Module(), celui-ci peut être modifié afin de moifier le comportement de l'ensemble des instances de Module.

+ +

Propriétés

+ +

{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/WebAssembly/Module/prototype', 'Propriétés')}}

+ +

Méthodes

+ +

Les instances de Module ne disposent pas de méthodes en propre.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblymodule-objects', 'WebAssembly.Module()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Module")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html deleted file mode 100644 index fe5a6d50e8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: WebAssembly.RuntimeError() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError -tags: - - API - - Constructeur - - JavaScript - - Reference - - RuntimeError - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/RuntimeError ---- -
{{JSRef}}
- -

Le constructeur WebAssembly.RuntimeError() permet de créer un nouvel objet WebAssembly RuntimeError. C'est ce type d'exception qui est déclenchée lorsque WebAssembly définit une trappe.

- -

Syntaxe

- -
new WebAssembly.RuntimeError(message, nomFichier, numeroLigne)
- -

Paramètres

- -
-
message {{optional_inline}}
-
Une description, compréhensible par un humain, de l'erreur qui s'est produite.
-
fileName {{optional_inline}}{{non-standard_inline}}
-
Le nom du fichier qui contient le code à l'origine de l'exception.
-
lineNumber {{optional_inline}}{{non-standard_inline}}
-
Le numéro de la ligne de code à l'origine de l'exception.
-
- -

Propriétés

- -

Le constructeur RuntimeError ne contient aucune propriété qui lui soit propre. En revanche, il hérite de certaines propriétés grâce à sa chaîne de prototypes.

- -
-
WebAssembly.RuntimeError.prototype.constructor
-
La fonction qui a créé le prototype de l'instance.
-
{{jsxref("Error.prototype.message", "WebAssembly.RuntimeError.prototype.message")}}
-
Le message qui décrit l'erreur. Bien qu'ECMA-262 indique que chaque instance doit fournir sa propre propriété message, dans SpiderMonkey, elle est héritée depuis {{jsxref("Error.prototype.message")}}.
-
{{jsxref("Error.prototype.name", "WebAssembly.RuntimeError.prototype.name")}}
-
Le nom de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.fileName", "WebAssembly.RuntimeError.prototype.fileName")}}
-
Le chemin du fichier à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.lineNumber", "WebAssembly.RuntimeError.prototype.lineNumber")}}
-
Le numéro de la ligne à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.columnNumber", "WebAssembly.RuntimeError.prototype.columnNumber")}}
-
Le numéro de la colonne dans la ligne qui est à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.stack", "WebAssembly.RuntimeError.prototype.stack")}}
-
La pile d'appels à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
-
- -

Méthodes

- -

Le constructeur RuntimeError ne contient aucune méthode qui lui soit propre. En revanche, il hérite de certaines méthodes grâce à sa chaîne de prototypes.

- -
-
{{jsxref("Error.prototype.toSource", "WebAssembly.RuntimeError.prototype.toSource()")}}
-
Cette méthode renvoie un code qui, évalué, entraînerait la même erreur. Elle est héritée via {{jsxref("Error")}}.
-
{{jsxref("Error.prototype.toString", "WebAssembly.RuntimeError.prototype.toString()")}}
-
Cette méthode renvoie une chaîne de caractères qui représente l'objet Error. Elle est héritée via {{jsxref("Error")}}.
-
- -

Exemples

- -

Dans le fragment de code qui suit, on crée une instance de RuntimeError et on imprime les détails de cette erreur dans la console :

- -
try {
-  throw new WebAssembly.RuntimeError('Coucou', 'unFichier', 10);
-} catch (e) {
-  console.log(e instanceof RuntimeError); // true
-  console.log(e.message);                 // "Coucou"
-  console.log(e.name);                    // "RuntimeError"
-  console.log(e.fileName);                // "unFichier"
-  console.log(e.lineNumber);              // 10
-  console.log(e.columnNumber);            // 0
-  console.log(e.stack);                   // renvoie la pile d'appels
-                                           // à l'origine de l'erreur
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}Définition des types standards NativeError.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.RuntimeError")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.md new file mode 100644 index 0000000000..fe5a6d50e8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/runtimeerror/index.md @@ -0,0 +1,116 @@ +--- +title: WebAssembly.RuntimeError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError +tags: + - API + - Constructeur + - JavaScript + - Reference + - RuntimeError + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/RuntimeError +--- +
{{JSRef}}
+ +

Le constructeur WebAssembly.RuntimeError() permet de créer un nouvel objet WebAssembly RuntimeError. C'est ce type d'exception qui est déclenchée lorsque WebAssembly définit une trappe.

+ +

Syntaxe

+ +
new WebAssembly.RuntimeError(message, nomFichier, numeroLigne)
+ +

Paramètres

+ +
+
message {{optional_inline}}
+
Une description, compréhensible par un humain, de l'erreur qui s'est produite.
+
fileName {{optional_inline}}{{non-standard_inline}}
+
Le nom du fichier qui contient le code à l'origine de l'exception.
+
lineNumber {{optional_inline}}{{non-standard_inline}}
+
Le numéro de la ligne de code à l'origine de l'exception.
+
+ +

Propriétés

+ +

Le constructeur RuntimeError ne contient aucune propriété qui lui soit propre. En revanche, il hérite de certaines propriétés grâce à sa chaîne de prototypes.

+ +
+
WebAssembly.RuntimeError.prototype.constructor
+
La fonction qui a créé le prototype de l'instance.
+
{{jsxref("Error.prototype.message", "WebAssembly.RuntimeError.prototype.message")}}
+
Le message qui décrit l'erreur. Bien qu'ECMA-262 indique que chaque instance doit fournir sa propre propriété message, dans SpiderMonkey, elle est héritée depuis {{jsxref("Error.prototype.message")}}.
+
{{jsxref("Error.prototype.name", "WebAssembly.RuntimeError.prototype.name")}}
+
Le nom de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.fileName", "WebAssembly.RuntimeError.prototype.fileName")}}
+
Le chemin du fichier à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.lineNumber", "WebAssembly.RuntimeError.prototype.lineNumber")}}
+
Le numéro de la ligne à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.columnNumber", "WebAssembly.RuntimeError.prototype.columnNumber")}}
+
Le numéro de la colonne dans la ligne qui est à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.stack", "WebAssembly.RuntimeError.prototype.stack")}}
+
La pile d'appels à l'origine de l'erreur. Cette propriété est héritée depuis {{jsxref("Error")}}.
+
+ +

Méthodes

+ +

Le constructeur RuntimeError ne contient aucune méthode qui lui soit propre. En revanche, il hérite de certaines méthodes grâce à sa chaîne de prototypes.

+ +
+
{{jsxref("Error.prototype.toSource", "WebAssembly.RuntimeError.prototype.toSource()")}}
+
Cette méthode renvoie un code qui, évalué, entraînerait la même erreur. Elle est héritée via {{jsxref("Error")}}.
+
{{jsxref("Error.prototype.toString", "WebAssembly.RuntimeError.prototype.toString()")}}
+
Cette méthode renvoie une chaîne de caractères qui représente l'objet Error. Elle est héritée via {{jsxref("Error")}}.
+
+ +

Exemples

+ +

Dans le fragment de code qui suit, on crée une instance de RuntimeError et on imprime les détails de cette erreur dans la console :

+ +
try {
+  throw new WebAssembly.RuntimeError('Coucou', 'unFichier', 10);
+} catch (e) {
+  console.log(e instanceof RuntimeError); // true
+  console.log(e.message);                 // "Coucou"
+  console.log(e.name);                    // "RuntimeError"
+  console.log(e.fileName);                // "unFichier"
+  console.log(e.lineNumber);              // 10
+  console.log(e.columnNumber);            // 0
+  console.log(e.stack);                   // renvoie la pile d'appels
+                                           // à l'origine de l'erreur
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}{{Spec2('ESDraft')}}Définition des types standards NativeError.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.RuntimeError")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.html deleted file mode 100644 index 717a8d70e1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: WebAssembly.Table.prototype.get() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get -tags: - - API - - JavaScript - - Méthode - - Reference - - WebAssembly - - table -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/get ---- -
{{JSRef}}
- -

La méthode get(), rattachéee au prototype de  {{jsxref("WebAssembly.Table()")}}, permet de récupérer une référence à une fonction stockée dans le tableau WebAssembly grâce à sa position. dans le tableau.

- -

Syntaxe

- -
var funcRef = table.get(index);
-
- -

Paramètres

- -
-
index
-
L'index de la référence de fonction qu'on souhaite récupérer.
-
- -

Valeur de retour

- -

Une référence de fonction, c'est-à-dire une fonction WebAssembly exportée qui est une enveloppe JavaScript pour manipuler la fonction WebAssembly sous-jacente.

- -

Exceptions

- -

Si index est supérieur ou égal à {{jsxref("WebAssembly/Table/length","Table.prototype.length")}}, la méthode lèvera une exception {{jsxref("RangeError")}}.

- -

Exemples

- -

Dans l'exemple suivant (cf. le fichier table.html sur GitHub ainsi que le résultat obtenu), on compile et on instancie le bytecode chargé, table.wasm, grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}}. On récupère ensuite les références stockées dans le tableau d'export.

- -
WebAssembly.instantiateStreaming(fetch('table.wasm'))
-.then(function(obj) {
-  var tbl = obj.instance.exports.tbl;
-  console.log(tbl.get(0)());  // 13
-  console.log(tbl.get(1)());  // 42
-});
- -

On note ici qu'il est nécessaire d'avoir un deuxième opérateur d'appel après l'accesseur pour récupérer le valeur stockée dans la référence (autrement dit, on utilise get(0)() plutôt que get(0)). La valeur exportée est une fonction plutôt qu'une valeur simple.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypeget', 'get()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
- -

Compatibilité des navigateurs

- -
- - -

{{Compat("javascript.builtins.WebAssembly.Table.get")}}

-
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.md new file mode 100644 index 0000000000..717a8d70e1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/table/get/index.md @@ -0,0 +1,84 @@ +--- +title: WebAssembly.Table.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get +tags: + - API + - JavaScript + - Méthode + - Reference + - WebAssembly + - table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/get +--- +
{{JSRef}}
+ +

La méthode get(), rattachéee au prototype de  {{jsxref("WebAssembly.Table()")}}, permet de récupérer une référence à une fonction stockée dans le tableau WebAssembly grâce à sa position. dans le tableau.

+ +

Syntaxe

+ +
var funcRef = table.get(index);
+
+ +

Paramètres

+ +
+
index
+
L'index de la référence de fonction qu'on souhaite récupérer.
+
+ +

Valeur de retour

+ +

Une référence de fonction, c'est-à-dire une fonction WebAssembly exportée qui est une enveloppe JavaScript pour manipuler la fonction WebAssembly sous-jacente.

+ +

Exceptions

+ +

Si index est supérieur ou égal à {{jsxref("WebAssembly/Table/length","Table.prototype.length")}}, la méthode lèvera une exception {{jsxref("RangeError")}}.

+ +

Exemples

+ +

Dans l'exemple suivant (cf. le fichier table.html sur GitHub ainsi que le résultat obtenu), on compile et on instancie le bytecode chargé, table.wasm, grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}}. On récupère ensuite les références stockées dans le tableau d'export.

+ +
WebAssembly.instantiateStreaming(fetch('table.wasm'))
+.then(function(obj) {
+  var tbl = obj.instance.exports.tbl;
+  console.log(tbl.get(0)());  // 13
+  console.log(tbl.get(1)());  // 42
+});
+ +

On note ici qu'il est nécessaire d'avoir un deuxième opérateur d'appel après l'accesseur pour récupérer le valeur stockée dans la référence (autrement dit, on utilise get(0)() plutôt que get(0)). La valeur exportée est une fonction plutôt qu'une valeur simple.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypeget', 'get()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Table.get")}}

+
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.html deleted file mode 100644 index d5356522b6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: WebAssembly.Table.prototype.grow() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow -tags: - - API - - JavaScript - - Méthode - - Reference - - WebAssembly - - table -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/grow ---- -
{{JSRef}}
- -

La méthode grow(), rattachée au prototype de {{jsxref("WebAssembly.Table")}}, permet d'augmenter la taille du tableau WebAssembly d'un nombre d'éléments donné.

- -

Syntaxe

- -
table.grow(nombre);
-
- -

Paramètres

- -
-
nombre
-
Le nombre d'éléments qu'on souhaite ajouter au tableau.
-
- -

Valeur de retour

- -

La taille du tableau avant l'agrandissement.

- -

Exceptions

- -

Si l'opération grow() échoue, pour quelque raison que ce soit, une exception {{jsxref("RangeError")}} sera levée.

- -

Exemples

- -

Dans l'exemple qui suit, on crée une instance de Table pour représenter un tableau WebAssembly avec une taille initiale de 2 et une taille maximale de 10.

- -
var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });
- -

On étend ensuite le tableau d'une unité en utilisant la méthode grow() :

- -
console.log(table.length);   // "2"
-console.log(table.grow(1));  // "2"
-console.log(table.length);   // "3"
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypegrow', 'grow()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Table.grow")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.md new file mode 100644 index 0000000000..d5356522b6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/table/grow/index.md @@ -0,0 +1,80 @@ +--- +title: WebAssembly.Table.prototype.grow() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow +tags: + - API + - JavaScript + - Méthode + - Reference + - WebAssembly + - table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/grow +--- +
{{JSRef}}
+ +

La méthode grow(), rattachée au prototype de {{jsxref("WebAssembly.Table")}}, permet d'augmenter la taille du tableau WebAssembly d'un nombre d'éléments donné.

+ +

Syntaxe

+ +
table.grow(nombre);
+
+ +

Paramètres

+ +
+
nombre
+
Le nombre d'éléments qu'on souhaite ajouter au tableau.
+
+ +

Valeur de retour

+ +

La taille du tableau avant l'agrandissement.

+ +

Exceptions

+ +

Si l'opération grow() échoue, pour quelque raison que ce soit, une exception {{jsxref("RangeError")}} sera levée.

+ +

Exemples

+ +

Dans l'exemple qui suit, on crée une instance de Table pour représenter un tableau WebAssembly avec une taille initiale de 2 et une taille maximale de 10.

+ +
var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });
+ +

On étend ensuite le tableau d'une unité en utilisant la méthode grow() :

+ +
console.log(table.length);   // "2"
+console.log(table.grow(1));  // "2"
+console.log(table.length);   // "3"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypegrow', 'grow()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Table.grow")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/table/index.html deleted file mode 100644 index 27df06ebb6..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/table/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: WebAssembly.Table() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table -tags: - - API - - Constructeur - - JavaScript - - Reference - - WebAssembly - - table -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table ---- -
{{JSRef}}
- -

Le constructeur WebAssembly.Table() permet de créer un nouvel objet Table.

- -

Cet objet est une enveloppe JavaScript qui représente un tableau WebAssembly et qui contient des références à des fonctions. Un tableau créé en JavaScript ou dans du code WebAssembly sera accessible et modifiable depuis du code JavaScript et depuis du code WebAssembly.

- -
-

Note : Actuellement, les tableaux WebAssembly peuvent uniquement stocker des références à des fonctions. Cette fonctionnalité sera vraisemblablement étendue par la suite.

-
- -

Syntaxe

- -
var monTableau = new WebAssembly.Table(descripteurTableau);
- -

Paramètres

- -
-
descripteurTableau
-
Un objet composé des propriétés qui suivent : -
-
element
-
Une chaîne de caractères qui représente le type de référence enregistrée dans le tableau. Actuellement, la seule valeur possible est "anyfunc" (pour indiquer des fonctions).
-
initial
-
La longueur initiale du tableau WebAssembly. Cela correspond au nombre d'éléments contenus dans le tableau.
-
maximum {{optional_inline}}
-
La taille maximale que pourra avoir tableau WebAssembly s'il est étendu.
-
-
-
- -

Exceptions

- - - -

Instances de Table

- -

Toutes les instances Table héritent des propriétés du prototype du constructeur Table(). Ce dernier peut être utilisé afin de modifier l'ensemble des instances Table.

- -

Propriétés

- -
-
Table.prototype.constructor
-
Renvoie la fonction qui a créé l'instance. Par défaut, c'est le constructeur {{jsxref("WebAssembly.Table()")}}.
-
{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}
-
Renvoie la longueur du tableau, c'est-à-dire le nombre de références qui sont enregistrées dans le tableau.
-
- -

Méthodes

- -
-
{{jsxref("WebAssembly/Table/get","Table.prototype.get()")}}
-
Une fonction d'accès qui permet d'obtenir l'élément du tableau situé à une position donnée.
-
{{jsxref("WebAssembly/Table/grow","Table.prototype.grow()")}}
-
Cette méthode permet d'augmenter la taille du tableau Table d'un incrément donné.
-
{{jsxref("WebAssembly/Table/set","Table.prototype.set()")}}
-
Cette méthode permet de modifier un élément du tableau situé à une position donnée.
-
- -

Exemples

- -

Dans l'exemple qui suit (tiré du fichier table2.html et qui dispose d'une démonstration), on crée une nouvelle instance d'un tableau WebAssembly avec une taille initiale permettant de stocker 2 références. Ensuite, on imprime la longueur du tableau et le contenu des deux éléments (obtenus grâce à la méthode {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} afin de montrer que la longueur vaut 2 et que le tableau ne contient encore aucune référence de fonction (pour les deux positions, on a la valeur {{jsxref("null")}}).

- -
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
-console.log(tbl.length);
-console.log(tbl.get(0));
-console.log(tbl.get(1));
- -

Ensuite, on crée un objet d'import qui contient une référence au tableau :

- -
var importObj = {
-  js: {
-    tbl:tbl
-  }
-};
- -

Enfin, on charge et on instancie un module WebAssembly (table2.wasm) grâce à la fonction {{jsxref("WebAssembly.instantiateStreaming()")}}. Le module table2.wasm a ajouté deux références de fonctions (cf. sa représentation textuelle). Chacune de ces fonctions fournit une valeur simple :

- -
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
-.then(function(obj) {
-  console.log(tbl.length);   // "2"
-  console.log(tbl.get(0)()); // "42"
-  console.log(tbl.get(1)()); // "83"
-});
- -

On voit ici qu'il faut d'abord récupérer la fonction puis effectuer une invocation pour obtenir la valeur correspondante à partir de l'accesseur (autrement dit, on écrit get(0)() plutôt que get(0) pour obtenir le résultat de la fonction) .

- -

Dans cet exemple, on voit comment créer et manipuler le tableau depuis du code JavaScript mais ce même tableau est également accessible depuis l'instance WebAssembly.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytable-objects', 'Table')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Table")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/table/index.md new file mode 100644 index 0000000000..27df06ebb6 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/table/index.md @@ -0,0 +1,134 @@ +--- +title: WebAssembly.Table() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +tags: + - API + - Constructeur + - JavaScript + - Reference + - WebAssembly + - table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table +--- +
{{JSRef}}
+ +

Le constructeur WebAssembly.Table() permet de créer un nouvel objet Table.

+ +

Cet objet est une enveloppe JavaScript qui représente un tableau WebAssembly et qui contient des références à des fonctions. Un tableau créé en JavaScript ou dans du code WebAssembly sera accessible et modifiable depuis du code JavaScript et depuis du code WebAssembly.

+ +
+

Note : Actuellement, les tableaux WebAssembly peuvent uniquement stocker des références à des fonctions. Cette fonctionnalité sera vraisemblablement étendue par la suite.

+
+ +

Syntaxe

+ +
var monTableau = new WebAssembly.Table(descripteurTableau);
+ +

Paramètres

+ +
+
descripteurTableau
+
Un objet composé des propriétés qui suivent : +
+
element
+
Une chaîne de caractères qui représente le type de référence enregistrée dans le tableau. Actuellement, la seule valeur possible est "anyfunc" (pour indiquer des fonctions).
+
initial
+
La longueur initiale du tableau WebAssembly. Cela correspond au nombre d'éléments contenus dans le tableau.
+
maximum {{optional_inline}}
+
La taille maximale que pourra avoir tableau WebAssembly s'il est étendu.
+
+
+
+ +

Exceptions

+ + + +

Instances de Table

+ +

Toutes les instances Table héritent des propriétés du prototype du constructeur Table(). Ce dernier peut être utilisé afin de modifier l'ensemble des instances Table.

+ +

Propriétés

+ +
+
Table.prototype.constructor
+
Renvoie la fonction qui a créé l'instance. Par défaut, c'est le constructeur {{jsxref("WebAssembly.Table()")}}.
+
{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}
+
Renvoie la longueur du tableau, c'est-à-dire le nombre de références qui sont enregistrées dans le tableau.
+
+ +

Méthodes

+ +
+
{{jsxref("WebAssembly/Table/get","Table.prototype.get()")}}
+
Une fonction d'accès qui permet d'obtenir l'élément du tableau situé à une position donnée.
+
{{jsxref("WebAssembly/Table/grow","Table.prototype.grow()")}}
+
Cette méthode permet d'augmenter la taille du tableau Table d'un incrément donné.
+
{{jsxref("WebAssembly/Table/set","Table.prototype.set()")}}
+
Cette méthode permet de modifier un élément du tableau situé à une position donnée.
+
+ +

Exemples

+ +

Dans l'exemple qui suit (tiré du fichier table2.html et qui dispose d'une démonstration), on crée une nouvelle instance d'un tableau WebAssembly avec une taille initiale permettant de stocker 2 références. Ensuite, on imprime la longueur du tableau et le contenu des deux éléments (obtenus grâce à la méthode {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} afin de montrer que la longueur vaut 2 et que le tableau ne contient encore aucune référence de fonction (pour les deux positions, on a la valeur {{jsxref("null")}}).

+ +
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
+console.log(tbl.length);
+console.log(tbl.get(0));
+console.log(tbl.get(1));
+ +

Ensuite, on crée un objet d'import qui contient une référence au tableau :

+ +
var importObj = {
+  js: {
+    tbl:tbl
+  }
+};
+ +

Enfin, on charge et on instancie un module WebAssembly (table2.wasm) grâce à la fonction {{jsxref("WebAssembly.instantiateStreaming()")}}. Le module table2.wasm a ajouté deux références de fonctions (cf. sa représentation textuelle). Chacune de ces fonctions fournit une valeur simple :

+ +
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
+.then(function(obj) {
+  console.log(tbl.length);   // "2"
+  console.log(tbl.get(0)()); // "42"
+  console.log(tbl.get(1)()); // "83"
+});
+ +

On voit ici qu'il faut d'abord récupérer la fonction puis effectuer une invocation pour obtenir la valeur correspondante à partir de l'accesseur (autrement dit, on écrit get(0)() plutôt que get(0) pour obtenir le résultat de la fonction) .

+ +

Dans cet exemple, on voit comment créer et manipuler le tableau depuis du code JavaScript mais ce même tableau est également accessible depuis l'instance WebAssembly.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytable-objects', 'Table')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initial pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Table")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.html deleted file mode 100644 index 878447d1e1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: WebAssembly.Table.prototype.length -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length -tags: - - API - - JavaScript - - Propriété - - Reference - - WebAssembly - - table -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/length ---- -
{{JSRef}}
- -

La propriété length, rattachée au prototype de l'objet {{jsxref("WebAssembly.Table")}}, renvoie la longueur du tableau WebAssembly, c'est-à-dire le nombre d'éléments qui y sont stockées.

- -

Syntaxe

- -
table.length;
-
- -

Exemples

- -

Avec l'instruction qui suit, on crée un tableau WebAssembly avec une taille initiale de 2 éléments et avec une taille maximale de 10.

- -
var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });
- -

On peut ensuite étendre le tableau d'un élément :

- -
console.log(table.length);   // "2"
-console.log(table.grow(1));  // "2"
-console.log(table.length);   // "3"
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypelength', 'length')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Table.length")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.md new file mode 100644 index 0000000000..878447d1e1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/table/length/index.md @@ -0,0 +1,65 @@ +--- +title: WebAssembly.Table.prototype.length +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length +tags: + - API + - JavaScript + - Propriété + - Reference + - WebAssembly + - table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/length +--- +
{{JSRef}}
+ +

La propriété length, rattachée au prototype de l'objet {{jsxref("WebAssembly.Table")}}, renvoie la longueur du tableau WebAssembly, c'est-à-dire le nombre d'éléments qui y sont stockées.

+ +

Syntaxe

+ +
table.length;
+
+ +

Exemples

+ +

Avec l'instruction qui suit, on crée un tableau WebAssembly avec une taille initiale de 2 éléments et avec une taille maximale de 10.

+ +
var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });
+ +

On peut ensuite étendre le tableau d'un élément :

+ +
console.log(table.length);   // "2"
+console.log(table.grow(1));  // "2"
+console.log(table.length);   // "3"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypelength', 'length')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Table.length")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.html deleted file mode 100644 index 5413168f5e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: WebAssembly.Table.prototype.set() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set -tags: - - API - - JavaScript - - Méthode - - Reference - - WebAssembly - - table -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/set ---- -
{{JSRef}}
- -

La méthode set(), rattachée au prototype de {{jsxref("WebAssembly.Table")}}, permet de modifier une référence de fonction stockée dans un tableau WebAssembly.

- -

Syntaxe

- -
table.set(index, valeur);
-
- -

Paramètres

- -
-
index
-
L'index de la référence de la fonction qu'on souhaite modifier.
-
valeur
-
La valeur par laquelle on souhaite remplacer la référence. Cette valeur doit être une fonction exportée WebAssembly (c'est-à-dire une enveloppe JavaScript représentant une fonction WebAssembly sous-jacente).
-
- -

Valeur de retour

- -

Aucune.

- -

Exceptions

- - - -

Exemples

- -

Dans l'exemple qui suit (basé sur le code source de table2.html et qui dispose d'une démonstration), on crée ue nouvelle instance d'un tableau WebAssembly (Table) qui permet initialement de stocker 2 référence. On imprime alors la longueur du tableau dans la console ainsi que le contenu pour les deux premiers index (obtenus grâce à la méthode {{jsxref("WebAssembly/Table/get","Table.prototype.get()")}}) afin de montrer qu la longueur vaut 2 et qu'initialement, les deux éléments du tableau ne contiennent aucune référence (ils ont tous les deux la valeur {{jsxref("null")}}).

- -
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
-console.log(tbl.length);
-console.log(tbl.get(0));
-console.log(tbl.get(1));
- -

On crée ensuite un objet d'import qui contient une référence au tableau :

- -
var importObj = {
-  js: {
-    tbl:tbl
-  }
-};
- -

Enfin, on charge et on instancie le module WebAssembly (table2.wasm) grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}}, on logge la longueur du tableau et on appelle les deux fonctions référencées qui sont désormais dans le tableau (le module table2.wasm (cf. la représentation textuelle) ajoute deux références de fonctions au tableau et chacune affiche une valeur simple) :

- -
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
-.then(function(obj) {
-  console.log(tbl.length);
-  console.log(tbl.get(0)());
-  console.log(tbl.get(1)());
-});
- -

On voit ici qu'il faut appeler la fonction après avoir appeler l'opérateur sur l'accesseur (autrement dit, on écrit get(0)() plutôt que get(0)) .

- -

Dans cet exemple, on montre comment créer et manipuler un tableau en JavaScript mais ce tableau est également accessible et manipulable depuis l'instance WebAssembly.

- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypeset', 'set()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.Table.set")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.md new file mode 100644 index 0000000000..5413168f5e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/table/set/index.md @@ -0,0 +1,102 @@ +--- +title: WebAssembly.Table.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set +tags: + - API + - JavaScript + - Méthode + - Reference + - WebAssembly + - table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/Table/set +--- +
{{JSRef}}
+ +

La méthode set(), rattachée au prototype de {{jsxref("WebAssembly.Table")}}, permet de modifier une référence de fonction stockée dans un tableau WebAssembly.

+ +

Syntaxe

+ +
table.set(index, valeur);
+
+ +

Paramètres

+ +
+
index
+
L'index de la référence de la fonction qu'on souhaite modifier.
+
valeur
+
La valeur par laquelle on souhaite remplacer la référence. Cette valeur doit être une fonction exportée WebAssembly (c'est-à-dire une enveloppe JavaScript représentant une fonction WebAssembly sous-jacente).
+
+ +

Valeur de retour

+ +

Aucune.

+ +

Exceptions

+ + + +

Exemples

+ +

Dans l'exemple qui suit (basé sur le code source de table2.html et qui dispose d'une démonstration), on crée ue nouvelle instance d'un tableau WebAssembly (Table) qui permet initialement de stocker 2 référence. On imprime alors la longueur du tableau dans la console ainsi que le contenu pour les deux premiers index (obtenus grâce à la méthode {{jsxref("WebAssembly/Table/get","Table.prototype.get()")}}) afin de montrer qu la longueur vaut 2 et qu'initialement, les deux éléments du tableau ne contiennent aucune référence (ils ont tous les deux la valeur {{jsxref("null")}}).

+ +
var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
+console.log(tbl.length);
+console.log(tbl.get(0));
+console.log(tbl.get(1));
+ +

On crée ensuite un objet d'import qui contient une référence au tableau :

+ +
var importObj = {
+  js: {
+    tbl:tbl
+  }
+};
+ +

Enfin, on charge et on instancie le module WebAssembly (table2.wasm) grâce à la méthode {{jsxref("WebAssembly.instantiateStreaming()")}}, on logge la longueur du tableau et on appelle les deux fonctions référencées qui sont désormais dans le tableau (le module table2.wasm (cf. la représentation textuelle) ajoute deux références de fonctions au tableau et chacune affiche une valeur simple) :

+ +
WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
+.then(function(obj) {
+  console.log(tbl.length);
+  console.log(tbl.get(0)());
+  console.log(tbl.get(1)());
+});
+ +

On voit ici qu'il faut appeler la fonction après avoir appeler l'opérateur sur l'accesseur (autrement dit, on écrit get(0)() plutôt que get(0)) .

+ +

Dans cet exemple, on montre comment créer et manipuler un tableau en JavaScript mais ce tableau est également accessible et manipulable depuis l'instance WebAssembly.

+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblytableprototypeset', 'set()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.Table.set")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/validate/index.html b/files/fr/web/javascript/reference/global_objects/webassembly/validate/index.html deleted file mode 100644 index df8887431d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/webassembly/validate/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: WebAssembly.validate() -slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate -tags: - - API - - JavaScript - - Méthode - - Reference - - WebAssembly -translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate -original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/validate ---- -
{{JSRef}}
- -

La fonction WebAssembly.validate() permet de valider un tableau typé de bytecode WebAssembly et renvoie un booléen qui indique si le contenu du tableau forme un module WebAssembly valide (true) ou non (false).

- -

Syntaxe

- -
WebAssembly.validate(bufferSource);
- -

Paramètres

- -
-
bufferSource
-
Un tableau typé ou un {{jsxref("ArrayBuffer")}} qui contient le bytecode du module qu'on souhaite valider.
-
- -

Valeur de retour

- -

Un booléen qui indique si la source est un code WebAssembly valide (true) ou non (false).

- -

Exceptions

- -

Si la valeur passée en argument n'est pas un tableau typé ou un {{jsxref("ArrayBuffer")}}, une exception {{jsxref("TypeError")}} sera levée.

- -

Exemples

- -

Dans l'exemple suivant, (cf. le fichier validate.html du code source, ainsi que l'exemple live), on récupère un module .wasm et on le convertit en un tableau typé. Ensuite, on appelle la méthode validate() afin de vérifier si le module est valide.

- -
fetch('simple.wasm').then(response =>
-  response.arrayBuffer()
-).then(function(bytes) {
-  var valid = WebAssembly.validate(bytes);
-  console.log("Les octets forment un module "
-    + (valid ? "" : "in") + "valide.");
-});
-
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyvalidate', 'validate()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.WebAssembly.validate")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/webassembly/validate/index.md b/files/fr/web/javascript/reference/global_objects/webassembly/validate/index.md new file mode 100644 index 0000000000..df8887431d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/webassembly/validate/index.md @@ -0,0 +1,78 @@ +--- +title: WebAssembly.validate() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate +tags: + - API + - JavaScript + - Méthode + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate +original_slug: Web/JavaScript/Reference/Objets_globaux/WebAssembly/validate +--- +
{{JSRef}}
+ +

La fonction WebAssembly.validate() permet de valider un tableau typé de bytecode WebAssembly et renvoie un booléen qui indique si le contenu du tableau forme un module WebAssembly valide (true) ou non (false).

+ +

Syntaxe

+ +
WebAssembly.validate(bufferSource);
+ +

Paramètres

+ +
+
bufferSource
+
Un tableau typé ou un {{jsxref("ArrayBuffer")}} qui contient le bytecode du module qu'on souhaite valider.
+
+ +

Valeur de retour

+ +

Un booléen qui indique si la source est un code WebAssembly valide (true) ou non (false).

+ +

Exceptions

+ +

Si la valeur passée en argument n'est pas un tableau typé ou un {{jsxref("ArrayBuffer")}}, une exception {{jsxref("TypeError")}} sera levée.

+ +

Exemples

+ +

Dans l'exemple suivant, (cf. le fichier validate.html du code source, ainsi que l'exemple live), on récupère un module .wasm et on le convertit en un tableau typé. Ensuite, on appelle la méthode validate() afin de vérifier si le module est valide.

+ +
fetch('simple.wasm').then(response =>
+  response.arrayBuffer()
+).then(function(bytes) {
+  var valid = WebAssembly.validate(bytes);
+  console.log("Les octets forment un module "
+    + (valid ? "" : "in") + "valide.");
+});
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('WebAssembly JS', '#webassemblyvalidate', 'validate()')}}{{Spec2('WebAssembly JS')}}Brouillon de définition initiale pour WebAssembly.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.WebAssembly.validate")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/index.html b/files/fr/web/javascript/reference/index.html deleted file mode 100644 index 96f86980b6..0000000000 --- a/files/fr/web/javascript/reference/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Référence JavaScript -slug: Web/JavaScript/Reference -tags: - - ECMAScript - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference ---- -
{{JsSidebar}}
- -

Cette partie de la section JavaScript de MDN regroupe plusieurs notions sur le langage JavaScript. En savoir plus à propos de cette référence.

- -

Les objets globaux

- -

Ce chapitre documente l'ensemble des objets natifs standards JavaScript ainsi que leurs méthodes et leurs propriétés.

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux', 'Objets_globaux_standards_(par_catégorie)')}}
- -

Les instructions

- -

Ce chapitre documente les différentes instructions et déclarations JavaScript.

- -
{{page('/fr/docs/Web/JavaScript/Reference/Instructions', 'Instructions_et_déclarations_par_catégorie')}}
- -

Les expressions et opérateurs

- -

Ce chapitre documente l'ensemble des expressions et opérateurs JavaScript.

- -
{{page('/fr/docs/JavaScript/Reference/Opérateurs', 'Expressions_et_opérateurs_par_catégorie')}}
- -

Les fonctions

- -

Ce chapitre aborde les manières de travailler avec les fonctions JavaScript pour développer vos applications.

- - - -

Autres pages de référence

- - diff --git a/files/fr/web/javascript/reference/index.md b/files/fr/web/javascript/reference/index.md new file mode 100644 index 0000000000..96f86980b6 --- /dev/null +++ b/files/fr/web/javascript/reference/index.md @@ -0,0 +1,50 @@ +--- +title: Référence JavaScript +slug: Web/JavaScript/Reference +tags: + - ECMAScript + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference +--- +
{{JsSidebar}}
+ +

Cette partie de la section JavaScript de MDN regroupe plusieurs notions sur le langage JavaScript. En savoir plus à propos de cette référence.

+ +

Les objets globaux

+ +

Ce chapitre documente l'ensemble des objets natifs standards JavaScript ainsi que leurs méthodes et leurs propriétés.

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux', 'Objets_globaux_standards_(par_catégorie)')}}
+ +

Les instructions

+ +

Ce chapitre documente les différentes instructions et déclarations JavaScript.

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Instructions', 'Instructions_et_déclarations_par_catégorie')}}
+ +

Les expressions et opérateurs

+ +

Ce chapitre documente l'ensemble des expressions et opérateurs JavaScript.

+ +
{{page('/fr/docs/JavaScript/Reference/Opérateurs', 'Expressions_et_opérateurs_par_catégorie')}}
+ +

Les fonctions

+ +

Ce chapitre aborde les manières de travailler avec les fonctions JavaScript pour développer vos applications.

+ + + +

Autres pages de référence

+ + diff --git a/files/fr/web/javascript/reference/iteration_protocols/index.html b/files/fr/web/javascript/reference/iteration_protocols/index.html deleted file mode 100644 index 6e1b27bbae..0000000000 --- a/files/fr/web/javascript/reference/iteration_protocols/index.html +++ /dev/null @@ -1,354 +0,0 @@ ---- -title: Les protocoles d'itération -slug: Web/JavaScript/Reference/Iteration_protocols -tags: - - ECMAScript 2015 - - Intermédiaire - - Iterator - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Iteration_protocols -original_slug: Web/JavaScript/Reference/Les_protocoles_iteration ---- -
{{jsSidebar("More")}}
- -

Un des ajouts à ECMAScript 2015 (ES6) n'est ni une nouvelle syntaxe ni un nouvel objet natif mais des protocoles. Ces protocoles peuvent être implémentés par n'importe quel objet qui respecte certaines conventions.

- -

Il existe deux protocoles concernant l'itération : le protocole « itérable » et le protocole « itérateur ».

- -

Le protocole « itérable »

- -

Le protocole « itérable » permet aux objets JavaScript de définir ou de personnaliser leur comportement lors d'une itération, par exemple la façon dont les valeurs seront parcourues avec une boucle {{jsxref("Instructions/for...of", "for..of")}}. Certains types natifs tels que {{jsxref("Array")}} ou {{jsxref("Map")}} possèdent un comportement itératif par défaut, d'autres types, comme {{jsxref("Object")}} n'ont pas ce type de comportement.

- -

Afin d'être itérable, un objet doit implémenter la méthode @@iterator, cela signifie que l'objet (ou un des objets de sa chaîne de prototypes) doit avoir une propriété avec une clé @@iterator qui est accessible via {{jsxref("Symbol.iterator")}} :

- - - - - - - - - - - - - - -
PropriétéValeur
[Symbol.iterator]Une fonction sans argument qui renvoie un objet conforme au protocole itérateur.
- -

Lorsqu'on doit itérer sur un objet (ex. : au début d'une boucle for..of), sa méthode @@iterator est appelée sans argument et l'itérateur qui est renvoyé est utilisé afin d'obtenir les valeurs sur lesquelles itérer.

- -

Le protocole « itérateur »

- -

Le protocole « itérateur » définit une façon standard pour produire une suite de valeurs (finie ou infinie) ainsi qu'une valeur de retour lorsque toutes les valeurs ont été générées.

- -

Un objet est considéré comme un itérateur lorsqu'il implémente une méthode next() avec la sémantique suivante :

- - - - - - - - - - - - -
PropriétéValeur
next -

Une fonction sans argument qui renvoie un objet qui possède au moins deux propriétés :

- -
    -
  • done (un booléen) - -
      -
    • Qui vaut true lorsque l'itérateur a fini la suite. Dans ce cas, la propriété value sera facultative et permettra de spécifier la valeur de retour de l'itérateur. Les valeurs de retour sont détaillées ici.
    • -
    • Qui vaut false lorsque l'itérateur a pu produire la prochaine valeur de la suite. Si on ne définit pas la propriété done, on aura ce comportement par défaut.
    • -
    -
  • -
  • value : n'importe quelle valeur JavaScript, renvoyée par l'itérateur. Cette propriété peut être absente lorsque done vaut true.
  • -
- -

La méthode next doit toujours renvoyer un objet contenant les propriétés done et value. Si c'est une valeur primitive qui est renvoyée (ex. false ou undefined), une exception {{jsxref("TypeError")}} sera levée ("iterator.next() returned a non-object value").

-
- -

Certains itérateurs sont des itérables :

- -
var unTableau = [1, 5, 7];
-var élémentsDuTableau = unTableau.entries();
-
-élémentsDuTableau.toString();    // "[object Array Iterator]"
-élémentsDuTableau === élémentsDuTableau[Symbol.iterator]();    // true
-
- -

Exemples d'utilisation des protocoles d'itération

- -

Une {{jsxref("String")}} est un exemple d'objet natif itérable :

- -
var uneChaîne = "coucou";
-typeof uneChaîne[Symbol.iterator];           // "function"
-
- -

L'itérateur par défaut d'un objet String renverra les caractères de la chaîne les uns à la suite des autres :

- -
var itérateur = uneChaîne[Symbol.iterator]();
-itérateur + "";     // "[object String Iterator]"
-
-itérateur.next();  // { value: "c", done: false }
-itérateur.next();  // { value: "o", done: false }
-itérateur.next();  // { value: "u", done: false }
-itérateur.next();  // { value: "c", done: false }
-itérateur.next();  // { value: "o", done: false }
-itérateur.next();  // { value: "u", done: false }
-itérateur.next();  // { value: undefined, done: true }
- -

Certains éléments natifs du langage, tels que la syntaxe de décomposition, utilisent ce même protocole :

- -
[...uneChaîne];   // ["c", "o", "u", "c", "o", "u"]
- -

Il est possible de redéfinir le comportement par défaut en définissant soi-même le symbole @@iterator :

- -
var uneChaîne = new String("yo");          // on construit un objet String explicitement afin d'éviter la conversion automatique
-
-uneChaîne[Symbol.iterator] = function() {
-  return { // l'objet itérateur qui renvoie un seul élément, la chaîne "bop"
-    next: function() {
-      if (this._first) {
-        this._first = false;
-        return { value: "bop", done: false };
-      } else {
-        return { done: true };
-      }
-    },
-    _first: true
-  };
-};
-
- -

On notera que redéfinir le symbole @@iterator affecte également le comportement des éléments du langage qui utilisent le protocole :

- -
[...uneChaîne];  // ["bop"]
-uneChaîne + "";  // "yo"
-
- -

Exemples d'itérables

- -

Les itérables natifs

- -

{{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} et {{jsxref("Set")}} sont des itérables natifs car leurs prototypes possèdent une méthode @@iterator.

- -

Les itérables définis par l'utilisateur

- -

Il est possible de construire un itérable dans un script de la façon suivante :

- -
var monItérable = {};
-monItérable[Symbol.iterator] = function* () {
-    yield 1;
-    yield 2;
-    yield 3;
-};
-[...monItérable]; // [1, 2, 3]
-
- -

Les API natives utilisant des itérables

- -

Plusieurs API utilisent les itérables, par exemple : {{jsxref("Map", "Map([itérable])")}}, {{jsxref("WeakMap", "WeakMap([itérable])")}}, {{jsxref("Set", "Set([itérable])")}} et {{jsxref("WeakSet", "WeakSet([itérable])")}} :

- -
var monObjet = {};
-new Map([[1,"a"],[2,"b"],[3,"c"]]).get(2);  // "b"
-new WeakMap([[{},"a"],[monObjet,"b"],[{},"c"]]).get(monObjet); // "b"
-new Set([1, 2, 3]).has(3);    // true
-new Set("123").has("2");      // true
-new WeakSet(function*() {
-    yield {};
-    yield monObjet;
-    yield {};
-}()).has(monObjet);           // true
-
- -

ainsi que {{jsxref("Promise.all", "Promise.all(itérable)")}}, {{jsxref("Promise.race", "Promise.race(itérable)")}}, {{jsxref("Array.from", "Array.from()")}}

- -

Les éléments de syntaxe utilisant des itérables

- -

Certains éléments du langage utilisent des itérables, par exemple : for..of, la syntaxe de décomposition, yield*, l'affectation par décomposition :

- -
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"
-
-
- -

Itérables mal-formés

- -

Si une méthode @@iterator d'un objet itérable ne renvoie pas d'objet itérateur, on dira que cet objet est un itérable mal-formé. Utiliser de tels itérables peut provoquer des exceptions lors de l'exécution ou un comportement erratique :

- -
var itérableMalFormé = {}
-itérableMalFormé[Symbol.iterator] = () => 1
-[...itérableMalFormé] // TypeError: [] is not a function
-
- -

Exemples d'itérateurs

- -

Un itérateur simple

- -
function créerItérateur(tableau){
-    var nextIndex = 0;
-
-    return {
-       next: function(){
-           return nextIndex < tableau.length ?
-               {value: tableau[nextIndex++], done: false} :
-               {done: true};
-       }
-    }
-}
-
-var it = créerItérateur(['yo', 'ya']);
-
-console.log(it.next().value); // 'yo'
-console.log(it.next().value); // 'ya'
-console.log(it.next().done);  // true
-
- -

Un itérateur infini

- -
function créateurID(){
-    var index = 0;
-
-    return {
-       next: function(){
-           return {value: index++, done: false};
-       }
-    };
-}
-
-var it = créateurID();
-
-console.log(it.next().value); // '0'
-console.log(it.next().value); // '1'
-console.log(it.next().value); // '2'
-// ...
-
- -

Avec un générateur

- -
function* créerUnGénérateurSimple(tableau){
-    var nextIndex = 0;
-
-    while(nextIndex < tableau.length){
-        yield tableau[nextIndex++];
-    }
-}
-
-var gen = créerUnGénérateurSimple(['yo', 'ya']);
-
-console.log(gen.next().value); // 'yo'
-console.log(gen.next().value); // 'ya'
-console.log(gen.next().done);  // true
-
-function* créateurID(){
-    var index = 0;
-    while(true)
-        yield index++;
-}
-
-var gen = créateurID();
-
-console.log(gen.next().value); // '0'
-console.log(gen.next().value); // '1'
-console.log(gen.next().value); // '2'
-
- -

Avec une classe ECMAScript 2015 (ES6)

- -
class ClasseSimple {
-  constructor(data) {
-    this.index = 0;
-    this.data = data;
-  }
-
-  [Symbol.iterator]() {
-    return {
-      next: () => {
-        if (this.index < this.data.length) {
-          return {value: this.data[this.index++], done: false};
-        } else {
-          this.index = 0;
-          // En réinitialisant l'index, on peut
-          // "reprendre" l'itérateure sans avoir
-          // à gérer de mise à jour manuelle
-          return {done: true};
-        }
-      }
-    };
-  }
-}
-
-const simple = new ClasseSimple([1,2,3,4,5]);
-
-for (const val of simple) {
-  console.log(val);  // '1' '2' '3' '4' '5'
-}
-
- -

Un générateur est-il un itérateur ou un itérable ?

- -

Les deux réponses sont correctes :

- -
var unObjetGénérateur = function*(){
-    yield 1;
-    yield 2;
-    yield 3;
-}()
-typeof unObjetGénérateur.next
-// "function", car il possède une fonction next, c'est donc un itérateur
-typeof unObjetGénérateur[Symbol.iterator]
-// "function", car il possède une méthode @@iterator, c'est donc un itérable
-unObjetGénérateur[Symbol.iterator]() === unObjetGénérateur
-// vrai car la méthode @@iterator renvoie elle-même, un itérateur, c'est donc un itérable bien formé
-[...unObjetGénérateur]
-// [1, 2, 3]
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-iteration', 'Iteration')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-iteration', 'Iteration')}}{{Spec2('ESDraft')}} 
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/iteration_protocols/index.md b/files/fr/web/javascript/reference/iteration_protocols/index.md new file mode 100644 index 0000000000..6e1b27bbae --- /dev/null +++ b/files/fr/web/javascript/reference/iteration_protocols/index.md @@ -0,0 +1,354 @@ +--- +title: Les protocoles d'itération +slug: Web/JavaScript/Reference/Iteration_protocols +tags: + - ECMAScript 2015 + - Intermédiaire + - Iterator + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Iteration_protocols +original_slug: Web/JavaScript/Reference/Les_protocoles_iteration +--- +
{{jsSidebar("More")}}
+ +

Un des ajouts à ECMAScript 2015 (ES6) n'est ni une nouvelle syntaxe ni un nouvel objet natif mais des protocoles. Ces protocoles peuvent être implémentés par n'importe quel objet qui respecte certaines conventions.

+ +

Il existe deux protocoles concernant l'itération : le protocole « itérable » et le protocole « itérateur ».

+ +

Le protocole « itérable »

+ +

Le protocole « itérable » permet aux objets JavaScript de définir ou de personnaliser leur comportement lors d'une itération, par exemple la façon dont les valeurs seront parcourues avec une boucle {{jsxref("Instructions/for...of", "for..of")}}. Certains types natifs tels que {{jsxref("Array")}} ou {{jsxref("Map")}} possèdent un comportement itératif par défaut, d'autres types, comme {{jsxref("Object")}} n'ont pas ce type de comportement.

+ +

Afin d'être itérable, un objet doit implémenter la méthode @@iterator, cela signifie que l'objet (ou un des objets de sa chaîne de prototypes) doit avoir une propriété avec une clé @@iterator qui est accessible via {{jsxref("Symbol.iterator")}} :

+ + + + + + + + + + + + + + +
PropriétéValeur
[Symbol.iterator]Une fonction sans argument qui renvoie un objet conforme au protocole itérateur.
+ +

Lorsqu'on doit itérer sur un objet (ex. : au début d'une boucle for..of), sa méthode @@iterator est appelée sans argument et l'itérateur qui est renvoyé est utilisé afin d'obtenir les valeurs sur lesquelles itérer.

+ +

Le protocole « itérateur »

+ +

Le protocole « itérateur » définit une façon standard pour produire une suite de valeurs (finie ou infinie) ainsi qu'une valeur de retour lorsque toutes les valeurs ont été générées.

+ +

Un objet est considéré comme un itérateur lorsqu'il implémente une méthode next() avec la sémantique suivante :

+ + + + + + + + + + + + +
PropriétéValeur
next +

Une fonction sans argument qui renvoie un objet qui possède au moins deux propriétés :

+ +
    +
  • done (un booléen) + +
      +
    • Qui vaut true lorsque l'itérateur a fini la suite. Dans ce cas, la propriété value sera facultative et permettra de spécifier la valeur de retour de l'itérateur. Les valeurs de retour sont détaillées ici.
    • +
    • Qui vaut false lorsque l'itérateur a pu produire la prochaine valeur de la suite. Si on ne définit pas la propriété done, on aura ce comportement par défaut.
    • +
    +
  • +
  • value : n'importe quelle valeur JavaScript, renvoyée par l'itérateur. Cette propriété peut être absente lorsque done vaut true.
  • +
+ +

La méthode next doit toujours renvoyer un objet contenant les propriétés done et value. Si c'est une valeur primitive qui est renvoyée (ex. false ou undefined), une exception {{jsxref("TypeError")}} sera levée ("iterator.next() returned a non-object value").

+
+ +

Certains itérateurs sont des itérables :

+ +
var unTableau = [1, 5, 7];
+var élémentsDuTableau = unTableau.entries();
+
+élémentsDuTableau.toString();    // "[object Array Iterator]"
+élémentsDuTableau === élémentsDuTableau[Symbol.iterator]();    // true
+
+ +

Exemples d'utilisation des protocoles d'itération

+ +

Une {{jsxref("String")}} est un exemple d'objet natif itérable :

+ +
var uneChaîne = "coucou";
+typeof uneChaîne[Symbol.iterator];           // "function"
+
+ +

L'itérateur par défaut d'un objet String renverra les caractères de la chaîne les uns à la suite des autres :

+ +
var itérateur = uneChaîne[Symbol.iterator]();
+itérateur + "";     // "[object String Iterator]"
+
+itérateur.next();  // { value: "c", done: false }
+itérateur.next();  // { value: "o", done: false }
+itérateur.next();  // { value: "u", done: false }
+itérateur.next();  // { value: "c", done: false }
+itérateur.next();  // { value: "o", done: false }
+itérateur.next();  // { value: "u", done: false }
+itérateur.next();  // { value: undefined, done: true }
+ +

Certains éléments natifs du langage, tels que la syntaxe de décomposition, utilisent ce même protocole :

+ +
[...uneChaîne];   // ["c", "o", "u", "c", "o", "u"]
+ +

Il est possible de redéfinir le comportement par défaut en définissant soi-même le symbole @@iterator :

+ +
var uneChaîne = new String("yo");          // on construit un objet String explicitement afin d'éviter la conversion automatique
+
+uneChaîne[Symbol.iterator] = function() {
+  return { // l'objet itérateur qui renvoie un seul élément, la chaîne "bop"
+    next: function() {
+      if (this._first) {
+        this._first = false;
+        return { value: "bop", done: false };
+      } else {
+        return { done: true };
+      }
+    },
+    _first: true
+  };
+};
+
+ +

On notera que redéfinir le symbole @@iterator affecte également le comportement des éléments du langage qui utilisent le protocole :

+ +
[...uneChaîne];  // ["bop"]
+uneChaîne + "";  // "yo"
+
+ +

Exemples d'itérables

+ +

Les itérables natifs

+ +

{{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} et {{jsxref("Set")}} sont des itérables natifs car leurs prototypes possèdent une méthode @@iterator.

+ +

Les itérables définis par l'utilisateur

+ +

Il est possible de construire un itérable dans un script de la façon suivante :

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

Les API natives utilisant des itérables

+ +

Plusieurs API utilisent les itérables, par exemple : {{jsxref("Map", "Map([itérable])")}}, {{jsxref("WeakMap", "WeakMap([itérable])")}}, {{jsxref("Set", "Set([itérable])")}} et {{jsxref("WeakSet", "WeakSet([itérable])")}} :

+ +
var monObjet = {};
+new Map([[1,"a"],[2,"b"],[3,"c"]]).get(2);  // "b"
+new WeakMap([[{},"a"],[monObjet,"b"],[{},"c"]]).get(monObjet); // "b"
+new Set([1, 2, 3]).has(3);    // true
+new Set("123").has("2");      // true
+new WeakSet(function*() {
+    yield {};
+    yield monObjet;
+    yield {};
+}()).has(monObjet);           // true
+
+ +

ainsi que {{jsxref("Promise.all", "Promise.all(itérable)")}}, {{jsxref("Promise.race", "Promise.race(itérable)")}}, {{jsxref("Array.from", "Array.from()")}}

+ +

Les éléments de syntaxe utilisant des itérables

+ +

Certains éléments du langage utilisent des itérables, par exemple : for..of, la syntaxe de décomposition, yield*, l'affectation par décomposition :

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

Itérables mal-formés

+ +

Si une méthode @@iterator d'un objet itérable ne renvoie pas d'objet itérateur, on dira que cet objet est un itérable mal-formé. Utiliser de tels itérables peut provoquer des exceptions lors de l'exécution ou un comportement erratique :

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

Exemples d'itérateurs

+ +

Un itérateur simple

+ +
function créerItérateur(tableau){
+    var nextIndex = 0;
+
+    return {
+       next: function(){
+           return nextIndex < tableau.length ?
+               {value: tableau[nextIndex++], done: false} :
+               {done: true};
+       }
+    }
+}
+
+var it = créerItérateur(['yo', 'ya']);
+
+console.log(it.next().value); // 'yo'
+console.log(it.next().value); // 'ya'
+console.log(it.next().done);  // true
+
+ +

Un itérateur infini

+ +
function créateurID(){
+    var index = 0;
+
+    return {
+       next: function(){
+           return {value: index++, done: false};
+       }
+    };
+}
+
+var it = créateurID();
+
+console.log(it.next().value); // '0'
+console.log(it.next().value); // '1'
+console.log(it.next().value); // '2'
+// ...
+
+ +

Avec un générateur

+ +
function* créerUnGénérateurSimple(tableau){
+    var nextIndex = 0;
+
+    while(nextIndex < tableau.length){
+        yield tableau[nextIndex++];
+    }
+}
+
+var gen = créerUnGénérateurSimple(['yo', 'ya']);
+
+console.log(gen.next().value); // 'yo'
+console.log(gen.next().value); // 'ya'
+console.log(gen.next().done);  // true
+
+function* créateurID(){
+    var index = 0;
+    while(true)
+        yield index++;
+}
+
+var gen = créateurID();
+
+console.log(gen.next().value); // '0'
+console.log(gen.next().value); // '1'
+console.log(gen.next().value); // '2'
+
+ +

Avec une classe ECMAScript 2015 (ES6)

+ +
class ClasseSimple {
+  constructor(data) {
+    this.index = 0;
+    this.data = data;
+  }
+
+  [Symbol.iterator]() {
+    return {
+      next: () => {
+        if (this.index < this.data.length) {
+          return {value: this.data[this.index++], done: false};
+        } else {
+          this.index = 0;
+          // En réinitialisant l'index, on peut
+          // "reprendre" l'itérateure sans avoir
+          // à gérer de mise à jour manuelle
+          return {done: true};
+        }
+      }
+    };
+  }
+}
+
+const simple = new ClasseSimple([1,2,3,4,5]);
+
+for (const val of simple) {
+  console.log(val);  // '1' '2' '3' '4' '5'
+}
+
+ +

Un générateur est-il un itérateur ou un itérable ?

+ +

Les deux réponses sont correctes :

+ +
var unObjetGénérateur = function*(){
+    yield 1;
+    yield 2;
+    yield 3;
+}()
+typeof unObjetGénérateur.next
+// "function", car il possède une fonction next, c'est donc un itérateur
+typeof unObjetGénérateur[Symbol.iterator]
+// "function", car il possède une méthode @@iterator, c'est donc un itérable
+unObjetGénérateur[Symbol.iterator]() === unObjetGénérateur
+// vrai car la méthode @@iterator renvoie elle-même, un itérateur, c'est donc un itérable bien formé
+[...unObjetGénérateur]
+// [1, 2, 3]
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-iteration', 'Iteration')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-iteration', 'Iteration')}}{{Spec2('ESDraft')}} 
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/lexical_grammar/index.html b/files/fr/web/javascript/reference/lexical_grammar/index.html deleted file mode 100644 index a15866e5ee..0000000000 --- a/files/fr/web/javascript/reference/lexical_grammar/index.html +++ /dev/null @@ -1,592 +0,0 @@ ---- -title: Grammaire lexicale -slug: Web/JavaScript/Reference/Lexical_grammar -tags: - - Avancé - - Grammaire - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Lexical_grammar -original_slug: Web/JavaScript/Reference/Grammaire_lexicale ---- -
{{JsSidebar("More")}}
- -

Cette page décrit la grammaire lexicale de JavaScript. Le code source d'un script ECMAScript est analysé de gauche à droite et est converti en une série d'éléments qui sont : des jetons, des caractères de contrôle, des terminateurs de lignes, des commentaires ou des blancs. ECMAScript définit également certains mots-clés et littéraux. ECMAScript possède également des règles pour insérer automatiquement des points-virgules à la fin des instructions.

- -

Caractères de contrôle

- -

Les caractères de contrôle n'ont aucune représentation visuelle mais sont utilisés pour contrôler l'interprétation du texte.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caractères de contrôle au format Unicode
Point de codeNomAbréviationDescription
U+200CAntiliant sans chasse (zero width non-joiner en anglais)<ZWNJ>Placé entre des caractères pour empêcher qu'ils soient connectés par une ligature dans certaines langues (Wikipédia).
U+200DLiant sans chasse (zero width joiner en anglais)<ZWJ>Placé entre des caractères qui ne seraient normalement pas connectés pour les afficher comme connectés dans certaines langues (Wikipédia).
U+FEFFIndicateur d'ordre des octets (byte order mark en anglais)<BOM>Utilisé au début d'un script pour indiquer qu'il est en Unicode et quel est l'ordre des octets (Wikipedia).
- -

Blancs

- -

Les caractères d'espacement (blancs) sont utilisés pour des raisons de lisibilité et permetttent de séparer les différents fragments entre eux. Ces caractères sont généralement inutiles au code. Les outils de minification sont souvent utilisés pour retirer les blancs afin de réduire le volume de données à transférer.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caractères d'espacament
Point de codeNomAbréviationDescriptionSéquence d'échappement
U+0009Tabulation (horizontale)<HT>Tabulation horizontale\t
U+000BTabulation verticale<VT>Tabulation verticale\v
U+000CCaractère de saut de page (form feed en anglais)<FF>Caractère de contrôle pour le saut de page (Wikipédia).\f
U+0020Espace sécable (space en anglais)<SP>Espace sécable
U+00A0Espace insécable (no-break space en anglais)<NBSP>Espace insécable
AutresAutres caractères d'espaces Unicode<USP>Espaces Unicode sur Wikipédia
- -

Terminateurs de lignes

- -

En plus des blancs, les caractères de fin de ligne (terminateurs de lignes) sont utilisés pour améliorer la lisibilité du texte. Cependant, dans certains cas, les terminateurs de lignes peuvent influencer l'exécution du code JavaScript là où ils sont interdits. Les terminateurs de lignes affectent également le processus d'insertion automatique des points-virgules. Les terminateurs de lignes correspondent à la classe \s des expressions rationnelles.

- -

Seuls les points de code Unicode qui suivent sont traités comme des fins de lignes en ECMAScript, les autres caractères sont traités comme des blancs (par exemple : Next Line (nouvelle ligne) : NEL, U+0085 est considéré comme un blanc).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Caractères de fin de ligne
Point de codeNomAbréviationDescriptionSéquence d'échappement
U+000ANouvelle ligne<LF>Caractère de nouvelle ligne pour les systèmes UNIX.\n
U+000DRetour chariot<CR>Caractère de nouvelle ligne pour les systèmes Commodore et les premiers Mac.\r
U+2028Séparateur de ligne<LS>Wikipédia
U+2029Séparateur de paragraphe<PS>Wikipédia
- -

Commentaires

- -

Les commentaires sont utilisés pour fournir des notes, des suggestions, des indications ou des avertissements sur le code JavaScript. Cela peut en faciliter la lecture et la compréhension. Ils peuvent également être utilisés pour empêcher l'exécution d'un certain code ; cela peut être pratique lors du débogage.

- -

En JavaScript, Il existe actuellement deux façons de former des commentaires (cf. ci-après pour une troisième méthode en cours de discussion).

- -

Commentaire sur une ligne

- -

La première façon est d'utiliser // (double barre oblique), pour commenter tout le texte qui suit (sur la même ligne). Par exemple :

- -
function comment() {
-  // Voici un commentaire d'une ligne en JavaScript
-  console.log("Hello world !");
-}
-comment();
-
- -

Commentaire sur plusieurs lignes

- -

La seconde façon est d'utiliser /* */, qui est plus flexible.

- -

Il est possible d'utiliser cette forme sur une seule ligne :

- -
function comment() {
-  /* Voici un commentaire d'une ligne en JavaScript */
-  console.log("Hello world !");
-}
-comment();
- -

Mais également sur plusieurs lignes, comme ceci :

- -
function comment() {
- /* Ce commentaire s'étend sur plusieurs lignes. Il n'y a
-    pas besoin de clore le commentaire avant d'avoir
-     fini. */
-  console.log("Hello world !");
-}
-comment();
- -

Il est également possible d'utiliser un commentaire au milieu d'une ligne. En revanche, cela rend le code plus difficile à lire et devrait être utilisé avec attention :

- -
function comment(x) {
-  console.log("Hello " + x /* insérer la valeur de x */ + " !");
-}
-comment("world");
- -

On peut également encadrer du code pour l'empêcher d'être exécuté. Par exemple :

- -
function comment() {
-  /* console.log("Hello world !"); */
-}
-comment();
- -

Ici, l'appel console.log() n'a jamais lieu car il fait partie d'un commentaire. On peut ainsi désactiver plusieurs lignes de code d'un coup.

- -

Commentaire d'environnement (hashbang)

- -

Une troisième syntaxe, en cours de standardisation par ECMAScript, permet d'indiquer l'environnement dans lequel est exécuté le script via un commentaire hashbang. Un tel commentaire commence par #! et est uniquement valide au tout début du script ou du module (aucun espace/blanc n'est autorisé avant #!). Un tel commentaire ne tient que sur une seule ligne et il ne peut y avoir qu'un seul commentaire de ce type.

- -
#!/usr/bin/env node
-
-console.log("Coucou le monde");
-
- -

Les commentaires d'environnements sont conçus pour fonctionner comme les shebangs qu'on peut trouver sous Unix et indiquent l'interpréteur à utiliser pour exécuter le script ou le module.

- -
-

Attention : Bien qu'utiliser un BOM avant le hashbang fonctionne dans un navigateur, cela n'est pas conseillé. En effet, un BOM empêchera le bon fonctionnement sous Unix/Linux. Utilisez un encodage UTF-8 sans BOM si vous souhaitez exécuter vos scripts depuis une invite de commande.

-
- -

Si vous souhaitez placer un commentaire en début de fichier sans indiquer d'environnement d'exécution spécifique, on pourra utiliser le commentaire classique avec //.

- -

Mots-clés

- -

Mots-clés réservés selon ECMAScript 2015

- -
- -
- -

Mots-clés réservés pour le futur

- -

Les mots-clés qui suivent ont été réservés pour une utilisation future dans la spécification ECMAScript. Ils n'ont actuellement aucune utilité mais pourrait être utilisés par la suite. Ils ne peuvent donc pas être utilisés comme identifiants. Ces mots-clés ne peuvent être utilisés ni en mode strict ni en mode non strict.

- - - -

Les mots-clés suivants sont réservés dans du code en mode strict :

- -
- -
- -

Mots-clés réservés pour un usage future dans les anciens standards

- -

Les mots-clés suivants sont réservés dans les anciennes spécifications ECMAScript (ECMAScript 1 à 3).

- -
- -
- -

Par ailleurs, les littéraux null, true, et false sont réservés dans ECMAScript pour leur usage normal.

- -

Utilisation des mots-clés réservés

- -

Les mots-clés réservés ne le sont que pour les identifiants (et non pour les IdentifierNames) . Comme décrit dans es5.github.com/#A.1, dans l'exemple qui suit, on a, légalement, des IdentifierNames qui utilisent des ReservedWords.

- -
a.import
-a["import"]
-a = { import: "test" }.
-
- -

En revanche, dans ce qui suit, c'est illégal car c'est un identifiant. Un identifiant peut être un IdentifierName mais pas un mot-clé réservé. Les identifiants sont utilisés pour les FunctionDeclaration (déclarations de fonction), les FunctionExpression (expressions de fonction), les VariableDeclaration (déclarations de variable).

- -
function import() {} // Illégal.
- -

Littéraux

- -

Littéral null

- -

Voir aussi la page {{jsxref("null")}} pour plus d'informations.

- -
null
- -

Littéraux booléens

- -

Voir aussi la page {{jsxref("Boolean")}} pour plus d'informations.

- -
true
-false
- -

Littéraux numériques

- -

Décimaux

- -
1234567890
-42
-
-// Attention à l'utilisation de zéros en début :
-
-0888 // 888 est compris comme décimal
-0777 // est compris comme octal et égale 511 en décimal
-
- -

Les littéraux décimaux peuvent commencer par un zéro (0) suivi d'un autre chiffre. Mais si tous les chiffres après le 0 sont (strictement) inférieurs à 8, le nombre sera analysé comme un nombre octal. Cela n'entraînera pas d'erreur JavaScript, voir {{bug(957513)}}. Voir aussi la page sur {{jsxref("parseInt", "parseInt()")}}.

- -

Binaires

- -

La représentation binaire des nombres peut être utilisée avec une syntaxe qui comporte un zéro (0) suivi par le caractère latin "B" (minuscule ou majuscule) (0b ou 0B). Cette syntaxe est apparue avec ECMAScript 2015 et il faut donc faire attention au tableau de compatibilité pour cette fonctionnalité. Si les chiffres qui composent le nombre ne sont pas 0 ou 1, cela entraînera une erreur {{jsxref("SyntaxError")}} : "Missing binary digits after 0b".

- -
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
-var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
-var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
- -

Octaux

- -

La syntaxe pour représenter des nombres sous forme octale est : un zéro (0), suivi par la lettre latine "O" (minuscule ou majuscule) (ce qui donne 0o ou 0O). Cette syntaxe est apparue avec ECMAScript 2015 et il faut donc faire attention au tableau de compatibilité pour cette fonctionnalité. Si les chiffres qui composent le nombre ne sont pas compris entre 0 et 7, cela entraînera une erreur {{jsxref("SyntaxError")}} : "Missing octal digits after 0o".

- -
var n = 0O755; // 493
-var m = 0o644; // 420
-
-// Aussi possible en utilisant des zéros en début du nombre (voir la note ci-avant)
-0755
-0644
-
- -

Hexadécimaux

- -

Les littéraux hexadécimaux ont pour syntaxe : un zéro (0), suivi par la lettre latine "X" (minuscule ou majuscule) (ce qui donne 0x ou 0X). Si les chiffres qui composent le nombre sont en dehors des unités hexadécimales (0123456789ABCDEF), cela entraînera une erreur {{jsxref("SyntaxError")}} : "Identifier starts immediately after numeric literal".

- -
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
-0x123456789ABCDEF   // 81985529216486900
-0XA                 // 10
-
- -

Littéraux BigInt

- -

Le type {{jsxref("BigInt")}} est un type numérique primitif de JavaScript qui permet de représenter des entiers avec une précision arbitraire. De tels littéraux s'écrivent en ajoutant un n à la fin d'un entier.

- -
123456789123456789n (nombre décimal, en base 10)
-0o7777777777777777n (nombre octal, en base 8)
-0x123456789ABCDEF1n (nombre hexadécimal, en base 16)
-0b0101010101110101n (nombre binaire, en base 2)
-
- -

Voir aussi le paragraphe sur les grands entiers/BigInt sur les structures de données en JavaScript.

- -

Littéraux objets

- -

Voir aussi les pages {{jsxref("Object")}} et {{jsxref("Opérateurs/Initialisateur_objet","Initialisateur d'objet","",1)}} pour plus d'informations.

- -
var o = { a: "toto", b: "truc", c: 42 };
-
-// notation raccourcie depuis ES6
-var a = "toto", b = "truc", c = 42;
-var o = {a, b, c};
-// plutôt que
-var o = { a: a, b: b, c: c };
-
- -

Littéraux de tableaux

- -

Voir aussi la page {{jsxref("Array")}} pour plus d'informations.

- -
[1954, 1974, 1990, 2014]
- -

Littéraux de chaînes de caractères

- -

Un littéral de chaîne de caractères correspond à zéro ou plusieurs codets Unicode entourés de simples ou de doubles quotes. Les codets Unicode peuvent également être représentés avec des séquences d'échappements. Tous les codets peuvent apparaître dans un littéral de chaîne de caractères à l'exception de ces trois codets :

- - - -

Avant la proposition consistant à rendre les chaînes JSON valides selon ECMA-262, les caractères U+2028 et U+2029 étaient également interdits.

- -

Tous les codets peuvent être écrits sous la forme d'une séquence d'échappement. Les littéraux de chaînes de caractères sont évalués comme des valeurs String ECMAScript. Lorsque ces valeurs String sont générées, les codets Unicode sont encodés en UTF-16.

- -
'toto'
-"truc"
- -

Séquence d'échappement hexadécimale

- -

Une séquence d'échappement hexadécimale consiste en la succession de \x et de deux chiffres hexadécimaux représentant un codet sur l'intervalle 0x0000 à 0x00FF.

- -
'\xA9' // "©"
-
- -

Séquence d'échappement Unicode

- -

La séquence d'échappement Unicode est composée de \u suivi de quatre chiffres hexadécimaux. Chacun de ces chiffres définit un caractères sur deux octets selon l'encodage UTF-16. Pour les codes situés entre U+0000 et U+FFFF, les chiffres à utiliser sont identiques au code. Pour les codes supérieurs, il faudra utiliser deux séquences d'échappement dont chacune représentera un demi-codet de la paire de surrogates.

- -

Voir aussi {{jsxref("String.fromCharCode()")}} et {{jsxref("String.prototype.charCodeAt()")}}.

- -
'\u00A9' // "©" (U+A9)
- -

Échappement de points de code Unicode

- -

Apparu avec ECMAScript 2015, l'échappement de points de code Unicode permet d'échapper n'importe quel caractère en utilisant une notation hexadécimale. Il est possible de le faire pour échapper les points de code Unicode dont la représentation va jusqu'à 0x10FFFF. Avec la séquence « simple » d'échappement Unicode, il était nécessaire d'échapper respectivement les deux demi-codets d'une paire si on voulait échapper le caractère correspondant, avec cette nouvelle méthode, ce n'est plus nécessaire de faire la distinction.

- -

Voir également {{jsxref("String.fromCodePoint()")}} et {{jsxref("String.prototype.codePointAt()")}}.

- -
'\u{2F804}' // CJK COMPATIBILITY IDEOGRAPH-2F804 (U+2F804)
-
-// avec l'ancienne méthode d'échappement, cela aurait été écrit
-// avec une paire de surrogates
-'\uD87E\uDC04'
- -

Littéraux d'expressions rationnelles

- -

Voir la page RegExp pour plus d'informations.

- -
/ab+c/g
-
-// Un littéral pour une expression rationnelle
-// vide. Le groupe non-capturant est utilisé pour
-// lever l'ambigüité avec les commentaires
-/(?:)/
- -

Littéraux modèles (gabarits ou templates)

- -

Voir également la page sur les gabarits de chaînes de caractères pour plus d'informations.

- -
`chaîne de caractères`
-
-`chaîne de caractères ligne 1
- chaîne de caractères ligne 2`
-
-`chaîne1 ${expression} chaîne2`
-
-tag `chaîne1 ${expression} chaîne2`
- -

Insertion automatique de points-virgules

- -

Certaines instructions JavaScript doivent finir par un point-virgule et sont donc concernées par l'insertion automatique de points-virgules (ASI pour automatic semicolon insertion en anglais) :

- - - -

La spécification ECMAScript mentionne trois règles quant à l'insertion de points-virgules :

- -

1. Un point-vrigule est inséré avant un terminateur de ligne ou une accolade ("}") quand celui ou celle-ci n'est pas autorisé par la grammaire

- -
{ 1 2 } 3
-// est donc transformé, après ASI, en :
-{ 1 2 ;} 3;
- -

2. Un point-virgule est inséré à la fin lorsqu'on détecte la fin d'une série de jetons en flux d'entrée et que le parseur est incapable d'analyser le flux d'entrée comme un programme complet.

- -

Ici ++ n'est pas traité comme opérateur postfixe s'appliquant à la variable b car il y a un terminateur de ligne entre b et ++.

- -
a = b
-++c
-
-// devient, après ASI :
-
-a = b;
-++c;
-
- -

3. Un point-virgule est inséré à la fin, lorsqu'une instruction, à production limitée pour la grammaire, est suivie par un terminateur de ligne. Les instructions concernées par cette règle sont :

- - - -
return
-a + b
-
-// est transformé, après ASI, en :
-
-return;
-a + b;
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName("ES1")}}{{Spec2("ES1")}}Définition initiale.
{{SpecName('ES5.1', '#sec-7', 'Lexical Conventions')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ES6')}}Ajout : littéraux binaires et octaux, échappements de points de code Unicode, modèles
{{SpecName('ESDraft', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.grammar")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/lexical_grammar/index.md b/files/fr/web/javascript/reference/lexical_grammar/index.md new file mode 100644 index 0000000000..a15866e5ee --- /dev/null +++ b/files/fr/web/javascript/reference/lexical_grammar/index.md @@ -0,0 +1,592 @@ +--- +title: Grammaire lexicale +slug: Web/JavaScript/Reference/Lexical_grammar +tags: + - Avancé + - Grammaire + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Lexical_grammar +original_slug: Web/JavaScript/Reference/Grammaire_lexicale +--- +
{{JsSidebar("More")}}
+ +

Cette page décrit la grammaire lexicale de JavaScript. Le code source d'un script ECMAScript est analysé de gauche à droite et est converti en une série d'éléments qui sont : des jetons, des caractères de contrôle, des terminateurs de lignes, des commentaires ou des blancs. ECMAScript définit également certains mots-clés et littéraux. ECMAScript possède également des règles pour insérer automatiquement des points-virgules à la fin des instructions.

+ +

Caractères de contrôle

+ +

Les caractères de contrôle n'ont aucune représentation visuelle mais sont utilisés pour contrôler l'interprétation du texte.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caractères de contrôle au format Unicode
Point de codeNomAbréviationDescription
U+200CAntiliant sans chasse (zero width non-joiner en anglais)<ZWNJ>Placé entre des caractères pour empêcher qu'ils soient connectés par une ligature dans certaines langues (Wikipédia).
U+200DLiant sans chasse (zero width joiner en anglais)<ZWJ>Placé entre des caractères qui ne seraient normalement pas connectés pour les afficher comme connectés dans certaines langues (Wikipédia).
U+FEFFIndicateur d'ordre des octets (byte order mark en anglais)<BOM>Utilisé au début d'un script pour indiquer qu'il est en Unicode et quel est l'ordre des octets (Wikipedia).
+ +

Blancs

+ +

Les caractères d'espacement (blancs) sont utilisés pour des raisons de lisibilité et permetttent de séparer les différents fragments entre eux. Ces caractères sont généralement inutiles au code. Les outils de minification sont souvent utilisés pour retirer les blancs afin de réduire le volume de données à transférer.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caractères d'espacament
Point de codeNomAbréviationDescriptionSéquence d'échappement
U+0009Tabulation (horizontale)<HT>Tabulation horizontale\t
U+000BTabulation verticale<VT>Tabulation verticale\v
U+000CCaractère de saut de page (form feed en anglais)<FF>Caractère de contrôle pour le saut de page (Wikipédia).\f
U+0020Espace sécable (space en anglais)<SP>Espace sécable
U+00A0Espace insécable (no-break space en anglais)<NBSP>Espace insécable
AutresAutres caractères d'espaces Unicode<USP>Espaces Unicode sur Wikipédia
+ +

Terminateurs de lignes

+ +

En plus des blancs, les caractères de fin de ligne (terminateurs de lignes) sont utilisés pour améliorer la lisibilité du texte. Cependant, dans certains cas, les terminateurs de lignes peuvent influencer l'exécution du code JavaScript là où ils sont interdits. Les terminateurs de lignes affectent également le processus d'insertion automatique des points-virgules. Les terminateurs de lignes correspondent à la classe \s des expressions rationnelles.

+ +

Seuls les points de code Unicode qui suivent sont traités comme des fins de lignes en ECMAScript, les autres caractères sont traités comme des blancs (par exemple : Next Line (nouvelle ligne) : NEL, U+0085 est considéré comme un blanc).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Caractères de fin de ligne
Point de codeNomAbréviationDescriptionSéquence d'échappement
U+000ANouvelle ligne<LF>Caractère de nouvelle ligne pour les systèmes UNIX.\n
U+000DRetour chariot<CR>Caractère de nouvelle ligne pour les systèmes Commodore et les premiers Mac.\r
U+2028Séparateur de ligne<LS>Wikipédia
U+2029Séparateur de paragraphe<PS>Wikipédia
+ +

Commentaires

+ +

Les commentaires sont utilisés pour fournir des notes, des suggestions, des indications ou des avertissements sur le code JavaScript. Cela peut en faciliter la lecture et la compréhension. Ils peuvent également être utilisés pour empêcher l'exécution d'un certain code ; cela peut être pratique lors du débogage.

+ +

En JavaScript, Il existe actuellement deux façons de former des commentaires (cf. ci-après pour une troisième méthode en cours de discussion).

+ +

Commentaire sur une ligne

+ +

La première façon est d'utiliser // (double barre oblique), pour commenter tout le texte qui suit (sur la même ligne). Par exemple :

+ +
function comment() {
+  // Voici un commentaire d'une ligne en JavaScript
+  console.log("Hello world !");
+}
+comment();
+
+ +

Commentaire sur plusieurs lignes

+ +

La seconde façon est d'utiliser /* */, qui est plus flexible.

+ +

Il est possible d'utiliser cette forme sur une seule ligne :

+ +
function comment() {
+  /* Voici un commentaire d'une ligne en JavaScript */
+  console.log("Hello world !");
+}
+comment();
+ +

Mais également sur plusieurs lignes, comme ceci :

+ +
function comment() {
+ /* Ce commentaire s'étend sur plusieurs lignes. Il n'y a
+    pas besoin de clore le commentaire avant d'avoir
+     fini. */
+  console.log("Hello world !");
+}
+comment();
+ +

Il est également possible d'utiliser un commentaire au milieu d'une ligne. En revanche, cela rend le code plus difficile à lire et devrait être utilisé avec attention :

+ +
function comment(x) {
+  console.log("Hello " + x /* insérer la valeur de x */ + " !");
+}
+comment("world");
+ +

On peut également encadrer du code pour l'empêcher d'être exécuté. Par exemple :

+ +
function comment() {
+  /* console.log("Hello world !"); */
+}
+comment();
+ +

Ici, l'appel console.log() n'a jamais lieu car il fait partie d'un commentaire. On peut ainsi désactiver plusieurs lignes de code d'un coup.

+ +

Commentaire d'environnement (hashbang)

+ +

Une troisième syntaxe, en cours de standardisation par ECMAScript, permet d'indiquer l'environnement dans lequel est exécuté le script via un commentaire hashbang. Un tel commentaire commence par #! et est uniquement valide au tout début du script ou du module (aucun espace/blanc n'est autorisé avant #!). Un tel commentaire ne tient que sur une seule ligne et il ne peut y avoir qu'un seul commentaire de ce type.

+ +
#!/usr/bin/env node
+
+console.log("Coucou le monde");
+
+ +

Les commentaires d'environnements sont conçus pour fonctionner comme les shebangs qu'on peut trouver sous Unix et indiquent l'interpréteur à utiliser pour exécuter le script ou le module.

+ +
+

Attention : Bien qu'utiliser un BOM avant le hashbang fonctionne dans un navigateur, cela n'est pas conseillé. En effet, un BOM empêchera le bon fonctionnement sous Unix/Linux. Utilisez un encodage UTF-8 sans BOM si vous souhaitez exécuter vos scripts depuis une invite de commande.

+
+ +

Si vous souhaitez placer un commentaire en début de fichier sans indiquer d'environnement d'exécution spécifique, on pourra utiliser le commentaire classique avec //.

+ +

Mots-clés

+ +

Mots-clés réservés selon ECMAScript 2015

+ +
+ +
+ +

Mots-clés réservés pour le futur

+ +

Les mots-clés qui suivent ont été réservés pour une utilisation future dans la spécification ECMAScript. Ils n'ont actuellement aucune utilité mais pourrait être utilisés par la suite. Ils ne peuvent donc pas être utilisés comme identifiants. Ces mots-clés ne peuvent être utilisés ni en mode strict ni en mode non strict.

+ + + +

Les mots-clés suivants sont réservés dans du code en mode strict :

+ +
+ +
+ +

Mots-clés réservés pour un usage future dans les anciens standards

+ +

Les mots-clés suivants sont réservés dans les anciennes spécifications ECMAScript (ECMAScript 1 à 3).

+ +
+ +
+ +

Par ailleurs, les littéraux null, true, et false sont réservés dans ECMAScript pour leur usage normal.

+ +

Utilisation des mots-clés réservés

+ +

Les mots-clés réservés ne le sont que pour les identifiants (et non pour les IdentifierNames) . Comme décrit dans es5.github.com/#A.1, dans l'exemple qui suit, on a, légalement, des IdentifierNames qui utilisent des ReservedWords.

+ +
a.import
+a["import"]
+a = { import: "test" }.
+
+ +

En revanche, dans ce qui suit, c'est illégal car c'est un identifiant. Un identifiant peut être un IdentifierName mais pas un mot-clé réservé. Les identifiants sont utilisés pour les FunctionDeclaration (déclarations de fonction), les FunctionExpression (expressions de fonction), les VariableDeclaration (déclarations de variable).

+ +
function import() {} // Illégal.
+ +

Littéraux

+ +

Littéral null

+ +

Voir aussi la page {{jsxref("null")}} pour plus d'informations.

+ +
null
+ +

Littéraux booléens

+ +

Voir aussi la page {{jsxref("Boolean")}} pour plus d'informations.

+ +
true
+false
+ +

Littéraux numériques

+ +

Décimaux

+ +
1234567890
+42
+
+// Attention à l'utilisation de zéros en début :
+
+0888 // 888 est compris comme décimal
+0777 // est compris comme octal et égale 511 en décimal
+
+ +

Les littéraux décimaux peuvent commencer par un zéro (0) suivi d'un autre chiffre. Mais si tous les chiffres après le 0 sont (strictement) inférieurs à 8, le nombre sera analysé comme un nombre octal. Cela n'entraînera pas d'erreur JavaScript, voir {{bug(957513)}}. Voir aussi la page sur {{jsxref("parseInt", "parseInt()")}}.

+ +

Binaires

+ +

La représentation binaire des nombres peut être utilisée avec une syntaxe qui comporte un zéro (0) suivi par le caractère latin "B" (minuscule ou majuscule) (0b ou 0B). Cette syntaxe est apparue avec ECMAScript 2015 et il faut donc faire attention au tableau de compatibilité pour cette fonctionnalité. Si les chiffres qui composent le nombre ne sont pas 0 ou 1, cela entraînera une erreur {{jsxref("SyntaxError")}} : "Missing binary digits after 0b".

+ +
var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
+var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
+var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
+ +

Octaux

+ +

La syntaxe pour représenter des nombres sous forme octale est : un zéro (0), suivi par la lettre latine "O" (minuscule ou majuscule) (ce qui donne 0o ou 0O). Cette syntaxe est apparue avec ECMAScript 2015 et il faut donc faire attention au tableau de compatibilité pour cette fonctionnalité. Si les chiffres qui composent le nombre ne sont pas compris entre 0 et 7, cela entraînera une erreur {{jsxref("SyntaxError")}} : "Missing octal digits after 0o".

+ +
var n = 0O755; // 493
+var m = 0o644; // 420
+
+// Aussi possible en utilisant des zéros en début du nombre (voir la note ci-avant)
+0755
+0644
+
+ +

Hexadécimaux

+ +

Les littéraux hexadécimaux ont pour syntaxe : un zéro (0), suivi par la lettre latine "X" (minuscule ou majuscule) (ce qui donne 0x ou 0X). Si les chiffres qui composent le nombre sont en dehors des unités hexadécimales (0123456789ABCDEF), cela entraînera une erreur {{jsxref("SyntaxError")}} : "Identifier starts immediately after numeric literal".

+ +
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+0x123456789ABCDEF   // 81985529216486900
+0XA                 // 10
+
+ +

Littéraux BigInt

+ +

Le type {{jsxref("BigInt")}} est un type numérique primitif de JavaScript qui permet de représenter des entiers avec une précision arbitraire. De tels littéraux s'écrivent en ajoutant un n à la fin d'un entier.

+ +
123456789123456789n (nombre décimal, en base 10)
+0o7777777777777777n (nombre octal, en base 8)
+0x123456789ABCDEF1n (nombre hexadécimal, en base 16)
+0b0101010101110101n (nombre binaire, en base 2)
+
+ +

Voir aussi le paragraphe sur les grands entiers/BigInt sur les structures de données en JavaScript.

+ +

Littéraux objets

+ +

Voir aussi les pages {{jsxref("Object")}} et {{jsxref("Opérateurs/Initialisateur_objet","Initialisateur d'objet","",1)}} pour plus d'informations.

+ +
var o = { a: "toto", b: "truc", c: 42 };
+
+// notation raccourcie depuis ES6
+var a = "toto", b = "truc", c = 42;
+var o = {a, b, c};
+// plutôt que
+var o = { a: a, b: b, c: c };
+
+ +

Littéraux de tableaux

+ +

Voir aussi la page {{jsxref("Array")}} pour plus d'informations.

+ +
[1954, 1974, 1990, 2014]
+ +

Littéraux de chaînes de caractères

+ +

Un littéral de chaîne de caractères correspond à zéro ou plusieurs codets Unicode entourés de simples ou de doubles quotes. Les codets Unicode peuvent également être représentés avec des séquences d'échappements. Tous les codets peuvent apparaître dans un littéral de chaîne de caractères à l'exception de ces trois codets :

+ + + +

Avant la proposition consistant à rendre les chaînes JSON valides selon ECMA-262, les caractères U+2028 et U+2029 étaient également interdits.

+ +

Tous les codets peuvent être écrits sous la forme d'une séquence d'échappement. Les littéraux de chaînes de caractères sont évalués comme des valeurs String ECMAScript. Lorsque ces valeurs String sont générées, les codets Unicode sont encodés en UTF-16.

+ +
'toto'
+"truc"
+ +

Séquence d'échappement hexadécimale

+ +

Une séquence d'échappement hexadécimale consiste en la succession de \x et de deux chiffres hexadécimaux représentant un codet sur l'intervalle 0x0000 à 0x00FF.

+ +
'\xA9' // "©"
+
+ +

Séquence d'échappement Unicode

+ +

La séquence d'échappement Unicode est composée de \u suivi de quatre chiffres hexadécimaux. Chacun de ces chiffres définit un caractères sur deux octets selon l'encodage UTF-16. Pour les codes situés entre U+0000 et U+FFFF, les chiffres à utiliser sont identiques au code. Pour les codes supérieurs, il faudra utiliser deux séquences d'échappement dont chacune représentera un demi-codet de la paire de surrogates.

+ +

Voir aussi {{jsxref("String.fromCharCode()")}} et {{jsxref("String.prototype.charCodeAt()")}}.

+ +
'\u00A9' // "©" (U+A9)
+ +

Échappement de points de code Unicode

+ +

Apparu avec ECMAScript 2015, l'échappement de points de code Unicode permet d'échapper n'importe quel caractère en utilisant une notation hexadécimale. Il est possible de le faire pour échapper les points de code Unicode dont la représentation va jusqu'à 0x10FFFF. Avec la séquence « simple » d'échappement Unicode, il était nécessaire d'échapper respectivement les deux demi-codets d'une paire si on voulait échapper le caractère correspondant, avec cette nouvelle méthode, ce n'est plus nécessaire de faire la distinction.

+ +

Voir également {{jsxref("String.fromCodePoint()")}} et {{jsxref("String.prototype.codePointAt()")}}.

+ +
'\u{2F804}' // CJK COMPATIBILITY IDEOGRAPH-2F804 (U+2F804)
+
+// avec l'ancienne méthode d'échappement, cela aurait été écrit
+// avec une paire de surrogates
+'\uD87E\uDC04'
+ +

Littéraux d'expressions rationnelles

+ +

Voir la page RegExp pour plus d'informations.

+ +
/ab+c/g
+
+// Un littéral pour une expression rationnelle
+// vide. Le groupe non-capturant est utilisé pour
+// lever l'ambigüité avec les commentaires
+/(?:)/
+ +

Littéraux modèles (gabarits ou templates)

+ +

Voir également la page sur les gabarits de chaînes de caractères pour plus d'informations.

+ +
`chaîne de caractères`
+
+`chaîne de caractères ligne 1
+ chaîne de caractères ligne 2`
+
+`chaîne1 ${expression} chaîne2`
+
+tag `chaîne1 ${expression} chaîne2`
+ +

Insertion automatique de points-virgules

+ +

Certaines instructions JavaScript doivent finir par un point-virgule et sont donc concernées par l'insertion automatique de points-virgules (ASI pour automatic semicolon insertion en anglais) :

+ + + +

La spécification ECMAScript mentionne trois règles quant à l'insertion de points-virgules :

+ +

1. Un point-vrigule est inséré avant un terminateur de ligne ou une accolade ("}") quand celui ou celle-ci n'est pas autorisé par la grammaire

+ +
{ 1 2 } 3
+// est donc transformé, après ASI, en :
+{ 1 2 ;} 3;
+ +

2. Un point-virgule est inséré à la fin lorsqu'on détecte la fin d'une série de jetons en flux d'entrée et que le parseur est incapable d'analyser le flux d'entrée comme un programme complet.

+ +

Ici ++ n'est pas traité comme opérateur postfixe s'appliquant à la variable b car il y a un terminateur de ligne entre b et ++.

+ +
a = b
+++c
+
+// devient, après ASI :
+
+a = b;
+++c;
+
+ +

3. Un point-virgule est inséré à la fin, lorsqu'une instruction, à production limitée pour la grammaire, est suivie par un terminateur de ligne. Les instructions concernées par cette règle sont :

+ + + +
return
+a + b
+
+// est transformé, après ASI, en :
+
+return;
+a + b;
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName("ES1")}}{{Spec2("ES1")}}Définition initiale.
{{SpecName('ES5.1', '#sec-7', 'Lexical Conventions')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ES6')}}Ajout : littéraux binaires et octaux, échappements de points de code Unicode, modèles
{{SpecName('ESDraft', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.grammar")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/addition/index.html b/files/fr/web/javascript/reference/operators/addition/index.html deleted file mode 100644 index e67da71cd6..0000000000 --- a/files/fr/web/javascript/reference/operators/addition/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Addition (+) -slug: Web/JavaScript/Reference/Operators/Addition -tags: - - JavaScript - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/Addition -original_slug: Web/JavaScript/Reference/Opérateurs/Addition -browser-compat: javascript.operators.addition ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'addition (+) produit la somme de deux opérandes numériques ou la concaténation de deux chaînes de caractères.

- -
{{EmbedInteractiveExample("pages/js/expressions-addition.html")}}
- -

Syntaxe

- -
-Opérateur : x + y
-
- -

Exemples

- -

Addition numérique

- -
-// Number + Number -> addition
-1 + 2 // 3
-
-// Boolean + Number -> addition
-true + 1 // 2
-
-// Boolean + Boolean -> addition
-false + false // 0
-
- -

Concaténation de chaînes de caractères

- -
// String + String -> concatenation
-'toto' + 'truc' // "tototruc"
-
-// Number + String -> concatenation
-5 + 'toto' // "5toto"
-
-// String + Boolean -> concatenation
-'toto' + false // "totofalse"
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/addition/index.md b/files/fr/web/javascript/reference/operators/addition/index.md new file mode 100644 index 0000000000..e67da71cd6 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/addition/index.md @@ -0,0 +1,70 @@ +--- +title: Addition (+) +slug: Web/JavaScript/Reference/Operators/Addition +tags: + - JavaScript + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/Addition +original_slug: Web/JavaScript/Reference/Opérateurs/Addition +browser-compat: javascript.operators.addition +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'addition (+) produit la somme de deux opérandes numériques ou la concaténation de deux chaînes de caractères.

+ +
{{EmbedInteractiveExample("pages/js/expressions-addition.html")}}
+ +

Syntaxe

+ +
+Opérateur : x + y
+
+ +

Exemples

+ +

Addition numérique

+ +
+// Number + Number -> addition
+1 + 2 // 3
+
+// Boolean + Number -> addition
+true + 1 // 2
+
+// Boolean + Boolean -> addition
+false + false // 0
+
+ +

Concaténation de chaînes de caractères

+ +
// String + String -> concatenation
+'toto' + 'truc' // "tototruc"
+
+// Number + String -> concatenation
+5 + 'toto' // "5toto"
+
+// String + Boolean -> concatenation
+'toto' + false // "totofalse"
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/addition_assignment/index.html b/files/fr/web/javascript/reference/operators/addition_assignment/index.html deleted file mode 100644 index c0a2136c3d..0000000000 --- a/files/fr/web/javascript/reference/operators/addition_assignment/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Affectation après addition (+=) -slug: Web/JavaScript/Reference/Operators/Addition_assignment -tags: -- Assignment operator -- JavaScript -- Language feature -- Operator -- Reference -translation-of: Web/JavaScript/Reference/Operators/Addition_assignment -browser-compat: javascript.operators.addition_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'addition et d'affectation (+=) calcule la somme ou la concaténation de ses deux opérandes puis affecte le résultat à la variable représentée par l'opérande gauche. C'est le type des opérandes qui détermine s'il y a somme ou concaténation.

- -
{{EmbedInteractiveExample("pages/js/expressions-addition-assignment.html")}}
- -

Syntax

- -
-Opérateur : x += y
-Signification :  x  = x + y
-
- -

Exemples

- -

Utiliser l'opérateur d'addition et d'affectation

- -
-let toto = "toto";
-let truc = 5;
-let machin = true;
-
-// nombre + nombre -> addition
-truc += 2; // 7
-
-// booléen + nombre -> addition
-machin += 1; // 2
-
-// booléen + booléen -> addition
-machin += false; // 1
-
-// nombre + chaîne de caractères -> concaténation
-truc += 'toto'; // "5toto"
-
-// chaîne de caractères + booléen -> concaténation
-toto += false // "totofalse"
-
-// chaîne de caractères + chaîne de caractères -> concaténation
-toto += 'truc' // "tototruc"
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/addition_assignment/index.md b/files/fr/web/javascript/reference/operators/addition_assignment/index.md new file mode 100644 index 0000000000..c0a2136c3d --- /dev/null +++ b/files/fr/web/javascript/reference/operators/addition_assignment/index.md @@ -0,0 +1,66 @@ +--- +title: Affectation après addition (+=) +slug: Web/JavaScript/Reference/Operators/Addition_assignment +tags: +- Assignment operator +- JavaScript +- Language feature +- Operator +- Reference +translation-of: Web/JavaScript/Reference/Operators/Addition_assignment +browser-compat: javascript.operators.addition_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'addition et d'affectation (+=) calcule la somme ou la concaténation de ses deux opérandes puis affecte le résultat à la variable représentée par l'opérande gauche. C'est le type des opérandes qui détermine s'il y a somme ou concaténation.

+ +
{{EmbedInteractiveExample("pages/js/expressions-addition-assignment.html")}}
+ +

Syntax

+ +
+Opérateur : x += y
+Signification :  x  = x + y
+
+ +

Exemples

+ +

Utiliser l'opérateur d'addition et d'affectation

+ +
+let toto = "toto";
+let truc = 5;
+let machin = true;
+
+// nombre + nombre -> addition
+truc += 2; // 7
+
+// booléen + nombre -> addition
+machin += 1; // 2
+
+// booléen + booléen -> addition
+machin += false; // 1
+
+// nombre + chaîne de caractères -> concaténation
+truc += 'toto'; // "5toto"
+
+// chaîne de caractères + booléen -> concaténation
+toto += false // "totofalse"
+
+// chaîne de caractères + chaîne de caractères -> concaténation
+toto += 'truc' // "tototruc"
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/assignment/index.html b/files/fr/web/javascript/reference/operators/assignment/index.html deleted file mode 100644 index afd2cae36d..0000000000 --- a/files/fr/web/javascript/reference/operators/assignment/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Assignement (=) -slug: Web/JavaScript/Reference/Operators/Assignment -tags: - - Fonctionnalités du language - - JavaScript - - Opérateur - - Opérateur d'assignement - - Reference -translation_of: Web/JavaScript/Reference/Operators/Assignment -original_slug: Web/JavaScript/Reference/Opérateurs/Assignement ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'assignement simple (=) est utilisé pour définir la valeur d'une variable. Il est possible d'ajouter une valeur à plusieurs variables en chaînant les variables.

- -
{{EmbedInteractiveExample("pages/js/expressions-assignment.html")}}
- -

Syntaxe

- -
Opérateur : x = y
-
- -

Exemples

- -

Assignement simple et variables en chaînes

- -
// On considère les variables suivantes :
-var x = 5;
-var y = 10;
-var z = 25;
-
-x = y;
-// x est égale à 10
-
-x = y = z;
-// x, y et z sont égales à 25
- -

Specifications

- - - - - - - - - - -
Specification
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.operators.assignment")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/assignment/index.md b/files/fr/web/javascript/reference/operators/assignment/index.md new file mode 100644 index 0000000000..afd2cae36d --- /dev/null +++ b/files/fr/web/javascript/reference/operators/assignment/index.md @@ -0,0 +1,62 @@ +--- +title: Assignement (=) +slug: Web/JavaScript/Reference/Operators/Assignment +tags: + - Fonctionnalités du language + - JavaScript + - Opérateur + - Opérateur d'assignement + - Reference +translation_of: Web/JavaScript/Reference/Operators/Assignment +original_slug: Web/JavaScript/Reference/Opérateurs/Assignement +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'assignement simple (=) est utilisé pour définir la valeur d'une variable. Il est possible d'ajouter une valeur à plusieurs variables en chaînant les variables.

+ +
{{EmbedInteractiveExample("pages/js/expressions-assignment.html")}}
+ +

Syntaxe

+ +
Opérateur : x = y
+
+ +

Exemples

+ +

Assignement simple et variables en chaînes

+ +
// On considère les variables suivantes :
+var x = 5;
+var y = 10;
+var z = 25;
+
+x = y;
+// x est égale à 10
+
+x = y = z;
+// x, y et z sont égales à 25
+ +

Specifications

+ + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("javascript.operators.assignment")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/async_function/index.html b/files/fr/web/javascript/reference/operators/async_function/index.html deleted file mode 100644 index 2f5f493295..0000000000 --- a/files/fr/web/javascript/reference/operators/async_function/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Expression async function -slug: Web/JavaScript/Reference/Operators/async_function -tags: - - Function - - JavaScript - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/async_function -original_slug: Web/JavaScript/Reference/Opérateurs/async_function ---- -
{{jsSidebar("Operators")}}
- -

Le mot-clé async function peut être utilisé pour définir une fonction asynchrone au sein d'une expression.

- -
-

Note : Il est aussi possible de définir une fonction asynchrone en utilisant une instruction async function.

-
- -

Syntaxe

- -
async function [name]([param1[, param2[, ..., paramN]]]) {
-   instructions
-}
- -

Paramètres

- -
-
name
-
Le nom de la fonction. Il est facultatif et s'il n'est pas utilisé, la fonction est anonyme. Le nom utilisé est uniquement local pour le corps de la fonction.
-
paramN
-
Le nom d'un argument à passer à la fonction.
-
instructions
-
Les instructions qui composent le corps de la fonction.
-
- -
-

Note : À partir d'ES2015 (ES6), il est aussi possible d'utiliser des fonctions fléchées pour les expressions de fonction asynchrone.

-
- -

Description

- -

Une expression async function est très proche, et partage quasiment la même syntaxe avec {{jsxref('Instructions/async_function', 'une instruction async function',"",1)}}. La différence principale entre une expression async function et une instruction async function est qu'on peut omettre le nom de la fonction dans les expressions async function. On peut donc utiliser une expression async function afin de créer une IIFE (pour Immediately Invoked Function Expression) qu'on appelle au moment de sa définition. Voir également le chapitre sur les fonctions pour plus d'informations.

- -

Exemples

- -

Exemple simple

- -
function resolveAfter2Seconds(x) {
-  return new Promise(resolve => {
-    setTimeout(() => {
-      resolve(x);
-    }, 2000);
-  });
-};
-
-(async function(x) { // fonction asynchrone immédiatement appelée
-  var a = resolveAfter2Seconds(20);
-  var b = resolveAfter2Seconds(30);
-  return x + await a + await b;
-})(10).then(v => {
-  console.log(v);  // affiche 60 après 2 secondes.
-});
-
-var add = async function(x) {
-  var a = await resolveAfter2Seconds(20);
-  var b = await resolveAfter2Seconds(30);
-  return x + a + b;
-};
-
-add(10).then(v => {
-  console.log(v);  // affiche 60 après 4 secondes.
-});
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}{{Spec2('ESDraft')}} 
{{SpecName('ES2018', '#sec-async-function-definitions', 'async function')}}{{Spec2('ES2018')}} 
{{SpecName('ES2017', '#sec-async-function-definitions', 'async function')}}{{Spec2('ES2017')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.async_function_expression")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/async_function/index.md b/files/fr/web/javascript/reference/operators/async_function/index.md new file mode 100644 index 0000000000..2f5f493295 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/async_function/index.md @@ -0,0 +1,115 @@ +--- +title: Expression async function +slug: Web/JavaScript/Reference/Operators/async_function +tags: + - Function + - JavaScript + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/async_function +original_slug: Web/JavaScript/Reference/Opérateurs/async_function +--- +
{{jsSidebar("Operators")}}
+ +

Le mot-clé async function peut être utilisé pour définir une fonction asynchrone au sein d'une expression.

+ +
+

Note : Il est aussi possible de définir une fonction asynchrone en utilisant une instruction async function.

+
+ +

Syntaxe

+ +
async function [name]([param1[, param2[, ..., paramN]]]) {
+   instructions
+}
+ +

Paramètres

+ +
+
name
+
Le nom de la fonction. Il est facultatif et s'il n'est pas utilisé, la fonction est anonyme. Le nom utilisé est uniquement local pour le corps de la fonction.
+
paramN
+
Le nom d'un argument à passer à la fonction.
+
instructions
+
Les instructions qui composent le corps de la fonction.
+
+ +
+

Note : À partir d'ES2015 (ES6), il est aussi possible d'utiliser des fonctions fléchées pour les expressions de fonction asynchrone.

+
+ +

Description

+ +

Une expression async function est très proche, et partage quasiment la même syntaxe avec {{jsxref('Instructions/async_function', 'une instruction async function',"",1)}}. La différence principale entre une expression async function et une instruction async function est qu'on peut omettre le nom de la fonction dans les expressions async function. On peut donc utiliser une expression async function afin de créer une IIFE (pour Immediately Invoked Function Expression) qu'on appelle au moment de sa définition. Voir également le chapitre sur les fonctions pour plus d'informations.

+ +

Exemples

+ +

Exemple simple

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+};
+
+(async function(x) { // fonction asynchrone immédiatement appelée
+  var a = resolveAfter2Seconds(20);
+  var b = resolveAfter2Seconds(30);
+  return x + await a + await b;
+})(10).then(v => {
+  console.log(v);  // affiche 60 après 2 secondes.
+});
+
+var add = async function(x) {
+  var a = await resolveAfter2Seconds(20);
+  var b = await resolveAfter2Seconds(30);
+  return x + a + b;
+};
+
+add(10).then(v => {
+  console.log(v);  // affiche 60 après 4 secondes.
+});
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}{{Spec2('ESDraft')}} 
{{SpecName('ES2018', '#sec-async-function-definitions', 'async function')}}{{Spec2('ES2018')}} 
{{SpecName('ES2017', '#sec-async-function-definitions', 'async function')}}{{Spec2('ES2017')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.async_function_expression")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/await/index.html b/files/fr/web/javascript/reference/operators/await/index.html deleted file mode 100644 index de103593fa..0000000000 --- a/files/fr/web/javascript/reference/operators/await/index.html +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: await -slug: Web/JavaScript/Reference/Operators/await -tags: - - JavaScript - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/await -original_slug: Web/JavaScript/Reference/Opérateurs/await ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur await permet d'attendre la résolution d'une promesse ({{jsxref("Promise")}}). Il ne peut être utilisé qu'au sein d'une fonction asynchrone (définie avec l'instruction {{jsxref("Instructions/async_function", "async function")}}).

- -

Syntaxe

- -
[rv] = await expression;
- -
-
expression
-
Une promesse ({{jsxref("Promise")}}) ou toute autre valeur dont on souhaite attendre la résolution.
-
rv
-
-

La valeur de retour qui est celle de la promesse lorsqu'elle est résolue ou la valeur de l'expression lorsque celle-ci n'est pas une promesse.

-
-
- -

Description

- -

L'expression await interrompt l'exécution d'une fonction asynchrone et attend la résolution d'une promesse. Lorsque la promesse est résolue (tenue ou rompue), la valeur est renvoyée et l'exécution de la fonction asynchrone reprend. Si la valeur de l'expression n'est pas une promesse, elle est convertie en une promesse résolue ayant cette valeur.

- -

Si la promesse est rompue, l'expression await lève une exception avec la raison.

- -

Exemples

- -

Si on passe une promesse à une expression await, celle-ci attendra jusqu'à la résolution de la promesse et renverra la valeur de résolution.

- -
function resolveAfter2Seconds(x) {
-  return new Promise(resolve => {
-    setTimeout(() => {
-      resolve(x);
-    }, 2000);
-  });
-}
-
-async function f1() {
-  var x = await resolveAfter2Seconds(10);
-  console.log(x); // 10
-}
-f1();
-
- -

Les objets dotés d'une méthode then() (thenable en anglais) seront également résolus :

- -
async function f0() {
-  const thenable = {
-    then: function(resolve, _reject) {
-      resolve("résolu :)");
-    }
-  };
-  console.log(await thenable); // résolu :)
-}
-f0();
- -

Si la valeur n'est pas une promesse, elle est convertie en une promesse résolue :

- -
async function f2() {
-  var y = await 20;
-  console.log(y); // 20
-}
-f2();
- -

Si la promesse est rejetée, la raison est fournie avec l'exception.

- -
async function f3() {
-  try {
-    var z = await Promise.reject(30);
-  } catch (e) {
-    console.log(e); // 30
-  }
-}
-f3();
- -

On peut également gérer le cas où la promesse est rejetée grâce à {{jsxref("Promise.prototype.catch()")}} :

- -
var response = await maFonctionPromesse().catch(
-  (err) => {
-    console.log(err);
-  }
-);
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName("ESDraft", "#sec-async-function-definitions", "async functions")}}{{Spec2("ESDraft")}}
{{SpecName("ES2018", "#sec-async-function-definitions", "async functions")}}{{Spec2('ES2018')}}
{{SpecName("ES2017", "#sec-async-function-definitions", "async functions")}}{{Spec2('ES2017')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.await")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/await/index.md b/files/fr/web/javascript/reference/operators/await/index.md new file mode 100644 index 0000000000..de103593fa --- /dev/null +++ b/files/fr/web/javascript/reference/operators/await/index.md @@ -0,0 +1,131 @@ +--- +title: await +slug: Web/JavaScript/Reference/Operators/await +tags: + - JavaScript + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/await +original_slug: Web/JavaScript/Reference/Opérateurs/await +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur await permet d'attendre la résolution d'une promesse ({{jsxref("Promise")}}). Il ne peut être utilisé qu'au sein d'une fonction asynchrone (définie avec l'instruction {{jsxref("Instructions/async_function", "async function")}}).

+ +

Syntaxe

+ +
[rv] = await expression;
+ +
+
expression
+
Une promesse ({{jsxref("Promise")}}) ou toute autre valeur dont on souhaite attendre la résolution.
+
rv
+
+

La valeur de retour qui est celle de la promesse lorsqu'elle est résolue ou la valeur de l'expression lorsque celle-ci n'est pas une promesse.

+
+
+ +

Description

+ +

L'expression await interrompt l'exécution d'une fonction asynchrone et attend la résolution d'une promesse. Lorsque la promesse est résolue (tenue ou rompue), la valeur est renvoyée et l'exécution de la fonction asynchrone reprend. Si la valeur de l'expression n'est pas une promesse, elle est convertie en une promesse résolue ayant cette valeur.

+ +

Si la promesse est rompue, l'expression await lève une exception avec la raison.

+ +

Exemples

+ +

Si on passe une promesse à une expression await, celle-ci attendra jusqu'à la résolution de la promesse et renverra la valeur de résolution.

+ +
function resolveAfter2Seconds(x) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      resolve(x);
+    }, 2000);
+  });
+}
+
+async function f1() {
+  var x = await resolveAfter2Seconds(10);
+  console.log(x); // 10
+}
+f1();
+
+ +

Les objets dotés d'une méthode then() (thenable en anglais) seront également résolus :

+ +
async function f0() {
+  const thenable = {
+    then: function(resolve, _reject) {
+      resolve("résolu :)");
+    }
+  };
+  console.log(await thenable); // résolu :)
+}
+f0();
+ +

Si la valeur n'est pas une promesse, elle est convertie en une promesse résolue :

+ +
async function f2() {
+  var y = await 20;
+  console.log(y); // 20
+}
+f2();
+ +

Si la promesse est rejetée, la raison est fournie avec l'exception.

+ +
async function f3() {
+  try {
+    var z = await Promise.reject(30);
+  } catch (e) {
+    console.log(e); // 30
+  }
+}
+f3();
+ +

On peut également gérer le cas où la promesse est rejetée grâce à {{jsxref("Promise.prototype.catch()")}} :

+ +
var response = await maFonctionPromesse().catch(
+  (err) => {
+    console.log(err);
+  }
+);
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName("ESDraft", "#sec-async-function-definitions", "async functions")}}{{Spec2("ESDraft")}}
{{SpecName("ES2018", "#sec-async-function-definitions", "async functions")}}{{Spec2('ES2018')}}
{{SpecName("ES2017", "#sec-async-function-definitions", "async functions")}}{{Spec2('ES2017')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.await")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/bitwise_and/index.html b/files/fr/web/javascript/reference/operators/bitwise_and/index.html deleted file mode 100644 index b1a3ca024b..0000000000 --- a/files/fr/web/javascript/reference/operators/bitwise_and/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: ET binaire (&) -slug: Web/JavaScript/Reference/Operators/Bitwise_AND -tags: - - Bitwise operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.bitwise_and -translation-of: Web/JavaScript/Reference/Operators/Bitwise_AND ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur ET binaire (&) renvoie un nombre dont la représentation binaire est une séquence de bits où il y a un 1 pour chaque position où les bits des deux opérandes valent 1.

- -
{{EmbedInteractiveExample("pages/js/expressions-bitwise-and.html")}}
- -

Syntaxe

- -
-a & b
-
- -

Description

- -

Les opérandes sont convertis en entiers sur 32 bits et exprimés comme une séquence de bits. Les nombres sur plus de 32 bits ont leurs bits en excès écartés. Par exemple, l'entier suivant nécessite plus de 32 bits pour être représenté et il sera converti en un entier sur 32 bits :

- -
-Avant:  11100110111110100000000000000110000000000001
-Après:              10100000000000000110000000000001
-
- -

Chaque bit du premier opérande est associé avec le bit correspondant du second opérande. Lorsque les deux valent 1, le bit correspondant du résultat sera placé à 1. Le résultat est donc construit binairement.

- -

La table de vérité pour l'opérateur ET est :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aba ET b
000
010
100
111
- -
-     9 (base 10) = 00000000000000000000000000001001 (base 2)
-    14 (base 10) = 00000000000000000000000000001110 (base 2)
-                   --------------------------------
-14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)
-
- -

Utiliser un ET binaire sur n'importe quel nombre x d'une part et 0 d'autre part renverra 0.

- -

Exemples

- -

Utiliser l'opérateur ET binaire

- -
-// 5: 00000000000000000000000000000101
-// 2: 00000000000000000000000000000010
-5 & 2; // 0
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/bitwise_and/index.md b/files/fr/web/javascript/reference/operators/bitwise_and/index.md new file mode 100644 index 0000000000..b1a3ca024b --- /dev/null +++ b/files/fr/web/javascript/reference/operators/bitwise_and/index.md @@ -0,0 +1,102 @@ +--- +title: ET binaire (&) +slug: Web/JavaScript/Reference/Operators/Bitwise_AND +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.bitwise_and +translation-of: Web/JavaScript/Reference/Operators/Bitwise_AND +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur ET binaire (&) renvoie un nombre dont la représentation binaire est une séquence de bits où il y a un 1 pour chaque position où les bits des deux opérandes valent 1.

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-and.html")}}
+ +

Syntaxe

+ +
+a & b
+
+ +

Description

+ +

Les opérandes sont convertis en entiers sur 32 bits et exprimés comme une séquence de bits. Les nombres sur plus de 32 bits ont leurs bits en excès écartés. Par exemple, l'entier suivant nécessite plus de 32 bits pour être représenté et il sera converti en un entier sur 32 bits :

+ +
+Avant:  11100110111110100000000000000110000000000001
+Après:              10100000000000000110000000000001
+
+ +

Chaque bit du premier opérande est associé avec le bit correspondant du second opérande. Lorsque les deux valent 1, le bit correspondant du résultat sera placé à 1. Le résultat est donc construit binairement.

+ +

La table de vérité pour l'opérateur ET est :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba ET b
000
010
100
111
+ +
+     9 (base 10) = 00000000000000000000000000001001 (base 2)
+    14 (base 10) = 00000000000000000000000000001110 (base 2)
+                   --------------------------------
+14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)
+
+ +

Utiliser un ET binaire sur n'importe quel nombre x d'une part et 0 d'autre part renverra 0.

+ +

Exemples

+ +

Utiliser l'opérateur ET binaire

+ +
+// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+5 & 2; // 0
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.html b/files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.html deleted file mode 100644 index 3300032225..0000000000 --- a/files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Affectation après ET binaire (&=) -slug: Web/JavaScript/Reference/Operators/Bitwise_AND_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.bitwise_and_assignment -translation-of: Web/JavaScript/Reference/Operators/Bitwise_AND_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'affectation après ET binaire (&=) utilise la représentation binaire des deux opérandes, applique un ET logique entre chaque puis affecte le résultat de l'opération à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-bitwise-and-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x &= y
-Signification :  x  = x & y
-
- -

Exemples

- -

Utiliser l'affectation après ET binaire

- -
-let a = 5;
-// 5:     00000000000000000000000000000101
-// 2:     00000000000000000000000000000010
-a &= 2; // 0
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.md b/files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.md new file mode 100644 index 0000000000..3300032225 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/bitwise_and_assignment/index.md @@ -0,0 +1,50 @@ +--- +title: Affectation après ET binaire (&=) +slug: Web/JavaScript/Reference/Operators/Bitwise_AND_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.bitwise_and_assignment +translation-of: Web/JavaScript/Reference/Operators/Bitwise_AND_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'affectation après ET binaire (&=) utilise la représentation binaire des deux opérandes, applique un ET logique entre chaque puis affecte le résultat de l'opération à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-and-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x &= y
+Signification :  x  = x & y
+
+ +

Exemples

+ +

Utiliser l'affectation après ET binaire

+ +
+let a = 5;
+// 5:     00000000000000000000000000000101
+// 2:     00000000000000000000000000000010
+a &= 2; // 0
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/bitwise_not/index.html b/files/fr/web/javascript/reference/operators/bitwise_not/index.html deleted file mode 100644 index f3e1856a90..0000000000 --- a/files/fr/web/javascript/reference/operators/bitwise_not/index.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: NON binaire (~) -slug: Web/JavaScript/Reference/Operators/Bitwise_NOT -tags: - - Bitwise operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.bitwise_not -translation_of: Web/JavaScript/Reference/Operators/Bitwise_NOT ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur binaire NON (~) prend l'opposé de chaque bit de son opérande et fournit la valeur ainsi obtenue. À l'instar des autres opérateurs binaires, il convertit son opérande en un entier signé sur 32 bits.

- -
{{EmbedInteractiveExample("pages/js/expressions-bitwise-not.html")}}
- -

Syntaxe

- -
-~a
-
- -

Description

- -

L'opérande est converti en un entier signé sur 32 bits. Les nombres avec plus de 32 bits voient leurs bits les plus significatifs être tronqués. Voici un exemple où l'entier qui suit est supérieur à une valeur pouvant être exprimée sur 32 bits : la conversion écrête la valeur pour obtenir un entier signé sur 32 bits :

- -
-Avant : 11100110111110100000000000000110000000000001
-Après :             10100000000000000110000000000001
-
- -

Pour former le résultat, chaque bit qui compose l'opérande est inversé.

- -

La table de vérité pour l'opération NON est :

- - - - - - - - - - - - - - - - - - -
aNON a
01
10
- -
- 9 (base 10) = 00000000000000000000000000001001 (base 2)
-               --------------------------------
-~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)
-
- -

L'entier signé sur 32 bits est inversé selon le complément à deux. Autrement dit, la présence du bit le plus significatif est utilisée pour exprimer des entiers négatifs.

- -

Appliquer un NON binaire sur n'importe quel nombre x fournira la valeur -(x + 1). Ainsi, ~-5 renverra 4.

- -

Étant donné l'utilisation d'une représentation sur 32 bits, ~-1 et ~4294967295 (2^32 - 1) donneront tous les deux 0.

- -

Exemples

- -

Utiliser le NON binaire

- -
~0;  // -1
-~-1; // 0
-~1;  // -2
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/bitwise_not/index.md b/files/fr/web/javascript/reference/operators/bitwise_not/index.md new file mode 100644 index 0000000000..f3e1856a90 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/bitwise_not/index.md @@ -0,0 +1,90 @@ +--- +title: NON binaire (~) +slug: Web/JavaScript/Reference/Operators/Bitwise_NOT +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.bitwise_not +translation_of: Web/JavaScript/Reference/Operators/Bitwise_NOT +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur binaire NON (~) prend l'opposé de chaque bit de son opérande et fournit la valeur ainsi obtenue. À l'instar des autres opérateurs binaires, il convertit son opérande en un entier signé sur 32 bits.

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-not.html")}}
+ +

Syntaxe

+ +
+~a
+
+ +

Description

+ +

L'opérande est converti en un entier signé sur 32 bits. Les nombres avec plus de 32 bits voient leurs bits les plus significatifs être tronqués. Voici un exemple où l'entier qui suit est supérieur à une valeur pouvant être exprimée sur 32 bits : la conversion écrête la valeur pour obtenir un entier signé sur 32 bits :

+ +
+Avant : 11100110111110100000000000000110000000000001
+Après :             10100000000000000110000000000001
+
+ +

Pour former le résultat, chaque bit qui compose l'opérande est inversé.

+ +

La table de vérité pour l'opération NON est :

+ + + + + + + + + + + + + + + + + + +
aNON a
01
10
+ +
+ 9 (base 10) = 00000000000000000000000000001001 (base 2)
+               --------------------------------
+~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)
+
+ +

L'entier signé sur 32 bits est inversé selon le complément à deux. Autrement dit, la présence du bit le plus significatif est utilisée pour exprimer des entiers négatifs.

+ +

Appliquer un NON binaire sur n'importe quel nombre x fournira la valeur -(x + 1). Ainsi, ~-5 renverra 4.

+ +

Étant donné l'utilisation d'une représentation sur 32 bits, ~-1 et ~4294967295 (2^32 - 1) donneront tous les deux 0.

+ +

Exemples

+ +

Utiliser le NON binaire

+ +
~0;  // -1
+~-1; // 0
+~1;  // -2
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/bitwise_or/index.html b/files/fr/web/javascript/reference/operators/bitwise_or/index.html deleted file mode 100644 index 72d4ed3043..0000000000 --- a/files/fr/web/javascript/reference/operators/bitwise_or/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: OU binaire (|) -slug: Web/JavaScript/Reference/Operators/Bitwise_OR -tags: - - Bitwise operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.bitwise_or -translation-of: Web/JavaScript/Reference/Operators/Bitwise_OR ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur OU binaire (|) renvoie un nombre dont la représentation binaire est une séquence de bits où il y a un 1 pour chaque position où au moins un des bits des deux opérandes vaut 1.

- -
{{EmbedInteractiveExample("pages/js/expressions-bitwise-or.html")}}
- -

Syntaxe

- -
-a | b
-
- -

Description

- -

Les opérandes sont convertis en entiers sur 32 bits et exprimés comme une séquence de bits. Les nombres sur plus de 32 bits ont leurs bits en excès écartés. Par exemple, l'entier suivant nécessite plus de 32 bits pour être représenté et il sera converti en un entier sur 32 bits :

- -
-Avant:  11100110111110100000000000000110000000000001
-Après:              10100000000000000110000000000001
-
- -

Chaque bit du premier opérande est associé avec le bit correspondant du second opérande. Lorsqu'au moins un de ces bit vaut 1, le bit correspondant du résultat sera placé à 1. Le résultat est donc construit binairement.

- -

La table de vérité pour l'opérateur OU est :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aba OU b
000
011
101
111
- -
-     9 (base 10) = 00000000000000000000000000001001 (base 2)
-    14 (base 10) = 00000000000000000000000000001110 (base 2)
-                   --------------------------------
-14 | 9 (base 10) = 00000000000000000000000000001111 (base 2) = 15 (base 10)
-
- -

Utiliser le OU binaire avec n'importe quel nombre x d'une part et 0 renverra toujours x.

- -

Exemples

- -

Utiliser l'opérateur OU binaire

- -
-// 9  (00000000000000000000000000001001)
-// 14 (00000000000000000000000000001110)
-
-14 | 9;
-// 15 (00000000000000000000000000001111)
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/bitwise_or/index.md b/files/fr/web/javascript/reference/operators/bitwise_or/index.md new file mode 100644 index 0000000000..72d4ed3043 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/bitwise_or/index.md @@ -0,0 +1,104 @@ +--- +title: OU binaire (|) +slug: Web/JavaScript/Reference/Operators/Bitwise_OR +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.bitwise_or +translation-of: Web/JavaScript/Reference/Operators/Bitwise_OR +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur OU binaire (|) renvoie un nombre dont la représentation binaire est une séquence de bits où il y a un 1 pour chaque position où au moins un des bits des deux opérandes vaut 1.

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-or.html")}}
+ +

Syntaxe

+ +
+a | b
+
+ +

Description

+ +

Les opérandes sont convertis en entiers sur 32 bits et exprimés comme une séquence de bits. Les nombres sur plus de 32 bits ont leurs bits en excès écartés. Par exemple, l'entier suivant nécessite plus de 32 bits pour être représenté et il sera converti en un entier sur 32 bits :

+ +
+Avant:  11100110111110100000000000000110000000000001
+Après:              10100000000000000110000000000001
+
+ +

Chaque bit du premier opérande est associé avec le bit correspondant du second opérande. Lorsqu'au moins un de ces bit vaut 1, le bit correspondant du résultat sera placé à 1. Le résultat est donc construit binairement.

+ +

La table de vérité pour l'opérateur OU est :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba OU b
000
011
101
111
+ +
+     9 (base 10) = 00000000000000000000000000001001 (base 2)
+    14 (base 10) = 00000000000000000000000000001110 (base 2)
+                   --------------------------------
+14 | 9 (base 10) = 00000000000000000000000000001111 (base 2) = 15 (base 10)
+
+ +

Utiliser le OU binaire avec n'importe quel nombre x d'une part et 0 renverra toujours x.

+ +

Exemples

+ +

Utiliser l'opérateur OU binaire

+ +
+// 9  (00000000000000000000000000001001)
+// 14 (00000000000000000000000000001110)
+
+14 | 9;
+// 15 (00000000000000000000000000001111)
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.html b/files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.html deleted file mode 100644 index 5c03784a45..0000000000 --- a/files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Affectation après OU binaire (|=) -slug: Web/JavaScript/Reference/Operators/Bitwise_OR_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.bitwise_or_assignment -translation-of: Web/JavaScript/Reference/Operators/Bitwise_OR_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'affectation après OU binaire (|=) utilise la représentation binaire des deux opérandes et effectue un OU logique entre chaque puis affecte le résultat à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-bitwise-or-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x |= y
-Signification :  x = x | y
-
- -

Exemples

- -

Utiliser l'affectation après OU binaire

- -
-let a = 5;
-a |= 2; // 7
-// 5: 00000000000000000000000000000101
-// 2: 00000000000000000000000000000010
-// -----------------------------------
-// 7: 00000000000000000000000000000111
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.md b/files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.md new file mode 100644 index 0000000000..5c03784a45 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/bitwise_or_assignment/index.md @@ -0,0 +1,53 @@ +--- +title: Affectation après OU binaire (|=) +slug: Web/JavaScript/Reference/Operators/Bitwise_OR_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.bitwise_or_assignment +translation-of: Web/JavaScript/Reference/Operators/Bitwise_OR_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'affectation après OU binaire (|=) utilise la représentation binaire des deux opérandes et effectue un OU logique entre chaque puis affecte le résultat à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-or-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x |= y
+Signification :  x = x | y
+
+ +

Exemples

+ +

Utiliser l'affectation après OU binaire

+ +
+let a = 5;
+a |= 2; // 7
+// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+// -----------------------------------
+// 7: 00000000000000000000000000000111
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/bitwise_xor/index.html b/files/fr/web/javascript/reference/operators/bitwise_xor/index.html deleted file mode 100644 index eff1d79f8f..0000000000 --- a/files/fr/web/javascript/reference/operators/bitwise_xor/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: OU exclusif binaire (^) -slug: Web/JavaScript/Reference/Operators/Bitwise_XOR -tags: - - Bitwise operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.bitwise_xor -translation-of: Web/JavaScript/Reference/Operators/Bitwise_XOR ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur binaire OU exclusif (XOR) (^) renvoie un nombre dont la représentation binaire est une séquence de bits où il y a un 1 pour chaque position où exactement un des bits des deux opérandes vaut 1.

- -
{{EmbedInteractiveExample("pages/js/expressions-bitwise-xor.html")}}
- -

Syntaxe

- -
-a ^ b
-
- -

Description

- -

Les opérandes sont convertis en entiers sur 32 bits et exprimés comme une séquence de bits. Les nombres sur plus de 32 bits ont leurs bits en excès écartés. Par exemple, l'entier suivant nécessite plus de 32 bits pour être représenté et il sera converti en un entier sur 32 bits :

- -
-Avant:  11100110111110100000000000000110000000000001
-Après:              10100000000000000110000000000001
-
- -

Chaque bit du premier opérande est associé avec le bit correspondant du second opérande. Lorsqu'exactement un de ces bit vaut 1, le bit correspondant du résultat sera placé à 1. Le résultat est donc construit binairement.

- -

La table de vérité pour l'opérateur OU exclusif (XOR) est :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
aba XOR b
000
011
101
110
- -
-.    9 (base 10) = 00000000000000000000000000001001 (base 2)
-    14 (base 10) = 00000000000000000000000000001110 (base 2)
-                   --------------------------------
-14 ^ 9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)
-
- -

Utiliser le OU exclusif binaire avec n'importe quel nombre x d'une part et 0 d'autre part renverra x.

- -

Exemples

- -

Utiliser le OU exclusif binaire

- -
-// 9  (00000000000000000000000000001001)
-// 14 (00000000000000000000000000001110)
-
-14 ^ 9;
-// 7  (00000000000000000000000000000111)
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/bitwise_xor/index.md b/files/fr/web/javascript/reference/operators/bitwise_xor/index.md new file mode 100644 index 0000000000..eff1d79f8f --- /dev/null +++ b/files/fr/web/javascript/reference/operators/bitwise_xor/index.md @@ -0,0 +1,104 @@ +--- +title: OU exclusif binaire (^) +slug: Web/JavaScript/Reference/Operators/Bitwise_XOR +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.bitwise_xor +translation-of: Web/JavaScript/Reference/Operators/Bitwise_XOR +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur binaire OU exclusif (XOR) (^) renvoie un nombre dont la représentation binaire est une séquence de bits où il y a un 1 pour chaque position où exactement un des bits des deux opérandes vaut 1.

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-xor.html")}}
+ +

Syntaxe

+ +
+a ^ b
+
+ +

Description

+ +

Les opérandes sont convertis en entiers sur 32 bits et exprimés comme une séquence de bits. Les nombres sur plus de 32 bits ont leurs bits en excès écartés. Par exemple, l'entier suivant nécessite plus de 32 bits pour être représenté et il sera converti en un entier sur 32 bits :

+ +
+Avant:  11100110111110100000000000000110000000000001
+Après:              10100000000000000110000000000001
+
+ +

Chaque bit du premier opérande est associé avec le bit correspondant du second opérande. Lorsqu'exactement un de ces bit vaut 1, le bit correspondant du résultat sera placé à 1. Le résultat est donc construit binairement.

+ +

La table de vérité pour l'opérateur OU exclusif (XOR) est :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aba XOR b
000
011
101
110
+ +
+.    9 (base 10) = 00000000000000000000000000001001 (base 2)
+    14 (base 10) = 00000000000000000000000000001110 (base 2)
+                   --------------------------------
+14 ^ 9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)
+
+ +

Utiliser le OU exclusif binaire avec n'importe quel nombre x d'une part et 0 d'autre part renverra x.

+ +

Exemples

+ +

Utiliser le OU exclusif binaire

+ +
+// 9  (00000000000000000000000000001001)
+// 14 (00000000000000000000000000001110)
+
+14 ^ 9;
+// 7  (00000000000000000000000000000111)
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.html b/files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.html deleted file mode 100644 index 15074eaf64..0000000000 --- a/files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.html +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Affectation après OU exclusif binaire (^=) -slug: Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.bitwise_xor_assignment -translation-of: Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'affectation après OU exclusif (XOR) binaire (^=) utilise la représentation binaire des deux opérandes, effectue un OU exclusif entre chaque puis affecte le résultat obtenu à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-bitwise-xor-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x ^= y
-Signification :  x  = x ^ y
-
- -

Exemples

- -

Utiliser l'affectation après OU exclusif binaire

- -
-let a = 5;      // 00000000000000000000000000000101
-a ^= 3;         // 00000000000000000000000000000011
-
-console.log(a); // 00000000000000000000000000000110
-// 6
-
-let b = 5;      // 00000000000000000000000000000101
-b ^= 0;         // 00000000000000000000000000000000
-
-console.log(b); // 00000000000000000000000000000101
-// 5
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.md b/files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.md new file mode 100644 index 0000000000..15074eaf64 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/bitwise_xor_assignment/index.md @@ -0,0 +1,57 @@ +--- +title: Affectation après OU exclusif binaire (^=) +slug: Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.bitwise_xor_assignment +translation-of: Web/JavaScript/Reference/Operators/Bitwise_XOR_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'affectation après OU exclusif (XOR) binaire (^=) utilise la représentation binaire des deux opérandes, effectue un OU exclusif entre chaque puis affecte le résultat obtenu à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-bitwise-xor-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x ^= y
+Signification :  x  = x ^ y
+
+ +

Exemples

+ +

Utiliser l'affectation après OU exclusif binaire

+ +
+let a = 5;      // 00000000000000000000000000000101
+a ^= 3;         // 00000000000000000000000000000011
+
+console.log(a); // 00000000000000000000000000000110
+// 6
+
+let b = 5;      // 00000000000000000000000000000101
+b ^= 0;         // 00000000000000000000000000000000
+
+console.log(b); // 00000000000000000000000000000101
+// 5
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/class/index.html b/files/fr/web/javascript/reference/operators/class/index.html deleted file mode 100644 index 0b9f789d4c..0000000000 --- a/files/fr/web/javascript/reference/operators/class/index.html +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: class -slug: Web/JavaScript/Reference/Operators/class -tags: - - ECMAScript 2015 - - JavaScript - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/class -original_slug: Web/JavaScript/Reference/Opérateurs/class ---- -
{{JSSidebar("Operators")}}
- -

Une expression de classe est un moyen de définir une classe avec ECMASCript 2015 (ES6). Semblable aux expressions de fonctions, les expressions de classes peuvent être nommées ou anonymes. Si l'expression est nommée, le nom de la classe ne sera local que pour le corps de la fonction. Cette syntaxe n'est qu'un « sucre syntaxique » pour faciliter l'écriture du code, elle ne modifie en aucun cas le modèle d'héritage utilisé par JavaScript qui est un modèle à base de prototypes.

- -
{{EmbedInteractiveExample("pages/js/expressions-classexpression.html")}}
- -

Syntaxe

- -
var MaClasse = class [nomClasse] [extends] {
-  // corps de la classe
-};
- -

Description

- -

Une expression de classe utilise une syntaxe similaire à celle d'une instruction de classe. En revanche, avec les expressions de classes, il est possible de ne pas nommer la classe, ce qu'il est impossible de faire avec les instructions de classes. De plus, en utilisant les expressions de classe, on peut redéfinir/redéclarer les classes si nécessaire. Le type d'une classe sera toujours "function".

- -

Le corps d'une classe sera exécuté en mode strict (pour les instructions et les expressions de classe).

- -

Exemples

- -

Une expression simple

- -

Ici, on utilise une expression de classe anonyme qu'on lie à la variable Toto.

- -
var Toto = class {
-  constructor() {}
-  truc() {
-    return "Coucou monde !";
-  }
-};
-
-var instance = new Toto();
-instance.truc(); // "Coucou monde !"
-Toto.name; // "Toto"
-
- -

Des expressions nommées

- -

Si on souhaite faire référence à la classe, au sein du corps de la classe, on pourra utiliser une expression nommée. Le nom utilisé ne sera visible que depuis l'intérieur de la portée de l'expression de classe.

- -
// TBD
-var Toto = class TotoNommé {
-  constructor() {}
-  quiEstLa() {
-    return TotoNommé.name;
-  }
-}
-
-var truc = new Toto;
-truc.quiEstLa(); // "TotoNommmé"
-TotoNommé.name;  // ReferenceError
-Toto.name;       // "TotoNommé"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2016')}} 
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2017')}} 
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.class")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/class/index.md b/files/fr/web/javascript/reference/operators/class/index.md new file mode 100644 index 0000000000..0b9f789d4c --- /dev/null +++ b/files/fr/web/javascript/reference/operators/class/index.md @@ -0,0 +1,108 @@ +--- +title: class +slug: Web/JavaScript/Reference/Operators/class +tags: + - ECMAScript 2015 + - JavaScript + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/class +original_slug: Web/JavaScript/Reference/Opérateurs/class +--- +
{{JSSidebar("Operators")}}
+ +

Une expression de classe est un moyen de définir une classe avec ECMASCript 2015 (ES6). Semblable aux expressions de fonctions, les expressions de classes peuvent être nommées ou anonymes. Si l'expression est nommée, le nom de la classe ne sera local que pour le corps de la fonction. Cette syntaxe n'est qu'un « sucre syntaxique » pour faciliter l'écriture du code, elle ne modifie en aucun cas le modèle d'héritage utilisé par JavaScript qui est un modèle à base de prototypes.

+ +
{{EmbedInteractiveExample("pages/js/expressions-classexpression.html")}}
+ +

Syntaxe

+ +
var MaClasse = class [nomClasse] [extends] {
+  // corps de la classe
+};
+ +

Description

+ +

Une expression de classe utilise une syntaxe similaire à celle d'une instruction de classe. En revanche, avec les expressions de classes, il est possible de ne pas nommer la classe, ce qu'il est impossible de faire avec les instructions de classes. De plus, en utilisant les expressions de classe, on peut redéfinir/redéclarer les classes si nécessaire. Le type d'une classe sera toujours "function".

+ +

Le corps d'une classe sera exécuté en mode strict (pour les instructions et les expressions de classe).

+ +

Exemples

+ +

Une expression simple

+ +

Ici, on utilise une expression de classe anonyme qu'on lie à la variable Toto.

+ +
var Toto = class {
+  constructor() {}
+  truc() {
+    return "Coucou monde !";
+  }
+};
+
+var instance = new Toto();
+instance.truc(); // "Coucou monde !"
+Toto.name; // "Toto"
+
+ +

Des expressions nommées

+ +

Si on souhaite faire référence à la classe, au sein du corps de la classe, on pourra utiliser une expression nommée. Le nom utilisé ne sera visible que depuis l'intérieur de la portée de l'expression de classe.

+ +
// TBD
+var Toto = class TotoNommé {
+  constructor() {}
+  quiEstLa() {
+    return TotoNommé.name;
+  }
+}
+
+var truc = new Toto;
+truc.quiEstLa(); // "TotoNommmé"
+TotoNommé.name;  // ReferenceError
+Toto.name;       // "TotoNommé"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2016')}} 
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2017')}} 
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.class")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/comma_operator/index.html b/files/fr/web/javascript/reference/operators/comma_operator/index.html deleted file mode 100644 index e4c4d3d969..0000000000 --- a/files/fr/web/javascript/reference/operators/comma_operator/index.html +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: L'opérateur virgule -slug: Web/JavaScript/Reference/Operators/Comma_Operator -tags: - - JavaScript - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/Comma_Operator -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_virgule ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur virgule permet d'évaluer chacun de ses opérandes (de la gauche vers la droite) et de renvoyer la valeur du dernier opérande.

- -
{{EmbedInteractiveExample("pages/js/expressions-commaoperators.html")}}
- -

Syntaxe

- -
expr1, expr2, expr3...
- -

Paramètres

- -
-
expr1, expr2, expr3...
-
Des expressions JavaScript.
-
- -

Description

- -

L'opérateur virgule peut être utilisé lorsqu'on souhaite utiliser plusieurs expressions là où la syntaxe n'en attend qu'une seule. Cet opérateur est souvent utilisé dans une boucle {{jsxref("Instructions/for","for")}} afin de fournir plusieurs paramètres.

- -

L'opérateur virgule est à différencier de la virgule utilisée pour séparer les éléments d'un tableau ou les propriétés d'un objet ou encore les arguments d'une fonction.

- -

Exemples

- -

SI on a un tableau à 2 dimensions appelé monTableau, qui possède 10 éléments ayant chacun 10 éléments, on peut utiliser le code suivant avec l'opérateur virgule afin d'incrémenter deux variables (i et j) à la fois. Attention, la virgule utilisée au sein de l'instruction var n'est pas l'opérateur virgule (car il ne peut exister au sein d'une expression) ; ici c'est un caractère spécial de l'instruction {{jsxref("Instructions/var","var")}}. Le code qui suit affiche les éléments présents sur la diagonale de cette matrice :

- -
for (var i = 0, j = 9; i <= 9; i++, j--){
-  console.log("monTableau[" + i + "][" + j + "] = " + monTableau[i][j]);
-}
- -

Dans le code suivant, a est défini avec la valeur de b = 3 (qui est 3) et l'expression c = 4 est toujours évaluée et c'est ce résultat affiché dans la console du fait de la précédence et de l'associativité des opérateurs.

- -
var a, b, c;
-a = b = 3, c = 4; // Renvoie 4 dans la console
-console.log(a);   // 3
- -

Pour isoler la précédence de l'opérateur, on peut utiliser des parenthèses :

- -
var x, y, z;
-x = (y = 5, z = 6); // Renvoie 6 dans la console
-console.log(x);     // 6
- -

Effectuer un traitement puis renvoyer une valeur

- -

Un autre exemple consiste à effectuer un certain traitement sur la variable puis à renvoyer le résultat. Par définition, seul le dernier élément sera renvoyé mais les instructions précédentes seront bien exécutées. AInsi, on pourrait avoir :

- -
function maFonction () {
-  var x = 0;
-
-  return (x += 1, x); // ce qui revient à renvoyer ++x
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-comma-operator', 'Comma operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-comma-operator', 'Comma operator')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.14', 'Comma operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11.14', 'Comma operator')}}{{Spec2('ES1')}}Définition initiale
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.comma")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/comma_operator/index.md b/files/fr/web/javascript/reference/operators/comma_operator/index.md new file mode 100644 index 0000000000..e4c4d3d969 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/comma_operator/index.md @@ -0,0 +1,104 @@ +--- +title: L'opérateur virgule +slug: Web/JavaScript/Reference/Operators/Comma_Operator +tags: + - JavaScript + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/Comma_Operator +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_virgule +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur virgule permet d'évaluer chacun de ses opérandes (de la gauche vers la droite) et de renvoyer la valeur du dernier opérande.

+ +
{{EmbedInteractiveExample("pages/js/expressions-commaoperators.html")}}
+ +

Syntaxe

+ +
expr1, expr2, expr3...
+ +

Paramètres

+ +
+
expr1, expr2, expr3...
+
Des expressions JavaScript.
+
+ +

Description

+ +

L'opérateur virgule peut être utilisé lorsqu'on souhaite utiliser plusieurs expressions là où la syntaxe n'en attend qu'une seule. Cet opérateur est souvent utilisé dans une boucle {{jsxref("Instructions/for","for")}} afin de fournir plusieurs paramètres.

+ +

L'opérateur virgule est à différencier de la virgule utilisée pour séparer les éléments d'un tableau ou les propriétés d'un objet ou encore les arguments d'une fonction.

+ +

Exemples

+ +

SI on a un tableau à 2 dimensions appelé monTableau, qui possède 10 éléments ayant chacun 10 éléments, on peut utiliser le code suivant avec l'opérateur virgule afin d'incrémenter deux variables (i et j) à la fois. Attention, la virgule utilisée au sein de l'instruction var n'est pas l'opérateur virgule (car il ne peut exister au sein d'une expression) ; ici c'est un caractère spécial de l'instruction {{jsxref("Instructions/var","var")}}. Le code qui suit affiche les éléments présents sur la diagonale de cette matrice :

+ +
for (var i = 0, j = 9; i <= 9; i++, j--){
+  console.log("monTableau[" + i + "][" + j + "] = " + monTableau[i][j]);
+}
+ +

Dans le code suivant, a est défini avec la valeur de b = 3 (qui est 3) et l'expression c = 4 est toujours évaluée et c'est ce résultat affiché dans la console du fait de la précédence et de l'associativité des opérateurs.

+ +
var a, b, c;
+a = b = 3, c = 4; // Renvoie 4 dans la console
+console.log(a);   // 3
+ +

Pour isoler la précédence de l'opérateur, on peut utiliser des parenthèses :

+ +
var x, y, z;
+x = (y = 5, z = 6); // Renvoie 6 dans la console
+console.log(x);     // 6
+ +

Effectuer un traitement puis renvoyer une valeur

+ +

Un autre exemple consiste à effectuer un certain traitement sur la variable puis à renvoyer le résultat. Par définition, seul le dernier élément sera renvoyé mais les instructions précédentes seront bien exécutées. AInsi, on pourrait avoir :

+ +
function maFonction () {
+  var x = 0;
+
+  return (x += 1, x); // ce qui revient à renvoyer ++x
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-comma-operator', 'Comma operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-comma-operator', 'Comma operator')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.14', 'Comma operator')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11.14', 'Comma operator')}}{{Spec2('ES1')}}Définition initiale
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.comma")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/conditional_operator/index.html b/files/fr/web/javascript/reference/operators/conditional_operator/index.html deleted file mode 100644 index 3df094db59..0000000000 --- a/files/fr/web/javascript/reference/operators/conditional_operator/index.html +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: L'opérateur conditionnel -slug: Web/JavaScript/Reference/Operators/Conditional_Operator -tags: - - JavaScript - - Opérateur -translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_conditionnel ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur (ternaire) conditionnel est le seul opérateur JavaScript qui comporte trois opérandes. Cet opérateur est fréquemment utilisé comme raccourci pour la déclaration de {{jsxref("Instructions/if...else")}}.

- -
{{EmbedInteractiveExample("pages/js/expressions-conditionaloperators.html")}}
- -

Syntaxe

- -
condition ? exprSiVrai : exprSiFaux 
- -

Paramètres

- -
-
condition
-
Une expression qui est évaluée en un booléen (true ou false).
-
exprSiVrai
-
Une expression qui est évaluée si la condition est équivalente à true (truthy)
-
exprSiFaux
-
Une expression qui est évaluée si la condition est équivalente à false (falsy).
-
- -

Description

- -

SI condition vaut true, l'opérateur renverra la valeur d'exprSiVrai; dans le cas contraire, il renverra la valeur de exprSiFaux. Par exemple, on peut afficher un message différent en fonction d'une variable estMembre avec cette déclaration :

- -
"Le prix est : " + (estMembre ? "15 €" : "30 €")
-
- -

On peut également affecter des variables dont la valeur dépendra du test :

- -
var elvisLives = Math.PI > 4 ? "Yep" : "Nope";
- -

On peut enchaîner plusieurs évaluations ternaires l'une à la suite de l'autre (cet opérateur se propage de la gauche vers la droite) :

- -
var premierControle = false,
-    secondControle = false,
-    acces = premierControle ? "Accès refusé" : secondControle ? "Accès refusé" : "Accès autorisé";
-
-console.log(acces); // "Accès autorisé"
- -

Il est également possible d'utiliser cet opérateur pour effectuer l'une ou l'autre expression selon le cas de figure qui se présente :

- -
var stop = false, age = 16;
-
-age > 18 ? location.assign("continue.html") : stop = true;
-
- -

en utilisant l'{{jsxref("Opérateurs/L_opérateur_virgule","opérateur virgule")}}, on peut même y placer plusieurs instructions (attention toutefois à la lisibilité et à se demander si un {{jsxref("Instructions/if...else","if...else")}} n'est pas plus approprié).

- -
var stop = false, age = 23;
-
-age > 18 ? (
-    console.log("OK, accès autorisé."),
-    location.assign("continue.html")
-) : (
-    stop = true,
-    console.log("Accès refusé !")
-);
-
- -

De la même façon, on peut effectuer plusieurs opérations, encadrées par des parenthèses, avant d'affecter le résultat de l'opérateur à une variable. Conformément à l'opérateur virgule, ce sera la dernière valeur qui sera affectée. Ici aussi, attention à la lisibilité du code relativement à un if...else.

- -
var age = 16;
-
-var url = age > 18 ? (
-    console.log("Accès autorisé."),
-    // console.log renvoie "undefined", mais cela importe peu car
-    // ce n'est pas le dernier élément de l'expression
-    "continue.html" // la valeur à affecter si âge > 18
-) : (
-    console.log("Accès refusé !"),
-    // etc.
-    "stop.html" // la valeur à affecter si âge <= 18
-);
-
-location.assign(url); // "stop.html"
- -

Utiliser l'opérateur ternaire dans la valeur de retour

- -

On peut utiliser l'opérateur ternaire (voire une imbrication de celui-ci) pour remplacer certaines formulations avec if...elsereturn est la seule instruction utilisée :

- -
var func1 = function( .. ) {
-  if (condition1) { return valeur1 }
-  else if (condition2) { return valeur2 }
-  else if (condition3) { return valeur3 }
-  else { return value4 }
-}
-
-var func2 = function( .. ) {
-  return condition1 ? valeur1
-       : condition2 ? valeur2
-       : condition3 ? valeur3
-       :              valeur4
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-conditional-operator', 'Conditional Operator')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-conditional-operator', 'Conditional Operator')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.12', 'The conditional operator')}}{{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.12', 'The conditional operator')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.conditional")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/conditional_operator/index.md b/files/fr/web/javascript/reference/operators/conditional_operator/index.md new file mode 100644 index 0000000000..3df094db59 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/conditional_operator/index.md @@ -0,0 +1,146 @@ +--- +title: L'opérateur conditionnel +slug: Web/JavaScript/Reference/Operators/Conditional_Operator +tags: + - JavaScript + - Opérateur +translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_conditionnel +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur (ternaire) conditionnel est le seul opérateur JavaScript qui comporte trois opérandes. Cet opérateur est fréquemment utilisé comme raccourci pour la déclaration de {{jsxref("Instructions/if...else")}}.

+ +
{{EmbedInteractiveExample("pages/js/expressions-conditionaloperators.html")}}
+ +

Syntaxe

+ +
condition ? exprSiVrai : exprSiFaux 
+ +

Paramètres

+ +
+
condition
+
Une expression qui est évaluée en un booléen (true ou false).
+
exprSiVrai
+
Une expression qui est évaluée si la condition est équivalente à true (truthy)
+
exprSiFaux
+
Une expression qui est évaluée si la condition est équivalente à false (falsy).
+
+ +

Description

+ +

SI condition vaut true, l'opérateur renverra la valeur d'exprSiVrai; dans le cas contraire, il renverra la valeur de exprSiFaux. Par exemple, on peut afficher un message différent en fonction d'une variable estMembre avec cette déclaration :

+ +
"Le prix est : " + (estMembre ? "15 €" : "30 €")
+
+ +

On peut également affecter des variables dont la valeur dépendra du test :

+ +
var elvisLives = Math.PI > 4 ? "Yep" : "Nope";
+ +

On peut enchaîner plusieurs évaluations ternaires l'une à la suite de l'autre (cet opérateur se propage de la gauche vers la droite) :

+ +
var premierControle = false,
+    secondControle = false,
+    acces = premierControle ? "Accès refusé" : secondControle ? "Accès refusé" : "Accès autorisé";
+
+console.log(acces); // "Accès autorisé"
+ +

Il est également possible d'utiliser cet opérateur pour effectuer l'une ou l'autre expression selon le cas de figure qui se présente :

+ +
var stop = false, age = 16;
+
+age > 18 ? location.assign("continue.html") : stop = true;
+
+ +

en utilisant l'{{jsxref("Opérateurs/L_opérateur_virgule","opérateur virgule")}}, on peut même y placer plusieurs instructions (attention toutefois à la lisibilité et à se demander si un {{jsxref("Instructions/if...else","if...else")}} n'est pas plus approprié).

+ +
var stop = false, age = 23;
+
+age > 18 ? (
+    console.log("OK, accès autorisé."),
+    location.assign("continue.html")
+) : (
+    stop = true,
+    console.log("Accès refusé !")
+);
+
+ +

De la même façon, on peut effectuer plusieurs opérations, encadrées par des parenthèses, avant d'affecter le résultat de l'opérateur à une variable. Conformément à l'opérateur virgule, ce sera la dernière valeur qui sera affectée. Ici aussi, attention à la lisibilité du code relativement à un if...else.

+ +
var age = 16;
+
+var url = age > 18 ? (
+    console.log("Accès autorisé."),
+    // console.log renvoie "undefined", mais cela importe peu car
+    // ce n'est pas le dernier élément de l'expression
+    "continue.html" // la valeur à affecter si âge > 18
+) : (
+    console.log("Accès refusé !"),
+    // etc.
+    "stop.html" // la valeur à affecter si âge <= 18
+);
+
+location.assign(url); // "stop.html"
+ +

Utiliser l'opérateur ternaire dans la valeur de retour

+ +

On peut utiliser l'opérateur ternaire (voire une imbrication de celui-ci) pour remplacer certaines formulations avec if...elsereturn est la seule instruction utilisée :

+ +
var func1 = function( .. ) {
+  if (condition1) { return valeur1 }
+  else if (condition2) { return valeur2 }
+  else if (condition3) { return valeur3 }
+  else { return value4 }
+}
+
+var func2 = function( .. ) {
+  return condition1 ? valeur1
+       : condition2 ? valeur2
+       : condition3 ? valeur3
+       :              valeur4
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-conditional-operator', 'Conditional Operator')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-conditional-operator', 'Conditional Operator')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.12', 'The conditional operator')}}{{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.12', 'The conditional operator')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.conditional")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/decrement/index.html b/files/fr/web/javascript/reference/operators/decrement/index.html deleted file mode 100644 index 291f46393f..0000000000 --- a/files/fr/web/javascript/reference/operators/decrement/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Décrémentation (--) -slug: Web/JavaScript/Reference/Operators/Decrement -tags: - - Decrement - - JavaScript - - Language feature - - Operator -browser-compat: javascript.operators.decrement -translation_of: Web/JavaScript/Reference/Operators/Decrement ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de décrémentation (--) permet de décrémenter (c'est-à-dire de soustraire un) son opérande et renvoie une valeur qui est le résultat avant ou après la modification.

- -
{{EmbedInteractiveExample("pages/js/expressions-decrement.html")}}
- -

Syntaxe

- -
-Opérateur : x-- ou --x
-
- -

Description

- -

Utilisé comme suffixe (l'opérateur étant placé après l'opérande), comme dans x--, l'opérateur décrémentera la valeur et renverra la valeur avant l'incrément.

- -

Utilisé comme préfixe (l'opérateur étant placé avant l'opérande), comme dans --x, l'opérateur décrémentera la valeur et renverra la valeur après l'incrément.

- -

Exemples

- -

Décrément en suffixe

- -
let x = 3;
-let y = x--;
-
-// y = 3
-// x = 2
-
- -

Décrément en préfixe

- -
let a = 2;
-let b = --a;
-
-// a = 1
-// b = 1
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/decrement/index.md b/files/fr/web/javascript/reference/operators/decrement/index.md new file mode 100644 index 0000000000..291f46393f --- /dev/null +++ b/files/fr/web/javascript/reference/operators/decrement/index.md @@ -0,0 +1,70 @@ +--- +title: Décrémentation (--) +slug: Web/JavaScript/Reference/Operators/Decrement +tags: + - Decrement + - JavaScript + - Language feature + - Operator +browser-compat: javascript.operators.decrement +translation_of: Web/JavaScript/Reference/Operators/Decrement +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de décrémentation (--) permet de décrémenter (c'est-à-dire de soustraire un) son opérande et renvoie une valeur qui est le résultat avant ou après la modification.

+ +
{{EmbedInteractiveExample("pages/js/expressions-decrement.html")}}
+ +

Syntaxe

+ +
+Opérateur : x-- ou --x
+
+ +

Description

+ +

Utilisé comme suffixe (l'opérateur étant placé après l'opérande), comme dans x--, l'opérateur décrémentera la valeur et renverra la valeur avant l'incrément.

+ +

Utilisé comme préfixe (l'opérateur étant placé avant l'opérande), comme dans --x, l'opérateur décrémentera la valeur et renverra la valeur après l'incrément.

+ +

Exemples

+ +

Décrément en suffixe

+ +
let x = 3;
+let y = x--;
+
+// y = 3
+// x = 2
+
+ +

Décrément en préfixe

+ +
let a = 2;
+let b = --a;
+
+// a = 1
+// b = 1
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/delete/index.html b/files/fr/web/javascript/reference/operators/delete/index.html deleted file mode 100644 index 30d049ae30..0000000000 --- a/files/fr/web/javascript/reference/operators/delete/index.html +++ /dev/null @@ -1,302 +0,0 @@ ---- -title: L'opérateur delete -slug: Web/JavaScript/Reference/Operators/delete -tags: - - JavaScript - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/delete -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_delete ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur delete permet de retirer une propriété d'un objet.

- -
{{EmbedInteractiveExample("pages/js/expressions-deleteoperator.html")}}
- -

Syntaxe

- -
delete expression
- -

expression est évaluée comme une référence à une propriété :

- -
delete objet.propriete
-delete objet['propriete']
-
- -

Paramètres

- -
-
objet
-
Le nom d'un objet ou une expression dont l'évaluation fournit un objet.
-
propriete
-
La propriété qu'on souhaite supprimer.
-
- -

Valeur de retour

- -

true pour tous les cas sauf lorsque la propriété est une propriété propre non-configurable auquel cas false est renvoyé en mode non-strict.

- -

Exceptions

- -

Cet opérateur lève une exception {{jsxref("TypeError")}} en mode strict si la propriété est une propriété propre qui est non-configurable.

- -

Description

- -

Contrairement à ce qu'on pourrait penser, l'opérateur delete n'a rien à voir avec une libération de mémoire directe. La gestion de la mémoire en JavaScript est réalisée de façon indirecte en tenant compte des références, voir cette page pour plus de détails.

- -

L'opérateur delete permet de retirer une propriété donnée d'un objet. Lorsque la suppression se déroule sans problème, l'opération renvoie true, sinon c'est la valeur false qui est renvoyée. Voici quelques scénarios importants qui précisent ce comportement :

- - - -

Voici un fragment de code qui illustre certains cas :

- -
var Employe = {
-  age: 28,
-  nom: 'abc',
-  designation: 'developpeur'
-}
-
-console.log(delete Employe.nom);  // renvoie true
-console.log(delete Employe.age);  // renvoie true
-
-// Lorsqu'on souhaite supprimer une propriété
-// inexistante, on obtient true
-console.log(delete Employe.salaire); // renvoie true
-
- -

Les propriétés non-configurables

- -

Lorsqu'une propriété est marquée comme non-configurable, delete n'aura aucun effet et l'opération renverra false. En mode strict, cela déclenchera une exception TypeError.

- -
var Employe = {};
-Object.defineProperty(Employe, 'nom', {configurable: false});
-
-console.log(delete Employe.nom);  // renvoie false
-
- -

{{jsxref("Instructions/var","var")}} (ou let ou const) crée des propriétés non-configurables qui ne peuvent pas être supprimées via delete :

- -
var autreNom = 'XYZ';
-
-// On peut accéder à la description de cette
-// propriété globale grâce à :
-Object.getOwnPropertyDescriptor(window, 'autreNom')
-
-/* Object {value: "XYZ",
-                  writable: true,
-                  enumerable: true,
-                  configurable: false}
-*/
-
-// On voit que "autreNom", ajouté avec var
-// est marquée comme "non-configurable"
-
-delete autreNom;   // renvoie false
- -

En mode strict, cela aurait déclenché une exception.

- -

Mode strict ou non-strict ?

- -

Lorsqu'on est en mode strict, si delete est utilisé sur une référence directe à une variable, un argument de fonction ou un nom de fonction, il déclenchera une exception {{jsxref("SyntaxError")}}.

- -

Toute variable définie avec var est marquée comme non-configurable. Dans l'exemple qui suit, salaire est non-configurable et ne peut pas être supprimé. En mode non-strict, l'opération delete renverra false.

- -
function Employe() {
-  delete salaire;
-  var salaire;
-}
-
-Employe();
-
- -

Voyons comment ce code se comporte en mode strict : au lieu de renvoyer false, l'instruction lève une exception SyntaxError.

- -
"use strict";
-
-function Employe() {
-  delete salaire;  // SyntaxError
-  var salaire;
-}
-
-// De même, tout accès direct à une fonction
-// avec delete lèvera une SyntaxError
-
-function DemoFunction() {
-  //du code
-}
-
-delete DemoFunction; // SyntaxError
-
- -

Exemples

- -
// on crée la propriété adminName sur la portée globale
-adminName = 'xyz';
-
-// on crée la propriété empCount sur la portée globale
-// On utilise var, elle est donc non-configurable
-var empCount = 43;
-
-EmployeeDetails = {
-  name: 'xyz',
-  age: 5,
-  designation: 'Developer'
-};
-
-// adminName est une propriété de la portée globale
-// qui peut être supprimée car configurable.
-delete adminName;       // renvoie true
-
-// En revanche empCount n'est pas configurable
-// car c'est var qui a été utilisée.
-delete empCount;        // renvoie false
-
-// delete peut être utilisé pour retirer des propriétés
-// d'objets
-delete EmployeeDetails.name; // renvoie true
-
-// Même lorsque la propriété n'existe pas,
-// l'opération renvoie "true"
-delete EmployeeDetails.salary; // renvoie true
-
-// delete n'a pas d'impact sur les propriétés
-// statiques natives
-delete Math.PI; // renvoie false
-
-// EmployeeDetails est une propriété de la portée globale
-// définie sans var, elle est donc configurable
-delete EmployeeDetails;   // renvoie true
-
-function f() {
-  var z = 44;
-
-  // delete n'a pas d'impact sur les noms
-  // des variables locales
-  delete z;     // returns false
-}
-
- -

delete et la chaîne de prototypes

- -

Dans l'exemple qui suit, on supprime une propriété directement rattachée à un objet (une propriété « propre ») alors qu'une propriété du même nom existe sur la chaîne de prototypes :

- -
function Toto(){
-  this.truc = 10;
-}
-
-Toto.prototype.truc = 42;
-
-var toto = new Toto();
-
-// L'instruction suivante renvoie true,
-// après avoir effectivement supprimé
-// la propriété de l'objet toto
-delete toto.truc;
-
-// toto.truc est toujours disponible car
-// elle est disponible sur la chaîne de
-// prototypes
-console.log(toto.truc);
-
-// Ici on supprime la propriété du prototype
-delete Toto.prototype.truc;
-
-// On aura "undefined" dans la console
-// car l'objet n'hérite plus de cette propriété
-// qui a été supprimée
-console.log(toto.truc);
- -

Supprimer les éléments d'un tableau

- -

Lorsqu'on supprime un élément d'un tableau, la longueur du tableau n'est pas modifiée. Cela vaut également lorsqu'on supprime le dernier élément du tableau.

- -

Lorsqu'on utilise delete pour retirer un élément du tableau, cet élément n'est plus dans le tableau. Dans l'exemple suivant, on retire arbres[3] grâce à delete.

- -
var arbres = ["cèdre","pin","chêne","érable","sapin"];
-delete arbres[3];
-if (3 in arbres) {
-    // Le code ici ne sera pas exécuté
-}
- -

Si on veut conserver l'existence d'un élément du tableau avec une valeur indéfinie, on pourra affecter la valeur undefined à cet élément. Ainsi, contrairement à l'exemple précédent, en utilisant undefined, arbres[3] continue d'être présent :

- -
var arbres = ["cèdre","pin","chêne","érable","sapin"];
-arbres[3] = undefined;
-if (3 in arbres) {
-  // Le code ici sera bien exécuté
-}
- -

Si on souhaite plutôt retirer un élément du tableau en changeant le contenu du tableau, on pourra utiliser la méthode {{jsxref("Array.splice()")}}. Dans l'exemple qui suit, la valeur actuelle de arbres[3] est retirée du tableau grâce à splice() mais l'index suivant se décale et arbres[4] devient arbres[3] :

- -
var arbres = ["cèdre","pin","chêne","érable","sapin"];
-if (3 in arbres) {
- // Le code ici sera exécuté
-}
-arbres.splice(3, 1);
-console.log(arbres); // ["cèdre","pin","chêne","sapin"];
-if (3 in arbres) {
- // Le code ici sera également exécuté
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-delete-operator', 'The delete Operator')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-delete-operator', 'The delete Operator')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.4.1', 'The delete Operator')}}{{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.4.1', 'The delete Operator')}}{{Spec2('ES1')}}Définition initiale. Implémenté avec JavaScript 1.2.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.delete")}}

- -

Notes de compatibilité

- -

Bien que l'ordre d'itération des objets soit laissé à l'implémentation selon le standard ECMAScript, il semblerait que la plupart des navigateurs utilise un ordre d'itération basé sur l'ordre d'ajout des propriétés (au moins pour les propriétés propres). Toutefois, pour Internet Explorer, lorsqu'on utilise delete sur une propriété puis qu'on redéfinit plus tard une propriété avec le même nom, l'ordre d'itération de cette propriété sera le même que précédemment (alors que dans les autres navigateurs, cette « nouvelle » propriété sera parcourue en dernier).

- -

Aussi, si on veut simuler un tableau associatif ordonné de façon transparente et pour plusieurs navigateurs, il faudra utiliser deux tableaux ou, mieux encore, un objet {{jsxref("Map")}} si celui-ci est disponible.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/delete/index.md b/files/fr/web/javascript/reference/operators/delete/index.md new file mode 100644 index 0000000000..30d049ae30 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/delete/index.md @@ -0,0 +1,302 @@ +--- +title: L'opérateur delete +slug: Web/JavaScript/Reference/Operators/delete +tags: + - JavaScript + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/delete +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_delete +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur delete permet de retirer une propriété d'un objet.

+ +
{{EmbedInteractiveExample("pages/js/expressions-deleteoperator.html")}}
+ +

Syntaxe

+ +
delete expression
+ +

expression est évaluée comme une référence à une propriété :

+ +
delete objet.propriete
+delete objet['propriete']
+
+ +

Paramètres

+ +
+
objet
+
Le nom d'un objet ou une expression dont l'évaluation fournit un objet.
+
propriete
+
La propriété qu'on souhaite supprimer.
+
+ +

Valeur de retour

+ +

true pour tous les cas sauf lorsque la propriété est une propriété propre non-configurable auquel cas false est renvoyé en mode non-strict.

+ +

Exceptions

+ +

Cet opérateur lève une exception {{jsxref("TypeError")}} en mode strict si la propriété est une propriété propre qui est non-configurable.

+ +

Description

+ +

Contrairement à ce qu'on pourrait penser, l'opérateur delete n'a rien à voir avec une libération de mémoire directe. La gestion de la mémoire en JavaScript est réalisée de façon indirecte en tenant compte des références, voir cette page pour plus de détails.

+ +

L'opérateur delete permet de retirer une propriété donnée d'un objet. Lorsque la suppression se déroule sans problème, l'opération renvoie true, sinon c'est la valeur false qui est renvoyée. Voici quelques scénarios importants qui précisent ce comportement :

+ + + +

Voici un fragment de code qui illustre certains cas :

+ +
var Employe = {
+  age: 28,
+  nom: 'abc',
+  designation: 'developpeur'
+}
+
+console.log(delete Employe.nom);  // renvoie true
+console.log(delete Employe.age);  // renvoie true
+
+// Lorsqu'on souhaite supprimer une propriété
+// inexistante, on obtient true
+console.log(delete Employe.salaire); // renvoie true
+
+ +

Les propriétés non-configurables

+ +

Lorsqu'une propriété est marquée comme non-configurable, delete n'aura aucun effet et l'opération renverra false. En mode strict, cela déclenchera une exception TypeError.

+ +
var Employe = {};
+Object.defineProperty(Employe, 'nom', {configurable: false});
+
+console.log(delete Employe.nom);  // renvoie false
+
+ +

{{jsxref("Instructions/var","var")}} (ou let ou const) crée des propriétés non-configurables qui ne peuvent pas être supprimées via delete :

+ +
var autreNom = 'XYZ';
+
+// On peut accéder à la description de cette
+// propriété globale grâce à :
+Object.getOwnPropertyDescriptor(window, 'autreNom')
+
+/* Object {value: "XYZ",
+                  writable: true,
+                  enumerable: true,
+                  configurable: false}
+*/
+
+// On voit que "autreNom", ajouté avec var
+// est marquée comme "non-configurable"
+
+delete autreNom;   // renvoie false
+ +

En mode strict, cela aurait déclenché une exception.

+ +

Mode strict ou non-strict ?

+ +

Lorsqu'on est en mode strict, si delete est utilisé sur une référence directe à une variable, un argument de fonction ou un nom de fonction, il déclenchera une exception {{jsxref("SyntaxError")}}.

+ +

Toute variable définie avec var est marquée comme non-configurable. Dans l'exemple qui suit, salaire est non-configurable et ne peut pas être supprimé. En mode non-strict, l'opération delete renverra false.

+ +
function Employe() {
+  delete salaire;
+  var salaire;
+}
+
+Employe();
+
+ +

Voyons comment ce code se comporte en mode strict : au lieu de renvoyer false, l'instruction lève une exception SyntaxError.

+ +
"use strict";
+
+function Employe() {
+  delete salaire;  // SyntaxError
+  var salaire;
+}
+
+// De même, tout accès direct à une fonction
+// avec delete lèvera une SyntaxError
+
+function DemoFunction() {
+  //du code
+}
+
+delete DemoFunction; // SyntaxError
+
+ +

Exemples

+ +
// on crée la propriété adminName sur la portée globale
+adminName = 'xyz';
+
+// on crée la propriété empCount sur la portée globale
+// On utilise var, elle est donc non-configurable
+var empCount = 43;
+
+EmployeeDetails = {
+  name: 'xyz',
+  age: 5,
+  designation: 'Developer'
+};
+
+// adminName est une propriété de la portée globale
+// qui peut être supprimée car configurable.
+delete adminName;       // renvoie true
+
+// En revanche empCount n'est pas configurable
+// car c'est var qui a été utilisée.
+delete empCount;        // renvoie false
+
+// delete peut être utilisé pour retirer des propriétés
+// d'objets
+delete EmployeeDetails.name; // renvoie true
+
+// Même lorsque la propriété n'existe pas,
+// l'opération renvoie "true"
+delete EmployeeDetails.salary; // renvoie true
+
+// delete n'a pas d'impact sur les propriétés
+// statiques natives
+delete Math.PI; // renvoie false
+
+// EmployeeDetails est une propriété de la portée globale
+// définie sans var, elle est donc configurable
+delete EmployeeDetails;   // renvoie true
+
+function f() {
+  var z = 44;
+
+  // delete n'a pas d'impact sur les noms
+  // des variables locales
+  delete z;     // returns false
+}
+
+ +

delete et la chaîne de prototypes

+ +

Dans l'exemple qui suit, on supprime une propriété directement rattachée à un objet (une propriété « propre ») alors qu'une propriété du même nom existe sur la chaîne de prototypes :

+ +
function Toto(){
+  this.truc = 10;
+}
+
+Toto.prototype.truc = 42;
+
+var toto = new Toto();
+
+// L'instruction suivante renvoie true,
+// après avoir effectivement supprimé
+// la propriété de l'objet toto
+delete toto.truc;
+
+// toto.truc est toujours disponible car
+// elle est disponible sur la chaîne de
+// prototypes
+console.log(toto.truc);
+
+// Ici on supprime la propriété du prototype
+delete Toto.prototype.truc;
+
+// On aura "undefined" dans la console
+// car l'objet n'hérite plus de cette propriété
+// qui a été supprimée
+console.log(toto.truc);
+ +

Supprimer les éléments d'un tableau

+ +

Lorsqu'on supprime un élément d'un tableau, la longueur du tableau n'est pas modifiée. Cela vaut également lorsqu'on supprime le dernier élément du tableau.

+ +

Lorsqu'on utilise delete pour retirer un élément du tableau, cet élément n'est plus dans le tableau. Dans l'exemple suivant, on retire arbres[3] grâce à delete.

+ +
var arbres = ["cèdre","pin","chêne","érable","sapin"];
+delete arbres[3];
+if (3 in arbres) {
+    // Le code ici ne sera pas exécuté
+}
+ +

Si on veut conserver l'existence d'un élément du tableau avec une valeur indéfinie, on pourra affecter la valeur undefined à cet élément. Ainsi, contrairement à l'exemple précédent, en utilisant undefined, arbres[3] continue d'être présent :

+ +
var arbres = ["cèdre","pin","chêne","érable","sapin"];
+arbres[3] = undefined;
+if (3 in arbres) {
+  // Le code ici sera bien exécuté
+}
+ +

Si on souhaite plutôt retirer un élément du tableau en changeant le contenu du tableau, on pourra utiliser la méthode {{jsxref("Array.splice()")}}. Dans l'exemple qui suit, la valeur actuelle de arbres[3] est retirée du tableau grâce à splice() mais l'index suivant se décale et arbres[4] devient arbres[3] :

+ +
var arbres = ["cèdre","pin","chêne","érable","sapin"];
+if (3 in arbres) {
+ // Le code ici sera exécuté
+}
+arbres.splice(3, 1);
+console.log(arbres); // ["cèdre","pin","chêne","sapin"];
+if (3 in arbres) {
+ // Le code ici sera également exécuté
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-delete-operator', 'The delete Operator')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-delete-operator', 'The delete Operator')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.4.1', 'The delete Operator')}}{{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.4.1', 'The delete Operator')}}{{Spec2('ES1')}}Définition initiale. Implémenté avec JavaScript 1.2.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.delete")}}

+ +

Notes de compatibilité

+ +

Bien que l'ordre d'itération des objets soit laissé à l'implémentation selon le standard ECMAScript, il semblerait que la plupart des navigateurs utilise un ordre d'itération basé sur l'ordre d'ajout des propriétés (au moins pour les propriétés propres). Toutefois, pour Internet Explorer, lorsqu'on utilise delete sur une propriété puis qu'on redéfinit plus tard une propriété avec le même nom, l'ordre d'itération de cette propriété sera le même que précédemment (alors que dans les autres navigateurs, cette « nouvelle » propriété sera parcourue en dernier).

+ +

Aussi, si on veut simuler un tableau associatif ordonné de façon transparente et pour plusieurs navigateurs, il faudra utiliser deux tableaux ou, mieux encore, un objet {{jsxref("Map")}} si celui-ci est disponible.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/destructuring_assignment/index.html b/files/fr/web/javascript/reference/operators/destructuring_assignment/index.html deleted file mode 100644 index f5a14835af..0000000000 --- a/files/fr/web/javascript/reference/operators/destructuring_assignment/index.html +++ /dev/null @@ -1,426 +0,0 @@ ---- -title: Affecter par décomposition -slug: Web/JavaScript/Reference/Operators/Destructuring_assignment -tags: - - Destructuration - - Affectation de déstructuration - - ECMAScript 2015 - - ES6 - - JavaScript - - Caractéristiques de la langue - - Déstructuration des objets imbriqués et des tableaux - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/Destructuring_assignment -original_slug: Web/JavaScript/Reference/Opérateurs/Affecter_par_décomposition ---- -
{{jsSidebar("Operators")}}
- -

L'affectation par décomposition (destructuring en anglais) est une expression JavaScript qui permet d'extraire (unpack en anglais) des données d'un tableau ou d'un objet grâce à une syntaxe dont la forme ressemble à la structure du tableau ou de l'objet.

- -
{{EmbedInteractiveExample("pages/js/expressions-destructuringassignment.html")}}
- -

Syntaxe

- -
let a, b, rest;
-[a, b] = [10, 20];
-console.log(a); // 10
-console.log(b); // 20
-
-[a, b, ...rest] = [10, 20, 30, 40, 50];
-console.log(a); // 10
-console.log(b); // 20
-console.log(rest); // [30, 40, 50]
-
-({a, b} = {a: 10, b: 20});
-console.log(a); // 10
-console.log(b); // 20
-
-// Proposition de syntaxe (niveau 4)
-({a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40});
-console.log(a); // 10
-console.log(b); // 20
-console.log(rest); // {c: 30, d: 40}
-
- -
-

Note : {a, b} = {a:1, b:2} n'est pas syntaxiquement valide en tant que tel, en effet {a, b} est ici considéré comme un bloc et non comme un objet littéral.

- -

Cependant, ({a, b} = {a:1, b:2}) sera valide comme pour la forme let {a, b} = {a:1, b:2}.

-
- -

Description

- -

Ces expressions utilisant des littéraux pour les objets ou les tableaux permettent de créer simplement des données regroupées. Une fois créées, on peut les utiliser de n'importe quelle façon, y compris comme valeur renvoyée par une fonction.

- -
const x = [1, 2, 3, 4, 5]; // On crée un "paquet" de données
-const [y, z] = x; // On utilise l'affectation par décomposition
-console.log(y); // 1
-console.log(z); // 2
-
- -

L'intérêt de l'assignation par décomposition est de pouvoir lire une structure entière en une seule instruction. Il y a également d'autres choses que vous pouvez faire avec cette expression, comme montré dans les exemples ci-dessous.

- -

Cette syntaxe est semblable aux fonctionnalités offertes par des langages tels que Perl et Python.

- -

Décomposition d'un tableau

- -

Exemple simple

- -
const toto = ["un", "deux", "trois"];
-
-// sans utiliser la décomposition
-const un    = toto[0];
-const deux  = toto[1];
-const trois = toto[2];
-
-// en utilisant la décomposition
-const [un, deux, trois] = toto;
- -

Affectation sans déclaration

- -

L'affectation par décomposition peut être effectuée sans qu'il y ait de déclaration directement dans l'instruction d'affectation. Par exemple :

- -
let a, b;
-[a, b] = [1, 2];
-console.log(a);  // 1
-console.log(b);  // 2
- -

Valeurs par défaut

- -

On peut définir une valeur par défaut au cas où la valeur extraite du tableau soit {{jsxref("undefined")}}. Par exemple :

- -
let a, b;
-
-[a = 5, b = 7] = [1];
-console.log(a); // 1
-console.log(b); // 7
-
- -

Échange de variables

- -

Une fois le fragment de code exécuté, on aura b égal à 1 et a égal à 3. S'il n'avait pas été possible d'utiliser l'affectation par décomposition, l'échange des valeurs aurait nécessité une variable temporaire (pour des données binaires, on aurait pu utiliser une permutation XOR).

- -
let a = 1;
-let b = 3;
-
-[a, b] = [b, a];
-console.log(a); // 3
-console.log(b); // 1
- -

Renvoyer plusieurs valeurs

- -

Grâce à l'affectation par décomposition, les fonctions peuvent renvoyer plusieurs valeurs. Il était déjà possible de renvoyer un tableau mais cela ajoute un nouveau degré de flexibilité.

- -
function f() {
-  return [1, 2];
-}
-
- -

Les valeurs de retour sont déclarées via une syntaxe semblable à celle utilisée pour déclarer les tableaux, utilisant les crochets. On peut ainsi renvoyer autant de valeurs que souhaité. Dans cet exemple, f() renvoie les valeurs [1, 2].

- -
let a, b;
-[a, b] = f();
-console.log("A vaut " + a + " B vaut " + b);
-
- -

L'instruction [a, b] = f() assigne, dans l'ordre, les résultats de la fonction aux variables représentées entre les crochets. Ainsi, ici a vaut 1 et b vaut 2.

- -

On peut également récupérer la valeur de retour comme un tableau :

- -
const x = f();
-console.log("X vaut " + x);
-
- -

Et on aura x qui sera égal au tableau contenant 1 et 2.

- -

Ignorer certaines valeurs

- -

On peut également ignorer certaines des valeurs renvoyées qu'on ne souhaiterait pas traiter :

- -
function f() {
-  return [1, 2, 3];
-}
-
-const [a, , b] = f();
-console.log("A vaut " + a + " B vaut " + b);
-
- -

Après avoir exécuté ce code, on aura a égal à 1 et b égal à 3. La valeur 2 est ignorée. On peut ignorer n'importe laquelle des valeurs (voire toutes). Par exemple :

- -
[,,] = f();
-
- -

Exploiter les résultats d'une expression rationnelle

- -

Lorsque la méthode exec(), liées aux expressions rationnelles, trouve une correspondance, elle renvoie un tableau qui contient d'abord la partie complète de la chaîne qui correspond puis ensuite les différentes portions correspondant aux différents groupes. L'affectation par décomposition permet de filtrer simplement les valeurs qu'on souhaite exploiter. Ici, on ignore le premier élément qui est la correspondance complète :

- -
function parseProtocol(url) {
-  const parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
-  if (!parsedURL) {
-    return false;
-  }
-  console.log(parsedURL); // ["https://developer.mozilla.org/fr/Web/JavaScript", "https", "developer.mozilla.org", "fr/Web/JavaScript"]
-
-  const [, protocol, fullhost, fullpath] = parsedURL;
-  return protocol;
-}
-
-console.log(parseProtocol('https://developer.mozilla.org/en-US/Web/JavaScript')); // "https"
-
- -

Affecter le reste d'un tableau à une variable

- -

On peut également utiliser la décomposition d'un tableau afin d'en affecter une partie à une variable :

- -
const [a, ...b] = [1, 2, 3];
-console.log(a); // 1
-console.log(b); // [2, 3]
- -

Un exception {{jsxref("SyntaxError")}} sera levée si une virgule est laissée à la fin de l'élément du reste du tableau de gauche :

- -
const [a, ...b,] = [1, 2, 3]
-// SyntaxError : un élément du reste ne peut pas avoir
-//               de virgule à la fin
- -

Décomposer un objet

- -

Exemple simple

- -
const o = {p: 42, q: true};
-const {p, q} = o;
-
-console.log(p); // 42
-console.log(q); // true
-
-// Assign new variable names
-const {p: toto, q: truc} = o;
-
-console.log(toto); // 42
-console.log(truc); // true
-
- -

Affectation sans déclaration

- -

Il est possible d'effectuer une affectation par décomposition même si aucune déclaration n'est directement utilisée dans l'instruction d'affectation. Par exemple :

- -
let a, b;
-({a, b} = {a:1, b:2});
-
- -
-

Note : Les parenthèses ( ... ) utilisées autour de l'instruction sont nécessaires pour que la partie gauche soit bien interprétée comme un objet littéral et non comme un bloc. Il est également nécessaire d'avoir un point-virgule avant les parenthèses de l'instruction car sinon, ces parenthèses peuvent être interprétées comme un appel de fonction.

-
- -

Affecter avec un nom différent

- -

Lorsqu'on décompose un objet, on peut affecter la variable obtenue sur une variable qui possède un autre nom (que celui de la propriété) :

- -
const o = {p: 42, q: true};
-const {p: toto, q: truc} = o;
-
-console.log(toto); // 42
-console.log(truc); // true
- -

Ici, par exemple, const {p: toto} = o prend la propriété p de l'objet o pour l'affecter à une variable locale intitulée toto.

- -

Valeurs par défaut

- -

Une variable peut recevoir une valeur par défaut lors de la décomposition si la propriété correspondante de l'objet vaut undefined.

- -
const {a = 10, b = 5} = {a: 3};
-
-console.log(a); // 3
-console.log(b); // 5
- -

Affecter de nouveaux noms aux variables et fournir des valeurs par défaut

- -

Il est possible d'extraitre une valeur d'un objet pour lui affecter un nouveau nom et lui affecter une valeur par défaut au cas où la valeur extraite vaut undefined.

- -
const {a: aa = 10, b: bb = 5} = {a: 3};
-
-console.log(aa); // 3
-console.log(bb); // 5
- -

Arguments par défaut d'une fonction

- -

Version ES5

- -
function dessinGrapheES5(options) {
-  options = options === undefined ? {} : options;
-  var size = options.size === undefined ? 'big' : options.size;
-  var coords = options.coords === undefined ? { x: 0, y: 0 } : options.coords;
-  var radius = options.radius === undefined ? 25 : options.radius;
-  console.log(size, coords, radius);
-  // seulement ensuite on dessine le graphe
-}
-
-dessinGrapheES5({
-  coords: { x: 18, y: 30 },
-  radius: 30
-});
- -

Version ES2015

- -
function dessinGrapheES2015({size = 'big', coords = { x: 0, y: 0 }, radius = 25} = {})
-{
-  console.log(size, coords, radius);
-  // on dessine le graphe
-}
-
-dessinGrapheES2015({
-  coords: { x: 18, y: 30 },
-  radius: 30
-});
- -
-

Note : Dans la signature de la fonction dessinGrapheES2015 ci avant, la valeur décomposée à gauche utilise un objet vide comme opérande droit ({size = 'big', coords = { x: 0, y: 0 }, radius = 25} = {}). On aurait également pu écrire la fonction sans cet objet vide mais, dans ce cas, il aurait fallu au moins un argument pour utiliser la fonction. Avec cette « forme », dessinGrapheES2015() pourra être appelée sans paramètre.

-
- -

Décomposition imbriquée avec objets et tableaux

- -
const 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"
-};
-
-let { title: englishTitle, translations: [{ title: localeTitle }] } = metadata;
-
-console.log(englishTitle); // "Scratchpad"
-console.log(localeTitle);  // "JavaScript-Umgebung"
- -

Décomposition et utilisation de for of

- -
const personnes = [
-  {
-    nom: "Alain Dupont",
-    famille: {
-      mere: "Isabelle Dupont",
-      pere: "Jean Dupont",
-      soeur: "Laure Dupont"
-    },
-    age: 35
-  },
-  {
-    nom: "Luc Marchetoile",
-    famille: {
-      mere: "Patricia Marchetoile",
-      pere: "Antonin Marchetoile",
-      frere: "Yann Marchetoile"
-    },
-    age: 25
-  }
-];
-
-for (const {nom: n, famille: { pere: f } } of personnes) {
-  console.log("Nom : " + n + ", Père : " + f);
-}
-
-// "Nom : Alain Dupont, Père : Jean Dupont"
-// "Nom : Luc Marchetoile, Père : Antonin Marchetoile"
- -

Décomposer les propriétés d'objets passés en arguments

- -
const user = {
-  id: 42,
-  displayName: "jbiche",
-  fullName: {
-    firstName: "Jean",
-    lastName: "Biche"
-  }
-};
-
-function userId({id}) {
-  return id;
-}
-
-function whois({displayName: displayName, fullName: {firstName: name}}){
-  console.log(displayName + " est " + name);
-}
-
-console.log("userId: " + userId(user)); w// "userId: 42"
-whois(user); // "jbiche est Jean"
- -

Cela permet d'accéder directement à id, displayName et firstName depuis l'objet user.

- -

Les noms de propriétés calculés et la décomposition

- -

Il est possible d'utiliser des noms de propriétés calculés, comme avec les littéraux objets, avec la décomposition.

- -
let clef = "z";
-let { [clef]: toto } = { z: "truc" };
-
-console.log(toto); // "truc"
- -

Syntaxe du « reste » et décomposition d'un objet

- -

La proposition de décomposition des propriétés et de la syntaxe du reste dans ECMAScript ajoute la syntaxe du reste pour la décomposition. La propriété du reste permet de collecter les propriétés énumérables restantes qui n'auraient pas été extraites par la décomposition :

- -
let {a, b, ...reste } = {a: 10, b: 20, c: 30, d: 40};
-a; // 10
-b; // 20
-reste; // { c: 30, d: 40 }
- -

Gestion des identifiants invalides comme noms de propriétés

- -

Si besoin, on peut également utiliser la décomposition pour fournir un alias à des noms de propriétés qui ne seraient pas des identifiants valides. Par exemple :

- -
const toto = {'truc-bidule': true}
-const {'truc-bidule': trucBidule } = toto;
-
-console.log(trucBidule);  // "true"
- -

Combiner la décomposition de tableaux et d'objets

- -

Il est possible de décomposer un tableau et un objet simultanément. Dans l'exemple qui suit, on accède ainsi à la propriété nom du troisième élément du tableau props:

- -
const props = [
-  { id: 1, nom: "Toto"},
-  { id: 2, nom: "Truc"},
-  { id: 3, nom: "Bidule"}
-];
-
-const [,, {nom}] = props;
-console.log(nom); // Bidule
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-destructuring-assignment', 'Destructuring assignment')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-destructuring-assignment', 'Destructuring assignment')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.destructuring")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/destructuring_assignment/index.md b/files/fr/web/javascript/reference/operators/destructuring_assignment/index.md new file mode 100644 index 0000000000..f5a14835af --- /dev/null +++ b/files/fr/web/javascript/reference/operators/destructuring_assignment/index.md @@ -0,0 +1,426 @@ +--- +title: Affecter par décomposition +slug: Web/JavaScript/Reference/Operators/Destructuring_assignment +tags: + - Destructuration + - Affectation de déstructuration + - ECMAScript 2015 + - ES6 + - JavaScript + - Caractéristiques de la langue + - Déstructuration des objets imbriqués et des tableaux + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/Destructuring_assignment +original_slug: Web/JavaScript/Reference/Opérateurs/Affecter_par_décomposition +--- +
{{jsSidebar("Operators")}}
+ +

L'affectation par décomposition (destructuring en anglais) est une expression JavaScript qui permet d'extraire (unpack en anglais) des données d'un tableau ou d'un objet grâce à une syntaxe dont la forme ressemble à la structure du tableau ou de l'objet.

+ +
{{EmbedInteractiveExample("pages/js/expressions-destructuringassignment.html")}}
+ +

Syntaxe

+ +
let a, b, rest;
+[a, b] = [10, 20];
+console.log(a); // 10
+console.log(b); // 20
+
+[a, b, ...rest] = [10, 20, 30, 40, 50];
+console.log(a); // 10
+console.log(b); // 20
+console.log(rest); // [30, 40, 50]
+
+({a, b} = {a: 10, b: 20});
+console.log(a); // 10
+console.log(b); // 20
+
+// Proposition de syntaxe (niveau 4)
+({a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40});
+console.log(a); // 10
+console.log(b); // 20
+console.log(rest); // {c: 30, d: 40}
+
+ +
+

Note : {a, b} = {a:1, b:2} n'est pas syntaxiquement valide en tant que tel, en effet {a, b} est ici considéré comme un bloc et non comme un objet littéral.

+ +

Cependant, ({a, b} = {a:1, b:2}) sera valide comme pour la forme let {a, b} = {a:1, b:2}.

+
+ +

Description

+ +

Ces expressions utilisant des littéraux pour les objets ou les tableaux permettent de créer simplement des données regroupées. Une fois créées, on peut les utiliser de n'importe quelle façon, y compris comme valeur renvoyée par une fonction.

+ +
const x = [1, 2, 3, 4, 5]; // On crée un "paquet" de données
+const [y, z] = x; // On utilise l'affectation par décomposition
+console.log(y); // 1
+console.log(z); // 2
+
+ +

L'intérêt de l'assignation par décomposition est de pouvoir lire une structure entière en une seule instruction. Il y a également d'autres choses que vous pouvez faire avec cette expression, comme montré dans les exemples ci-dessous.

+ +

Cette syntaxe est semblable aux fonctionnalités offertes par des langages tels que Perl et Python.

+ +

Décomposition d'un tableau

+ +

Exemple simple

+ +
const toto = ["un", "deux", "trois"];
+
+// sans utiliser la décomposition
+const un    = toto[0];
+const deux  = toto[1];
+const trois = toto[2];
+
+// en utilisant la décomposition
+const [un, deux, trois] = toto;
+ +

Affectation sans déclaration

+ +

L'affectation par décomposition peut être effectuée sans qu'il y ait de déclaration directement dans l'instruction d'affectation. Par exemple :

+ +
let a, b;
+[a, b] = [1, 2];
+console.log(a);  // 1
+console.log(b);  // 2
+ +

Valeurs par défaut

+ +

On peut définir une valeur par défaut au cas où la valeur extraite du tableau soit {{jsxref("undefined")}}. Par exemple :

+ +
let a, b;
+
+[a = 5, b = 7] = [1];
+console.log(a); // 1
+console.log(b); // 7
+
+ +

Échange de variables

+ +

Une fois le fragment de code exécuté, on aura b égal à 1 et a égal à 3. S'il n'avait pas été possible d'utiliser l'affectation par décomposition, l'échange des valeurs aurait nécessité une variable temporaire (pour des données binaires, on aurait pu utiliser une permutation XOR).

+ +
let a = 1;
+let b = 3;
+
+[a, b] = [b, a];
+console.log(a); // 3
+console.log(b); // 1
+ +

Renvoyer plusieurs valeurs

+ +

Grâce à l'affectation par décomposition, les fonctions peuvent renvoyer plusieurs valeurs. Il était déjà possible de renvoyer un tableau mais cela ajoute un nouveau degré de flexibilité.

+ +
function f() {
+  return [1, 2];
+}
+
+ +

Les valeurs de retour sont déclarées via une syntaxe semblable à celle utilisée pour déclarer les tableaux, utilisant les crochets. On peut ainsi renvoyer autant de valeurs que souhaité. Dans cet exemple, f() renvoie les valeurs [1, 2].

+ +
let a, b;
+[a, b] = f();
+console.log("A vaut " + a + " B vaut " + b);
+
+ +

L'instruction [a, b] = f() assigne, dans l'ordre, les résultats de la fonction aux variables représentées entre les crochets. Ainsi, ici a vaut 1 et b vaut 2.

+ +

On peut également récupérer la valeur de retour comme un tableau :

+ +
const x = f();
+console.log("X vaut " + x);
+
+ +

Et on aura x qui sera égal au tableau contenant 1 et 2.

+ +

Ignorer certaines valeurs

+ +

On peut également ignorer certaines des valeurs renvoyées qu'on ne souhaiterait pas traiter :

+ +
function f() {
+  return [1, 2, 3];
+}
+
+const [a, , b] = f();
+console.log("A vaut " + a + " B vaut " + b);
+
+ +

Après avoir exécuté ce code, on aura a égal à 1 et b égal à 3. La valeur 2 est ignorée. On peut ignorer n'importe laquelle des valeurs (voire toutes). Par exemple :

+ +
[,,] = f();
+
+ +

Exploiter les résultats d'une expression rationnelle

+ +

Lorsque la méthode exec(), liées aux expressions rationnelles, trouve une correspondance, elle renvoie un tableau qui contient d'abord la partie complète de la chaîne qui correspond puis ensuite les différentes portions correspondant aux différents groupes. L'affectation par décomposition permet de filtrer simplement les valeurs qu'on souhaite exploiter. Ici, on ignore le premier élément qui est la correspondance complète :

+ +
function parseProtocol(url) {
+  const parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
+  if (!parsedURL) {
+    return false;
+  }
+  console.log(parsedURL); // ["https://developer.mozilla.org/fr/Web/JavaScript", "https", "developer.mozilla.org", "fr/Web/JavaScript"]
+
+  const [, protocol, fullhost, fullpath] = parsedURL;
+  return protocol;
+}
+
+console.log(parseProtocol('https://developer.mozilla.org/en-US/Web/JavaScript')); // "https"
+
+ +

Affecter le reste d'un tableau à une variable

+ +

On peut également utiliser la décomposition d'un tableau afin d'en affecter une partie à une variable :

+ +
const [a, ...b] = [1, 2, 3];
+console.log(a); // 1
+console.log(b); // [2, 3]
+ +

Un exception {{jsxref("SyntaxError")}} sera levée si une virgule est laissée à la fin de l'élément du reste du tableau de gauche :

+ +
const [a, ...b,] = [1, 2, 3]
+// SyntaxError : un élément du reste ne peut pas avoir
+//               de virgule à la fin
+ +

Décomposer un objet

+ +

Exemple simple

+ +
const o = {p: 42, q: true};
+const {p, q} = o;
+
+console.log(p); // 42
+console.log(q); // true
+
+// Assign new variable names
+const {p: toto, q: truc} = o;
+
+console.log(toto); // 42
+console.log(truc); // true
+
+ +

Affectation sans déclaration

+ +

Il est possible d'effectuer une affectation par décomposition même si aucune déclaration n'est directement utilisée dans l'instruction d'affectation. Par exemple :

+ +
let a, b;
+({a, b} = {a:1, b:2});
+
+ +
+

Note : Les parenthèses ( ... ) utilisées autour de l'instruction sont nécessaires pour que la partie gauche soit bien interprétée comme un objet littéral et non comme un bloc. Il est également nécessaire d'avoir un point-virgule avant les parenthèses de l'instruction car sinon, ces parenthèses peuvent être interprétées comme un appel de fonction.

+
+ +

Affecter avec un nom différent

+ +

Lorsqu'on décompose un objet, on peut affecter la variable obtenue sur une variable qui possède un autre nom (que celui de la propriété) :

+ +
const o = {p: 42, q: true};
+const {p: toto, q: truc} = o;
+
+console.log(toto); // 42
+console.log(truc); // true
+ +

Ici, par exemple, const {p: toto} = o prend la propriété p de l'objet o pour l'affecter à une variable locale intitulée toto.

+ +

Valeurs par défaut

+ +

Une variable peut recevoir une valeur par défaut lors de la décomposition si la propriété correspondante de l'objet vaut undefined.

+ +
const {a = 10, b = 5} = {a: 3};
+
+console.log(a); // 3
+console.log(b); // 5
+ +

Affecter de nouveaux noms aux variables et fournir des valeurs par défaut

+ +

Il est possible d'extraitre une valeur d'un objet pour lui affecter un nouveau nom et lui affecter une valeur par défaut au cas où la valeur extraite vaut undefined.

+ +
const {a: aa = 10, b: bb = 5} = {a: 3};
+
+console.log(aa); // 3
+console.log(bb); // 5
+ +

Arguments par défaut d'une fonction

+ +

Version ES5

+ +
function dessinGrapheES5(options) {
+  options = options === undefined ? {} : options;
+  var size = options.size === undefined ? 'big' : options.size;
+  var coords = options.coords === undefined ? { x: 0, y: 0 } : options.coords;
+  var radius = options.radius === undefined ? 25 : options.radius;
+  console.log(size, coords, radius);
+  // seulement ensuite on dessine le graphe
+}
+
+dessinGrapheES5({
+  coords: { x: 18, y: 30 },
+  radius: 30
+});
+ +

Version ES2015

+ +
function dessinGrapheES2015({size = 'big', coords = { x: 0, y: 0 }, radius = 25} = {})
+{
+  console.log(size, coords, radius);
+  // on dessine le graphe
+}
+
+dessinGrapheES2015({
+  coords: { x: 18, y: 30 },
+  radius: 30
+});
+ +
+

Note : Dans la signature de la fonction dessinGrapheES2015 ci avant, la valeur décomposée à gauche utilise un objet vide comme opérande droit ({size = 'big', coords = { x: 0, y: 0 }, radius = 25} = {}). On aurait également pu écrire la fonction sans cet objet vide mais, dans ce cas, il aurait fallu au moins un argument pour utiliser la fonction. Avec cette « forme », dessinGrapheES2015() pourra être appelée sans paramètre.

+
+ +

Décomposition imbriquée avec objets et tableaux

+ +
const 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"
+};
+
+let { title: englishTitle, translations: [{ title: localeTitle }] } = metadata;
+
+console.log(englishTitle); // "Scratchpad"
+console.log(localeTitle);  // "JavaScript-Umgebung"
+ +

Décomposition et utilisation de for of

+ +
const personnes = [
+  {
+    nom: "Alain Dupont",
+    famille: {
+      mere: "Isabelle Dupont",
+      pere: "Jean Dupont",
+      soeur: "Laure Dupont"
+    },
+    age: 35
+  },
+  {
+    nom: "Luc Marchetoile",
+    famille: {
+      mere: "Patricia Marchetoile",
+      pere: "Antonin Marchetoile",
+      frere: "Yann Marchetoile"
+    },
+    age: 25
+  }
+];
+
+for (const {nom: n, famille: { pere: f } } of personnes) {
+  console.log("Nom : " + n + ", Père : " + f);
+}
+
+// "Nom : Alain Dupont, Père : Jean Dupont"
+// "Nom : Luc Marchetoile, Père : Antonin Marchetoile"
+ +

Décomposer les propriétés d'objets passés en arguments

+ +
const user = {
+  id: 42,
+  displayName: "jbiche",
+  fullName: {
+    firstName: "Jean",
+    lastName: "Biche"
+  }
+};
+
+function userId({id}) {
+  return id;
+}
+
+function whois({displayName: displayName, fullName: {firstName: name}}){
+  console.log(displayName + " est " + name);
+}
+
+console.log("userId: " + userId(user)); w// "userId: 42"
+whois(user); // "jbiche est Jean"
+ +

Cela permet d'accéder directement à id, displayName et firstName depuis l'objet user.

+ +

Les noms de propriétés calculés et la décomposition

+ +

Il est possible d'utiliser des noms de propriétés calculés, comme avec les littéraux objets, avec la décomposition.

+ +
let clef = "z";
+let { [clef]: toto } = { z: "truc" };
+
+console.log(toto); // "truc"
+ +

Syntaxe du « reste » et décomposition d'un objet

+ +

La proposition de décomposition des propriétés et de la syntaxe du reste dans ECMAScript ajoute la syntaxe du reste pour la décomposition. La propriété du reste permet de collecter les propriétés énumérables restantes qui n'auraient pas été extraites par la décomposition :

+ +
let {a, b, ...reste } = {a: 10, b: 20, c: 30, d: 40};
+a; // 10
+b; // 20
+reste; // { c: 30, d: 40 }
+ +

Gestion des identifiants invalides comme noms de propriétés

+ +

Si besoin, on peut également utiliser la décomposition pour fournir un alias à des noms de propriétés qui ne seraient pas des identifiants valides. Par exemple :

+ +
const toto = {'truc-bidule': true}
+const {'truc-bidule': trucBidule } = toto;
+
+console.log(trucBidule);  // "true"
+ +

Combiner la décomposition de tableaux et d'objets

+ +

Il est possible de décomposer un tableau et un objet simultanément. Dans l'exemple qui suit, on accède ainsi à la propriété nom du troisième élément du tableau props:

+ +
const props = [
+  { id: 1, nom: "Toto"},
+  { id: 2, nom: "Truc"},
+  { id: 3, nom: "Bidule"}
+];
+
+const [,, {nom}] = props;
+console.log(nom); // Bidule
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-destructuring-assignment', 'Destructuring assignment')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-destructuring-assignment', 'Destructuring assignment')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.destructuring")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/division/index.html b/files/fr/web/javascript/reference/operators/division/index.html deleted file mode 100644 index 25d572fce0..0000000000 --- a/files/fr/web/javascript/reference/operators/division/index.html +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Division (/) -slug: Web/JavaScript/Reference/Operators/Division -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.division -translation-of: Web/JavaScript/Reference/Operators/Division ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de division (/) fournit le quotient de l'opérande gauche (le numérateur) divisé par l'opérande droite (le dénominateur).

- -
{{EmbedInteractiveExample("pages/js/expressions-division.html")}}
- -

Syntaxe

- -
-Opérateur : x / y
-
- -

Exemples

- -

Divisions simples

- -
-1 / 2             // 0.5
-Math.floor(3 / 2) // 1
-1.0 / 2.0         // 0.5
-
- -

Division par zéro

- -
-2.0 / 0     // Infinity
-2.0 / 0.0   // Infinity, because 0.0 === 0
-2.0 / -0.0  // -Infinity
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/division/index.md b/files/fr/web/javascript/reference/operators/division/index.md new file mode 100644 index 0000000000..25d572fce0 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/division/index.md @@ -0,0 +1,63 @@ +--- +title: Division (/) +slug: Web/JavaScript/Reference/Operators/Division +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.division +translation-of: Web/JavaScript/Reference/Operators/Division +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de division (/) fournit le quotient de l'opérande gauche (le numérateur) divisé par l'opérande droite (le dénominateur).

+ +
{{EmbedInteractiveExample("pages/js/expressions-division.html")}}
+ +

Syntaxe

+ +
+Opérateur : x / y
+
+ +

Exemples

+ +

Divisions simples

+ +
+1 / 2             // 0.5
+Math.floor(3 / 2) // 1
+1.0 / 2.0         // 0.5
+
+ +

Division par zéro

+ +
+2.0 / 0     // Infinity
+2.0 / 0.0   // Infinity, because 0.0 === 0
+2.0 / -0.0  // -Infinity
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/division_assignment/index.html b/files/fr/web/javascript/reference/operators/division_assignment/index.html deleted file mode 100644 index cd72e5d239..0000000000 --- a/files/fr/web/javascript/reference/operators/division_assignment/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Affectation après division (/=) -slug: Web/JavaScript/Reference/Operators/Division_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.division_assignment -translation-of: Web/JavaScript/Reference/Operators/Division_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de division et d'affectation (/=) divise la variable fournie par l'opérande gauche par la valeur indiquée par l'opérande droit puis affecte le résultat à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-division-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x /= y
-Signification:  x  = x / y
-
- -

Exemples

- -

Utiliser l'opérateur de division et d'affectation

- -
-let truc = 5;
-truc /= 2;      // 2.5
-truc /= 2;      // 1.25
-truc /= 0;      // Infinity
-truc /= 'toto'; // NaN
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/division_assignment/index.md b/files/fr/web/javascript/reference/operators/division_assignment/index.md new file mode 100644 index 0000000000..cd72e5d239 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/division_assignment/index.md @@ -0,0 +1,51 @@ +--- +title: Affectation après division (/=) +slug: Web/JavaScript/Reference/Operators/Division_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.division_assignment +translation-of: Web/JavaScript/Reference/Operators/Division_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de division et d'affectation (/=) divise la variable fournie par l'opérande gauche par la valeur indiquée par l'opérande droit puis affecte le résultat à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-division-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x /= y
+Signification:  x  = x / y
+
+ +

Exemples

+ +

Utiliser l'opérateur de division et d'affectation

+ +
+let truc = 5;
+truc /= 2;      // 2.5
+truc /= 2;      // 1.25
+truc /= 0;      // Infinity
+truc /= 'toto'; // NaN
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/equality/index.html b/files/fr/web/javascript/reference/operators/equality/index.html deleted file mode 100644 index 0668aa74d4..0000000000 --- a/files/fr/web/javascript/reference/operators/equality/index.html +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: Égalité (==) -slug: Web/JavaScript/Reference/Operators/Equality -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.equality -translation-of: Web/JavaScript/Reference/Operators/Equality ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'égalité (==) vérifie si ses deux opérandes sont égaux et renvoie un booléen indiquant le résultat de la comparaison. À la différence de l'opérateur d'égalité stricte, l'opérateur d'égalité tente de convertir ses opérandes avant la comparaison si ceux-ci sont de types différents.

- -
{{EmbedInteractiveExample("pages/js/expressions-equality.html")}}
- -

Syntaxe

- -
-x == y
-
- -

Description

- -

Les opérateurs d'égalité (== et !=) utilisent l'algorithme de comparaison d'égalité abstraite pour comparer deux opérandes. On peut le résumer ainsi :

- - - -

La différence fondamentale entre cet opérateur et l'opérateur d'égalité stricte (===) est que ce dernier n'opère pas de conversion de type. L'opérateur d'égalité stricte considère toujours que deux valeurs de types différents sont différentes.

- -

Exemples

- -

Comparaison sans conversion de types

- -
-1 == 1;              // true
-"coucou" == "coucou";  // true
-
- -

Comparaison avec conversion de types

- -
-"1" ==  1;            // true
-1 == "1";             // true
-0 == false;           // true
-0 == null;            // false
-0 == undefined;       // false
-0 == !!null;          // true, voir la documentation pour !!
-0 == !!undefined;     // true, voir la documentation pour !!
-null == undefined;    // true
-
-const nombre1 = new Number(3);
-const nombre2 = new Number(3);
-nombre1 == 3;         // true
-nombre1 == nombre2;   // false
-
- -

Comparaison d'objets

- -
-const objet1 = {"clé": "valeur"}
-const objet2 = {"clé": "valeur"};
-
-objet1 == objet2 // false
-objet2 == objet2 // true
-
- -

Comparaison entre des chaînes de caractères et des objets String

- -

On notera que les chaînes de caractères construites avec new String() sont des objets. Si on compare une telle valeur avec une chaîne de caractères "primitives", l'objet String sera converti en une chaîne de caractères et les contenus de ces chaînes seront comparés. Toutefois, si les deux opérandes sont des objets String, ils seront comparés comme tels et devront référencer le même objet pour être considérés égaux :

- -
-const string1 = "coucou";
-const string2 = String("coucou");
-const string3 = new String("coucou");
-const string4 = new String("coucou");
-
-console.log(string1 == string2); // true
-console.log(string1 == string3); // true
-console.log(string2 == string3); // true
-console.log(string3 == string4); // false
-console.log(string4 == string4); // true
-
- -

Comparaison entre les dates et les chaînes de caractères

- -
-const d = new Date('December 17, 1995 03:24:00');
-const s = d.toString(); // par exemple : "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)"
-console.log(d == s);    //true
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/equality/index.md b/files/fr/web/javascript/reference/operators/equality/index.md new file mode 100644 index 0000000000..0668aa74d4 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/equality/index.md @@ -0,0 +1,125 @@ +--- +title: Égalité (==) +slug: Web/JavaScript/Reference/Operators/Equality +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.equality +translation-of: Web/JavaScript/Reference/Operators/Equality +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'égalité (==) vérifie si ses deux opérandes sont égaux et renvoie un booléen indiquant le résultat de la comparaison. À la différence de l'opérateur d'égalité stricte, l'opérateur d'égalité tente de convertir ses opérandes avant la comparaison si ceux-ci sont de types différents.

+ +
{{EmbedInteractiveExample("pages/js/expressions-equality.html")}}
+ +

Syntaxe

+ +
+x == y
+
+ +

Description

+ +

Les opérateurs d'égalité (== et !=) utilisent l'algorithme de comparaison d'égalité abstraite pour comparer deux opérandes. On peut le résumer ainsi :

+ + + +

La différence fondamentale entre cet opérateur et l'opérateur d'égalité stricte (===) est que ce dernier n'opère pas de conversion de type. L'opérateur d'égalité stricte considère toujours que deux valeurs de types différents sont différentes.

+ +

Exemples

+ +

Comparaison sans conversion de types

+ +
+1 == 1;              // true
+"coucou" == "coucou";  // true
+
+ +

Comparaison avec conversion de types

+ +
+"1" ==  1;            // true
+1 == "1";             // true
+0 == false;           // true
+0 == null;            // false
+0 == undefined;       // false
+0 == !!null;          // true, voir la documentation pour !!
+0 == !!undefined;     // true, voir la documentation pour !!
+null == undefined;    // true
+
+const nombre1 = new Number(3);
+const nombre2 = new Number(3);
+nombre1 == 3;         // true
+nombre1 == nombre2;   // false
+
+ +

Comparaison d'objets

+ +
+const objet1 = {"clé": "valeur"}
+const objet2 = {"clé": "valeur"};
+
+objet1 == objet2 // false
+objet2 == objet2 // true
+
+ +

Comparaison entre des chaînes de caractères et des objets String

+ +

On notera que les chaînes de caractères construites avec new String() sont des objets. Si on compare une telle valeur avec une chaîne de caractères "primitives", l'objet String sera converti en une chaîne de caractères et les contenus de ces chaînes seront comparés. Toutefois, si les deux opérandes sont des objets String, ils seront comparés comme tels et devront référencer le même objet pour être considérés égaux :

+ +
+const string1 = "coucou";
+const string2 = String("coucou");
+const string3 = new String("coucou");
+const string4 = new String("coucou");
+
+console.log(string1 == string2); // true
+console.log(string1 == string3); // true
+console.log(string2 == string3); // true
+console.log(string3 == string4); // false
+console.log(string4 == string4); // true
+
+ +

Comparaison entre les dates et les chaînes de caractères

+ +
+const d = new Date('December 17, 1995 03:24:00');
+const s = d.toString(); // par exemple : "Sun Dec 17 1995 03:24:00 GMT-0800 (Pacific Standard Time)"
+console.log(d == s);    //true
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/exponentiation/index.html b/files/fr/web/javascript/reference/operators/exponentiation/index.html deleted file mode 100644 index 310a21c8fe..0000000000 --- a/files/fr/web/javascript/reference/operators/exponentiation/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Exponentiation (**) -slug: Web/JavaScript/Reference/Operators/Exponentiation -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.exponentiation -translation-of: Web/JavaScript/Reference/Operators/Exponentiation ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'exponentiation (**) fournit le résultat obtenu lorsqu'on élève le premier opérande à la puissance indiquée par le second. Il est équivalent Math.pow exception faite que cet opérateur permet également d'utiliser des valeurs BigInt comme opérandes.

- -
{{EmbedInteractiveExample("pages/js/expressions-exponentiation.html")}}
- -

Syntaxe

- -
-Opérateur : var1 ** var2
-
- -

Description

- -

L'opérateur d'exponentiation est associatif à droite : a ** b ** c est équivalent à a ** (b ** c).

- -

Pour la plupart des langages possédant un opérateur d'exponentiation (ex. PHP, Python, etc.), l'opérateur d'exponentiation possède une précédence plus élevée que les opérateurs unaires (comme l'addition unaire + ou la soustraction unaire -). Il existe toutefois quelques exceptions comme Bash, où ** possède une précédence inférieure à celles des opérateurs unaires.

- -

En JavaScript, il est impossible d'écrire une expression d'exponentiation ambigüe : on ne peut pas placer un opérateur unaire (+/-/~/!/delete/void/typeof) avant le nombre servant de base, cela provoquera une exception SyntaxError.

- -
--2 ** 2;
-// 4 en Bash, -4 pour d'autres langages.
-// Invalide en JavaScript car l'opération est ambigüe.
-
--(2 ** 2);
-// -4 en JavaScript, les parenthèses évitent l'ambiguité.
-
- -

Attnetion, certains langages de programmation utilisent l'accent circonflexe ^ pour exprimer l'exponentiaion mais JavaScript utilise ce symbole pour l'opérateur binaire OU exclusif (XOR).

- -

Exemples

- -

Exponentiation simple

- -
-2 ** 3   // 8
-3 ** 2   // 9
-3 ** 2.5 // 15.588457268119896
-10 ** -1 // 0.1
-NaN ** 2 // NaN
-
- -

Associativité

- -
-2 ** 3 ** 2   // 512
-2 ** (3 ** 2) // 512
-(2 ** 3) ** 2 // 64
- -

Avec les opérateurs unaires

- -

Pour prendre l'opposé du résultat :

- -
--(2 ** 2) // -4
-
- -

Pour forcer le signe de la base en négatif :

- -
(-2) ** 2 // 4
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/exponentiation/index.md b/files/fr/web/javascript/reference/operators/exponentiation/index.md new file mode 100644 index 0000000000..310a21c8fe --- /dev/null +++ b/files/fr/web/javascript/reference/operators/exponentiation/index.md @@ -0,0 +1,95 @@ +--- +title: Exponentiation (**) +slug: Web/JavaScript/Reference/Operators/Exponentiation +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.exponentiation +translation-of: Web/JavaScript/Reference/Operators/Exponentiation +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'exponentiation (**) fournit le résultat obtenu lorsqu'on élève le premier opérande à la puissance indiquée par le second. Il est équivalent Math.pow exception faite que cet opérateur permet également d'utiliser des valeurs BigInt comme opérandes.

+ +
{{EmbedInteractiveExample("pages/js/expressions-exponentiation.html")}}
+ +

Syntaxe

+ +
+Opérateur : var1 ** var2
+
+ +

Description

+ +

L'opérateur d'exponentiation est associatif à droite : a ** b ** c est équivalent à a ** (b ** c).

+ +

Pour la plupart des langages possédant un opérateur d'exponentiation (ex. PHP, Python, etc.), l'opérateur d'exponentiation possède une précédence plus élevée que les opérateurs unaires (comme l'addition unaire + ou la soustraction unaire -). Il existe toutefois quelques exceptions comme Bash, où ** possède une précédence inférieure à celles des opérateurs unaires.

+ +

En JavaScript, il est impossible d'écrire une expression d'exponentiation ambigüe : on ne peut pas placer un opérateur unaire (+/-/~/!/delete/void/typeof) avant le nombre servant de base, cela provoquera une exception SyntaxError.

+ +
+-2 ** 2;
+// 4 en Bash, -4 pour d'autres langages.
+// Invalide en JavaScript car l'opération est ambigüe.
+
+-(2 ** 2);
+// -4 en JavaScript, les parenthèses évitent l'ambiguité.
+
+ +

Attnetion, certains langages de programmation utilisent l'accent circonflexe ^ pour exprimer l'exponentiaion mais JavaScript utilise ce symbole pour l'opérateur binaire OU exclusif (XOR).

+ +

Exemples

+ +

Exponentiation simple

+ +
+2 ** 3   // 8
+3 ** 2   // 9
+3 ** 2.5 // 15.588457268119896
+10 ** -1 // 0.1
+NaN ** 2 // NaN
+
+ +

Associativité

+ +
+2 ** 3 ** 2   // 512
+2 ** (3 ** 2) // 512
+(2 ** 3) ** 2 // 64
+ +

Avec les opérateurs unaires

+ +

Pour prendre l'opposé du résultat :

+ +
+-(2 ** 2) // -4
+
+ +

Pour forcer le signe de la base en négatif :

+ +
(-2) ** 2 // 4
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/exponentiation_assignment/index.html b/files/fr/web/javascript/reference/operators/exponentiation_assignment/index.html deleted file mode 100644 index b83a331cf4..0000000000 --- a/files/fr/web/javascript/reference/operators/exponentiation_assignment/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Affectation après exponentiation (**=) -slug: Web/JavaScript/Reference/Operators/Exponentiation_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.exponentiation_assignment -translation-of: Web/JavaScript/Reference/Operators/Exponentiation_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'exponentiation et d'affectation (**=) élève la valeur de la variable fournie par son opérande gauche à la puissance indiquée par son opérande droit puis affecte le résultat à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-exponentiation-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x **= y
-Signification :  x  = x ** y
-
- -

Exemples

- -

Utiliser l'opérateur d'exponentiation et d'affectation

- -
-let truc = 5;
-truc **= 2;      // 25
-truc **= 'toto'; // NaN
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/exponentiation_assignment/index.md b/files/fr/web/javascript/reference/operators/exponentiation_assignment/index.md new file mode 100644 index 0000000000..b83a331cf4 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/exponentiation_assignment/index.md @@ -0,0 +1,49 @@ +--- +title: Affectation après exponentiation (**=) +slug: Web/JavaScript/Reference/Operators/Exponentiation_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.exponentiation_assignment +translation-of: Web/JavaScript/Reference/Operators/Exponentiation_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'exponentiation et d'affectation (**=) élève la valeur de la variable fournie par son opérande gauche à la puissance indiquée par son opérande droit puis affecte le résultat à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-exponentiation-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x **= y
+Signification :  x  = x ** y
+
+ +

Exemples

+ +

Utiliser l'opérateur d'exponentiation et d'affectation

+ +
+let truc = 5;
+truc **= 2;      // 25
+truc **= 'toto'; // NaN
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/function/index.html b/files/fr/web/javascript/reference/operators/function/index.html deleted file mode 100644 index 83dd3e1f77..0000000000 --- a/files/fr/web/javascript/reference/operators/function/index.html +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: L'opérateur function -slug: Web/JavaScript/Reference/Operators/function -tags: - - Function - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/function -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_function ---- -
{{jsSidebar("Operators")}}
- -

Le mot-clé function permet de définir une fonction à l'intérieur d'une expression.

- -
-

Note : Il est également possible de définir des fonctions grâce au constructeur Function et aux déclarations de fonction.

-
- -
{{EmbedInteractiveExample("pages/js/expressions-functionexpression.html")}}
- -

Syntaxe

- -
function [nom]([param1[, param2[, ..., paramN]]]) {
-   instructions
-}
- -

Paramètres

- -
-
nom
-
Le nom de la fonction. Peut être omis, auquel cas on parlera d'une fonction anonyme.
-
paramN
-
Le nom d'un paramètre à passer à la fonction.
-
instructions
-
Les instructions constituant le corps de la fonction.
-
- -
-

Note : À partir d'ES2015/ES6, on peut également former des expressions de fonction avec des fonctions fléchées.

-
- -

Description

- -

Une expression de fonction est très similaire et a presque la même syntaxe qu'une déclaration de fonction (consultez la page sur l'instruction function pour plus de détails). La différence principale entre une expression de fonction et une instruction est le nom de la fonction. En effet, pour les expressions, celui peut être omis (on parle alors d'une fonction anonyme). Consultez l'article Fonctions pour des informations concernant les différences entre les instructions de fonctions et les expressions de fonctions. Une fonction peut être appelée immédiatement après sa définition (on parle alors de fonction invoquée immédiatement ou IIFE pour Immediately Invoked Function Expression en anglais).

- -

Remontée (hoisting) des expressions de fonction

- -

En JavaScript, les expressions de fonction ne sont pas remontées (à la différence des déclarations de fonction). Il est donc impossible d'utiliser les expressions de fonction avant leur définition :

- -
nonRemontée(); // TypeError: nonRemontée is not a function
-
-var nonRemontée = function() {
-  console.log("truc");
-}
-
- -

Exemples

- -

L'exemple qui suit définit une fonction anonyme et l'assigne à une variable x. La fonction renvoie le carré de son paramètre :

- -
var x = function(y) {
-   return y * y;
-};
-
- -

Expression nommée

- -

Si on souhaite faire référence à une fonction au sein du corps de la fonction, il faudra créer une expression de fonction nommée. Le nom sera alors local au corps de la fonction (portée). Cela permet entre autres d'éviter d'utiliser la propriété non-standard arguments.callee.

- -
var math = {
-  'factorielle': function factorielle(n) {
-    if (n <= 1) {
-      return 1;
-    }
-    return n * factorielle(n - 1);
-  }
-};
- -

La variable affectée à l'expression de fonction aura une propriété name. Ce nom n'est pas modifié si la variable est réaffectée. Si le nom de la fonction est absent, ce sera celui de la variable (nom « implicite »). Cela vaut également pour les fonctions fléchées :

- -
var toto = function() {};
-console.log(toto.name); // "toto"
-
-var toto2 = toto;
-console.log(toto2.name); // "toto"
-
-var truc = function machin() {}
-console.log(truc.name); // "machin"
-
- -

IIFE pour Immediately Invoked Function Expression ou expression de fonction immédiatement appelée

- -

On peut utiliser une expression de fonction pour créer une « IIFE », c'est-à-dire une expression de fonction qu'on appelle dès sa définition :

- -
var a = "coucou";
-var b = "monde";
-
-// IIFE
-(function(x, y) {
-  console.log(x + " " + y);
-})(a, b);
-// coucou monde
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-function-definitions', 'Définitions de fonction')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-13', 'Définitions de fonction')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-13', 'Définitions de fonction')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.function")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/function/index.md b/files/fr/web/javascript/reference/operators/function/index.md new file mode 100644 index 0000000000..83dd3e1f77 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/function/index.md @@ -0,0 +1,154 @@ +--- +title: L'opérateur function +slug: Web/JavaScript/Reference/Operators/function +tags: + - Function + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/function +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_function +--- +
{{jsSidebar("Operators")}}
+ +

Le mot-clé function permet de définir une fonction à l'intérieur d'une expression.

+ +
+

Note : Il est également possible de définir des fonctions grâce au constructeur Function et aux déclarations de fonction.

+
+ +
{{EmbedInteractiveExample("pages/js/expressions-functionexpression.html")}}
+ +

Syntaxe

+ +
function [nom]([param1[, param2[, ..., paramN]]]) {
+   instructions
+}
+ +

Paramètres

+ +
+
nom
+
Le nom de la fonction. Peut être omis, auquel cas on parlera d'une fonction anonyme.
+
paramN
+
Le nom d'un paramètre à passer à la fonction.
+
instructions
+
Les instructions constituant le corps de la fonction.
+
+ +
+

Note : À partir d'ES2015/ES6, on peut également former des expressions de fonction avec des fonctions fléchées.

+
+ +

Description

+ +

Une expression de fonction est très similaire et a presque la même syntaxe qu'une déclaration de fonction (consultez la page sur l'instruction function pour plus de détails). La différence principale entre une expression de fonction et une instruction est le nom de la fonction. En effet, pour les expressions, celui peut être omis (on parle alors d'une fonction anonyme). Consultez l'article Fonctions pour des informations concernant les différences entre les instructions de fonctions et les expressions de fonctions. Une fonction peut être appelée immédiatement après sa définition (on parle alors de fonction invoquée immédiatement ou IIFE pour Immediately Invoked Function Expression en anglais).

+ +

Remontée (hoisting) des expressions de fonction

+ +

En JavaScript, les expressions de fonction ne sont pas remontées (à la différence des déclarations de fonction). Il est donc impossible d'utiliser les expressions de fonction avant leur définition :

+ +
nonRemontée(); // TypeError: nonRemontée is not a function
+
+var nonRemontée = function() {
+  console.log("truc");
+}
+
+ +

Exemples

+ +

L'exemple qui suit définit une fonction anonyme et l'assigne à une variable x. La fonction renvoie le carré de son paramètre :

+ +
var x = function(y) {
+   return y * y;
+};
+
+ +

Expression nommée

+ +

Si on souhaite faire référence à une fonction au sein du corps de la fonction, il faudra créer une expression de fonction nommée. Le nom sera alors local au corps de la fonction (portée). Cela permet entre autres d'éviter d'utiliser la propriété non-standard arguments.callee.

+ +
var math = {
+  'factorielle': function factorielle(n) {
+    if (n <= 1) {
+      return 1;
+    }
+    return n * factorielle(n - 1);
+  }
+};
+ +

La variable affectée à l'expression de fonction aura une propriété name. Ce nom n'est pas modifié si la variable est réaffectée. Si le nom de la fonction est absent, ce sera celui de la variable (nom « implicite »). Cela vaut également pour les fonctions fléchées :

+ +
var toto = function() {};
+console.log(toto.name); // "toto"
+
+var toto2 = toto;
+console.log(toto2.name); // "toto"
+
+var truc = function machin() {}
+console.log(truc.name); // "machin"
+
+ +

IIFE pour Immediately Invoked Function Expression ou expression de fonction immédiatement appelée

+ +

On peut utiliser une expression de fonction pour créer une « IIFE », c'est-à-dire une expression de fonction qu'on appelle dès sa définition :

+ +
var a = "coucou";
+var b = "monde";
+
+// IIFE
+(function(x, y) {
+  console.log(x + " " + y);
+})(a, b);
+// coucou monde
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-function-definitions', 'Définitions de fonction')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-13', 'Définitions de fonction')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-13', 'Définitions de fonction')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.5.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.function")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/function_star_/index.html b/files/fr/web/javascript/reference/operators/function_star_/index.html deleted file mode 100644 index 8ffb95d5bd..0000000000 --- a/files/fr/web/javascript/reference/operators/function_star_/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Expression function* -slug: Web/JavaScript/Reference/Operators/function* -tags: - - ECMAScript 2015 - - Function - - Iterator - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/function* -original_slug: Web/JavaScript/Reference/Opérateurs/function* ---- -
{{jsSidebar("Operators")}}
- -

Le mot-clé function* peut être utilisé pour définir une fonction génératrice à l'intérieur d'une expression.

- -
{{EmbedInteractiveExample("pages/js/expressions-functionasteriskexpression.html")}}
- -

Syntaxe

- -
function* [nom]([param1[, param2[, ..., paramN]]]) {
-   instructions
-}
- -

Paramètres

- -
-
nom
-
Le nom de la fonction. Ce paramètre est optionnel, auquel cas la fonction sera une fonction anonyme. Le nom sera local par rapport au corps de la fonction.
-
paramN
-
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments.
-
instructions
-
Les instructions qui forment le corps de la fonction.
-
- -

Description

- -

Une expression function* est très semblable à une instruction {{jsxref('Instructions/function*', 'function*')}}, elle possède également une syntaxe similaire. La différence principale entre une expression function* et une instruction function* est le nom de la fonction. En effet, dans les expressions, le nom peut être omis pour créer une fonction génératrice anonyme. Voir également le chapitre sur les fonctions pour plus d'informations.

- -

Exemples

- -

L'exemple qui suit illustre comment définir une génératrice anonyme et l'affecter à une variable x. Cette fonction génèrera le carré de son argument :

- -
var x = function*(y) {
-   yield y * y;
-};
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.function_star")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/function_star_/index.md b/files/fr/web/javascript/reference/operators/function_star_/index.md new file mode 100644 index 0000000000..8ffb95d5bd --- /dev/null +++ b/files/fr/web/javascript/reference/operators/function_star_/index.md @@ -0,0 +1,88 @@ +--- +title: Expression function* +slug: Web/JavaScript/Reference/Operators/function* +tags: + - ECMAScript 2015 + - Function + - Iterator + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/function* +original_slug: Web/JavaScript/Reference/Opérateurs/function* +--- +
{{jsSidebar("Operators")}}
+ +

Le mot-clé function* peut être utilisé pour définir une fonction génératrice à l'intérieur d'une expression.

+ +
{{EmbedInteractiveExample("pages/js/expressions-functionasteriskexpression.html")}}
+ +

Syntaxe

+ +
function* [nom]([param1[, param2[, ..., paramN]]]) {
+   instructions
+}
+ +

Paramètres

+ +
+
nom
+
Le nom de la fonction. Ce paramètre est optionnel, auquel cas la fonction sera une fonction anonyme. Le nom sera local par rapport au corps de la fonction.
+
paramN
+
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments.
+
instructions
+
Les instructions qui forment le corps de la fonction.
+
+ +

Description

+ +

Une expression function* est très semblable à une instruction {{jsxref('Instructions/function*', 'function*')}}, elle possède également une syntaxe similaire. La différence principale entre une expression function* et une instruction function* est le nom de la fonction. En effet, dans les expressions, le nom peut être omis pour créer une fonction génératrice anonyme. Voir également le chapitre sur les fonctions pour plus d'informations.

+ +

Exemples

+ +

L'exemple qui suit illustre comment définir une génératrice anonyme et l'affecter à une variable x. Cette fonction génèrera le carré de son argument :

+ +
var x = function*(y) {
+   yield y * y;
+};
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.function_star")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/greater_than/index.html b/files/fr/web/javascript/reference/operators/greater_than/index.html deleted file mode 100644 index 84d44509a0..0000000000 --- a/files/fr/web/javascript/reference/operators/greater_than/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Supérieur strict (>) -slug: Web/JavaScript/Reference/Operators/Greater_than -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.greater_than -translation-of: Web/JavaScript/Reference/Operators/Greater_than ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur supérieur strict (>) renvoie true si l'opérande gauche est strictement supérieur à l'opérande droit et false sinon.

- -
{{EmbedInteractiveExample("pages/js/expressions-greater-than.html")}}
- -

Syntaxe

- -
-x > y
-
- -

Description

- -

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle. Voir la documentation de l'opérateur inférieur strict pour un résumé de cet algorithme.

- -

Exemples

- -

Comparaison numérique

- -
-console.log(5 > 3);            // true
-console.log(3 > 3);            // false
-console.log(3 > 5);            // false
-
- -

Comparaison entre un nombre et un BigInt

- -
-console.log(5n > 3);           // true
-console.log(3 > 5n);           // false
-
- -

Comparaison entre chaînes de caractères

- -
-console.log("a" > "b");        // false
-console.log("a" > "a");        // false
-console.log("a" > "3");        // true
-
- -

Comparaison entre nombres et chaînes de caractères

- -
-console.log("5" > 3);          // true
-console.log("3" > 3);          // false
-console.log("3" > 5);          // false
-
-console.log("coucou" > 5);      // false
-console.log(5 > "coucou");      // false
-
-console.log("5" > 3n);         // true
-console.log("3" > 5n);         // false
-
- -

Comparaison avec des booléens, null, undefined, NaN

- -
-console.log(true > false);     // true
-console.log(false > true);     // false
-
-console.log(true > 0);         // true
-console.log(true > 1);         // false
-
-console.log(null > 0);         // false
-console.log(1 > null);         // true
-
-console.log(undefined > 3);    // false
-console.log(3 > undefined);    // false
-
-console.log(3 > NaN);          // false
-console.log(NaN > 3);          // false
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/greater_than/index.md b/files/fr/web/javascript/reference/operators/greater_than/index.md new file mode 100644 index 0000000000..84d44509a0 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/greater_than/index.md @@ -0,0 +1,100 @@ +--- +title: Supérieur strict (>) +slug: Web/JavaScript/Reference/Operators/Greater_than +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.greater_than +translation-of: Web/JavaScript/Reference/Operators/Greater_than +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur supérieur strict (>) renvoie true si l'opérande gauche est strictement supérieur à l'opérande droit et false sinon.

+ +
{{EmbedInteractiveExample("pages/js/expressions-greater-than.html")}}
+ +

Syntaxe

+ +
+x > y
+
+ +

Description

+ +

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle. Voir la documentation de l'opérateur inférieur strict pour un résumé de cet algorithme.

+ +

Exemples

+ +

Comparaison numérique

+ +
+console.log(5 > 3);            // true
+console.log(3 > 3);            // false
+console.log(3 > 5);            // false
+
+ +

Comparaison entre un nombre et un BigInt

+ +
+console.log(5n > 3);           // true
+console.log(3 > 5n);           // false
+
+ +

Comparaison entre chaînes de caractères

+ +
+console.log("a" > "b");        // false
+console.log("a" > "a");        // false
+console.log("a" > "3");        // true
+
+ +

Comparaison entre nombres et chaînes de caractères

+ +
+console.log("5" > 3);          // true
+console.log("3" > 3);          // false
+console.log("3" > 5);          // false
+
+console.log("coucou" > 5);      // false
+console.log(5 > "coucou");      // false
+
+console.log("5" > 3n);         // true
+console.log("3" > 5n);         // false
+
+ +

Comparaison avec des booléens, null, undefined, NaN

+ +
+console.log(true > false);     // true
+console.log(false > true);     // false
+
+console.log(true > 0);         // true
+console.log(true > 1);         // false
+
+console.log(null > 0);         // false
+console.log(1 > null);         // true
+
+console.log(undefined > 3);    // false
+console.log(3 > undefined);    // false
+
+console.log(3 > NaN);          // false
+console.log(NaN > 3);          // false
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/greater_than_or_equal/index.html b/files/fr/web/javascript/reference/operators/greater_than_or_equal/index.html deleted file mode 100644 index 4737d5161d..0000000000 --- a/files/fr/web/javascript/reference/operators/greater_than_or_equal/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Supérieur ou égal (>=) -slug: Web/JavaScript/Reference/Operators/Greater_than_or_equal -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.greater_than_or_equal -translation-of: Web/JavaScript/Reference/Operators/Greater_than_or_equal ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur supérieur ou égal (>=) renvoie true si l'opérande gauche est supérieur ou égal à l'opérande droit et false sinon.

- -
{{EmbedInteractiveExample("pages/js/expressions-greater-than-or-equal.html")}}
- -

Syntaxe

- -
-x >= y
-
- -

Description

- -

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle. Voir la documentation de l'opérateur inférieur strict pour un résumé de cet algorithme.

- -

Exemples

- -

Comparaison numérique

- -
-console.log(5 >= 3);         // true
-console.log(3 >= 3);         // true
-console.log(3 >= 5);         // false
-
- -

Comparaison entre un nombre et un BigInt

- -
-console.log(5n >= 3);        // true
-console.log(3 >= 3n);        // true
-console.log(3 >= 5n);        // false
-
- -

Comparaison entre chaînes de caractères

- -
-console.log("a" >= "b");     // false
-console.log("a" >= "a");     // true
-console.log("a" >= "3");     // true
-
- -

Comparaison entre nombres et chaînes de caractères

- -
-console.log("5" >= 3);       // true
-console.log("3" >= 3);       // true
-console.log("3" >= 5);       // false
-
-console.log("coucou" >= 5);   // false
-console.log(5 >= "coucou");   // false
-
- -

Comparaison avec des booléens, null, undefined, NaN

- -
-console.log(true >= false);  // true
-console.log(true >= true);   // true
-console.log(false >= true);  // false
-
-console.log(true >= 0);      // true
-console.log(true >= 1);      // true
-
-console.log(null >= 0);      // true
-console.log(1 >= null);      // true
-
-console.log(undefined >= 3); // false
-console.log(3 >= undefined); // false
-
-console.log(3 >= NaN);       // false
-console.log(NaN >= 3);       // false
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/greater_than_or_equal/index.md b/files/fr/web/javascript/reference/operators/greater_than_or_equal/index.md new file mode 100644 index 0000000000..4737d5161d --- /dev/null +++ b/files/fr/web/javascript/reference/operators/greater_than_or_equal/index.md @@ -0,0 +1,99 @@ +--- +title: Supérieur ou égal (>=) +slug: Web/JavaScript/Reference/Operators/Greater_than_or_equal +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.greater_than_or_equal +translation-of: Web/JavaScript/Reference/Operators/Greater_than_or_equal +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur supérieur ou égal (>=) renvoie true si l'opérande gauche est supérieur ou égal à l'opérande droit et false sinon.

+ +
{{EmbedInteractiveExample("pages/js/expressions-greater-than-or-equal.html")}}
+ +

Syntaxe

+ +
+x >= y
+
+ +

Description

+ +

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle. Voir la documentation de l'opérateur inférieur strict pour un résumé de cet algorithme.

+ +

Exemples

+ +

Comparaison numérique

+ +
+console.log(5 >= 3);         // true
+console.log(3 >= 3);         // true
+console.log(3 >= 5);         // false
+
+ +

Comparaison entre un nombre et un BigInt

+ +
+console.log(5n >= 3);        // true
+console.log(3 >= 3n);        // true
+console.log(3 >= 5n);        // false
+
+ +

Comparaison entre chaînes de caractères

+ +
+console.log("a" >= "b");     // false
+console.log("a" >= "a");     // true
+console.log("a" >= "3");     // true
+
+ +

Comparaison entre nombres et chaînes de caractères

+ +
+console.log("5" >= 3);       // true
+console.log("3" >= 3);       // true
+console.log("3" >= 5);       // false
+
+console.log("coucou" >= 5);   // false
+console.log(5 >= "coucou");   // false
+
+ +

Comparaison avec des booléens, null, undefined, NaN

+ +
+console.log(true >= false);  // true
+console.log(true >= true);   // true
+console.log(false >= true);  // false
+
+console.log(true >= 0);      // true
+console.log(true >= 1);      // true
+
+console.log(null >= 0);      // true
+console.log(1 >= null);      // true
+
+console.log(undefined >= 3); // false
+console.log(3 >= undefined); // false
+
+console.log(3 >= NaN);       // false
+console.log(NaN >= 3);       // false
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/grouping/index.html b/files/fr/web/javascript/reference/operators/grouping/index.html deleted file mode 100644 index 50bc0b5125..0000000000 --- a/files/fr/web/javascript/reference/operators/grouping/index.html +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Opérateur de groupement -slug: Web/JavaScript/Reference/Operators/Grouping -tags: - - JavaScript - - Operator - - Primary Expressions -translation_of: Web/JavaScript/Reference/Operators/Grouping -original_slug: Web/JavaScript/Reference/Opérateurs/Groupement ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de groupement ( ) contrôle la précédence de l'évaluation dans les expressions.

- -
{{EmbedInteractiveExample("pages/js/expressions-groupingoperator.html")}}
- -

Syntaxe

- -
 ( )
- -

Description

- -

L'opérateur de groupement consiste en une paire de parenthèses encadrant une expression et permettant de surcharger la précédence normale des opérateurs afin que les expressions dont la précédence est plus basse soient évaluées avant.

- -

Exemples

- -

Normalement, la multiplication et la division sont prises en compte avant l'addition et la soustraction. On peut changer ce comportement avec l'opérateur de groupement.

- -
var a = 1;
-var b = 2;
-var c = 3;
-
-// précédence normale
-a + b * c     // 7
-// l'évaluation est effectuée de cette façon
-a + (b * c)   // 7
-
-// précédence surchargée avec le groupement
-// on additionne avant de multiplier
-(a + b) * c   // 9
-
-// mathématiquement, cela est équivalent à
-a * c + b * c // 9
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-grouping-operator', 'The Grouping Operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-grouping-operator', 'L\'opérateur de groupement')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.1.6', 'L\'opérateur de groupement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11.1.4','L\'opérateur de groupement')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.grouping")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/grouping/index.md b/files/fr/web/javascript/reference/operators/grouping/index.md new file mode 100644 index 0000000000..50bc0b5125 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/grouping/index.md @@ -0,0 +1,88 @@ +--- +title: Opérateur de groupement +slug: Web/JavaScript/Reference/Operators/Grouping +tags: + - JavaScript + - Operator + - Primary Expressions +translation_of: Web/JavaScript/Reference/Operators/Grouping +original_slug: Web/JavaScript/Reference/Opérateurs/Groupement +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de groupement ( ) contrôle la précédence de l'évaluation dans les expressions.

+ +
{{EmbedInteractiveExample("pages/js/expressions-groupingoperator.html")}}
+ +

Syntaxe

+ +
 ( )
+ +

Description

+ +

L'opérateur de groupement consiste en une paire de parenthèses encadrant une expression et permettant de surcharger la précédence normale des opérateurs afin que les expressions dont la précédence est plus basse soient évaluées avant.

+ +

Exemples

+ +

Normalement, la multiplication et la division sont prises en compte avant l'addition et la soustraction. On peut changer ce comportement avec l'opérateur de groupement.

+ +
var a = 1;
+var b = 2;
+var c = 3;
+
+// précédence normale
+a + b * c     // 7
+// l'évaluation est effectuée de cette façon
+a + (b * c)   // 7
+
+// précédence surchargée avec le groupement
+// on additionne avant de multiplier
+(a + b) * c   // 9
+
+// mathématiquement, cela est équivalent à
+a * c + b * c // 9
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-grouping-operator', 'The Grouping Operator')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-grouping-operator', 'L\'opérateur de groupement')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.1.6', 'L\'opérateur de groupement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES1', '#sec-11.1.4','L\'opérateur de groupement')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.grouping")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/in/index.html b/files/fr/web/javascript/reference/operators/in/index.html deleted file mode 100644 index da96f277bc..0000000000 --- a/files/fr/web/javascript/reference/operators/in/index.html +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: L'opérateur in -slug: Web/JavaScript/Reference/Operators/in -tags: - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/in -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_in ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur in renvoie true si une propriété donnée appartient à l'objet donné (directement ou via sa chaîne de prototype).

- -
{{EmbedInteractiveExample("pages/js/expressions-inoperator.html")}}
- -

Syntaxe

- -
propriété in nomObjet
-
- -

Paramètres

- -
-
propriété
-
Une expression évaluée en un nombre ou une chaîne de caractères qui représente le nom d'une propriété ou l'indice d'un tableau.
-
nomObjet
-
Le nom de l'objet qu'on souhaite inspecter.
-
- -

Description

- -

Les exemples suivants illustrent certaines utilisation de l'opérateur in.

- -
// Tableaux
-var arbres = ["sapin", "hêtre", "cèdre", "chêne", "érable"];
-0 in arbres        // renvoie true
-3 in arbres        // renvoie true
-6 in arbres        // renvoie false
-"hêtre" in arbres  // renvoie false (l'indice doit être spécifié, pas la valeur à cet indice)
-"length" in arbres // renvoie true (length est une propriété des objets Array)
-Symbol.iterator in arbres // renvoie true (les tableaux sont itérables, à partir d'ES6)
-
-// Objets prédéfinis
-"PI" in Math           // renvoie true
-var ma_chaine = new String("corail");
-"length" in ma_chaine  // renvoie true
-
-// Objets personnalisés
-var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
-"marque" in voiture  // renvoie true
-"modèle" in voiture  // renvoie true
-"marque" in voiture // renvoie true
-"Accord" in voiture // renvoie false
-
- -

L'opérande droit doit toujours être du type objet (et pas un autre type primitif). Par exemple, on peut utiliser une  chaîne créée avec le constructeur String, mais pas une chaîne littérale.

- -
var couleur1 = new String("vert");
-"length" in couleur1 // renvoie true
-var couleur2 = "corail";
-"length" in couleur2 // génère une erreur (couleur n'est pas un objet String)
-
- -

Utilisation de l'opérateur in avec des propriétés supprimées ou indéfinies

- -

Si une propriété est supprimée avec l'opérateur delete, l'opérateur in renvoie false pour cette propriété.

- -
var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
-delete voiture.marque;
-"marque" in voiture  // renvoie false
-
-var arbres = new Array("sapin", "hêtre", "cèdre", "chêne", "érable");
-delete arbres[3];
-3 in arbres // renvoie false
-
- -

Si une propriété est définie à {{jsxref("Objets_globaux/undefined", "undefined")}} mais n'est pas supprimée, l'opérateur in renverra true pour cette propriété.

- -
var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
-voiture.marque = undefined;
-"marque" in voiture  // renvoie true
-
-var arbres = new Array("sapin", "hêtre", "cèdre", "chêne", "érable");
-arbres[3] = undefined;
-3 in arbres // renvoie true
-
- -

Propriétés héritées

- -

L'opérateur in renvoie true pour les propriétés qui appartiennent à la chaîne de prototypes. SI on souhaite la présence d'une propriété non-héritée, on utilisera plutôt {{jsxref("Object.prototype.hasOwnProperty()")}}.

- -
"toString" in {}; // renvoie true
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-relational-operators', 'Opérateurs relationnels')}}{{Spec2('ES2015')}}
{{SpecName('ES5.1', '#sec-11.8.7', 'Opérateur in')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.8.7', 'Opérateurs in')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.in")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/in/index.md b/files/fr/web/javascript/reference/operators/in/index.md new file mode 100644 index 0000000000..da96f277bc --- /dev/null +++ b/files/fr/web/javascript/reference/operators/in/index.md @@ -0,0 +1,139 @@ +--- +title: L'opérateur in +slug: Web/JavaScript/Reference/Operators/in +tags: + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/in +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_in +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur in renvoie true si une propriété donnée appartient à l'objet donné (directement ou via sa chaîne de prototype).

+ +
{{EmbedInteractiveExample("pages/js/expressions-inoperator.html")}}
+ +

Syntaxe

+ +
propriété in nomObjet
+
+ +

Paramètres

+ +
+
propriété
+
Une expression évaluée en un nombre ou une chaîne de caractères qui représente le nom d'une propriété ou l'indice d'un tableau.
+
nomObjet
+
Le nom de l'objet qu'on souhaite inspecter.
+
+ +

Description

+ +

Les exemples suivants illustrent certaines utilisation de l'opérateur in.

+ +
// Tableaux
+var arbres = ["sapin", "hêtre", "cèdre", "chêne", "érable"];
+0 in arbres        // renvoie true
+3 in arbres        // renvoie true
+6 in arbres        // renvoie false
+"hêtre" in arbres  // renvoie false (l'indice doit être spécifié, pas la valeur à cet indice)
+"length" in arbres // renvoie true (length est une propriété des objets Array)
+Symbol.iterator in arbres // renvoie true (les tableaux sont itérables, à partir d'ES6)
+
+// Objets prédéfinis
+"PI" in Math           // renvoie true
+var ma_chaine = new String("corail");
+"length" in ma_chaine  // renvoie true
+
+// Objets personnalisés
+var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
+"marque" in voiture  // renvoie true
+"modèle" in voiture  // renvoie true
+"marque" in voiture // renvoie true
+"Accord" in voiture // renvoie false
+
+ +

L'opérande droit doit toujours être du type objet (et pas un autre type primitif). Par exemple, on peut utiliser une  chaîne créée avec le constructeur String, mais pas une chaîne littérale.

+ +
var couleur1 = new String("vert");
+"length" in couleur1 // renvoie true
+var couleur2 = "corail";
+"length" in couleur2 // génère une erreur (couleur n'est pas un objet String)
+
+ +

Utilisation de l'opérateur in avec des propriétés supprimées ou indéfinies

+ +

Si une propriété est supprimée avec l'opérateur delete, l'opérateur in renvoie false pour cette propriété.

+ +
var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
+delete voiture.marque;
+"marque" in voiture  // renvoie false
+
+var arbres = new Array("sapin", "hêtre", "cèdre", "chêne", "érable");
+delete arbres[3];
+3 in arbres // renvoie false
+
+ +

Si une propriété est définie à {{jsxref("Objets_globaux/undefined", "undefined")}} mais n'est pas supprimée, l'opérateur in renverra true pour cette propriété.

+ +
var voiture = {marque : "Honda", modèle : "Accord", année : 1998};
+voiture.marque = undefined;
+"marque" in voiture  // renvoie true
+
+var arbres = new Array("sapin", "hêtre", "cèdre", "chêne", "érable");
+arbres[3] = undefined;
+3 in arbres // renvoie true
+
+ +

Propriétés héritées

+ +

L'opérateur in renvoie true pour les propriétés qui appartiennent à la chaîne de prototypes. SI on souhaite la présence d'une propriété non-héritée, on utilisera plutôt {{jsxref("Object.prototype.hasOwnProperty()")}}.

+ +
"toString" in {}; // renvoie true
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-relational-operators', 'Opérateurs relationnels')}}{{Spec2('ES2015')}}
{{SpecName('ES5.1', '#sec-11.8.7', 'Opérateur in')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.8.7', 'Opérateurs in')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.in")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/increment/index.html b/files/fr/web/javascript/reference/operators/increment/index.html deleted file mode 100644 index ab9d79b09f..0000000000 --- a/files/fr/web/javascript/reference/operators/increment/index.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Incrémentation (++) -slug: Web/JavaScript/Reference/Operators/Increment -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.increment -translation_of: Web/JavaScript/Reference/Operators/Increment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'incrémentation (++) permet d'incrémenter (c'est-à-dire d'ajouter un) à son opérande et de renvoyer une valeur qui est le résultat avant ou après la modification.

- -
{{EmbedInteractiveExample("pages/js/expressions-increment.html")}}
- -

Syntaxe

- -
-Opérateur : x++ ou ++x
-
- -

Description

- -

Utilisé comme suffixe (l'opérateur étant placé après l'opérande), comme dans x++, l'opérateur incrémentera la valeur et renverra la valeur avant l'incrément.

- -

Utilisé comme préfixe (l'opérateur étant placé avant l'opérande), comme dans ++x, l'opérateur incrémentera la valeur et renverra la valeur après l'incrément.

- -

Exemples

- -

Incrément en suffixe

- -
let x = 3;
-let y = x++;
-
-// y = 3
-// x = 4
-
- -

Incrément en préfixe

- -
let a = 2;
-let b = ++a;
-
-// a = 3
-// b = 3
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/increment/index.md b/files/fr/web/javascript/reference/operators/increment/index.md new file mode 100644 index 0000000000..ab9d79b09f --- /dev/null +++ b/files/fr/web/javascript/reference/operators/increment/index.md @@ -0,0 +1,70 @@ +--- +title: Incrémentation (++) +slug: Web/JavaScript/Reference/Operators/Increment +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.increment +translation_of: Web/JavaScript/Reference/Operators/Increment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'incrémentation (++) permet d'incrémenter (c'est-à-dire d'ajouter un) à son opérande et de renvoyer une valeur qui est le résultat avant ou après la modification.

+ +
{{EmbedInteractiveExample("pages/js/expressions-increment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x++ ou ++x
+
+ +

Description

+ +

Utilisé comme suffixe (l'opérateur étant placé après l'opérande), comme dans x++, l'opérateur incrémentera la valeur et renverra la valeur avant l'incrément.

+ +

Utilisé comme préfixe (l'opérateur étant placé avant l'opérande), comme dans ++x, l'opérateur incrémentera la valeur et renverra la valeur après l'incrément.

+ +

Exemples

+ +

Incrément en suffixe

+ +
let x = 3;
+let y = x++;
+
+// y = 3
+// x = 4
+
+ +

Incrément en préfixe

+ +
let a = 2;
+let b = ++a;
+
+// a = 3
+// b = 3
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/index.html b/files/fr/web/javascript/reference/operators/index.html deleted file mode 100644 index 48e7718b29..0000000000 --- a/files/fr/web/javascript/reference/operators/index.html +++ /dev/null @@ -1,286 +0,0 @@ ---- -title: Expressions et opérateurs -slug: Web/JavaScript/Reference/Operators -tags: - - JavaScript - - Landing page - - Operators - - Overview - - Reference -translation_of: Web/JavaScript/Reference/Operators -original_slug: Web/JavaScript/Reference/Opérateurs -browser-compat: javascript.operators ---- -
{{jsSidebar("Operators")}}
- -

Ce chapitre documente l'ensemble des opérateurs, expressions et mots-clés pour le langage JavaScript.

- -

Expressions et opérateurs par catégorie

- -

Pour une liste triée par ordre alphabétique, voir sur la barre de navigation à gauche.

- -

Expressions primaires

- -

Mots-clés de base et expressions générales en JavaScript.

- -
-
this
-
Le mot-clé this fait référence à une propriété spéciale indiquant le contexte d'exécution.
-
function
-
Le mot-clé function définit une expression de fonction.
-
class
-
Le mot-clé class définit une expression de classe.
-
function*
-
Le mot-clé function* définit une expression de générateur.
-
yield
-
Ce mot-clé permet de suspendre ou de reprendre l'exécution d'une fonction génératrice.
-
yield*
-
Ce mot-clé délègue à une autre fonction génératrice ou à un objet itérable.
-
async function
-
Le couple de mots-clés async function définit une expression de fonction asynchrone.
-
await
-
Ce mot-clé permet de suspendre et de reprendre l'exécution d'une fonction asynchrone et d'attendre la résolution ou l'échec de la promesse.
-
[]
-
Syntaxe d'initialisation littérale pour les tableaux.
-
{}
-
Syntaxe d'initialisation littérale pour les objets.
-
/ab+c/i
-
Syntaxe pour les expressions littérales d'expressions rationnelles.
-
( )
-
Opérateur de groupement.
-
- -

Expression « vers la gauche »

- -

Les valeurs situées à gauche sont la cible de l'affectation.

- -
-
Accesseurs de propriété
-
Les opérateurs d'accès aux membres permettent d'accéder à une propriété ou à une méthode d'un objet.
- (cela regroupe objet.propriete et objet["propriete"]).
-
new
-
L'opérateur new crée une instance grâce à un constructeur.
-
new.target
-
Pour les constructeurs, new.target fait référence au constructeur invoqué avec new.
-
import.meta
-
Un objet qui expose des métadonnées spécifiques au contexte pour un module JavaScript.
-
super
-
Le mot-clé super appelle le constructeur parent.
-
...obj
-
La syntaxe de décomposition permet de développer une expression là où plusieurs arguments (dans le cas des appels à une fonction) ou là où plusieurs éléments (dans le cas des tableaux) sont attendus.
-
- -

Incrémentation et décrémentation

- -

Des opérateurs préfixes ou suffixes pour incrémenter/décrémenter.

- -
-
A++
-
L'opérateur d'incrémentation suffixe.
-
A--
-
L'opérateur de décrémentation suffixe.
-
++A
-
L'opérateur d'incrémentation préfixe.
-
--A
-
L'opérateur de décrémentation préfixe.
-
- -

Opérateurs unaires

- -

Une opération unaire est une opération qui ne manipule qu'un seul opérande.

- -
-
delete
-
L'opérateur delete permet de supprimer une propriété d'un objet.
-
void
-
L'opérateur void permet d'ignorer la valeur de retour d'une expression.
-
typeof
-
L'opérateur typeof détermine le type d'un objet donné.
-
+
-
L'opérateur unaire + convertit son opérande en une valeur de type number.
-
-
-
L'opérateur unaire - convertit son opérande en nombre puis prend son opposé.
-
~
-
L'opérateur binaire NON.
-
!
-
L'opérateur logique NON.
-
- -

Opérateurs arithmétiques

- -

Les opérateurs arithmétiques utilisent des valeurs numériques (littérales ou variables) pour leurs opérandes et renvoient une seule valeur numérique en résultat.

- -
-
+
-
L'opérateur d'addition.
-
-
-
L'opérateur de soustraction.
-
/
-
L'opérateur de division.
-
*
-
L'opérateur de multiplication.
-
%
-
L'opérateur du reste.
-
**
-
L'opérateur d'exponentiation.
-
- -

Opérateurs relationnels

- -

Un opérateur de comparaison compare ses opérandes et renvoie une valeur booléenne en fonction de la vérité de cette comparaison.

- -
-
in
-
L'opérateur in détermine la présence d'une propriété donnée au sein d'un objet.
-
instanceof
-
L'opérateur instanceof détermine si un objet est une instance d'un autre objet.
-
<
-
L'opérateur d'infériorité strict.
-
>
-
L'opérateur de supériorité stricte.
-
<=
-
L'opérateur d'infériorité.
-
>=
-
L'opérateur de supériorité.
-
- -
-

Note : => n'est pas un opérateur mais la notation utilisée pour les fonctions fléchées.

-
- -

Opérateurs d'égalité

- -

Le résultat de l'évaluation fournie par un opérateur d'égalité est toujours un booléen, fonction de la vérité de la comparaison effectuée.

- -
-
==
-
L'opérateur d'égalité.
-
!=
-
L'opérateur d'inégalité.
-
===
-
L'opérateur d'identité.
-
!==
-
L'opérateur d'inégalité stricte.
-
- -

Opérateurs de décalage binaires

- -

Ces opérations permettent de décaler les bits de la représentation binaire de l'opérande.

- -
-
<<
-
Opérateur de décalage binaire à gauche.
-
>>
-
Opérateur de décalage binaire à droite.
-
>>>
-
Opérateur de décalage binaire à droite non signé.
-
- -

Opérateurs binaires booléens

- -

Ces opérateurs manipulent leurs opérandes comme des ensembles de 32 bits et renvoient des valeurs numériques standard.

- -
-
&
-
Opérateur ET/AND binaire.
-
|
-
Opérateur OU/OR binaire.
-
^
-
Opérateur OU exclusif/XOR binaire.
-
- -

Opérateurs logiques

- -

Les opérateurs logiques sont généralement utilisés avec des valeurs booléennes, quand c'est le cas, la valeur de retour de l'expression est une valeur booléenne.

- -
-
&&
-
Opérateur logique ET/AND.
-
||
-
Opérateur logique OU/OR.
-
??
-
Opérateur de coalescence des nuls.
-
- -

Opérateur conditionnel ternaire

- -
-
(condition ? ifTrue : ifFalse)
-
-

L'opérateur conditionnel renvoie une valeur parmi deux selon la valeur logique de la condition portée par le premier opérande.

-
-
- -

Opérateur de chaînage optionnel

- -
-
?.
-
-

L'opérateur de chaînage optionnel renvoie undefined plutôt que de causer une erreur si une référence vaut null ou undefined.

-
-
- -

Opérateurs d'affectation

- -

Un opérateur d'affectation permet d'affecter une valeur à son opérande gauche en fonction de la valeur de son opérande droit.

- -
-
=
-
Opérateur d'affectation.
-
*=
-
Opérateur de multiplication et d'affectation.
-
**=
-
Opérateur d'exponentiation et d'affectation.
-
/=
-
Opérateur de division et d'affectation.
-
%=
-
Opérateur de reste et d'affectation.
-
+=
-
Opérateur d'addition et d'affectation.
-
-=
-
Opérateur de soustraction et d'affectation
-
<<=
-
Opérateur de décalage à gauche et d'affectation.
-
>>=
-
Opérateur de décalage à droite et d'affectation.
-
>>>=
-
Opérateur de décalage à droite non signé et d'affectation.
-
&=
-
Opérateur binaire ET et d'affectation.
-
^=
-
Opérateur binaire OU exclusif et d'affectation.
-
|=
-
Opérateur binaire OU et d'affectation.
-
&&=
-
Opérateur booléen ET et d'affectation.
-
||=
-
Opérateur booléen OU et d'affectation.
-
??=
-
Opérateur d'affectation et de logique nulle.
-
[a, b] = [1, 2]
- {a, b} = {a:1, b:2}
-
-

L'affectation par décomposition permet d'affecter les propriétés d'un tableau ou d'un objet à des variables en utilisant une syntaxe similaire à celle des littéraux pour les tableaux et les objets.

-
-
- -

Opérateur virgule

- -
-
,
-
L'opérateur virgule permet d'évaluer plusieurs expressions dans une seule instruction et renvoie le résultat de la dernière expression.
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/index.md b/files/fr/web/javascript/reference/operators/index.md new file mode 100644 index 0000000000..48e7718b29 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/index.md @@ -0,0 +1,286 @@ +--- +title: Expressions et opérateurs +slug: Web/JavaScript/Reference/Operators +tags: + - JavaScript + - Landing page + - Operators + - Overview + - Reference +translation_of: Web/JavaScript/Reference/Operators +original_slug: Web/JavaScript/Reference/Opérateurs +browser-compat: javascript.operators +--- +
{{jsSidebar("Operators")}}
+ +

Ce chapitre documente l'ensemble des opérateurs, expressions et mots-clés pour le langage JavaScript.

+ +

Expressions et opérateurs par catégorie

+ +

Pour une liste triée par ordre alphabétique, voir sur la barre de navigation à gauche.

+ +

Expressions primaires

+ +

Mots-clés de base et expressions générales en JavaScript.

+ +
+
this
+
Le mot-clé this fait référence à une propriété spéciale indiquant le contexte d'exécution.
+
function
+
Le mot-clé function définit une expression de fonction.
+
class
+
Le mot-clé class définit une expression de classe.
+
function*
+
Le mot-clé function* définit une expression de générateur.
+
yield
+
Ce mot-clé permet de suspendre ou de reprendre l'exécution d'une fonction génératrice.
+
yield*
+
Ce mot-clé délègue à une autre fonction génératrice ou à un objet itérable.
+
async function
+
Le couple de mots-clés async function définit une expression de fonction asynchrone.
+
await
+
Ce mot-clé permet de suspendre et de reprendre l'exécution d'une fonction asynchrone et d'attendre la résolution ou l'échec de la promesse.
+
[]
+
Syntaxe d'initialisation littérale pour les tableaux.
+
{}
+
Syntaxe d'initialisation littérale pour les objets.
+
/ab+c/i
+
Syntaxe pour les expressions littérales d'expressions rationnelles.
+
( )
+
Opérateur de groupement.
+
+ +

Expression « vers la gauche »

+ +

Les valeurs situées à gauche sont la cible de l'affectation.

+ +
+
Accesseurs de propriété
+
Les opérateurs d'accès aux membres permettent d'accéder à une propriété ou à une méthode d'un objet.
+ (cela regroupe objet.propriete et objet["propriete"]).
+
new
+
L'opérateur new crée une instance grâce à un constructeur.
+
new.target
+
Pour les constructeurs, new.target fait référence au constructeur invoqué avec new.
+
import.meta
+
Un objet qui expose des métadonnées spécifiques au contexte pour un module JavaScript.
+
super
+
Le mot-clé super appelle le constructeur parent.
+
...obj
+
La syntaxe de décomposition permet de développer une expression là où plusieurs arguments (dans le cas des appels à une fonction) ou là où plusieurs éléments (dans le cas des tableaux) sont attendus.
+
+ +

Incrémentation et décrémentation

+ +

Des opérateurs préfixes ou suffixes pour incrémenter/décrémenter.

+ +
+
A++
+
L'opérateur d'incrémentation suffixe.
+
A--
+
L'opérateur de décrémentation suffixe.
+
++A
+
L'opérateur d'incrémentation préfixe.
+
--A
+
L'opérateur de décrémentation préfixe.
+
+ +

Opérateurs unaires

+ +

Une opération unaire est une opération qui ne manipule qu'un seul opérande.

+ +
+
delete
+
L'opérateur delete permet de supprimer une propriété d'un objet.
+
void
+
L'opérateur void permet d'ignorer la valeur de retour d'une expression.
+
typeof
+
L'opérateur typeof détermine le type d'un objet donné.
+
+
+
L'opérateur unaire + convertit son opérande en une valeur de type number.
+
-
+
L'opérateur unaire - convertit son opérande en nombre puis prend son opposé.
+
~
+
L'opérateur binaire NON.
+
!
+
L'opérateur logique NON.
+
+ +

Opérateurs arithmétiques

+ +

Les opérateurs arithmétiques utilisent des valeurs numériques (littérales ou variables) pour leurs opérandes et renvoient une seule valeur numérique en résultat.

+ +
+
+
+
L'opérateur d'addition.
+
-
+
L'opérateur de soustraction.
+
/
+
L'opérateur de division.
+
*
+
L'opérateur de multiplication.
+
%
+
L'opérateur du reste.
+
**
+
L'opérateur d'exponentiation.
+
+ +

Opérateurs relationnels

+ +

Un opérateur de comparaison compare ses opérandes et renvoie une valeur booléenne en fonction de la vérité de cette comparaison.

+ +
+
in
+
L'opérateur in détermine la présence d'une propriété donnée au sein d'un objet.
+
instanceof
+
L'opérateur instanceof détermine si un objet est une instance d'un autre objet.
+
<
+
L'opérateur d'infériorité strict.
+
>
+
L'opérateur de supériorité stricte.
+
<=
+
L'opérateur d'infériorité.
+
>=
+
L'opérateur de supériorité.
+
+ +
+

Note : => n'est pas un opérateur mais la notation utilisée pour les fonctions fléchées.

+
+ +

Opérateurs d'égalité

+ +

Le résultat de l'évaluation fournie par un opérateur d'égalité est toujours un booléen, fonction de la vérité de la comparaison effectuée.

+ +
+
==
+
L'opérateur d'égalité.
+
!=
+
L'opérateur d'inégalité.
+
===
+
L'opérateur d'identité.
+
!==
+
L'opérateur d'inégalité stricte.
+
+ +

Opérateurs de décalage binaires

+ +

Ces opérations permettent de décaler les bits de la représentation binaire de l'opérande.

+ +
+
<<
+
Opérateur de décalage binaire à gauche.
+
>>
+
Opérateur de décalage binaire à droite.
+
>>>
+
Opérateur de décalage binaire à droite non signé.
+
+ +

Opérateurs binaires booléens

+ +

Ces opérateurs manipulent leurs opérandes comme des ensembles de 32 bits et renvoient des valeurs numériques standard.

+ +
+
&
+
Opérateur ET/AND binaire.
+
|
+
Opérateur OU/OR binaire.
+
^
+
Opérateur OU exclusif/XOR binaire.
+
+ +

Opérateurs logiques

+ +

Les opérateurs logiques sont généralement utilisés avec des valeurs booléennes, quand c'est le cas, la valeur de retour de l'expression est une valeur booléenne.

+ +
+
&&
+
Opérateur logique ET/AND.
+
||
+
Opérateur logique OU/OR.
+
??
+
Opérateur de coalescence des nuls.
+
+ +

Opérateur conditionnel ternaire

+ +
+
(condition ? ifTrue : ifFalse)
+
+

L'opérateur conditionnel renvoie une valeur parmi deux selon la valeur logique de la condition portée par le premier opérande.

+
+
+ +

Opérateur de chaînage optionnel

+ +
+
?.
+
+

L'opérateur de chaînage optionnel renvoie undefined plutôt que de causer une erreur si une référence vaut null ou undefined.

+
+
+ +

Opérateurs d'affectation

+ +

Un opérateur d'affectation permet d'affecter une valeur à son opérande gauche en fonction de la valeur de son opérande droit.

+ +
+
=
+
Opérateur d'affectation.
+
*=
+
Opérateur de multiplication et d'affectation.
+
**=
+
Opérateur d'exponentiation et d'affectation.
+
/=
+
Opérateur de division et d'affectation.
+
%=
+
Opérateur de reste et d'affectation.
+
+=
+
Opérateur d'addition et d'affectation.
+
-=
+
Opérateur de soustraction et d'affectation
+
<<=
+
Opérateur de décalage à gauche et d'affectation.
+
>>=
+
Opérateur de décalage à droite et d'affectation.
+
>>>=
+
Opérateur de décalage à droite non signé et d'affectation.
+
&=
+
Opérateur binaire ET et d'affectation.
+
^=
+
Opérateur binaire OU exclusif et d'affectation.
+
|=
+
Opérateur binaire OU et d'affectation.
+
&&=
+
Opérateur booléen ET et d'affectation.
+
||=
+
Opérateur booléen OU et d'affectation.
+
??=
+
Opérateur d'affectation et de logique nulle.
+
[a, b] = [1, 2]
+ {a, b} = {a:1, b:2}
+
+

L'affectation par décomposition permet d'affecter les propriétés d'un tableau ou d'un objet à des variables en utilisant une syntaxe similaire à celle des littéraux pour les tableaux et les objets.

+
+
+ +

Opérateur virgule

+ +
+
,
+
L'opérateur virgule permet d'évaluer plusieurs expressions dans une seule instruction et renvoie le résultat de la dernière expression.
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/inequality/index.html b/files/fr/web/javascript/reference/operators/inequality/index.html deleted file mode 100644 index d9465f8ba5..0000000000 --- a/files/fr/web/javascript/reference/operators/inequality/index.html +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Inégalité (!=) -slug: Web/JavaScript/Reference/Operators/Inequality -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.inequality -translation-of: Web/JavaScript/Reference/Operators/Inequality ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'inégalité (!=) vérifie si ses deux opérandes ne sont pas égaux et renvoie un booléen correspondant au résultat. À la différence de l'opérateur d'inégalité stricte, l'opérateur d'inégalité tente une conversion de ses opérandes avant la comparaison si ceux-ci sont de types différents.

- -
{{EmbedInteractiveExample("pages/js/expressions-inequality.html")}}
- -

Syntaxe

- -
-x != y
-
- -

Description

- -

L'opérateur d'inégalité vérifie si ses deux opérandes ne sont pas égaux. Il s'agit de la négation de l'opérateur d'égalité et les deux lignes suivantes fourniront donc toujours le même résultat :

- -
-x != y
-!(x == y)
-
- -

Pour plus de détails sur l'algorithme de comparaison utilisé, voir la page relative à l'opérateur d'égalité. -

- -

À l'instar de l'opérateur d'égalité, l'opérateur d'inégalité tentera une conversion des opérandes si ceux-ci ne sont pas de même type :

- -
-3 != "3"; // false
-
- -

Si cette conversion implicite n'est pas souhaitable et qu'on souhaite considérer des valeurs de types différents comme étant différentes, on privilégiera l'opérateur d'inégalité stricte à la place :

- -
-3 !== "3"; // true
-
- -

Exemples

- -

Comparaison sans conversion de types

- -
-1 != 2;              // true
-"hello" != "hola";   // true
-
-1 != 1;              // false
-"hello" != "hello";  // false
-
- -

Comparaison avec conversion de types

- -
-"1" !=  1;            // false
-1 != "1";             // false
-0 != false;           // false
-0 != null;            // true
-0 != undefined;       // true
-0 != !!null;          // false, voir la documentation pour !!
-0 != !!undefined;     // false, voir la documentation pour !!
-null != undefined;    // false
-
-const number1 = new Number(3);
-const number2 = new Number(3);
-number1 != 3;         // false
-number1 != number2;   // true
-
- -

Comparaison d'objets

- -
-const objet1 = {"clé": "valeur"}
-const objet2 = {"clé": "valeur"};
-
-objet1 != objet2 // true
-objet2 != objet2 // false
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/inequality/index.md b/files/fr/web/javascript/reference/operators/inequality/index.md new file mode 100644 index 0000000000..d9465f8ba5 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/inequality/index.md @@ -0,0 +1,102 @@ +--- +title: Inégalité (!=) +slug: Web/JavaScript/Reference/Operators/Inequality +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.inequality +translation-of: Web/JavaScript/Reference/Operators/Inequality +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'inégalité (!=) vérifie si ses deux opérandes ne sont pas égaux et renvoie un booléen correspondant au résultat. À la différence de l'opérateur d'inégalité stricte, l'opérateur d'inégalité tente une conversion de ses opérandes avant la comparaison si ceux-ci sont de types différents.

+ +
{{EmbedInteractiveExample("pages/js/expressions-inequality.html")}}
+ +

Syntaxe

+ +
+x != y
+
+ +

Description

+ +

L'opérateur d'inégalité vérifie si ses deux opérandes ne sont pas égaux. Il s'agit de la négation de l'opérateur d'égalité et les deux lignes suivantes fourniront donc toujours le même résultat :

+ +
+x != y
+!(x == y)
+
+ +

Pour plus de détails sur l'algorithme de comparaison utilisé, voir la page relative à l'opérateur d'égalité. +

+ +

À l'instar de l'opérateur d'égalité, l'opérateur d'inégalité tentera une conversion des opérandes si ceux-ci ne sont pas de même type :

+ +
+3 != "3"; // false
+
+ +

Si cette conversion implicite n'est pas souhaitable et qu'on souhaite considérer des valeurs de types différents comme étant différentes, on privilégiera l'opérateur d'inégalité stricte à la place :

+ +
+3 !== "3"; // true
+
+ +

Exemples

+ +

Comparaison sans conversion de types

+ +
+1 != 2;              // true
+"hello" != "hola";   // true
+
+1 != 1;              // false
+"hello" != "hello";  // false
+
+ +

Comparaison avec conversion de types

+ +
+"1" !=  1;            // false
+1 != "1";             // false
+0 != false;           // false
+0 != null;            // true
+0 != undefined;       // true
+0 != !!null;          // false, voir la documentation pour !!
+0 != !!undefined;     // false, voir la documentation pour !!
+null != undefined;    // false
+
+const number1 = new Number(3);
+const number2 = new Number(3);
+number1 != 3;         // false
+number1 != number2;   // true
+
+ +

Comparaison d'objets

+ +
+const objet1 = {"clé": "valeur"}
+const objet2 = {"clé": "valeur"};
+
+objet1 != objet2 // true
+objet2 != objet2 // false
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/instanceof/index.html b/files/fr/web/javascript/reference/operators/instanceof/index.html deleted file mode 100644 index c620472cbe..0000000000 --- a/files/fr/web/javascript/reference/operators/instanceof/index.html +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: instanceof -slug: Web/JavaScript/Reference/Operators/instanceof -tags: - - JavaScript - - Operator - - Prototype - - Reference - - instanceof -translation_of: Web/JavaScript/Reference/Operators/instanceof -original_slug: Web/JavaScript/Reference/Opérateurs/instanceof ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur instanceof permet de tester si un objet possède, dans sa chaîne de prototype, la propriété prototype d'un certain constructeur.

- -
{{EmbedInteractiveExample("pages/js/expressions-instanceof.html")}}
- -

Syntaxe

- -
objet instanceof constructeur
- -

Paramètres

- -
-
objet
-
L'objet qu'on souhaite analyser.
-
constructeur
-
La fonction dont on souhaite vérifier la présence dans la chaîne de prototypes.
-
- -

Description

- -

L'opérateur instanceof teste la présence de constructeur.prototype dans la chaîne de prototypes d'objet.

- -
function C(){} // Définition du constructeur
-function D(){} // Définition d'un autre constructeur
-
-var o = new C();
-
-// true, car : Object.getPrototypeOf(o) === C.prototype
-o instanceof C;
-
-// false, car D.prototype n'existe pas dans la chaîne de prototype de o
-o instanceof D;
-
-o instanceof Object; // true, car:
-C.prototype instanceof Object // true
-
-C.prototype = {};
-var o2 = new C();
-
-o2 instanceof C; // true
-
-// false, car C.prototype n'existe plus dans la chaîne de prototype de o
-o instanceof C;
-
-D.prototype = new C(); // Utilisation de l'héritage
-var o3 = new D();
-o3 instanceof D; // true
-o3 instanceof C; // true car C.prototype fait partie de la chaîne de o3
-
- -

À noter que la valeur retournée par instanceof peut être différente suite à un changement de la propriété prototype du constructeur, notamment via la méthode Object.setPrototypeOf(). On peut aussi utiliser la pseudo-propriété __proto__ qui n'était pas standard avant ECMAScript 2015.

- -

instanceof dans d'autres contextes (frames ou fenêtres)

- -

Différents niveaux d'intégrations ont différents environnements. Cela signifie que les valeurs retournées sont différentes (objet globaux différents, constructeurs différents, etc.). Cela peut engendrer des résultats inattendus. Par exemple, [] instanceof window.frames[0].Array renverra false, car Array !== window.frames[0].Array et que les tableaux héritent de leur constructeur.

- -

Cela peut être contre-intuitif au début, mais lorsqu'il est nécessaire de travailler avec plusieurs frames ou fenêtres, et que des objets sont transférés via des fonctions, cela sera un obstacle valide et important. Par contre, il est tout à fait possible d'utiliser Array.isArray(myObj) pour vérifier de manière sécurisée qu'un tableau est effectivement un tableau.

- -

Ainsi, pour vérifier qu'un nœud est bien un objet de type SVGElement dans un autre contexte, on pourra utiliser monNœud instanceof monNœud.documentMaitre.vue.SVGElement.

- -

Exemples

- -

Démonstration que String et Date sont de type Object et cas aux limites des littéraux

- -

Le code suivant utilise instanceof pour démontrer que les objets String et Date sont aussi de type Object (ils dérivent d'Object).

- -

Cependant, les objets créés à partir de littéraux objets sont une exception : en effet, bien que leur prototype ne soit pas défini, instanceof Object renvoie true.

- -
var chaîneSimple = "Une chaîne simple";
-var maChaîne  = new String();
-var newChaîne = new String("Chaîne créée avec un constructeur");
-var maDate    = new Date();
-var monObjet  = {};
-var monNonObjet = Object.create(null);
-
-chaîneSimple instanceof String; //false car le prototype vaut undefined
-maChaîne  instanceof String; // true
-newChaîne instanceof String; // true
-maChaîne  instanceof Object; // true
-
-monObjet instanceof Object;  // true, bien que le protoype soit undefined
-({}) instanceof Object;      // true, comme pour le cas précédent
-monNonObjet instance Object; // false
-
-maChaîne instanceof Date;   // false
-
-maDate instanceof Date;     // true
-maDate instanceof Object;   // true
-maDate instanceof String;   // false
-
- -

Démonstration que mavoiture est de type Voiture et de type Object

- -

Le code suivant créé un objet de type Voiture et une instance de cet objet, mavoiture. L'opérateur instanceof montre que l'objet mavoiture est de type Voiture et de type Object.

- -
function Voiture(fabricant, modele, annee) {
-  this.fabricant = fabricant;
-  this.modele = modele;
-  this.annee = annee;
-}
-var mavoiture = new Voiture("Citroën", "C3", 2006);
-var a = mavoiture instanceof Voiture; // retourne true
-var b = mavoiture instanceof Object;  // retourne true
-
- -

Attention à la précédence des opérateurs

- -

Pour tester qu'un objet n'est pas une instance d'un constructeur donné, on pourra faire le test !(monObj instanceof Constructor). Toutefois, attention à ne pas écrire !monObj instanceof Constructor car !monObj serait traité en priorité et on testerait donc false instanceof Constructor qui sera toujours faux.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-relational-operators', 'Opérateurs relationnels')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.8.6', 'Opérateur instanceof')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.8.6', 'Opérateur instanceof')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.instanceof")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/instanceof/index.md b/files/fr/web/javascript/reference/operators/instanceof/index.md new file mode 100644 index 0000000000..c620472cbe --- /dev/null +++ b/files/fr/web/javascript/reference/operators/instanceof/index.md @@ -0,0 +1,164 @@ +--- +title: instanceof +slug: Web/JavaScript/Reference/Operators/instanceof +tags: + - JavaScript + - Operator + - Prototype + - Reference + - instanceof +translation_of: Web/JavaScript/Reference/Operators/instanceof +original_slug: Web/JavaScript/Reference/Opérateurs/instanceof +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur instanceof permet de tester si un objet possède, dans sa chaîne de prototype, la propriété prototype d'un certain constructeur.

+ +
{{EmbedInteractiveExample("pages/js/expressions-instanceof.html")}}
+ +

Syntaxe

+ +
objet instanceof constructeur
+ +

Paramètres

+ +
+
objet
+
L'objet qu'on souhaite analyser.
+
constructeur
+
La fonction dont on souhaite vérifier la présence dans la chaîne de prototypes.
+
+ +

Description

+ +

L'opérateur instanceof teste la présence de constructeur.prototype dans la chaîne de prototypes d'objet.

+ +
function C(){} // Définition du constructeur
+function D(){} // Définition d'un autre constructeur
+
+var o = new C();
+
+// true, car : Object.getPrototypeOf(o) === C.prototype
+o instanceof C;
+
+// false, car D.prototype n'existe pas dans la chaîne de prototype de o
+o instanceof D;
+
+o instanceof Object; // true, car:
+C.prototype instanceof Object // true
+
+C.prototype = {};
+var o2 = new C();
+
+o2 instanceof C; // true
+
+// false, car C.prototype n'existe plus dans la chaîne de prototype de o
+o instanceof C;
+
+D.prototype = new C(); // Utilisation de l'héritage
+var o3 = new D();
+o3 instanceof D; // true
+o3 instanceof C; // true car C.prototype fait partie de la chaîne de o3
+
+ +

À noter que la valeur retournée par instanceof peut être différente suite à un changement de la propriété prototype du constructeur, notamment via la méthode Object.setPrototypeOf(). On peut aussi utiliser la pseudo-propriété __proto__ qui n'était pas standard avant ECMAScript 2015.

+ +

instanceof dans d'autres contextes (frames ou fenêtres)

+ +

Différents niveaux d'intégrations ont différents environnements. Cela signifie que les valeurs retournées sont différentes (objet globaux différents, constructeurs différents, etc.). Cela peut engendrer des résultats inattendus. Par exemple, [] instanceof window.frames[0].Array renverra false, car Array !== window.frames[0].Array et que les tableaux héritent de leur constructeur.

+ +

Cela peut être contre-intuitif au début, mais lorsqu'il est nécessaire de travailler avec plusieurs frames ou fenêtres, et que des objets sont transférés via des fonctions, cela sera un obstacle valide et important. Par contre, il est tout à fait possible d'utiliser Array.isArray(myObj) pour vérifier de manière sécurisée qu'un tableau est effectivement un tableau.

+ +

Ainsi, pour vérifier qu'un nœud est bien un objet de type SVGElement dans un autre contexte, on pourra utiliser monNœud instanceof monNœud.documentMaitre.vue.SVGElement.

+ +

Exemples

+ +

Démonstration que String et Date sont de type Object et cas aux limites des littéraux

+ +

Le code suivant utilise instanceof pour démontrer que les objets String et Date sont aussi de type Object (ils dérivent d'Object).

+ +

Cependant, les objets créés à partir de littéraux objets sont une exception : en effet, bien que leur prototype ne soit pas défini, instanceof Object renvoie true.

+ +
var chaîneSimple = "Une chaîne simple";
+var maChaîne  = new String();
+var newChaîne = new String("Chaîne créée avec un constructeur");
+var maDate    = new Date();
+var monObjet  = {};
+var monNonObjet = Object.create(null);
+
+chaîneSimple instanceof String; //false car le prototype vaut undefined
+maChaîne  instanceof String; // true
+newChaîne instanceof String; // true
+maChaîne  instanceof Object; // true
+
+monObjet instanceof Object;  // true, bien que le protoype soit undefined
+({}) instanceof Object;      // true, comme pour le cas précédent
+monNonObjet instance Object; // false
+
+maChaîne instanceof Date;   // false
+
+maDate instanceof Date;     // true
+maDate instanceof Object;   // true
+maDate instanceof String;   // false
+
+ +

Démonstration que mavoiture est de type Voiture et de type Object

+ +

Le code suivant créé un objet de type Voiture et une instance de cet objet, mavoiture. L'opérateur instanceof montre que l'objet mavoiture est de type Voiture et de type Object.

+ +
function Voiture(fabricant, modele, annee) {
+  this.fabricant = fabricant;
+  this.modele = modele;
+  this.annee = annee;
+}
+var mavoiture = new Voiture("Citroën", "C3", 2006);
+var a = mavoiture instanceof Voiture; // retourne true
+var b = mavoiture instanceof Object;  // retourne true
+
+ +

Attention à la précédence des opérateurs

+ +

Pour tester qu'un objet n'est pas une instance d'un constructeur donné, on pourra faire le test !(monObj instanceof Constructor). Toutefois, attention à ne pas écrire !monObj instanceof Constructor car !monObj serait traité en priorité et on testerait donc false instanceof Constructor qui sera toujours faux.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-relational-operators', 'Opérateurs relationnels')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.8.6', 'Opérateur instanceof')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.8.6', 'Opérateur instanceof')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.instanceof")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/left_shift/index.html b/files/fr/web/javascript/reference/operators/left_shift/index.html deleted file mode 100644 index 325adc9947..0000000000 --- a/files/fr/web/javascript/reference/operators/left_shift/index.html +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Décalage binaire à gauche (<<) -slug: Web/JavaScript/Reference/Operators/Left_shift -tags: - - Bitwise operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.left_shift -translation-of: Web/JavaScript/Reference/Operators/Left_shift ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de décalage binaire à gauche (<<) décale la séquence de bits représentée par le premier opérande d'autant de bits vers la gauche que le nombre indiqué par le second opérande. Les bits en excès à gauche sont écartés et des bits à zéro sont introduits à droite.

- -
{{EmbedInteractiveExample("pages/js/expressions-left-shift.html")}}
- -

Syntaxe

- -
-a << b
-
- -

Description

- -

Cet opérateur décale les bits du premier opérande vers la gauche, d'autant que le nombre indiqué par le second opérande. Les bits qui dépassent à gauche sont abandonnés et des zéros sont introduits à droite.

- -

Ainsi, 9 << 2 donnera la valeur 36 (en base 10) :

- -
-       9 (base 10): 00000000000000000000000000001001 (base 2)
-                    --------------------------------
-  9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)
-
- -

Le décalage binaire de tout nombre x de y bits vers la gauche donnera comme résultat x * 2 ** y. Par exemple, 9 << 3 pourra être reformulé en 9 * (2 ** 3) = 9 * (8) = 72.

- -

Exemples

- -

Utiliser le décalage binaire à gauche

- -
-9 << 3; // 72
-
-// 9 * (2 ** 3) = 9 * (8) = 72
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/left_shift/index.md b/files/fr/web/javascript/reference/operators/left_shift/index.md new file mode 100644 index 0000000000..325adc9947 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/left_shift/index.md @@ -0,0 +1,62 @@ +--- +title: Décalage binaire à gauche (<<) +slug: Web/JavaScript/Reference/Operators/Left_shift +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.left_shift +translation-of: Web/JavaScript/Reference/Operators/Left_shift +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de décalage binaire à gauche (<<) décale la séquence de bits représentée par le premier opérande d'autant de bits vers la gauche que le nombre indiqué par le second opérande. Les bits en excès à gauche sont écartés et des bits à zéro sont introduits à droite.

+ +
{{EmbedInteractiveExample("pages/js/expressions-left-shift.html")}}
+ +

Syntaxe

+ +
+a << b
+
+ +

Description

+ +

Cet opérateur décale les bits du premier opérande vers la gauche, d'autant que le nombre indiqué par le second opérande. Les bits qui dépassent à gauche sont abandonnés et des zéros sont introduits à droite.

+ +

Ainsi, 9 << 2 donnera la valeur 36 (en base 10) :

+ +
+       9 (base 10): 00000000000000000000000000001001 (base 2)
+                    --------------------------------
+  9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)
+
+ +

Le décalage binaire de tout nombre x de y bits vers la gauche donnera comme résultat x * 2 ** y. Par exemple, 9 << 3 pourra être reformulé en 9 * (2 ** 3) = 9 * (8) = 72.

+ +

Exemples

+ +

Utiliser le décalage binaire à gauche

+ +
+9 << 3; // 72
+
+// 9 * (2 ** 3) = 9 * (8) = 72
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/left_shift_assignment/index.html b/files/fr/web/javascript/reference/operators/left_shift_assignment/index.html deleted file mode 100644 index 85b349301b..0000000000 --- a/files/fr/web/javascript/reference/operators/left_shift_assignment/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Affectation après décalage à gauche (<<=) -slug: Web/JavaScript/Reference/Operators/Left_shift_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -translation-of: Web/JavaScript/Reference/Operators/Left_shift_assignment -browser-compat: javascript.operators.left_shift_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de décalage à gauche et d'affectation (<<=) décale la séquence de bits représentée par l'opérande gauche d'autant de bits qu'indiqué par l'opérande droit puis affecte le résultat obtenu à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-left-shift-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x <<= y
-Signification :  x   = x << y
-
- -

Exemples

- -

Utiliser l'opérateur de décalage à gauche et d'affectation

- -
-let a = 5;
-// 00000000000000000000000000000101
-
-a <<= 2; // 20
-// 00000000000000000000000000010100
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/left_shift_assignment/index.md b/files/fr/web/javascript/reference/operators/left_shift_assignment/index.md new file mode 100644 index 0000000000..85b349301b --- /dev/null +++ b/files/fr/web/javascript/reference/operators/left_shift_assignment/index.md @@ -0,0 +1,51 @@ +--- +title: Affectation après décalage à gauche (<<=) +slug: Web/JavaScript/Reference/Operators/Left_shift_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +translation-of: Web/JavaScript/Reference/Operators/Left_shift_assignment +browser-compat: javascript.operators.left_shift_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de décalage à gauche et d'affectation (<<=) décale la séquence de bits représentée par l'opérande gauche d'autant de bits qu'indiqué par l'opérande droit puis affecte le résultat obtenu à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-left-shift-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x <<= y
+Signification :  x   = x << y
+
+ +

Exemples

+ +

Utiliser l'opérateur de décalage à gauche et d'affectation

+ +
+let a = 5;
+// 00000000000000000000000000000101
+
+a <<= 2; // 20
+// 00000000000000000000000000010100
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/less_than/index.html b/files/fr/web/javascript/reference/operators/less_than/index.html deleted file mode 100644 index 5748798f15..0000000000 --- a/files/fr/web/javascript/reference/operators/less_than/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Inférieur strict (<) -slug: Web/JavaScript/Reference/Operators/Less_than -tags: - - JavaScript - - Language feature - - Operator - - Reference -translation-of: Web/JavaScript/Reference/Operators/Less_than -browser-compat: javascript.operators.less_than ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur inférieur strict (<) renvoie true si son opérande gauche est strictement inférieur à son opérande droit et false sinon.

- -
{{EmbedInteractiveExample("pages/js/expressions-less-than.html")}}
- -

Syntaxe

- -
-x < y
-
- -

Description

- -

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle résumé comme suit :

- - - -

Exemples

- -

Comparaison numérique

- -
-console.log(5 < 3);            // false
-console.log(3 < 3);            // false
-console.log(3 < 5);            // true
-
- -

Comparaison entre un nombre et un BigInt

- -
-console.log(5n < 3);           // false
-console.log(3 < 5n);           // true
-
- -

Comparaison entre chaînes de caractères

- -
-console.log("a" < "b");        // true
-console.log("a" < "a");        // false
-console.log("a" < "3");        // false
-
- -

Comparaison entre nombres et chaînes de caractères

- -
-console.log("5" < 3);          // false
-console.log("3" < 3);          // false
-console.log("3" < 5);          // true
-
-console.log("coucou" < 5);      // false
-console.log(5 < "coucou");      // false
-
-console.log("5" < 3n);         // false
-console.log("3" < 5n);         // true
-
- -

Comparaison avec des booléens, null, undefined, NaN

- -
-console.log(true < false);     // false
-console.log(false < true);     // true
-
-console.log(0 < true);         // true
-console.log(true < 1);         // false
-
-console.log(null < 0);         // false
-console.log(null < 1);         // true
-
-console.log(undefined < 3);    // false
-console.log(3 < undefined);    // false
-
-console.log(3 < NaN);          // false
-console.log(NaN < 3);          // false
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/less_than/index.md b/files/fr/web/javascript/reference/operators/less_than/index.md new file mode 100644 index 0000000000..5748798f15 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/less_than/index.md @@ -0,0 +1,115 @@ +--- +title: Inférieur strict (<) +slug: Web/JavaScript/Reference/Operators/Less_than +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation-of: Web/JavaScript/Reference/Operators/Less_than +browser-compat: javascript.operators.less_than +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur inférieur strict (<) renvoie true si son opérande gauche est strictement inférieur à son opérande droit et false sinon.

+ +
{{EmbedInteractiveExample("pages/js/expressions-less-than.html")}}
+ +

Syntaxe

+ +
+x < y
+
+ +

Description

+ +

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle résumé comme suit :

+ + + +

Exemples

+ +

Comparaison numérique

+ +
+console.log(5 < 3);            // false
+console.log(3 < 3);            // false
+console.log(3 < 5);            // true
+
+ +

Comparaison entre un nombre et un BigInt

+ +
+console.log(5n < 3);           // false
+console.log(3 < 5n);           // true
+
+ +

Comparaison entre chaînes de caractères

+ +
+console.log("a" < "b");        // true
+console.log("a" < "a");        // false
+console.log("a" < "3");        // false
+
+ +

Comparaison entre nombres et chaînes de caractères

+ +
+console.log("5" < 3);          // false
+console.log("3" < 3);          // false
+console.log("3" < 5);          // true
+
+console.log("coucou" < 5);      // false
+console.log(5 < "coucou");      // false
+
+console.log("5" < 3n);         // false
+console.log("3" < 5n);         // true
+
+ +

Comparaison avec des booléens, null, undefined, NaN

+ +
+console.log(true < false);     // false
+console.log(false < true);     // true
+
+console.log(0 < true);         // true
+console.log(true < 1);         // false
+
+console.log(null < 0);         // false
+console.log(null < 1);         // true
+
+console.log(undefined < 3);    // false
+console.log(3 < undefined);    // false
+
+console.log(3 < NaN);          // false
+console.log(NaN < 3);          // false
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/less_than_or_equal/index.html b/files/fr/web/javascript/reference/operators/less_than_or_equal/index.html deleted file mode 100644 index 19d84e0f8c..0000000000 --- a/files/fr/web/javascript/reference/operators/less_than_or_equal/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Inférieur ou égal (<=) -slug: Web/JavaScript/Reference/Operators/Less_than_or_equal -tags: - - JavaScript - - Language feature - - Operator - - Reference -translation-of: Web/JavaScript/Reference/Operators/Less_than_or_equal -browser-compat: javascript.operators.less_than_or_equal ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur inférieur ou égal (<=) renvoie true si l'opérande gauche est inférieur ou égal à l'opérande droit et false sinon.

- -
{{EmbedInteractiveExample("pages/js/expressions-less-than-or-equal.html")}}
- -

Syntaxe

- -
-x <= y
-
- -

Description

- -

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle. Voir la documentation de l'opérateur inférieur strict pour un résumé de cet algorithme.

- -

Exemples

- -

Comparaison numérique

- -
-console.log(5 <= 3);         // false
-console.log(3 <= 3);         // true
-console.log(3 <= 5);         // true
-
- -

Comparaison entre un nombre et un BigInt

- -
-console.log(5n <= 3);        // false
-console.log(3 <= 3n);        // true
-console.log(3 <= 5n);        // true
-
- -

Comparaison entre chaînes de caractères

- -
-console.log("a" <= "b");     // true
-console.log("a" <= "a");     // true
-console.log("a" <= "3");     // false
-
- -

Comparaison entre nombres et chaînes de caractères

- -
-console.log("5" <= 3);       // false
-console.log("3" <= 3);       // true
-console.log("3" <= 5);       // true
-
-console.log("coucou" <= 5);   // false
-console.log(5 <= "coucou");   // false
-
- -

Comparaison avec des booléens, null, undefined, NaN

- -
-console.log(true <= false);  // false
-console.log(true <= true);   // true
-console.log(false <= true);  // true
-
-console.log(true <= 0);      // false
-console.log(true <= 1);      // true
-
-console.log(null <= 0);      // true
-console.log(1 <= null);      // false
-
-console.log(undefined <= 3); // false
-console.log(3 <= undefined); // false
-
-console.log(3 <= NaN);       // false
-console.log(NaN <= 3);       // false
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/less_than_or_equal/index.md b/files/fr/web/javascript/reference/operators/less_than_or_equal/index.md new file mode 100644 index 0000000000..19d84e0f8c --- /dev/null +++ b/files/fr/web/javascript/reference/operators/less_than_or_equal/index.md @@ -0,0 +1,99 @@ +--- +title: Inférieur ou égal (<=) +slug: Web/JavaScript/Reference/Operators/Less_than_or_equal +tags: + - JavaScript + - Language feature + - Operator + - Reference +translation-of: Web/JavaScript/Reference/Operators/Less_than_or_equal +browser-compat: javascript.operators.less_than_or_equal +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur inférieur ou égal (<=) renvoie true si l'opérande gauche est inférieur ou égal à l'opérande droit et false sinon.

+ +
{{EmbedInteractiveExample("pages/js/expressions-less-than-or-equal.html")}}
+ +

Syntaxe

+ +
+x <= y
+
+ +

Description

+ +

Les opérandes sont comparés avec l'algorithme de comparaison abstraite relationnelle. Voir la documentation de l'opérateur inférieur strict pour un résumé de cet algorithme.

+ +

Exemples

+ +

Comparaison numérique

+ +
+console.log(5 <= 3);         // false
+console.log(3 <= 3);         // true
+console.log(3 <= 5);         // true
+
+ +

Comparaison entre un nombre et un BigInt

+ +
+console.log(5n <= 3);        // false
+console.log(3 <= 3n);        // true
+console.log(3 <= 5n);        // true
+
+ +

Comparaison entre chaînes de caractères

+ +
+console.log("a" <= "b");     // true
+console.log("a" <= "a");     // true
+console.log("a" <= "3");     // false
+
+ +

Comparaison entre nombres et chaînes de caractères

+ +
+console.log("5" <= 3);       // false
+console.log("3" <= 3);       // true
+console.log("3" <= 5);       // true
+
+console.log("coucou" <= 5);   // false
+console.log(5 <= "coucou");   // false
+
+ +

Comparaison avec des booléens, null, undefined, NaN

+ +
+console.log(true <= false);  // false
+console.log(true <= true);   // true
+console.log(false <= true);  // true
+
+console.log(true <= 0);      // false
+console.log(true <= 1);      // true
+
+console.log(null <= 0);      // true
+console.log(1 <= null);      // false
+
+console.log(undefined <= 3); // false
+console.log(3 <= undefined); // false
+
+console.log(3 <= NaN);       // false
+console.log(NaN <= 3);       // false
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/logical_and/index.html b/files/fr/web/javascript/reference/operators/logical_and/index.html deleted file mode 100644 index c40d0a1c2c..0000000000 --- a/files/fr/web/javascript/reference/operators/logical_and/index.html +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: ET logique (&&) -slug: Web/JavaScript/Reference/Operators/Logical_AND -tags: - - JavaScript - - Language feature - - Logical Operator - - Operator - - Reference -browser-compat: javascript.operators.logical_and -translation-of: Web/JavaScript/Reference/Operators/Logical_AND ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur ET logique (&&) (conjonction logique) renvoie vrai si et uniquement si ses deux opérandes sont true ou équivalents à true. Il est généralement utilisé avec des valeurs booléennes et, quand c'est le cas, il renvoie une valeur booléenne. Toutefois, l'opérateur && renvoie en fait la valeur d'un de ses opérandes et, si cet opérateur est utilisé avec des valeurs non-booléennes, il renverra une valeur non-booléenne.

- -
{{EmbedInteractiveExample("pages/js/expressions-logical-and.html", "shorter")}}
- -

Syntaxe

- -
-expr1 && expr2
-
- -

Description

- -

Si expr1 peut être converti en true, le résultat sera expr2 ; sinon, ce sera expr1. -

- -

Si une valeur peut être convertie en true, elle peut être qualifiée de truthy. Si une valeur peut être convertie en false, on la qualifiera alors de falsy.

- -

Parmi les expressions qui peuvent être converties en false, on a :

- - - -

Bien que l'opérateur && puisse être utilisé avec des opérandes qui ne soient pas des valeurs booléennes, il reste un opérateur booléen, car sa valeur de retour peut toujours être convertie en une valeur primitive booléenne. Pour convertir explicitement la valeur de retour (ou tout expression de façon plus générale) dans sa valeur booléenne correspondante, on pourra utiliser un double opérateur NON (!) ou le constructeur Boolean().

- -

Évaluation en court-circuit

- -

L'expression utilisant un ET logique est évaluée de gauche à droite. Le moteur cherche s'il est possible d'utiliser un court-circuit de la façon suivante :

- -

(une expression équivalente à faux) && expr sera court-circuité pour fournir directement le résultat de l'expression équivalente à faux.

- -

Cette notion de court-circuit indique que la partie expr ci-avant n'est pas évaluée, tout effet de bord lié à cette évaluation n'aura pas lieu (par exemple, si expr est un appel de fonction, la fonction n'est pas appelée). Ce fonctionnement a lieu, car la valeur du résultat peut d'office être déterminée par l'évaluation du premier opérande. Par exemple :

- -
-function A(){
-  console.log('A a été appelée');
-  return false;
-}
-
-function B(){
-  console.log('B a été appelée');
-  return true;
-}
-
-console.log( A() && B() );
-// affichera "A a été appelée" dans la console via l'appel de la fonction
-// puis affichera false (la valeur du résultat de l'expression avec l'opérateur)
-// on voit que la fonction B n'est pas du tout appelée
-
- -

Précédence des opérateurs

- -

Les expressions suivantes peuvent sembler équivalentes mais ne le sont pas. En effet, l'opérateur && est exécuté avant l'opérateur || (voir l'article sur la précédence des opérateurs).

- -
-true || false && false      // renvoie true, car && est exécuté en premier
-(true || false) && false    // renvoie false, car la précédence par défaut ne s'applique pas
-                                    // avec les parenthèses
-
- -

Exemples

- -

Utiliser le ET logique

- -

Le code suivant illustre quelques usages de l'opérateur ET logique &&.

- -
-a1 = true   && true       // t && t renvoie true
-a2 = true   && false      // t && f renvoie false
-a3 = false  && true       // f && t renvoie false
-a4 = false  && (3 == 4)   // f && f renvoie false
-a5 = 'Chat' && 'Chien'    // t && t renvoie "Chien"
-a6 = false  && 'Chat'     // f && t renvoie false
-a7 = 'Chat' && false      // t && f renvoie false
-a8 = ''     && false      // f && f renvoie ""
-a9 = false  && ''         // f && f renvoie false
-
- -

Règles de conversion booléennes

- -

Convertir ET en OU

- -

L'opération suivante, utilisant des booléens :

- -
-bCondition1 && bCondition2
-
- -

sera toujours équivalente à :

- -
-!(!bCondition1 || !bCondition2)
-
- -

Convertir OU en ET

- -

L'opération suivante, utilisant des booléens :

- -
-bCondition1 || bCondition2
-
- -

sera toujours équivalente à :

- -
-!(!bCondition1 && !bCondition2)
-
- -

Retrait des parenthèses imbriquées

- -

Les expressions logiques sont évaluées de gauche à droite, il est donc possible de retirer les parenthèses d'une expression complexe en suivant quelques règles.

- -

L'opération composite suivant, qui utilise des booléens :

- -
-bCondition1 || (bCondition2 && bCondition3)
-
- -

sera toujours égale à :

- -
-bCondition1 || bCondition2 && bCondition3
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/logical_and/index.md b/files/fr/web/javascript/reference/operators/logical_and/index.md new file mode 100644 index 0000000000..c40d0a1c2c --- /dev/null +++ b/files/fr/web/javascript/reference/operators/logical_and/index.md @@ -0,0 +1,157 @@ +--- +title: ET logique (&&) +slug: Web/JavaScript/Reference/Operators/Logical_AND +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference +browser-compat: javascript.operators.logical_and +translation-of: Web/JavaScript/Reference/Operators/Logical_AND +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur ET logique (&&) (conjonction logique) renvoie vrai si et uniquement si ses deux opérandes sont true ou équivalents à true. Il est généralement utilisé avec des valeurs booléennes et, quand c'est le cas, il renvoie une valeur booléenne. Toutefois, l'opérateur && renvoie en fait la valeur d'un de ses opérandes et, si cet opérateur est utilisé avec des valeurs non-booléennes, il renverra une valeur non-booléenne.

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-and.html", "shorter")}}
+ +

Syntaxe

+ +
+expr1 && expr2
+
+ +

Description

+ +

Si expr1 peut être converti en true, le résultat sera expr2 ; sinon, ce sera expr1. +

+ +

Si une valeur peut être convertie en true, elle peut être qualifiée de truthy. Si une valeur peut être convertie en false, on la qualifiera alors de falsy.

+ +

Parmi les expressions qui peuvent être converties en false, on a :

+ + + +

Bien que l'opérateur && puisse être utilisé avec des opérandes qui ne soient pas des valeurs booléennes, il reste un opérateur booléen, car sa valeur de retour peut toujours être convertie en une valeur primitive booléenne. Pour convertir explicitement la valeur de retour (ou tout expression de façon plus générale) dans sa valeur booléenne correspondante, on pourra utiliser un double opérateur NON (!) ou le constructeur Boolean().

+ +

Évaluation en court-circuit

+ +

L'expression utilisant un ET logique est évaluée de gauche à droite. Le moteur cherche s'il est possible d'utiliser un court-circuit de la façon suivante :

+ +

(une expression équivalente à faux) && expr sera court-circuité pour fournir directement le résultat de l'expression équivalente à faux.

+ +

Cette notion de court-circuit indique que la partie expr ci-avant n'est pas évaluée, tout effet de bord lié à cette évaluation n'aura pas lieu (par exemple, si expr est un appel de fonction, la fonction n'est pas appelée). Ce fonctionnement a lieu, car la valeur du résultat peut d'office être déterminée par l'évaluation du premier opérande. Par exemple :

+ +
+function A(){
+  console.log('A a été appelée');
+  return false;
+}
+
+function B(){
+  console.log('B a été appelée');
+  return true;
+}
+
+console.log( A() && B() );
+// affichera "A a été appelée" dans la console via l'appel de la fonction
+// puis affichera false (la valeur du résultat de l'expression avec l'opérateur)
+// on voit que la fonction B n'est pas du tout appelée
+
+ +

Précédence des opérateurs

+ +

Les expressions suivantes peuvent sembler équivalentes mais ne le sont pas. En effet, l'opérateur && est exécuté avant l'opérateur || (voir l'article sur la précédence des opérateurs).

+ +
+true || false && false      // renvoie true, car && est exécuté en premier
+(true || false) && false    // renvoie false, car la précédence par défaut ne s'applique pas
+                                    // avec les parenthèses
+
+ +

Exemples

+ +

Utiliser le ET logique

+ +

Le code suivant illustre quelques usages de l'opérateur ET logique &&.

+ +
+a1 = true   && true       // t && t renvoie true
+a2 = true   && false      // t && f renvoie false
+a3 = false  && true       // f && t renvoie false
+a4 = false  && (3 == 4)   // f && f renvoie false
+a5 = 'Chat' && 'Chien'    // t && t renvoie "Chien"
+a6 = false  && 'Chat'     // f && t renvoie false
+a7 = 'Chat' && false      // t && f renvoie false
+a8 = ''     && false      // f && f renvoie ""
+a9 = false  && ''         // f && f renvoie false
+
+ +

Règles de conversion booléennes

+ +

Convertir ET en OU

+ +

L'opération suivante, utilisant des booléens :

+ +
+bCondition1 && bCondition2
+
+ +

sera toujours équivalente à :

+ +
+!(!bCondition1 || !bCondition2)
+
+ +

Convertir OU en ET

+ +

L'opération suivante, utilisant des booléens :

+ +
+bCondition1 || bCondition2
+
+ +

sera toujours équivalente à :

+ +
+!(!bCondition1 && !bCondition2)
+
+ +

Retrait des parenthèses imbriquées

+ +

Les expressions logiques sont évaluées de gauche à droite, il est donc possible de retirer les parenthèses d'une expression complexe en suivant quelques règles.

+ +

L'opération composite suivant, qui utilise des booléens :

+ +
+bCondition1 || (bCondition2 && bCondition3)
+
+ +

sera toujours égale à :

+ +
+bCondition1 || bCondition2 && bCondition3
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/logical_and_assignment/index.html b/files/fr/web/javascript/reference/operators/logical_and_assignment/index.html deleted file mode 100644 index e788d794d6..0000000000 --- a/files/fr/web/javascript/reference/operators/logical_and_assignment/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Affectation après ET logique (&&=) -slug: Web/JavaScript/Reference/Operators/Logical_AND_assignment -tags: - - JavaScript - - Language feature - - Logical assignment - - Operator - - Reference -browser-compat: javascript.operators.logical_and_assignment -translation-of: Web/JavaScript/Reference/Operators/Logical_AND_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'affectation après ET logique (x &&= y) n'affecte la valeur de l'opérande droit uniquement si l'opérande gauche est équivalent à vrai (truthy).

- -
{{EmbedInteractiveExample("pages/js/expressions-logical-and-assignment.html")}}
- -

Syntaxe

- -
-expr1 &&= expr2
-
- -

Description

- -

Évaluation en court-circuit

- -

L'opérateur ET logique est évalué de gauche à droite et le moteur vérifie s'il peut utiliser un court-circuit avec la régle suivante :

- -

(une expression équivalente à faux) && expr sera court-circuitée pour fournir directement l'expression équivalente à faux.

- -

Ce « court-circuit » indique que expr n'est pas évaluée. Tout effet de bord lié à cette évaluation n'aura pas lieu (par exemple si expr est un appel de fonction, la fonction n'est pas exécutée).

- -

L'opérateur d'affectation après ET logique utilise également ce court-circuit et x &&= y est donc équivalent à :

- -
-x && (x = y);
-
- -

En revanche, il n'est pas équivalent à ce qui suit, et qui effectue quoi qu'il arrive une affectation :

- -
-x = x && y;
-
- -

Exemples

- -

Utiliser l'affectation après ET logique

- -
-let x = 0;
-let y = 1;
-
-x &&= 0; // 0
-x &&= 1; // 0
-y &&= 1; // 1
-y &&= 0; // 0
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/logical_and_assignment/index.md b/files/fr/web/javascript/reference/operators/logical_and_assignment/index.md new file mode 100644 index 0000000000..e788d794d6 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/logical_and_assignment/index.md @@ -0,0 +1,78 @@ +--- +title: Affectation après ET logique (&&=) +slug: Web/JavaScript/Reference/Operators/Logical_AND_assignment +tags: + - JavaScript + - Language feature + - Logical assignment + - Operator + - Reference +browser-compat: javascript.operators.logical_and_assignment +translation-of: Web/JavaScript/Reference/Operators/Logical_AND_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'affectation après ET logique (x &&= y) n'affecte la valeur de l'opérande droit uniquement si l'opérande gauche est équivalent à vrai (truthy).

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-and-assignment.html")}}
+ +

Syntaxe

+ +
+expr1 &&= expr2
+
+ +

Description

+ +

Évaluation en court-circuit

+ +

L'opérateur ET logique est évalué de gauche à droite et le moteur vérifie s'il peut utiliser un court-circuit avec la régle suivante :

+ +

(une expression équivalente à faux) && expr sera court-circuitée pour fournir directement l'expression équivalente à faux.

+ +

Ce « court-circuit » indique que expr n'est pas évaluée. Tout effet de bord lié à cette évaluation n'aura pas lieu (par exemple si expr est un appel de fonction, la fonction n'est pas exécutée).

+ +

L'opérateur d'affectation après ET logique utilise également ce court-circuit et x &&= y est donc équivalent à :

+ +
+x && (x = y);
+
+ +

En revanche, il n'est pas équivalent à ce qui suit, et qui effectue quoi qu'il arrive une affectation :

+ +
+x = x && y;
+
+ +

Exemples

+ +

Utiliser l'affectation après ET logique

+ +
+let x = 0;
+let y = 1;
+
+x &&= 0; // 0
+x &&= 1; // 0
+y &&= 1; // 1
+y &&= 0; // 0
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/logical_not/index.html b/files/fr/web/javascript/reference/operators/logical_not/index.html deleted file mode 100644 index da1f26ea14..0000000000 --- a/files/fr/web/javascript/reference/operators/logical_not/index.html +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: NON logique (!) -slug: Web/JavaScript/Reference/Operators/Logical_NOT -tags: - - JavaScript - - Language feature - - Logical Operator - - Operator - - Reference -browser-compat: javascript.operators.logical_not -translation-of: Web/JavaScript/Reference/Operators/Logical_NOT ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur logique NON (!) prend l'opposé logique de la valeur fournie par son opérande. Vrai devient faux et vice versa. Il est généralement utilisé avec les booléens. Lorsque cet opérateur est utilisé avec une valeur non-booléenne, il renvoie false si son opérande peut être converti en true et true sinon.

- -
{{EmbedInteractiveExample("pages/js/expressions-logical-not.html", "shorter")}}
- -

Syntaxe

- -
-!expr
-
- -

Description

- -

Cet opérateur renvoie false si son opérande peut être converti en true ; sinon il renvoie true.

- -

Si une valeur peut être convertie en true, on dira en anglais qu'elle est truthy. À l'inverse, si elle peut être convertie en false, on dira en anglais qu'elle est falsy.

- -

Voici des exemples d'expression qui peuvent être converties en false :

- - - -

Bien que l'opérateur ! puisse être utilisé avec des opérandes non booléens, sa valeur de retour sera toujours un booléen. Pour convertir une valeur (ou une expression) en sa valeur booléenne correspondante, on pourra utiliser un double NON ou le constructeur Boolean.

- -

Exemples

- -

Utiliser NON

- -

Le code suivant illustre l'utilisation de l'opérateur ! pour le NON logique.

- -
-let n1 = !true     // !t renvoie false
-let n2 = !false    // !f renvoie true
-let n3 = !''       // !f renvoie true
-let n4 = !'Cat'    // !t renvoie false
-
- -

Double NON (!!)

- -

Il est possible d'utiliser deux opérateurs NON à la suite pour convertir n'importe quelle valeur en booléen selon qu'elle est truthy ou falsy.

- -

Une conversion équivalente pourra être obtenue avec le constructeur Boolean.

- -
-let n1 = !!true                   // !!truthy renvoie true
-let n2 = !!{}                     // !!truthy renvoie true : tout objet est truthy
-let n3 = !!(new Boolean(false))   // Attention, un objet Boolean est toujours truthy !
-let n4 = !!false                  // !!falsy renvoie false
-let n5 = !!""                     // !!falsy renvoie false
-let n6 = !!Boolean(false)         // !!falsy renvoie false
-
- -

Équivalence booléenne de la double négation

- -

L'expression qui suit, utilisée avec des booléens :

- -
!!bCondition
- -

est toujours égale à :

- -
bCondition
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/logical_not/index.md b/files/fr/web/javascript/reference/operators/logical_not/index.md new file mode 100644 index 0000000000..da1f26ea14 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/logical_not/index.md @@ -0,0 +1,95 @@ +--- +title: NON logique (!) +slug: Web/JavaScript/Reference/Operators/Logical_NOT +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference +browser-compat: javascript.operators.logical_not +translation-of: Web/JavaScript/Reference/Operators/Logical_NOT +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur logique NON (!) prend l'opposé logique de la valeur fournie par son opérande. Vrai devient faux et vice versa. Il est généralement utilisé avec les booléens. Lorsque cet opérateur est utilisé avec une valeur non-booléenne, il renvoie false si son opérande peut être converti en true et true sinon.

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-not.html", "shorter")}}
+ +

Syntaxe

+ +
+!expr
+
+ +

Description

+ +

Cet opérateur renvoie false si son opérande peut être converti en true ; sinon il renvoie true.

+ +

Si une valeur peut être convertie en true, on dira en anglais qu'elle est truthy. À l'inverse, si elle peut être convertie en false, on dira en anglais qu'elle est falsy.

+ +

Voici des exemples d'expression qui peuvent être converties en false :

+ + + +

Bien que l'opérateur ! puisse être utilisé avec des opérandes non booléens, sa valeur de retour sera toujours un booléen. Pour convertir une valeur (ou une expression) en sa valeur booléenne correspondante, on pourra utiliser un double NON ou le constructeur Boolean.

+ +

Exemples

+ +

Utiliser NON

+ +

Le code suivant illustre l'utilisation de l'opérateur ! pour le NON logique.

+ +
+let n1 = !true     // !t renvoie false
+let n2 = !false    // !f renvoie true
+let n3 = !''       // !f renvoie true
+let n4 = !'Cat'    // !t renvoie false
+
+ +

Double NON (!!)

+ +

Il est possible d'utiliser deux opérateurs NON à la suite pour convertir n'importe quelle valeur en booléen selon qu'elle est truthy ou falsy.

+ +

Une conversion équivalente pourra être obtenue avec le constructeur Boolean.

+ +
+let n1 = !!true                   // !!truthy renvoie true
+let n2 = !!{}                     // !!truthy renvoie true : tout objet est truthy
+let n3 = !!(new Boolean(false))   // Attention, un objet Boolean est toujours truthy !
+let n4 = !!false                  // !!falsy renvoie false
+let n5 = !!""                     // !!falsy renvoie false
+let n6 = !!Boolean(false)         // !!falsy renvoie false
+
+ +

Équivalence booléenne de la double négation

+ +

L'expression qui suit, utilisée avec des booléens :

+ +
!!bCondition
+ +

est toujours égale à :

+ +
bCondition
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.html b/files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.html deleted file mode 100644 index 4860c3558b..0000000000 --- a/files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Affectation après coalescence des nuls (??=) -slug: Web/JavaScript/Reference/Operators/Logical_nullish_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Logical Operator - - Operator - - Reference -browser-compat: javascript.operators.logical_nullish_assignment -translation-of: Web/JavaScript/Reference/Operators/Logical_nullish_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'affectation après coalescence des nuls (x ??= y) effectue une affectation uniquement si l'opérande de gauche (x) vaut null ou undefined.

- -
{{EmbedInteractiveExample("pages/js/expressions-logical-nullish-assignment.html")}}
- -

Syntaxe

- -
-expr1 ??= expr2
-
- -

Description

- -

Évaluation en court-circuit

- -

L'opérateur de coalescence des nuls est évalué de gauche à droite et le moteur teste s'il est possible d'utiliser un court-circuit grâce à la règle suivante :

- -

(une expression qui renvoie null ou undefined) ?? expr sera court-circuité pour fournir l'opérande gauche si celle-ci ne vaut ni null ni undefined.

- -

Ce « court-circuit » implique que l'expression expr n'est pas évaluée si ce n'est pas nécessaire. Ainsi, tout effet de bord lié à celle-ci n'aura pas lieu (par exemple, si expr appelle une fonction, cette dernière n'est pas exécutée).

- -

L'opérateur d'affectation après coalescence des nuls obéit également à cette logique. Ainsi, x ??= y sera équivalent à :

- -
-x ?? (x = y);
-
- -

En revanche, ce ne sera pas équivalent à l'expression suivante qui effectue une affectation quoi qu'il arrive :

- -
-x = x ?? y;
-
- -

Exemples

- -

Utiliser l'opérateur d'affectation après coalescence des nuls

- -
-function config(options) {
-  options.duration ??= 100;
-  options.speed ??= 25;
-  return options;
-}
-
-config({ duration: 125 }); // { duration: 125, speed: 25 }
-config({}); // { duration: 100, speed: 25 }
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.md b/files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.md new file mode 100644 index 0000000000..4860c3558b --- /dev/null +++ b/files/fr/web/javascript/reference/operators/logical_nullish_assignment/index.md @@ -0,0 +1,78 @@ +--- +title: Affectation après coalescence des nuls (??=) +slug: Web/JavaScript/Reference/Operators/Logical_nullish_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference +browser-compat: javascript.operators.logical_nullish_assignment +translation-of: Web/JavaScript/Reference/Operators/Logical_nullish_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'affectation après coalescence des nuls (x ??= y) effectue une affectation uniquement si l'opérande de gauche (x) vaut null ou undefined.

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-nullish-assignment.html")}}
+ +

Syntaxe

+ +
+expr1 ??= expr2
+
+ +

Description

+ +

Évaluation en court-circuit

+ +

L'opérateur de coalescence des nuls est évalué de gauche à droite et le moteur teste s'il est possible d'utiliser un court-circuit grâce à la règle suivante :

+ +

(une expression qui renvoie null ou undefined) ?? expr sera court-circuité pour fournir l'opérande gauche si celle-ci ne vaut ni null ni undefined.

+ +

Ce « court-circuit » implique que l'expression expr n'est pas évaluée si ce n'est pas nécessaire. Ainsi, tout effet de bord lié à celle-ci n'aura pas lieu (par exemple, si expr appelle une fonction, cette dernière n'est pas exécutée).

+ +

L'opérateur d'affectation après coalescence des nuls obéit également à cette logique. Ainsi, x ??= y sera équivalent à :

+ +
+x ?? (x = y);
+
+ +

En revanche, ce ne sera pas équivalent à l'expression suivante qui effectue une affectation quoi qu'il arrive :

+ +
+x = x ?? y;
+
+ +

Exemples

+ +

Utiliser l'opérateur d'affectation après coalescence des nuls

+ +
+function config(options) {
+  options.duration ??= 100;
+  options.speed ??= 25;
+  return options;
+}
+
+config({ duration: 125 }); // { duration: 125, speed: 25 }
+config({}); // { duration: 100, speed: 25 }
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/logical_or/index.html b/files/fr/web/javascript/reference/operators/logical_or/index.html deleted file mode 100644 index 1ea61c09f6..0000000000 --- a/files/fr/web/javascript/reference/operators/logical_or/index.html +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: OU logique (||) -slug: Web/JavaScript/Reference/Operators/Logical_OR -tags: - - JavaScript - - Language feature - - Logical Operator - - Operator - - Reference -browser-compat: javascript.operators.logical_or -translation-of: Web/JavaScript/Reference/Operators/Logical_OR ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur OU logique (||) (disjonction logique) renvoie vrai si et seulement si au moins un de ses opérandes est vrai. Cet opérateur est généralement utilisé avec des valeurs booléennes et, lorsque c'est le cas, il renvoie une valeur booléenne. Toutefois, || peut aussi être utilisé avec des valeurs non-booléennes et, dans ce cas, renverra une valeur non-booléenne.

- -
{{EmbedInteractiveExample("pages/js/expressions-logical-or.html", "shorter")}}
- -

Syntax

- -
-expr1 || expr2
-
- -

Description

- -

Si expr1 peut être converti en true, c'est expr1 qui sera renvoyé, sinon ce sera expr2.

- -

Si une valeur peut être convertie en true, elle peut être qualifiée de truthy. Si une valeur peut être convertie en false, on la qualifiera alors de falsy.

- -

Parmi les expressions qui peuvent être converties en false, on a :

- - - -

Bien que l'opérateur || puisse être utilisé avec des opérandes qui ne soient pas des valeurs booléennes, il reste un opérateur booléen, car sa valeur de retour peut toujours être convertie en une valeur primitive booléenne. Pour convertir explicitement la valeur de retour (ou tout expression de façon plus générale) dans sa valeur booléenne correspondante, on pourra utiliser un double opérateur NON (!) ou le constructeur Boolean().

- -

Évaluation en court-circuit

- -

L'expression utilisant un OU logique est évaluée de gauche à droite. Le moteur cherche s'il est possible d'utiliser un court-circuit de la façon suivante :

- -

(une expression équivalente à vrai) || expr sera court-circuité pour fournir directement le résultat de l'expression équivalente à vrai.

- -

Cette notion de court-circuit indique que la partie expr ci-avant n'est pas évaluée, tout effet de bord lié à cette évaluation n'aura pas lieu (par exemple, si expr est un appel de fonction, la fonction n'est pas appelée). Ce fonctionnement a lieu, car la valeur du résultat peut d'office être déterminée par l'évaluation du premier opérande. Par exemple :

- -
-function A(){
-  console.log('A a été appelée');
-  return false;
-}
-
-function B(){
-  console.log('B a été appelée');
-  return true;
-}
-
-console.log( B() || A() );
-// affichera "B a été appelée" dans la console via l'appel de la fonction
-// puis affichera true (la valeur du résultat de l'expression avec l'opérateur)
-// on voit que la fonction A n'est pas du tout appelée
-
- -

Précédence des opérateurs

- -

Les expressions suivantes peuvent sembler équivalentes mais ne le sont pas. En effet, l'opérateur && est exécuté avant l'opérateur || (voir l'article sur la précédence des opérateurs).

- -
-true || false && false      // renvoie true, car && est exécuté en premier
-(true || false) && false    // renvoie false, car la précédence par défaut ne s'applique pas
-                                    // avec les parenthèses
-
- -

Exemples

- -

Utiliser le OU logique

- -

Le code suivant illustre quelques usages de l'opérateur OU logique ||.

- -
-o1 = true   || true      // t || t renvoie true
-o2 = false  || true      // f || t renvoie true
-o3 = true   || false     // t || f renvoie true
-o4 = false  || (3 == 4)  // f || f renvoie false
-o5 = 'Chat' || 'Chien'   // t || t renvoie "Chat"
-o6 = false  || 'Chat'    // f || t renvoie "Chat"
-o7 = 'Chat' || false     // t || f renvoie "Chat"
-o8 = ''     || false     // f || f renvoie false
-o9 = false  || ''        // f || f renvoie ""
-o10 = false || varObject // f || object renvoie varObject
-
- -
-

Note : Si vous utilisez cet opérateur afin de fournir une valeur par défaut à une variable. Soyez conscient⋅e qu'une valeur équivalente à false ne pourra pas être utilisée ainsi. Si vous souhaitez uniquement écarter null ou undefined, privilégiez l'utilisation de l'opérateur de coalescence des nuls.

-
- -

Règles de conversion booléennes

- -

Convertir ET en OU

- -

L'opération suivante, utilisant des booléens :

- -
bCondition1 && bCondition2
- -

sera toujours équivalente à :

- -
-!(!bCondition1 || !bCondition2)
-
- -

Convertir OU en ET

- -

L'opération suivante, utilisant des booléens :

- -
bCondition1 || bCondition2
- -

sera toujours équivalente à :

- -
-!(!bCondition1 && !bCondition2)
-
- -

Retrait des parenthèses imbriquées

- -

Les expressions logiques sont évaluées de gauche à droite, il est donc possible de retirer les parenthèses d'une expression complexe en suivant quelques règles.

- -

L'opération composite suivante, utilisant des booléens :

- -
-bCondition1 && (bCondition2 || bCondition3)
-
- -

sera toujours équivalente à :

- -
-!(!bCondition1 || !bCondition2 && !bCondition3)
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/logical_or/index.md b/files/fr/web/javascript/reference/operators/logical_or/index.md new file mode 100644 index 0000000000..1ea61c09f6 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/logical_or/index.md @@ -0,0 +1,158 @@ +--- +title: OU logique (||) +slug: Web/JavaScript/Reference/Operators/Logical_OR +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference +browser-compat: javascript.operators.logical_or +translation-of: Web/JavaScript/Reference/Operators/Logical_OR +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur OU logique (||) (disjonction logique) renvoie vrai si et seulement si au moins un de ses opérandes est vrai. Cet opérateur est généralement utilisé avec des valeurs booléennes et, lorsque c'est le cas, il renvoie une valeur booléenne. Toutefois, || peut aussi être utilisé avec des valeurs non-booléennes et, dans ce cas, renverra une valeur non-booléenne.

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-or.html", "shorter")}}
+ +

Syntax

+ +
+expr1 || expr2
+
+ +

Description

+ +

Si expr1 peut être converti en true, c'est expr1 qui sera renvoyé, sinon ce sera expr2.

+ +

Si une valeur peut être convertie en true, elle peut être qualifiée de truthy. Si une valeur peut être convertie en false, on la qualifiera alors de falsy.

+ +

Parmi les expressions qui peuvent être converties en false, on a :

+ + + +

Bien que l'opérateur || puisse être utilisé avec des opérandes qui ne soient pas des valeurs booléennes, il reste un opérateur booléen, car sa valeur de retour peut toujours être convertie en une valeur primitive booléenne. Pour convertir explicitement la valeur de retour (ou tout expression de façon plus générale) dans sa valeur booléenne correspondante, on pourra utiliser un double opérateur NON (!) ou le constructeur Boolean().

+ +

Évaluation en court-circuit

+ +

L'expression utilisant un OU logique est évaluée de gauche à droite. Le moteur cherche s'il est possible d'utiliser un court-circuit de la façon suivante :

+ +

(une expression équivalente à vrai) || expr sera court-circuité pour fournir directement le résultat de l'expression équivalente à vrai.

+ +

Cette notion de court-circuit indique que la partie expr ci-avant n'est pas évaluée, tout effet de bord lié à cette évaluation n'aura pas lieu (par exemple, si expr est un appel de fonction, la fonction n'est pas appelée). Ce fonctionnement a lieu, car la valeur du résultat peut d'office être déterminée par l'évaluation du premier opérande. Par exemple :

+ +
+function A(){
+  console.log('A a été appelée');
+  return false;
+}
+
+function B(){
+  console.log('B a été appelée');
+  return true;
+}
+
+console.log( B() || A() );
+// affichera "B a été appelée" dans la console via l'appel de la fonction
+// puis affichera true (la valeur du résultat de l'expression avec l'opérateur)
+// on voit que la fonction A n'est pas du tout appelée
+
+ +

Précédence des opérateurs

+ +

Les expressions suivantes peuvent sembler équivalentes mais ne le sont pas. En effet, l'opérateur && est exécuté avant l'opérateur || (voir l'article sur la précédence des opérateurs).

+ +
+true || false && false      // renvoie true, car && est exécuté en premier
+(true || false) && false    // renvoie false, car la précédence par défaut ne s'applique pas
+                                    // avec les parenthèses
+
+ +

Exemples

+ +

Utiliser le OU logique

+ +

Le code suivant illustre quelques usages de l'opérateur OU logique ||.

+ +
+o1 = true   || true      // t || t renvoie true
+o2 = false  || true      // f || t renvoie true
+o3 = true   || false     // t || f renvoie true
+o4 = false  || (3 == 4)  // f || f renvoie false
+o5 = 'Chat' || 'Chien'   // t || t renvoie "Chat"
+o6 = false  || 'Chat'    // f || t renvoie "Chat"
+o7 = 'Chat' || false     // t || f renvoie "Chat"
+o8 = ''     || false     // f || f renvoie false
+o9 = false  || ''        // f || f renvoie ""
+o10 = false || varObject // f || object renvoie varObject
+
+ +
+

Note : Si vous utilisez cet opérateur afin de fournir une valeur par défaut à une variable. Soyez conscient⋅e qu'une valeur équivalente à false ne pourra pas être utilisée ainsi. Si vous souhaitez uniquement écarter null ou undefined, privilégiez l'utilisation de l'opérateur de coalescence des nuls.

+
+ +

Règles de conversion booléennes

+ +

Convertir ET en OU

+ +

L'opération suivante, utilisant des booléens :

+ +
bCondition1 && bCondition2
+ +

sera toujours équivalente à :

+ +
+!(!bCondition1 || !bCondition2)
+
+ +

Convertir OU en ET

+ +

L'opération suivante, utilisant des booléens :

+ +
bCondition1 || bCondition2
+ +

sera toujours équivalente à :

+ +
+!(!bCondition1 && !bCondition2)
+
+ +

Retrait des parenthèses imbriquées

+ +

Les expressions logiques sont évaluées de gauche à droite, il est donc possible de retirer les parenthèses d'une expression complexe en suivant quelques règles.

+ +

L'opération composite suivante, utilisant des booléens :

+ +
+bCondition1 && (bCondition2 || bCondition3)
+
+ +

sera toujours équivalente à :

+ +
+!(!bCondition1 || !bCondition2 && !bCondition3)
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/logical_or_assignment/index.html b/files/fr/web/javascript/reference/operators/logical_or_assignment/index.html deleted file mode 100644 index 433c5f2109..0000000000 --- a/files/fr/web/javascript/reference/operators/logical_or_assignment/index.html +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Affectation après OU logique (||=) -slug: Web/JavaScript/Reference/Operators/Logical_OR_assignment -tags: - - JavaScript - - Language feature - - Logical Operator - - Operator - - Reference -browser-compat: javascript.operators.logical_or_assignment -translation-of: Web/JavaScript/Reference/Operators/Logical_OR_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'affectation après OU logique (x ||= y) n'affecte la valeur de l'opérande droit uniquement si l'opérande gauche est équivalent à faux (falsy).

- -
{{EmbedInteractiveExample("pages/js/expressions-logical-or-assignment.html")}}
- -

Syntaxe

- -
-expr1 ||= expr2
-
- -

Description

- -

Évaluation en court-circuit

- -

L'opérateur OU logique fonctionne ainsi :

- -
-x || y;
-// renvoie x lorsque x est équivalent à vrai
-// renvoie y lorsque x n'est pas équivalent à vrai
-
- -

L'opérateur OU logique peut utiliser un court-circuit : le second opérande est uniquement évalué si le premier opérande n'est pas équivalent à vrai.

- -

L'opérateur d'affectation après OU logique observe les mêmes règles : l'affectation a uniquement lieu si l'opération logique a besoin d'évaluer l'opérande droit. Autrement dit, x ||= y est équivalent à :

- -
-x || (x = y);
-
- -

En revanche, il n'est pas équivalent à l'expression suivante qui effectue, quoi qu'il arrive, une affectation :

- -
-x = x || y;
-
- -

On notera que ce comportement est différent entre les opérateurs binaires et les opérateurs logiques.

- -

Exemples

- -

Affecter une valeur par défaut

- -

Dans l'exemple qui suit, si paroles est vide, on y place une valeur par défaut :

- -
-document.getElementById('paroles').textContent ||= 'Aucune parole.'
-
- -

Ici, la notion de court-circuit est utile, car l'élément ne sera pas mis à jour si ce n'est pas nécessaire. Il n'y aura pas d'effet de bord indésiré comme une autre étape de rendu ou la perte du focus, etc.

- -

Attention toutefois à la valeur qu'on teste. Si on souhaite affecter une valeur lorsqu'on rencontre une chaîne de caractère vide (équivalente à faux), on pourra utiliser ||=. Sinon, si on souhaite uniquement distinguer null ou undefined, on utilisera l'opérateur ??=.

- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/logical_or_assignment/index.md b/files/fr/web/javascript/reference/operators/logical_or_assignment/index.md new file mode 100644 index 0000000000..433c5f2109 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/logical_or_assignment/index.md @@ -0,0 +1,84 @@ +--- +title: Affectation après OU logique (||=) +slug: Web/JavaScript/Reference/Operators/Logical_OR_assignment +tags: + - JavaScript + - Language feature + - Logical Operator + - Operator + - Reference +browser-compat: javascript.operators.logical_or_assignment +translation-of: Web/JavaScript/Reference/Operators/Logical_OR_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'affectation après OU logique (x ||= y) n'affecte la valeur de l'opérande droit uniquement si l'opérande gauche est équivalent à faux (falsy).

+ +
{{EmbedInteractiveExample("pages/js/expressions-logical-or-assignment.html")}}
+ +

Syntaxe

+ +
+expr1 ||= expr2
+
+ +

Description

+ +

Évaluation en court-circuit

+ +

L'opérateur OU logique fonctionne ainsi :

+ +
+x || y;
+// renvoie x lorsque x est équivalent à vrai
+// renvoie y lorsque x n'est pas équivalent à vrai
+
+ +

L'opérateur OU logique peut utiliser un court-circuit : le second opérande est uniquement évalué si le premier opérande n'est pas équivalent à vrai.

+ +

L'opérateur d'affectation après OU logique observe les mêmes règles : l'affectation a uniquement lieu si l'opération logique a besoin d'évaluer l'opérande droit. Autrement dit, x ||= y est équivalent à :

+ +
+x || (x = y);
+
+ +

En revanche, il n'est pas équivalent à l'expression suivante qui effectue, quoi qu'il arrive, une affectation :

+ +
+x = x || y;
+
+ +

On notera que ce comportement est différent entre les opérateurs binaires et les opérateurs logiques.

+ +

Exemples

+ +

Affecter une valeur par défaut

+ +

Dans l'exemple qui suit, si paroles est vide, on y place une valeur par défaut :

+ +
+document.getElementById('paroles').textContent ||= 'Aucune parole.'
+
+ +

Ici, la notion de court-circuit est utile, car l'élément ne sera pas mis à jour si ce n'est pas nécessaire. Il n'y aura pas d'effet de bord indésiré comme une autre étape de rendu ou la perte du focus, etc.

+ +

Attention toutefois à la valeur qu'on teste. Si on souhaite affecter une valeur lorsqu'on rencontre une chaîne de caractère vide (équivalente à faux), on pourra utiliser ||=. Sinon, si on souhaite uniquement distinguer null ou undefined, on utilisera l'opérateur ??=.

+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/multiplication/index.html b/files/fr/web/javascript/reference/operators/multiplication/index.html deleted file mode 100644 index 8729f46328..0000000000 --- a/files/fr/web/javascript/reference/operators/multiplication/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Multiplication (*) -slug: Web/JavaScript/Reference/Operators/Multiplication -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.multiplication -translation-of: Web/JavaScript/Reference/Operators/Multiplication ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de multiplication (*) fournit le produit de la multiplication des deux opérandes.

- -
{{EmbedInteractiveExample("pages/js/expressions-multiplication.html")}}
- -

Syntaxe

- -
-Opérateur : x * y
-
- -

Exemples

- -

Avec des nombres

- -
 2 * 2      // 4
--2 * 2     // -4
-
- -

Avec l'infini

- -
-Infinity * 0         // NaN
-Infinity * Infinity  // Infinity
-
- -

Avec des valeurs non-numériques

- -
-'foo' * 2 // NaN
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/multiplication/index.md b/files/fr/web/javascript/reference/operators/multiplication/index.md new file mode 100644 index 0000000000..8729f46328 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/multiplication/index.md @@ -0,0 +1,65 @@ +--- +title: Multiplication (*) +slug: Web/JavaScript/Reference/Operators/Multiplication +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.multiplication +translation-of: Web/JavaScript/Reference/Operators/Multiplication +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de multiplication (*) fournit le produit de la multiplication des deux opérandes.

+ +
{{EmbedInteractiveExample("pages/js/expressions-multiplication.html")}}
+ +

Syntaxe

+ +
+Opérateur : x * y
+
+ +

Exemples

+ +

Avec des nombres

+ +
 2 * 2      // 4
+-2 * 2     // -4
+
+ +

Avec l'infini

+ +
+Infinity * 0         // NaN
+Infinity * Infinity  // Infinity
+
+ +

Avec des valeurs non-numériques

+ +
+'foo' * 2 // NaN
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/multiplication_assignment/index.html b/files/fr/web/javascript/reference/operators/multiplication_assignment/index.html deleted file mode 100644 index 13d0a6d9e7..0000000000 --- a/files/fr/web/javascript/reference/operators/multiplication_assignment/index.html +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Affectation après multiplication (*=) -slug: Web/JavaScript/Reference/Operators/Multiplication_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.multiplication_assignment -translation-of: Web/JavaScript/Reference/Operators/Multiplication_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de multiplication et d'affectation (*=) multiplie une variable fournie par l'opérande gauche par la valeur fournie par l'opérande droit puis affecte le résultat de l'opération à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-multiplication-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x *= y
-Signification :  x  = x * y
-
- -

Exemples

- -

Utiliser l'opérateur de multiplication et d'affectation

- -
-let truc = 5;
-truc *= 2;      // 10
-truc *= 'toto'; // NaN
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/multiplication_assignment/index.md b/files/fr/web/javascript/reference/operators/multiplication_assignment/index.md new file mode 100644 index 0000000000..13d0a6d9e7 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/multiplication_assignment/index.md @@ -0,0 +1,48 @@ +--- +title: Affectation après multiplication (*=) +slug: Web/JavaScript/Reference/Operators/Multiplication_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.multiplication_assignment +translation-of: Web/JavaScript/Reference/Operators/Multiplication_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de multiplication et d'affectation (*=) multiplie une variable fournie par l'opérande gauche par la valeur fournie par l'opérande droit puis affecte le résultat de l'opération à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-multiplication-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x *= y
+Signification :  x  = x * y
+
+ +

Exemples

+ +

Utiliser l'opérateur de multiplication et d'affectation

+ +
+let truc = 5;
+truc *= 2;      // 10
+truc *= 'toto'; // NaN
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/new.target/index.html b/files/fr/web/javascript/reference/operators/new.target/index.html deleted file mode 100644 index 16544ca4fa..0000000000 --- a/files/fr/web/javascript/reference/operators/new.target/index.html +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: new.target -slug: Web/JavaScript/Reference/Operators/new.target -tags: - - ECMAScript 2015 - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Operators/new.target -original_slug: Web/JavaScript/Reference/Opérateurs/new.target ---- -
{{JSSidebar("Operators")}}
- -

La syntaxe new.target est disponible dans toutes les fonctions et permet entre autres de tester si une fonction ou un constructeur a été appelé avec new. Dans les constructeurs, il fait référence au constructeur invoqué par new. Dans les appels de fonction « normaux », new.target vaut {{jsxref("undefined")}}.

- -
{{EmbedInteractiveExample("pages/js/expressions-newtarget.html")}}
- -

Syntaxe

- -
new.target
- -

Description

- -

La syntaxe new.target se compose du mot-clé new, suivi d'un point puis d'un nom de propriété (ici target). Généralement et par ailleurs, new. est utilisé comme contexte pour accéder à une propriété. Ici, new. ne fait pas réellement référence à un objet. Dans les appels de constructeurs, new.target fait référence au constructeur qui a été appelé par new. Cette syntaxe permet donc de récupérer cette valeur.

- -

new.target est une méta-propriété, disponible pour toutes les fonctions. Dans les fonctions fléchées, new.target fait référence au new.target de la fonction englobante.

- -

Exemples

- -

Utilisation de new.target dans les appels de fonction

- -

Utilisé dans les appels de fonctions « classiques » (autrement dit pour les fonctions qui ne sont pas des constructeurs), new.target vaut {{jsxref("undefined")}}. Cela permet de détecter si une fonction a été appelée comme constructeur avec new :

- -
function Toto(){
-  if (!new.target) throw "Toto() doit être appelé avec new"
-  console.log("Toto instancié avec new");
-}
-
-new Toto(); // affiche "Toto instancié avec new" dans la console
-Toto(); // lève l'exception avec "Toto doit être appelé avec new"
-
- -

Utilisation de new.target dans les constructeurs

- -

Utilisés dans les appels de constructeurs de classe, new.target fait référence au constructeur utilisé directement avec new. C'est également le cas quand le constructeur est présent dans une classe parente et est délégué depuis le constructeur fils :

- -
class A {
-  constructor() {
-    console.log(new.target.name);
-  }
-}
-
-class B extends A { constructor() { super(); } }
-
-var a = new A(); // affiche "A"
-var b = new B(); // affiche "B"
-
-class C {
-  constructor() {
-    console.log(new.target);
-  }
-}
-
-class D extends C {
-  constructor() {
-    super();
-  }
-}
-
-var c = new C(); // function C()
-var d = new D(); // function D()
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaire
{{SpecName('ES2015', '#sec-built-in-function-objects', 'Built-in Function Objects')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.new_target")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/new.target/index.md b/files/fr/web/javascript/reference/operators/new.target/index.md new file mode 100644 index 0000000000..16544ca4fa --- /dev/null +++ b/files/fr/web/javascript/reference/operators/new.target/index.md @@ -0,0 +1,107 @@ +--- +title: new.target +slug: Web/JavaScript/Reference/Operators/new.target +tags: + - ECMAScript 2015 + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Operators/new.target +original_slug: Web/JavaScript/Reference/Opérateurs/new.target +--- +
{{JSSidebar("Operators")}}
+ +

La syntaxe new.target est disponible dans toutes les fonctions et permet entre autres de tester si une fonction ou un constructeur a été appelé avec new. Dans les constructeurs, il fait référence au constructeur invoqué par new. Dans les appels de fonction « normaux », new.target vaut {{jsxref("undefined")}}.

+ +
{{EmbedInteractiveExample("pages/js/expressions-newtarget.html")}}
+ +

Syntaxe

+ +
new.target
+ +

Description

+ +

La syntaxe new.target se compose du mot-clé new, suivi d'un point puis d'un nom de propriété (ici target). Généralement et par ailleurs, new. est utilisé comme contexte pour accéder à une propriété. Ici, new. ne fait pas réellement référence à un objet. Dans les appels de constructeurs, new.target fait référence au constructeur qui a été appelé par new. Cette syntaxe permet donc de récupérer cette valeur.

+ +

new.target est une méta-propriété, disponible pour toutes les fonctions. Dans les fonctions fléchées, new.target fait référence au new.target de la fonction englobante.

+ +

Exemples

+ +

Utilisation de new.target dans les appels de fonction

+ +

Utilisé dans les appels de fonctions « classiques » (autrement dit pour les fonctions qui ne sont pas des constructeurs), new.target vaut {{jsxref("undefined")}}. Cela permet de détecter si une fonction a été appelée comme constructeur avec new :

+ +
function Toto(){
+  if (!new.target) throw "Toto() doit être appelé avec new"
+  console.log("Toto instancié avec new");
+}
+
+new Toto(); // affiche "Toto instancié avec new" dans la console
+Toto(); // lève l'exception avec "Toto doit être appelé avec new"
+
+ +

Utilisation de new.target dans les constructeurs

+ +

Utilisés dans les appels de constructeurs de classe, new.target fait référence au constructeur utilisé directement avec new. C'est également le cas quand le constructeur est présent dans une classe parente et est délégué depuis le constructeur fils :

+ +
class A {
+  constructor() {
+    console.log(new.target.name);
+  }
+}
+
+class B extends A { constructor() { super(); } }
+
+var a = new A(); // affiche "A"
+var b = new B(); // affiche "B"
+
+class C {
+  constructor() {
+    console.log(new.target);
+  }
+}
+
+class D extends C {
+  constructor() {
+    super();
+  }
+}
+
+var c = new C(); // function C()
+var d = new D(); // function D()
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaire
{{SpecName('ES2015', '#sec-built-in-function-objects', 'Built-in Function Objects')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.new_target")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/new/index.html b/files/fr/web/javascript/reference/operators/new/index.html deleted file mode 100644 index 1e4074256c..0000000000 --- a/files/fr/web/javascript/reference/operators/new/index.html +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: L'opérateur new -slug: Web/JavaScript/Reference/Operators/new -tags: - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/new -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_new ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur new permet de créer une instance d'un certain type d'objet à partir du constructeur qui existe pour celui-ci (natif ou défini par l'utilisateur).

- -

Le mot-clé new, utilisé avec une fonction, applique les 4 étapes suivantes :

- -
    -
  1. Il crée un nouvel objet à partir de zéro
  2. -
  3. Il lie cet objet à un autre objet en le définissant comme son prototype.
  4. -
  5. Le nouvel objet, créé à l'étape 1, est passé comme valeur this à la fonction
  6. -
  7. Si la fonction ne renvoie pas d'objet, c'est la valeur this qui est renvoyée.
  8. -
- -
{{EmbedInteractiveExample("pages/js/expressions-newoperator.html")}}
- -

Syntaxe

- -
new constructeur[([arguments])]
- -

Paramètres

- -
-
constructeur
-
Une fonction ou une classe qui définit le type de l'objet qui sera une instance.
-
arguments
-
Une liste de valeurs correspondant aux arguments avec lesquels appeler le constructeur.
-
- -

Description

- -

La création d'un objet personnalisé se fait en deux étapes :

- -
    -
  1. Définition du type d'objet en écrivant une fonction.
  2. -
  3. Création d'une instance de l'objet avec new.
  4. -
- -

Pour définir un type d'objet, créez une fonction pour ce type qui spécifie son nom, ses propriétés et ses méthodes. Un objet peut avoir des propriétés qui sont elles-mêmes des objets, comme on pourra le voir dans les exemples ci-dessous.

- -

Lorsque le code new Toto(...) est exécuté, voici ce qui se passe :

- -
    -
  1. Un nouvel objet est créé qui hérite de Toto.prototype.
  2. -
  3. La fonction constructrice Toto est appelée avec les arguments fournis, this étant lié au nouvel objet créé. new Toto sera équivalent à new Toto() (i.e. un appel sans argument).
  4. -
  5. L'objet renvoyé par le constructeur devient le résultat de l'expression qui contient new. Si le constructeur ne renvoie pas d'objet de façon explicite, l'objet créé à l'étape 1 sera utilisé. (En général, les constructeurs ne renvoient pas de valeurs mais si on souhaite surcharger le processus habituel, on peut utiliser cette valeur de retour).
  6. -
- -

Il est toujours possible d'ajouter une propriété à un objet défini précédemment. Par exemple, l'instruction voiture1.couleur = "noir" ajoute une propriété couleur à voiture1, et lui assigne une valeur : "noir". Cependant, ceci n'affecte aucunement les autres objets. Pour ajouter une nouvelle propriété à tous les objets du même type, cette propriété doit être ajoutée à la définition du type d'objet Voiture.

- -

Il est possible d'ajouter une propriété partagée par tous les objets d'un type déjà défini auparavant en utilisant sa propriété Function.prototype. Ceci permet de définir une propriété partagée par tous les objets créés avec cette fonction, plutôt que simplement par une seule instance de ce type d'objet. Le code qui suit ajoute une propriété couleur avec la valeur "couleur standard" à tous les objets de type Voiture, et redéfinit ensuite cette valeur avec la chaîne "noir" uniquement pour l'instance d'objet voiture1. Pour plus d'informations, voir la page sur prototype.

- -
function Voiture() {}
-voiture1 = new Voiture();
-voiture2 = new Voiture();
-
-console.log(voiture1.couleur);            // undefined
-
-Voiture.prototype.couleur = "couleur standard";
-console.log(voiture1.couleur);            // couleur standard
-
-voiture1.couleur = "noir";
-console.log(voiture1.couleur);            // noir
-
-console.log(voiture1.__proto__.couleur);  // couleur standard
-console.log(voiture2.__proto__.couleur);  // couleur standard
-console.log(voiture1.couleur);            // noir
-console.log(voiture2.couleur);            // couleur standard
-
- -
-

Note : Si on n'écrit pas l'appel du constructeur avec l'opérateur new, le constructeur est appelé comme une fonction normale et ne crée pas d'objet. Dans ce cas, la valeur de this sera différente.

-
- -

Exemples

- -

Exemple : type d'objet et instance d'objet

- -

Supposons que vous vouliez créer un type d'objet pour les voitures. Vous voulez que ce type d'objet s'appelle Voiture, et qu'il ait des propriétés pour la marque, le modèle et l'année. Pour ce faire, vous écririez la fonction suivante :

- -
function Voiture(marque, modèle, année) {
-   this.marque = marque;
-   this.modèle = modèle;
-   this.année = année;
-}
-
- -

À présent, vous pouvez créer un objet appelé ma_voiture de la manière suivante :

- -
ma_voiture = new Voiture("Volkswagen", "Golf TDi", 1997);
-
- -

Cette instruction crée l'objet ma_voiture et assigne les valeurs spécifiées à ses propriétés. La valeur de ma_voiture.marque est alors la chaîne "Volkswagen", celle de ma_voiture.année est l'entier 1997, et ainsi de suite.

- -

Il est possible de créer un nombre illimité d'objets Voiture en appelant new. Par exemple :

- -
voiture_de_ken = new Voiture("Nissan", "300ZX", 1992);
-
- -

Exemple : propriété d'objet qui est elle-même un autre objet

- -

Supposons que vous ayez défini un objet appelé Personne de la manière suivante :

- -
function Personne(nom, age, surnom) {
-   this.nom = nom;
-   this.age = age;
-   this.surnom = surnom;
-}
-
- -

Et que vous avez ensuite instancié deux nouveaux objets Personne de la manière suivante :

- -
rand = new Personne("Rand McNally", 33, "Randy");
-ken = new Personne("Ken Jones", 39, "Kenny");
-
- -

Vous pouvez alors réécrire la définition de Voiture pour contenir une propriété propriétaire qui reçoit un objet Personne, comme ceci :

- -
function Voiture(marque, modèle, année, propriétaire) {
-   this.marque = marque;
-   this.modèle = modèle;
-   this.année = année;
-   this.propriétaire = propriétaire;
-}
-
- -

Pour instancier les nouveaux objets, vous utiliserez ensuite :

- -
voiture1 = new Voiture("Volkswagen", "Golf TDi", 1997, rand);
-voiture2 = new Voiture("Nissan", "300ZX", 1992, ken);
-
- -

Plutôt que de passer une chaîne littérale ou une valeur entière lors de la création des nouveaux objets, les instructions ci-dessus utilisent les objets rand et ken comme paramètres pour les propriétaires. Pour connaître le nom du propriétaire de voiture2, on peut alors accéder à la propriété suivante :

- -
voiture2.propriétaire.nom
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-new-operator', 'Opérateur new')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-new-operator', 'Opérateur new')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.2.2', 'Opérateur new')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.2.2', 'Opérateur new')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-11.2.2', 'Opérateur new')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.new")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/new/index.md b/files/fr/web/javascript/reference/operators/new/index.md new file mode 100644 index 0000000000..1e4074256c --- /dev/null +++ b/files/fr/web/javascript/reference/operators/new/index.md @@ -0,0 +1,194 @@ +--- +title: L'opérateur new +slug: Web/JavaScript/Reference/Operators/new +tags: + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/new +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_new +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur new permet de créer une instance d'un certain type d'objet à partir du constructeur qui existe pour celui-ci (natif ou défini par l'utilisateur).

+ +

Le mot-clé new, utilisé avec une fonction, applique les 4 étapes suivantes :

+ +
    +
  1. Il crée un nouvel objet à partir de zéro
  2. +
  3. Il lie cet objet à un autre objet en le définissant comme son prototype.
  4. +
  5. Le nouvel objet, créé à l'étape 1, est passé comme valeur this à la fonction
  6. +
  7. Si la fonction ne renvoie pas d'objet, c'est la valeur this qui est renvoyée.
  8. +
+ +
{{EmbedInteractiveExample("pages/js/expressions-newoperator.html")}}
+ +

Syntaxe

+ +
new constructeur[([arguments])]
+ +

Paramètres

+ +
+
constructeur
+
Une fonction ou une classe qui définit le type de l'objet qui sera une instance.
+
arguments
+
Une liste de valeurs correspondant aux arguments avec lesquels appeler le constructeur.
+
+ +

Description

+ +

La création d'un objet personnalisé se fait en deux étapes :

+ +
    +
  1. Définition du type d'objet en écrivant une fonction.
  2. +
  3. Création d'une instance de l'objet avec new.
  4. +
+ +

Pour définir un type d'objet, créez une fonction pour ce type qui spécifie son nom, ses propriétés et ses méthodes. Un objet peut avoir des propriétés qui sont elles-mêmes des objets, comme on pourra le voir dans les exemples ci-dessous.

+ +

Lorsque le code new Toto(...) est exécuté, voici ce qui se passe :

+ +
    +
  1. Un nouvel objet est créé qui hérite de Toto.prototype.
  2. +
  3. La fonction constructrice Toto est appelée avec les arguments fournis, this étant lié au nouvel objet créé. new Toto sera équivalent à new Toto() (i.e. un appel sans argument).
  4. +
  5. L'objet renvoyé par le constructeur devient le résultat de l'expression qui contient new. Si le constructeur ne renvoie pas d'objet de façon explicite, l'objet créé à l'étape 1 sera utilisé. (En général, les constructeurs ne renvoient pas de valeurs mais si on souhaite surcharger le processus habituel, on peut utiliser cette valeur de retour).
  6. +
+ +

Il est toujours possible d'ajouter une propriété à un objet défini précédemment. Par exemple, l'instruction voiture1.couleur = "noir" ajoute une propriété couleur à voiture1, et lui assigne une valeur : "noir". Cependant, ceci n'affecte aucunement les autres objets. Pour ajouter une nouvelle propriété à tous les objets du même type, cette propriété doit être ajoutée à la définition du type d'objet Voiture.

+ +

Il est possible d'ajouter une propriété partagée par tous les objets d'un type déjà défini auparavant en utilisant sa propriété Function.prototype. Ceci permet de définir une propriété partagée par tous les objets créés avec cette fonction, plutôt que simplement par une seule instance de ce type d'objet. Le code qui suit ajoute une propriété couleur avec la valeur "couleur standard" à tous les objets de type Voiture, et redéfinit ensuite cette valeur avec la chaîne "noir" uniquement pour l'instance d'objet voiture1. Pour plus d'informations, voir la page sur prototype.

+ +
function Voiture() {}
+voiture1 = new Voiture();
+voiture2 = new Voiture();
+
+console.log(voiture1.couleur);            // undefined
+
+Voiture.prototype.couleur = "couleur standard";
+console.log(voiture1.couleur);            // couleur standard
+
+voiture1.couleur = "noir";
+console.log(voiture1.couleur);            // noir
+
+console.log(voiture1.__proto__.couleur);  // couleur standard
+console.log(voiture2.__proto__.couleur);  // couleur standard
+console.log(voiture1.couleur);            // noir
+console.log(voiture2.couleur);            // couleur standard
+
+ +
+

Note : Si on n'écrit pas l'appel du constructeur avec l'opérateur new, le constructeur est appelé comme une fonction normale et ne crée pas d'objet. Dans ce cas, la valeur de this sera différente.

+
+ +

Exemples

+ +

Exemple : type d'objet et instance d'objet

+ +

Supposons que vous vouliez créer un type d'objet pour les voitures. Vous voulez que ce type d'objet s'appelle Voiture, et qu'il ait des propriétés pour la marque, le modèle et l'année. Pour ce faire, vous écririez la fonction suivante :

+ +
function Voiture(marque, modèle, année) {
+   this.marque = marque;
+   this.modèle = modèle;
+   this.année = année;
+}
+
+ +

À présent, vous pouvez créer un objet appelé ma_voiture de la manière suivante :

+ +
ma_voiture = new Voiture("Volkswagen", "Golf TDi", 1997);
+
+ +

Cette instruction crée l'objet ma_voiture et assigne les valeurs spécifiées à ses propriétés. La valeur de ma_voiture.marque est alors la chaîne "Volkswagen", celle de ma_voiture.année est l'entier 1997, et ainsi de suite.

+ +

Il est possible de créer un nombre illimité d'objets Voiture en appelant new. Par exemple :

+ +
voiture_de_ken = new Voiture("Nissan", "300ZX", 1992);
+
+ +

Exemple : propriété d'objet qui est elle-même un autre objet

+ +

Supposons que vous ayez défini un objet appelé Personne de la manière suivante :

+ +
function Personne(nom, age, surnom) {
+   this.nom = nom;
+   this.age = age;
+   this.surnom = surnom;
+}
+
+ +

Et que vous avez ensuite instancié deux nouveaux objets Personne de la manière suivante :

+ +
rand = new Personne("Rand McNally", 33, "Randy");
+ken = new Personne("Ken Jones", 39, "Kenny");
+
+ +

Vous pouvez alors réécrire la définition de Voiture pour contenir une propriété propriétaire qui reçoit un objet Personne, comme ceci :

+ +
function Voiture(marque, modèle, année, propriétaire) {
+   this.marque = marque;
+   this.modèle = modèle;
+   this.année = année;
+   this.propriétaire = propriétaire;
+}
+
+ +

Pour instancier les nouveaux objets, vous utiliserez ensuite :

+ +
voiture1 = new Voiture("Volkswagen", "Golf TDi", 1997, rand);
+voiture2 = new Voiture("Nissan", "300ZX", 1992, ken);
+
+ +

Plutôt que de passer une chaîne littérale ou une valeur entière lors de la création des nouveaux objets, les instructions ci-dessus utilisent les objets rand et ken comme paramètres pour les propriétaires. Pour connaître le nom du propriétaire de voiture2, on peut alors accéder à la propriété suivante :

+ +
voiture2.propriétaire.nom
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-new-operator', 'Opérateur new')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-new-operator', 'Opérateur new')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.2.2', 'Opérateur new')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.2.2', 'Opérateur new')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-11.2.2', 'Opérateur new')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.new")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.html b/files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.html deleted file mode 100644 index c703a8d82e..0000000000 --- a/files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Opérateur de coalescence des nuls (Nullish coalescing operator) -slug: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator -tags: - - Coalescence - - JavaScript - - Opérateur - - Reference - - falsy - - nullish -translation_of: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator -original_slug: Web/JavaScript/Reference/Opérateurs/Nullish_coalescing_operator ---- -

{{JSSidebar("Operators")}}

- -

L'opérateur de coalescence des nuls (??), est un opérateur logique qui renvoie son opérande de droite lorsque son opérande de gauche vaut {{jsxref("null")}} ou {{jsxref("undefined")}} et qui renvoie son opérande de gauche sinon.

- -

Contrairement à l'opérateur logique OU (||), l'opérande de gauche sera renvoyé s'il s'agit d'une valeur équivalente à false qui n'est ni null, ni undefined. En d'autres termes, si vous utilisez || pour fournir une valeur par défaut à une variable foo, vous pourriez rencontrer des comportements inattendus si vous considérez certaines valeurs falsy comme utilisables (par exemple une chaine vide '' ou 0). Voir ci-dessous pour plus d'exemples.

- -
{{EmbedInteractiveExample("pages/js/expressions-nullishcoalescingoperator.html")}}
- -

Syntaxe

- -
leftExpr ?? rightExpr
-
- -

Exemples

- -

Utilisation de l'opérateur de coalescence des nuls

- -

Dans cet exemple, nous fournirons des valeurs par défaut mais conserverons des valeurs autres que null ou undefined.

- -
const valeurNulle = null;
-const texteVide = ""; // falsy
-const unNombre = 42;
-
-const valA = valeurNulle ?? "valeur par défaut pour A";
-const valB = texteVide ?? "valeur par défaut pour B";
-const valC = unNombre ?? 0;
-
-console.log(valA); // "valeur par défaut pour A"
-console.log(valB); // "" (car la chaine vide n'est ni `null` ni `undefined`)
-console.log(valC); // 42
- -

Affectation d'une valeur par défaut à une variable

- -

Auparavant, lorsque l'on voulait attribuer une valeur par défaut à une variable, une solution fréquente consistait à utiliser l'opérateur logique OU (||) :

- -
let toto;
-
-// toto ne se voit jamais attribuer de valeur, il vaut donc undefined
-let unTexteBateau = toto || 'Coucou !';
- -

Cependant, parce que || est un opérateur logique booléen, l'opérande de gauche a été converti en un booléen pour l'évaluation et aucune valeur falsy (0, '', NaN, null, undefined) n'a été renvoyée. Ce comportement peut entraîner des conséquences inattendues si on souhaite considérer 0, '' ou NaN comme des valeurs valides.

- -
let compteur = 0;
-let texte = "";
-
-let qté = compteur || 42;
-let message = texte || "Coucou !";
-console.log(qté);     // 42 et non 0
-console.log(message); // "Coucou !" et non ""
-
- -

L'opérateur de coalescence des nuls évite ce risque en ne renvoyant le deuxième opérande que lorsque le premier vaut null ou undefined (mais pas d'autres valeurs falsy) :

- -
let monTexte = ''; // Un chaine vide (qui est donc une valeur falsy)
-
-let notFalsyText = monTexte || 'Hello world';
-console.log(notFalsyText); // Hello world
-
-let preservingFalsy = monTexte ?? 'Salut le voisin';
-console.log(preservingFalsy); // '' (car monTexte n'est ni null ni undefined)
-
- -

Court-circuitage

- -

À l'instar des opérateurs logiques OR (||) et AND (&&), l'expression de droite n'est pas évaluée si celle de gauche ne vaut ni null ni undefined.

- -
function A() { console.log('A a été appelée'); return undefined; }
-function B() { console.log('B a été appelée'); return false; }
-function C() { console.log('C a été appelée'); return "toto"; }
-
-console.log( A() ?? C() );
-// Inscrit "A a été appelée" puis "C a été appelée" et enfin "toto"
-// puisque : A() retourne undefined, les deux expressions sont donc évaluées
-
-console.log( B() ?? C() );
-// Inscrit "B a été appelée" puis false
-// puisque : B() retourne false (et non null ou undefined) et
-// l'opérande de droite n'est pas évaluée
-
- -

Pas de chaînage possible avec les opérateurs AND ou OR

- -

Il n'est pas possible de combiner les opérateurs AND (&&) ou OR (||) directement avec l'opérateur de coalescence des nuls (??). Un tel cas lèverait une exception SyntaxError.

- -
null || undefined ?? "toto"; // soulève une SyntaxError
-true || undefined ?? "toto"; // soulève une SyntaxError
- -

Cependant, fournir des parenthèses pour indiquer explicitement la priorité est correct :

- -
(null || undefined) ?? "toto"; // Renvoie "toto"
-
- -

Relation avec l'opérateur de chaînage optionnel (?.)

- -

Tout comme l'opérateur de coalescence des nuls, l'opérateur de chaînage optionnel (?.) traite les valeurs null et undefined comme des valeurs spécifiques. Ce qui permet d'accéder à une propriété d'un objet qui peut être null ou undefined.

- -
let toto = { uneProprieteToto: "coucou" };
-
-console.log(toto.uneProprieteToto?.toUpperCase());  // "COUCOU"
-console.log(toto.uneProprieteTiti?.toUpperCase()); // undefined
-
- -

Spécifications

- - - - - - - - - - - - -
Spécification
{{SpecName('ESDraft', '#prod-Nulli', 'nullish coalescing expression')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.nullish_coalescing")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.md b/files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.md new file mode 100644 index 0000000000..c703a8d82e --- /dev/null +++ b/files/fr/web/javascript/reference/operators/nullish_coalescing_operator/index.md @@ -0,0 +1,142 @@ +--- +title: Opérateur de coalescence des nuls (Nullish coalescing operator) +slug: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator +tags: + - Coalescence + - JavaScript + - Opérateur + - Reference + - falsy + - nullish +translation_of: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator +original_slug: Web/JavaScript/Reference/Opérateurs/Nullish_coalescing_operator +--- +

{{JSSidebar("Operators")}}

+ +

L'opérateur de coalescence des nuls (??), est un opérateur logique qui renvoie son opérande de droite lorsque son opérande de gauche vaut {{jsxref("null")}} ou {{jsxref("undefined")}} et qui renvoie son opérande de gauche sinon.

+ +

Contrairement à l'opérateur logique OU (||), l'opérande de gauche sera renvoyé s'il s'agit d'une valeur équivalente à false qui n'est ni null, ni undefined. En d'autres termes, si vous utilisez || pour fournir une valeur par défaut à une variable foo, vous pourriez rencontrer des comportements inattendus si vous considérez certaines valeurs falsy comme utilisables (par exemple une chaine vide '' ou 0). Voir ci-dessous pour plus d'exemples.

+ +
{{EmbedInteractiveExample("pages/js/expressions-nullishcoalescingoperator.html")}}
+ +

Syntaxe

+ +
leftExpr ?? rightExpr
+
+ +

Exemples

+ +

Utilisation de l'opérateur de coalescence des nuls

+ +

Dans cet exemple, nous fournirons des valeurs par défaut mais conserverons des valeurs autres que null ou undefined.

+ +
const valeurNulle = null;
+const texteVide = ""; // falsy
+const unNombre = 42;
+
+const valA = valeurNulle ?? "valeur par défaut pour A";
+const valB = texteVide ?? "valeur par défaut pour B";
+const valC = unNombre ?? 0;
+
+console.log(valA); // "valeur par défaut pour A"
+console.log(valB); // "" (car la chaine vide n'est ni `null` ni `undefined`)
+console.log(valC); // 42
+ +

Affectation d'une valeur par défaut à une variable

+ +

Auparavant, lorsque l'on voulait attribuer une valeur par défaut à une variable, une solution fréquente consistait à utiliser l'opérateur logique OU (||) :

+ +
let toto;
+
+// toto ne se voit jamais attribuer de valeur, il vaut donc undefined
+let unTexteBateau = toto || 'Coucou !';
+ +

Cependant, parce que || est un opérateur logique booléen, l'opérande de gauche a été converti en un booléen pour l'évaluation et aucune valeur falsy (0, '', NaN, null, undefined) n'a été renvoyée. Ce comportement peut entraîner des conséquences inattendues si on souhaite considérer 0, '' ou NaN comme des valeurs valides.

+ +
let compteur = 0;
+let texte = "";
+
+let qté = compteur || 42;
+let message = texte || "Coucou !";
+console.log(qté);     // 42 et non 0
+console.log(message); // "Coucou !" et non ""
+
+ +

L'opérateur de coalescence des nuls évite ce risque en ne renvoyant le deuxième opérande que lorsque le premier vaut null ou undefined (mais pas d'autres valeurs falsy) :

+ +
let monTexte = ''; // Un chaine vide (qui est donc une valeur falsy)
+
+let notFalsyText = monTexte || 'Hello world';
+console.log(notFalsyText); // Hello world
+
+let preservingFalsy = monTexte ?? 'Salut le voisin';
+console.log(preservingFalsy); // '' (car monTexte n'est ni null ni undefined)
+
+ +

Court-circuitage

+ +

À l'instar des opérateurs logiques OR (||) et AND (&&), l'expression de droite n'est pas évaluée si celle de gauche ne vaut ni null ni undefined.

+ +
function A() { console.log('A a été appelée'); return undefined; }
+function B() { console.log('B a été appelée'); return false; }
+function C() { console.log('C a été appelée'); return "toto"; }
+
+console.log( A() ?? C() );
+// Inscrit "A a été appelée" puis "C a été appelée" et enfin "toto"
+// puisque : A() retourne undefined, les deux expressions sont donc évaluées
+
+console.log( B() ?? C() );
+// Inscrit "B a été appelée" puis false
+// puisque : B() retourne false (et non null ou undefined) et
+// l'opérande de droite n'est pas évaluée
+
+ +

Pas de chaînage possible avec les opérateurs AND ou OR

+ +

Il n'est pas possible de combiner les opérateurs AND (&&) ou OR (||) directement avec l'opérateur de coalescence des nuls (??). Un tel cas lèverait une exception SyntaxError.

+ +
null || undefined ?? "toto"; // soulève une SyntaxError
+true || undefined ?? "toto"; // soulève une SyntaxError
+ +

Cependant, fournir des parenthèses pour indiquer explicitement la priorité est correct :

+ +
(null || undefined) ?? "toto"; // Renvoie "toto"
+
+ +

Relation avec l'opérateur de chaînage optionnel (?.)

+ +

Tout comme l'opérateur de coalescence des nuls, l'opérateur de chaînage optionnel (?.) traite les valeurs null et undefined comme des valeurs spécifiques. Ce qui permet d'accéder à une propriété d'un objet qui peut être null ou undefined.

+ +
let toto = { uneProprieteToto: "coucou" };
+
+console.log(toto.uneProprieteToto?.toUpperCase());  // "COUCOU"
+console.log(toto.uneProprieteTiti?.toUpperCase()); // undefined
+
+ +

Spécifications

+ + + + + + + + + + + + +
Spécification
{{SpecName('ESDraft', '#prod-Nulli', 'nullish coalescing expression')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.nullish_coalescing")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/object_initializer/index.html b/files/fr/web/javascript/reference/operators/object_initializer/index.html deleted file mode 100644 index b2ee021922..0000000000 --- a/files/fr/web/javascript/reference/operators/object_initializer/index.html +++ /dev/null @@ -1,302 +0,0 @@ ---- -title: Initialisateur d'objet -slug: Web/JavaScript/Reference/Operators/Object_initializer -tags: - - ECMAScript 2015 - - JavaScript - - Object - - Reference -translation_of: Web/JavaScript/Reference/Operators/Object_initializer -original_slug: Web/JavaScript/Reference/Opérateurs/Initialisateur_objet ---- -
{{JsSidebar("Operators")}}
- -

Il est possible d'initialiser un objet en utilisant les notations new Object(), Object.create(), ou grâce à un littéral (appelée initialisateur). Un initialisateur d'objet est une liste contenant plusieurs (éventuellement 0) propriétés, séparées par des virgules, et leurs valeurs associées, cette liste étant entourée d'accolades ({}).

- -
{{EmbedInteractiveExample("pages/js/expressions-objectinitializer.html")}}
- -

Syntaxe

- -
var o = {};
-var o = { a: "toto", b: 42, c: {} };
-
-var a = "toto", b = 42, c = {};
-var o = { a: a, b: b, c: c };
-
-var o = {
-  property: function (paramètres) {},
-  get property() {},
-  set property(valeur) {}
-};
-
- -

Nouvelles notations ECMAScript 2015 (ES6)

- -

ECMAScript 2015 (ES6) introduit de nouvelles notations. Pour plus d'informations sur la compatibilité de ces notations avec les différents environnements, se référer au tableau de compatibilité ci-après.

- -
// Raccourcis pour les noms de propriétés (ES2015)
-var a = "toto", b = 42, c = {};
-var o = { a, b, c };
-
-// Raccourcis pour les noms de méthodes(ES2015)
-var o = {
-  property(paramètres) {}
-};
-
-// Noms calculés pour les propriétés (ES2015)
-var prop = "toto";
-var o = {
-  [prop]: "hey",
-  ["tr" + "uc"]: "ho",
-};
- -

Description

- -

Un initialisateur d'objet est une expression qui permet de décrire l'initialisation d'un {{jsxref("Object")}}. Les objets sont constitués de propriétés qui permettent de les décrire. Les valeurs des propriétés d'un objet peuvent être construites à partir de types de données primitifs ou à partir d'autres objets.

- -

Créer des objets

- -

On peut créer un objet sans aucune propriété grâce à l'expression suivante :

- -
var objet = {};
- -

Cependant, en utilisant un littéral ou un initialisateur, on peut créer des objets disposant de propriétés rapidement. Il suffit d'inscrire une liste de clés-valeurs séparées par des virgules. Le fragment de code qui suit permet de créer un objet avec trois propriétés identifiées par les clés "toto", "âge" et "machin". Les valeurs respectives de ces différentes propriétés sont : la chaîne de caractères "truc", le nombre 42 et un autre objet.

- -
var object = {
-  toto: 'truc',
-  âge: 42,
-  machin: { maProp: 12 },
-}
- -

Accéder à des propriétés

- -

Après la création d'un objet, vous pourrez avoir besoin de consulter ou de modifier ses propriétés. Il est possible d'accéder aux propriétés d'un objet en utilisant un point ou des crochets. Voir la page sur les accesseurs de propriétés pour plus d'information.

- -
object.toto; // "truc"
-object['âge']; // 42
-
-object.toto = 'machin';
-
- -

Définir des propriétés

- -

On a déjà vu comment on pouvait utiliser la syntaxe de l'initialisateur pour définir des propriétés. Il arrive souvent de vouloir utiliser des variables comme propriétés d'un objet. C'est pourquoi on peut trouver le code suivant :

- -
var a = 'toto',
-    b = 42,
-    c = {};
-
-var o = {
-  a: a,
-  b: b,
-  c: c
-};
- -

Avec ECMAScript 2015 (ES6), on peut utiliser une notation plus courte pour un résultat égal :

- -
var a = 'toto',
-    b = 42,
-    c = {};
-
-// Raccourcis sur les noms de propriétés (ES2015)
-var o = { a, b, c };
-
-// Autrement dit
-console.log((o.a === { a }.a)); // true
-
- -

Les duplicatas et les noms de propriétés

- -

Si le même nom est utilisé plusieurs fois pour différentes propriétés, ce sera la dernière propriété qui sera prise en compte :

- -
var a = {x: 1, x: 2};
-console.log(a); // { x: 2}
-
- -

Le mode strict d'ECMAScript 5 renvoyait une exception {{jsxref("SyntaxError")}} lorsque plusieurs propriétés avaient le même nom. ECMAScript 2015 (ES6) permettant de créer des propriétés avec des noms qui sont calculés à l'exécution, cette restriction a été retirée.

- -
function vérifierSémantiqueES2015(){
-  'use strict';
-  try {
-    ({ prop: 1, prop: 2 });
-
-    // Aucune erreur, la sémantique en cours consiste à accepter les propriétés dupliquées
-    return true;
-  } catch (e) {
-    // Une erreur est renvoyée : les duplicatas sont interdits en mode strict
-    return false;
-  }
-}
- -

Définitions de méthodes

- -

Une propriété d'un objet peut être une function, un accesseur ou un mutateur :

- -
var o = {
-  property: function (paramètres) {},
-  get property() {},
-  set property(valeur) {}
-};
- -

Avec ECMAScript 2015 (ES6), une notation raccourcie permet de ne plus utiliser le mot-clé "function".

- -
// Raccourci pour les noms de méthodes (ES2015)
-var o = {
-  property(paramètres) {},
-  *generator() {}
-};
- -

Ou encore :

- -
var o = {
-  *generator() {
-    ...
-  }
-};
- -

En utilisant uniquement ECMAScript 5, on aurait écrit :

- -

(Il n'y a pas de function génératrice en ECMAScript5, mais l'exemple permet de comprendre l'évolution de la syntaxe) :

- -
var o = {
-  generator: function* (){}
-};
-
- -

Pour plus d'informations et d'exemples sur les méthodes, voir la page concernant les définitions de méthode.

- -

Noms de propriétés calculés

- -

Avec ECMAScript 2015 (ES6), on peut utiliser un initialisateur et avoir des noms de propriétés qui soient calculés lors de l'exécution. Ainsi, en plaçant une expression entre crochets [], celle-ci sera calculée pour déterminer le nom de la propriété. Cette notation est la symétrique des crochets utilisés pour accéder aux propriétés. Il est désormais possible d'utiliser cette notation dans les littéraux objets :

- -
// Calcul des noms de propriétés (ES2015)
-var i = 0;
-var a = {
-  ['toto' + ++i]: i,
-  ['toto' + ++i]: i,
-  ['toto' + ++i]: i
-};
-
-console.log(a.toto1); // 1
-console.log(a.toto2); // 2
-console.log(a.toto3); // 3
-
-var param = 'taille';
-var config = {
-  [param]: 12,
-  ['mobile' + param.charAt(0).toUpperCase() + param.slice(1)]: 4
-};
-
-console.log(config); // { taille: 12, mobileTaille: 4 }
- -

Décomposition des propriétés

- -

La proposition de la décomposition des propriétés à ECMAScript (au niveau 4, finalisée) vise à permettre la décomposition des propriétés dans les littéraux objets. Cela permet de copier les propriétés énumérables directes à partir d'un objet source vers un nouvel objet.

- -

Le clonage superficiel (sans rattacher le prototype) ou la fusion d'objets pourra désormais être écrite de façon plus concise qu'avec {{jsxref("Object.assign()")}}.

- -
var obj1 = { toto: 'truc', x: 42 };
-var obj2 = { toto: 'bidule', y: 13 };
-
-var clone = { ...obj1 };
-// Object { toto: 'truc', x: 42 }
-
-var fusion = { ...obj1, ...obj2 };
-// Object { toto: 'bidule', x: 42, y: 13 };
-
- -

On notera que la méthode {{jsxref("Object.assign()")}} déclenche les mutateurs, ce qui n'est pas le cas de l'opérateur de décomposition.

- -

Changement de prototype

- -

Définir une propriété avec la syntaxe __proto__: valeur ou "__proto__": valeur ne permet pas de créer une propriété avec le nom __proto__. Si la valeur fournie est un objet ou est null, cela modifie le [[Prototype]] de l'objet. (Si la valeur fournie n'est pas un objet ou n'est pas null, l'objet ne sera pas modifié.)

- -
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__"));
-
- -

On ne peut modifier le prototype qu'une seule fois pour une même notation littérale. Toute tentative pour modifier le prototype plusieurs fois renverra une erreur de syntaxe.

- -

Les définitions de propriétés qui n'utilisent pas les deux points ne permettent pas de modifier le prototype, elles définieront une propriété de façon classique.

- -
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);
-
- -

Notation littérale et JSON

- -

La notation utilisant un littéral objet n'est pas identique à celle utilisée par la JavaScript Object Notation (JSON). Bien que ces notations se ressemblent, il existe certaines différences :

- - - -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Ajout des getter et setter (accesseur/mutateur).
{{SpecName('ES2015', '#sec-object-initializer', 'Object Initializer')}}{{Spec2('ES2015')}}Ajout des raccourcis pour les noms de méthodes et propriétés et des noms de propriétés calculés.
{{SpecName('ESDraft', '#sec-object-initializer', 'Object Initializer')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.object_initializer")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/object_initializer/index.md b/files/fr/web/javascript/reference/operators/object_initializer/index.md new file mode 100644 index 0000000000..b2ee021922 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/object_initializer/index.md @@ -0,0 +1,302 @@ +--- +title: Initialisateur d'objet +slug: Web/JavaScript/Reference/Operators/Object_initializer +tags: + - ECMAScript 2015 + - JavaScript + - Object + - Reference +translation_of: Web/JavaScript/Reference/Operators/Object_initializer +original_slug: Web/JavaScript/Reference/Opérateurs/Initialisateur_objet +--- +
{{JsSidebar("Operators")}}
+ +

Il est possible d'initialiser un objet en utilisant les notations new Object(), Object.create(), ou grâce à un littéral (appelée initialisateur). Un initialisateur d'objet est une liste contenant plusieurs (éventuellement 0) propriétés, séparées par des virgules, et leurs valeurs associées, cette liste étant entourée d'accolades ({}).

+ +
{{EmbedInteractiveExample("pages/js/expressions-objectinitializer.html")}}
+ +

Syntaxe

+ +
var o = {};
+var o = { a: "toto", b: 42, c: {} };
+
+var a = "toto", b = 42, c = {};
+var o = { a: a, b: b, c: c };
+
+var o = {
+  property: function (paramètres) {},
+  get property() {},
+  set property(valeur) {}
+};
+
+ +

Nouvelles notations ECMAScript 2015 (ES6)

+ +

ECMAScript 2015 (ES6) introduit de nouvelles notations. Pour plus d'informations sur la compatibilité de ces notations avec les différents environnements, se référer au tableau de compatibilité ci-après.

+ +
// Raccourcis pour les noms de propriétés (ES2015)
+var a = "toto", b = 42, c = {};
+var o = { a, b, c };
+
+// Raccourcis pour les noms de méthodes(ES2015)
+var o = {
+  property(paramètres) {}
+};
+
+// Noms calculés pour les propriétés (ES2015)
+var prop = "toto";
+var o = {
+  [prop]: "hey",
+  ["tr" + "uc"]: "ho",
+};
+ +

Description

+ +

Un initialisateur d'objet est une expression qui permet de décrire l'initialisation d'un {{jsxref("Object")}}. Les objets sont constitués de propriétés qui permettent de les décrire. Les valeurs des propriétés d'un objet peuvent être construites à partir de types de données primitifs ou à partir d'autres objets.

+ +

Créer des objets

+ +

On peut créer un objet sans aucune propriété grâce à l'expression suivante :

+ +
var objet = {};
+ +

Cependant, en utilisant un littéral ou un initialisateur, on peut créer des objets disposant de propriétés rapidement. Il suffit d'inscrire une liste de clés-valeurs séparées par des virgules. Le fragment de code qui suit permet de créer un objet avec trois propriétés identifiées par les clés "toto", "âge" et "machin". Les valeurs respectives de ces différentes propriétés sont : la chaîne de caractères "truc", le nombre 42 et un autre objet.

+ +
var object = {
+  toto: 'truc',
+  âge: 42,
+  machin: { maProp: 12 },
+}
+ +

Accéder à des propriétés

+ +

Après la création d'un objet, vous pourrez avoir besoin de consulter ou de modifier ses propriétés. Il est possible d'accéder aux propriétés d'un objet en utilisant un point ou des crochets. Voir la page sur les accesseurs de propriétés pour plus d'information.

+ +
object.toto; // "truc"
+object['âge']; // 42
+
+object.toto = 'machin';
+
+ +

Définir des propriétés

+ +

On a déjà vu comment on pouvait utiliser la syntaxe de l'initialisateur pour définir des propriétés. Il arrive souvent de vouloir utiliser des variables comme propriétés d'un objet. C'est pourquoi on peut trouver le code suivant :

+ +
var a = 'toto',
+    b = 42,
+    c = {};
+
+var o = {
+  a: a,
+  b: b,
+  c: c
+};
+ +

Avec ECMAScript 2015 (ES6), on peut utiliser une notation plus courte pour un résultat égal :

+ +
var a = 'toto',
+    b = 42,
+    c = {};
+
+// Raccourcis sur les noms de propriétés (ES2015)
+var o = { a, b, c };
+
+// Autrement dit
+console.log((o.a === { a }.a)); // true
+
+ +

Les duplicatas et les noms de propriétés

+ +

Si le même nom est utilisé plusieurs fois pour différentes propriétés, ce sera la dernière propriété qui sera prise en compte :

+ +
var a = {x: 1, x: 2};
+console.log(a); // { x: 2}
+
+ +

Le mode strict d'ECMAScript 5 renvoyait une exception {{jsxref("SyntaxError")}} lorsque plusieurs propriétés avaient le même nom. ECMAScript 2015 (ES6) permettant de créer des propriétés avec des noms qui sont calculés à l'exécution, cette restriction a été retirée.

+ +
function vérifierSémantiqueES2015(){
+  'use strict';
+  try {
+    ({ prop: 1, prop: 2 });
+
+    // Aucune erreur, la sémantique en cours consiste à accepter les propriétés dupliquées
+    return true;
+  } catch (e) {
+    // Une erreur est renvoyée : les duplicatas sont interdits en mode strict
+    return false;
+  }
+}
+ +

Définitions de méthodes

+ +

Une propriété d'un objet peut être une function, un accesseur ou un mutateur :

+ +
var o = {
+  property: function (paramètres) {},
+  get property() {},
+  set property(valeur) {}
+};
+ +

Avec ECMAScript 2015 (ES6), une notation raccourcie permet de ne plus utiliser le mot-clé "function".

+ +
// Raccourci pour les noms de méthodes (ES2015)
+var o = {
+  property(paramètres) {},
+  *generator() {}
+};
+ +

Ou encore :

+ +
var o = {
+  *generator() {
+    ...
+  }
+};
+ +

En utilisant uniquement ECMAScript 5, on aurait écrit :

+ +

(Il n'y a pas de function génératrice en ECMAScript5, mais l'exemple permet de comprendre l'évolution de la syntaxe) :

+ +
var o = {
+  generator: function* (){}
+};
+
+ +

Pour plus d'informations et d'exemples sur les méthodes, voir la page concernant les définitions de méthode.

+ +

Noms de propriétés calculés

+ +

Avec ECMAScript 2015 (ES6), on peut utiliser un initialisateur et avoir des noms de propriétés qui soient calculés lors de l'exécution. Ainsi, en plaçant une expression entre crochets [], celle-ci sera calculée pour déterminer le nom de la propriété. Cette notation est la symétrique des crochets utilisés pour accéder aux propriétés. Il est désormais possible d'utiliser cette notation dans les littéraux objets :

+ +
// Calcul des noms de propriétés (ES2015)
+var i = 0;
+var a = {
+  ['toto' + ++i]: i,
+  ['toto' + ++i]: i,
+  ['toto' + ++i]: i
+};
+
+console.log(a.toto1); // 1
+console.log(a.toto2); // 2
+console.log(a.toto3); // 3
+
+var param = 'taille';
+var config = {
+  [param]: 12,
+  ['mobile' + param.charAt(0).toUpperCase() + param.slice(1)]: 4
+};
+
+console.log(config); // { taille: 12, mobileTaille: 4 }
+ +

Décomposition des propriétés

+ +

La proposition de la décomposition des propriétés à ECMAScript (au niveau 4, finalisée) vise à permettre la décomposition des propriétés dans les littéraux objets. Cela permet de copier les propriétés énumérables directes à partir d'un objet source vers un nouvel objet.

+ +

Le clonage superficiel (sans rattacher le prototype) ou la fusion d'objets pourra désormais être écrite de façon plus concise qu'avec {{jsxref("Object.assign()")}}.

+ +
var obj1 = { toto: 'truc', x: 42 };
+var obj2 = { toto: 'bidule', y: 13 };
+
+var clone = { ...obj1 };
+// Object { toto: 'truc', x: 42 }
+
+var fusion = { ...obj1, ...obj2 };
+// Object { toto: 'bidule', x: 42, y: 13 };
+
+ +

On notera que la méthode {{jsxref("Object.assign()")}} déclenche les mutateurs, ce qui n'est pas le cas de l'opérateur de décomposition.

+ +

Changement de prototype

+ +

Définir une propriété avec la syntaxe __proto__: valeur ou "__proto__": valeur ne permet pas de créer une propriété avec le nom __proto__. Si la valeur fournie est un objet ou est null, cela modifie le [[Prototype]] de l'objet. (Si la valeur fournie n'est pas un objet ou n'est pas null, l'objet ne sera pas modifié.)

+ +
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__"));
+
+ +

On ne peut modifier le prototype qu'une seule fois pour une même notation littérale. Toute tentative pour modifier le prototype plusieurs fois renverra une erreur de syntaxe.

+ +

Les définitions de propriétés qui n'utilisent pas les deux points ne permettent pas de modifier le prototype, elles définieront une propriété de façon classique.

+ +
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);
+
+ +

Notation littérale et JSON

+ +

La notation utilisant un littéral objet n'est pas identique à celle utilisée par la JavaScript Object Notation (JSON). Bien que ces notations se ressemblent, il existe certaines différences :

+ + + +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}{{Spec2('ES5.1')}}Ajout des getter et setter (accesseur/mutateur).
{{SpecName('ES2015', '#sec-object-initializer', 'Object Initializer')}}{{Spec2('ES2015')}}Ajout des raccourcis pour les noms de méthodes et propriétés et des noms de propriétés calculés.
{{SpecName('ESDraft', '#sec-object-initializer', 'Object Initializer')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.object_initializer")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/operator_precedence/index.html b/files/fr/web/javascript/reference/operators/operator_precedence/index.html deleted file mode 100644 index ca76cf3985..0000000000 --- a/files/fr/web/javascript/reference/operators/operator_precedence/index.html +++ /dev/null @@ -1,360 +0,0 @@ ---- -title: Précédence des opérateurs -slug: Web/JavaScript/Reference/Operators/Operator_Precedence -tags: - - JavaScript - - Opérateur - - Reference - - precedence -translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence -original_slug: Web/JavaScript/Reference/Opérateurs/Précédence_des_opérateurs ---- -
{{jsSidebar("Operators")}}
- -

La précédence des opérateurs détermine l'ordre dans lequel les opérateurs sont évalués. Les opérateurs avec la plus haute précédence sont évalués en premier.

- -

Ainsi, l'opérateur de multiplication (« * ») (ayant une précédence plus haute que l'opérateur d'addition (« + »)) est évalué en premier et l'expression 6 * 4 + 2 renverra 26 (et pas 36).

- -
{{EmbedInteractiveExample("pages/js/expressions-operatorprecedence.html")}}
- - - -

Associativité

- -

L'associativité détermine l'ordre dans lequel des opérateurs de même précédence sont évalués. Par exemple, considérons l'expression suivante :

- -
a OP b OP c
-
- -

Une associativité de gauche (gauche à droite) signifie qu'elle est évaluée comme (a OP b) OP c, tandis qu'une associativité de droite (droite à gauche) signifie qu'elle est interprétée comme a OP (b OP c). Les opérateurs d'affectation sont associatifs de droite, on peut donc écrire :

- -
a = b = 5;
-
- -

avec le résultat attendu que a et b obtiennent la même valeur de 5. C'est parce que l'opérateur d'affectation retourne la valeur qu'il affecte. D'abord, b est défini à la valeur 5. Ensuite, a est défini avec la valeur renvoyée par b = 5 qui est 5.

- -

Exemples

- -
3 > 2 && 2 > 1
-// renvoie true
-
-3 > 2 > 1
-// renvoie false car 3 > 2 vaut true et que true > 1 vaut false
-// En ajoutant des parenthèses, on y voit plus clair (3 > 2) > 1
-
- -

Tableau

- -

Le tableau suivant est classé de la plus haute (0) à la plus basse (19) précédence.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PrécédenceType d'opérateurAssociativitéOpérateurs individuels
0GroupementNon applicable( … )
1Accès à un membreGauche à droite… . …
Accès à un membre calculéGauche à droite… [ … ]
new (avec une liste d'arguments)Non applicablenew … ( … )
Appel de fonctionGauche à droite… ( )
Chaînage optionnelGauche à droite?.
2new (sans liste d'arguments)Droite à gauchenew …
3Incrémentation suffixeNon applicable… ++
Décrémentation suffixeNon applicable… --
4NON logiqueDroite à gauche! …
NON binaireDroite à gauche~ …
Plus unaireDroite à gauche+ …
Négation unaireDroite à gauche- …
Incrémentation préfixeDroite à gauche++ …
Décrémentation préfixeDroite à gauche-- …
typeofDroite à gauchetypeof …
voidDroite à gauchevoid …
deleteDroite à gauchedelete …
awaitDroite à gaucheawait …
5ExponentiationDroite à gauche… ** …
MultiplicationGauche à droite… * …
DivisionGauche à droite… / …
ResteGauche à droite… % …
6AdditionGauche à droite… + …
SoustractionGauche à droite… - …
7Décalage binaire à gaucheGauche à droite… << …
Décalage binaire à droiteGauche à droite… >> …
Décalage binaire à droite non-signéGauche à droite… >>> …
8Inférieur strictGauche à droite… < …
Inférieur ou égalGauche à droite… <= …
Supérieur strictGauche à droite… > …
Supérieur ou égalGauche à droite… >= …
inGauche à droite… in …
instanceofGauche à droite… instanceof …
9Égalité faibleGauche à droite… == …
Inégalité faibleGauche à droite… != …
Égalité stricteGauche à droite… === …
Inégalité stricteGauche à droite… !== …
10ET binaireGauche à droite… & …
11OU exclusif (XOR) binaireGauche à droite… ^ …
12OU binaireGauche à droite… | …
13ET logiqueGauche à droite… && …
14OU logiqueGauche à droite… || …
15Opérateur conditionnel ternaireDroite à gauche… ? … : …
16AffectationDroite à gauche… = …
… += …
… -= …
… *= …
… /= …
… **= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
17yieldDroite à gaucheyield …
yield*Droite à gaucheyield* …
18DécompositionNon applicable...
19VirguleGauche à droite… , …
diff --git a/files/fr/web/javascript/reference/operators/operator_precedence/index.md b/files/fr/web/javascript/reference/operators/operator_precedence/index.md new file mode 100644 index 0000000000..ca76cf3985 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/operator_precedence/index.md @@ -0,0 +1,360 @@ +--- +title: Précédence des opérateurs +slug: Web/JavaScript/Reference/Operators/Operator_Precedence +tags: + - JavaScript + - Opérateur + - Reference + - precedence +translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence +original_slug: Web/JavaScript/Reference/Opérateurs/Précédence_des_opérateurs +--- +
{{jsSidebar("Operators")}}
+ +

La précédence des opérateurs détermine l'ordre dans lequel les opérateurs sont évalués. Les opérateurs avec la plus haute précédence sont évalués en premier.

+ +

Ainsi, l'opérateur de multiplication (« * ») (ayant une précédence plus haute que l'opérateur d'addition (« + »)) est évalué en premier et l'expression 6 * 4 + 2 renverra 26 (et pas 36).

+ +
{{EmbedInteractiveExample("pages/js/expressions-operatorprecedence.html")}}
+ + + +

Associativité

+ +

L'associativité détermine l'ordre dans lequel des opérateurs de même précédence sont évalués. Par exemple, considérons l'expression suivante :

+ +
a OP b OP c
+
+ +

Une associativité de gauche (gauche à droite) signifie qu'elle est évaluée comme (a OP b) OP c, tandis qu'une associativité de droite (droite à gauche) signifie qu'elle est interprétée comme a OP (b OP c). Les opérateurs d'affectation sont associatifs de droite, on peut donc écrire :

+ +
a = b = 5;
+
+ +

avec le résultat attendu que a et b obtiennent la même valeur de 5. C'est parce que l'opérateur d'affectation retourne la valeur qu'il affecte. D'abord, b est défini à la valeur 5. Ensuite, a est défini avec la valeur renvoyée par b = 5 qui est 5.

+ +

Exemples

+ +
3 > 2 && 2 > 1
+// renvoie true
+
+3 > 2 > 1
+// renvoie false car 3 > 2 vaut true et que true > 1 vaut false
+// En ajoutant des parenthèses, on y voit plus clair (3 > 2) > 1
+
+ +

Tableau

+ +

Le tableau suivant est classé de la plus haute (0) à la plus basse (19) précédence.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PrécédenceType d'opérateurAssociativitéOpérateurs individuels
0GroupementNon applicable( … )
1Accès à un membreGauche à droite… . …
Accès à un membre calculéGauche à droite… [ … ]
new (avec une liste d'arguments)Non applicablenew … ( … )
Appel de fonctionGauche à droite… ( )
Chaînage optionnelGauche à droite?.
2new (sans liste d'arguments)Droite à gauchenew …
3Incrémentation suffixeNon applicable… ++
Décrémentation suffixeNon applicable… --
4NON logiqueDroite à gauche! …
NON binaireDroite à gauche~ …
Plus unaireDroite à gauche+ …
Négation unaireDroite à gauche- …
Incrémentation préfixeDroite à gauche++ …
Décrémentation préfixeDroite à gauche-- …
typeofDroite à gauchetypeof …
voidDroite à gauchevoid …
deleteDroite à gauchedelete …
awaitDroite à gaucheawait …
5ExponentiationDroite à gauche… ** …
MultiplicationGauche à droite… * …
DivisionGauche à droite… / …
ResteGauche à droite… % …
6AdditionGauche à droite… + …
SoustractionGauche à droite… - …
7Décalage binaire à gaucheGauche à droite… << …
Décalage binaire à droiteGauche à droite… >> …
Décalage binaire à droite non-signéGauche à droite… >>> …
8Inférieur strictGauche à droite… < …
Inférieur ou égalGauche à droite… <= …
Supérieur strictGauche à droite… > …
Supérieur ou égalGauche à droite… >= …
inGauche à droite… in …
instanceofGauche à droite… instanceof …
9Égalité faibleGauche à droite… == …
Inégalité faibleGauche à droite… != …
Égalité stricteGauche à droite… === …
Inégalité stricteGauche à droite… !== …
10ET binaireGauche à droite… & …
11OU exclusif (XOR) binaireGauche à droite… ^ …
12OU binaireGauche à droite… | …
13ET logiqueGauche à droite… && …
14OU logiqueGauche à droite… || …
15Opérateur conditionnel ternaireDroite à gauche… ? … : …
16AffectationDroite à gauche… = …
… += …
… -= …
… *= …
… /= …
… **= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
17yieldDroite à gaucheyield …
yield*Droite à gaucheyield* …
18DécompositionNon applicable...
19VirguleGauche à droite… , …
diff --git a/files/fr/web/javascript/reference/operators/optional_chaining/index.html b/files/fr/web/javascript/reference/operators/optional_chaining/index.html deleted file mode 100644 index 7fd8595772..0000000000 --- a/files/fr/web/javascript/reference/operators/optional_chaining/index.html +++ /dev/null @@ -1,185 +0,0 @@ ---- -title: Chaînage optionnel (optional chaining) -slug: Web/JavaScript/Reference/Operators/Optional_chaining -tags: - - Chaînage - - Chaînage optionnel - - Coalescence - - JavaScript - - Operator - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/Optional_chaining -original_slug: Web/JavaScript/Reference/Opérateurs/Optional_chaining ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de chaînage optionnel ?. permet de lire la valeur d'une propriété située profondément dans une chaîne d'objets connectés sans avoir à valider expressément que chaque référence dans la chaîne est valide. L'opérateur ?. fonctionne de manière similaire à l'opérateur de chaînage ., à ceci près qu'au lieu de causer une erreur si une référence est {{jsxref("null")}} ou {{jsxref("undefined")}}, l'expression se court-circuite avec undefined pour valeur de retour. Quand il est utilisé avec des appels de fonctions, il retourne undefined si la fonction donnée n'existe pas.

- -

Ceci résulte en des expressions plus courtes et plus simples lors de l'accès à des propriétés chaînées quand il est possible qu'une référence soit manquante. Ceci peut aussi être utile lors de l'exploration du contenu d'un objet lorsqu'il n'y a aucune garantie concernant les propriétés qui sont requises.

- -

Le chainage optionnel ne peut pas être utilisé sur un objet initialement inexistant. Il ne remplace les vérifications du type if (typeof a == "undefined").

- -

{{EmbedInteractiveExample("pages/js/expressions-optionalchainingoperator.html")}}

- -

Syntaxe

- -
obj?.prop
-obj?.[expr]
-arr?.[index]
-func?.(args)
-
- -

Description

- -

L'opérateur de chaînage optionnel fournit un moyen de simplifier l'accès aux valeurs au sein d'objets connectés quand il est possible qu'une référence ou une fonction soit undefined ou null.

- -

Par exemple, considérant un objet obj qui a une structure imbriquée. Sans chaînage optionnel, chercher une sous-propriété imbriquée en profondeur requiert de valider les références intermédiaires, tel que :

- -
let nestedProp = obj.premier && obj.premier.second;
- -

La valeur de obj.premier est confirmée comme n'étant pas null (ni undefined) avant que d'accéder à la valeur de obj.premier.second. Ceci prévient l'erreur qui pourrait survenir si vous accédiez simplement obj.premier.second directement sans vérifier obj.premier.

- -

Avec l'opérateur de chaînage optionnel (?.), vous n'avez pas besoin de vérifier explicitement et de court-circuiter la vérification selon l'état de obj.premier avant que d'accéder à obj.premier.second :

- -
let nestedProp = obj.premier?.second;
- -

En utilisant l'opérateur ?. au lieu de l'opérateur ., JavaScript sait implicitement qu'il doit vérifier obj.premier pour être certain qu'il ne soit null ou undefined avant que de tenter d'accéder à obj.first.second. Si obj.premier est null ou undefined, l'expression se court-circuite automatiquement et retourne undefined.

- -

C'est équivalent à : 

- -
let temp = obj.premier;
-let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);
-
- -

Chaînage optionnel avec des appels de fonctions

- -

Vous pouvez utiliser le chaînage optionnel lorsque vous tentez d'appeler une méthode qui pourrait ne pas exister. Ceci peut être une aide précieuse, par exemple, lorsque vous utilisez une API dans laquelle une méthode pourrait être indisponible, à cause d'une implantation datée ou à cause d'une fonctionnalité qui n'est pas disponible sur l'appareil de l'utilisateur.

- -

Utiliser le chaînage optionnel avec les appels de fonction entraîne le retour automatique de la valeur undefined pour l'expression plutôt que de jeter une exception si la méthode n'est pas trouvée :

- -
let result = uneInterface.uneMéthode?.();
- -
-

Note : S'il est une propriété qui porte ce nom et qui n'est pas une fonction, utiliser ?. jètera aussi une exception {{jsxref("TypeError")}} (x.y is not a function).

-
- -

Réaliser des fonctions de rappel optionnelles ou des écouteurs d'évènements

- -

Si vous utilisez des fonctions ou des méthodes de recherche depuis un objet avec une affectation par décomposition, vous pourriez avoir des valeurs inexistantes que vous ne pouvez appeler comme fonction à moins que vous ayez vérifié leur existance. En utilisant ?., vous pourriez vous passer de cette vérification supplémentaire :

- -
// ES2019
-function doSomething(onContent, onError) {
-  try {
-    // ... faire quelque chose avec les données
-  }
-  catch (err) {
-    if (onError) { // vérifier que onError existe réellement
-      onError(err.message);
-    }
-  }
-}
-
- -
// Utiliser le chaînage optionnel avec les appels de fonctions
-function doSomething(onContent, onError) {
-  try {
-   // ... faire quelque chose avec les données
-  }
-  catch (err) {
-    onError?.(err.message); // pas d'exception si onError n'est pas défini
-  }
-}
-
- -

Chaînage optionnel avec les expressions

- -

Vous pouvez aussi utiliser l'opérateur de chaînage optionnel lorsque vous accédez aux propriétés avec une expression en utilisant la notation avec crochets des accesseurs de propriétés :

- -
let nestedProp = obj?.['propName'];
-
- -

Chaînage optionnel invalide depuis le côté gauche d'une affectation

- -
let objet = {};
-objet?.propriété = 1; // Uncaught SyntaxError: Invalid left-hand side in assignment
- -

Accès aux éléments de tableau avec le chaînage optionnel

- -
let élément = arr?.[42];
- -

Exemples

- -

Exemple basique

- -

Cet exemple cherche la valeur de la propriété name dans un objet stocké comme propriété de nom bar d'un objet Map alors que cet objet bar n'existe pas. Le résultat est donc undefined.

- -
let monMap = new Map();
-monMap.set("foo", {name: "baz", desc: "inga"});
-
-let nameBar = monMap.get("bar")?.name;
- -

Court-circuiter une évaluation

- -

Lorsque vous utilisez le chaînage optionnel avec une expression, si l'opérande gauche est null ou undefined, l'expression ne sera par évaluée. Par exemple :

- -
let objetPotentiellementNul = null;
-let x = 0;
-let prop = objetPotentiellementNul?.[x++];
-
-console.log(x); // 0 car x n'a pas été incrémenté
-
- -

Empiler les opérateurs de chaînage optionnel

- -

Avec les structures imbriquées, il est possible d'utiliser le chaînage optionnel plusieurs fois :

- -
let client = {
-  nom: "Carl",
-  details: {
-    age: 82,
-    localisation: "Paradise Falls"
-    // adresse détaillée inconnue
-  }
-};
-let villeDuClient = client.details?.adresse?.ville;
-
-// … cela fonctionne aussi avec le chaînage optionnel sur les appels de fonction
-let durée = vacations.trip?.getTime?.();
-
- -

Combinaison avec l'opérateur de coalescence des nuls (Nullish coalescing operator)

- -

L'{{JSxRef("Opérateurs/Nullish_coalescing_operator", "Opérateur de coalescence des nuls (Nullish coalescing operator)", '', 1)}} peut être utilisé après un chaînage optionnel afin de construire une valeur par défaut quand aucune n'a été trouvée :

- -
let client = {
-  nom: "Carl",
-  details: { age: 82 }
-};
-const villeDuClient = client?.ville ?? "Ville Inconnue";
-console.log(villeDuClient); // Ville inconnue
- -

Spécifications

- - - - - - - - - - - - -
Specification
{{SpecName('ESDraft', '#prod-OptionalExpression', 'optional expression')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.optional_chaining")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/optional_chaining/index.md b/files/fr/web/javascript/reference/operators/optional_chaining/index.md new file mode 100644 index 0000000000..7fd8595772 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/optional_chaining/index.md @@ -0,0 +1,185 @@ +--- +title: Chaînage optionnel (optional chaining) +slug: Web/JavaScript/Reference/Operators/Optional_chaining +tags: + - Chaînage + - Chaînage optionnel + - Coalescence + - JavaScript + - Operator + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/Optional_chaining +original_slug: Web/JavaScript/Reference/Opérateurs/Optional_chaining +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de chaînage optionnel ?. permet de lire la valeur d'une propriété située profondément dans une chaîne d'objets connectés sans avoir à valider expressément que chaque référence dans la chaîne est valide. L'opérateur ?. fonctionne de manière similaire à l'opérateur de chaînage ., à ceci près qu'au lieu de causer une erreur si une référence est {{jsxref("null")}} ou {{jsxref("undefined")}}, l'expression se court-circuite avec undefined pour valeur de retour. Quand il est utilisé avec des appels de fonctions, il retourne undefined si la fonction donnée n'existe pas.

+ +

Ceci résulte en des expressions plus courtes et plus simples lors de l'accès à des propriétés chaînées quand il est possible qu'une référence soit manquante. Ceci peut aussi être utile lors de l'exploration du contenu d'un objet lorsqu'il n'y a aucune garantie concernant les propriétés qui sont requises.

+ +

Le chainage optionnel ne peut pas être utilisé sur un objet initialement inexistant. Il ne remplace les vérifications du type if (typeof a == "undefined").

+ +

{{EmbedInteractiveExample("pages/js/expressions-optionalchainingoperator.html")}}

+ +

Syntaxe

+ +
obj?.prop
+obj?.[expr]
+arr?.[index]
+func?.(args)
+
+ +

Description

+ +

L'opérateur de chaînage optionnel fournit un moyen de simplifier l'accès aux valeurs au sein d'objets connectés quand il est possible qu'une référence ou une fonction soit undefined ou null.

+ +

Par exemple, considérant un objet obj qui a une structure imbriquée. Sans chaînage optionnel, chercher une sous-propriété imbriquée en profondeur requiert de valider les références intermédiaires, tel que :

+ +
let nestedProp = obj.premier && obj.premier.second;
+ +

La valeur de obj.premier est confirmée comme n'étant pas null (ni undefined) avant que d'accéder à la valeur de obj.premier.second. Ceci prévient l'erreur qui pourrait survenir si vous accédiez simplement obj.premier.second directement sans vérifier obj.premier.

+ +

Avec l'opérateur de chaînage optionnel (?.), vous n'avez pas besoin de vérifier explicitement et de court-circuiter la vérification selon l'état de obj.premier avant que d'accéder à obj.premier.second :

+ +
let nestedProp = obj.premier?.second;
+ +

En utilisant l'opérateur ?. au lieu de l'opérateur ., JavaScript sait implicitement qu'il doit vérifier obj.premier pour être certain qu'il ne soit null ou undefined avant que de tenter d'accéder à obj.first.second. Si obj.premier est null ou undefined, l'expression se court-circuite automatiquement et retourne undefined.

+ +

C'est équivalent à : 

+ +
let temp = obj.premier;
+let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);
+
+ +

Chaînage optionnel avec des appels de fonctions

+ +

Vous pouvez utiliser le chaînage optionnel lorsque vous tentez d'appeler une méthode qui pourrait ne pas exister. Ceci peut être une aide précieuse, par exemple, lorsque vous utilisez une API dans laquelle une méthode pourrait être indisponible, à cause d'une implantation datée ou à cause d'une fonctionnalité qui n'est pas disponible sur l'appareil de l'utilisateur.

+ +

Utiliser le chaînage optionnel avec les appels de fonction entraîne le retour automatique de la valeur undefined pour l'expression plutôt que de jeter une exception si la méthode n'est pas trouvée :

+ +
let result = uneInterface.uneMéthode?.();
+ +
+

Note : S'il est une propriété qui porte ce nom et qui n'est pas une fonction, utiliser ?. jètera aussi une exception {{jsxref("TypeError")}} (x.y is not a function).

+
+ +

Réaliser des fonctions de rappel optionnelles ou des écouteurs d'évènements

+ +

Si vous utilisez des fonctions ou des méthodes de recherche depuis un objet avec une affectation par décomposition, vous pourriez avoir des valeurs inexistantes que vous ne pouvez appeler comme fonction à moins que vous ayez vérifié leur existance. En utilisant ?., vous pourriez vous passer de cette vérification supplémentaire :

+ +
// ES2019
+function doSomething(onContent, onError) {
+  try {
+    // ... faire quelque chose avec les données
+  }
+  catch (err) {
+    if (onError) { // vérifier que onError existe réellement
+      onError(err.message);
+    }
+  }
+}
+
+ +
// Utiliser le chaînage optionnel avec les appels de fonctions
+function doSomething(onContent, onError) {
+  try {
+   // ... faire quelque chose avec les données
+  }
+  catch (err) {
+    onError?.(err.message); // pas d'exception si onError n'est pas défini
+  }
+}
+
+ +

Chaînage optionnel avec les expressions

+ +

Vous pouvez aussi utiliser l'opérateur de chaînage optionnel lorsque vous accédez aux propriétés avec une expression en utilisant la notation avec crochets des accesseurs de propriétés :

+ +
let nestedProp = obj?.['propName'];
+
+ +

Chaînage optionnel invalide depuis le côté gauche d'une affectation

+ +
let objet = {};
+objet?.propriété = 1; // Uncaught SyntaxError: Invalid left-hand side in assignment
+ +

Accès aux éléments de tableau avec le chaînage optionnel

+ +
let élément = arr?.[42];
+ +

Exemples

+ +

Exemple basique

+ +

Cet exemple cherche la valeur de la propriété name dans un objet stocké comme propriété de nom bar d'un objet Map alors que cet objet bar n'existe pas. Le résultat est donc undefined.

+ +
let monMap = new Map();
+monMap.set("foo", {name: "baz", desc: "inga"});
+
+let nameBar = monMap.get("bar")?.name;
+ +

Court-circuiter une évaluation

+ +

Lorsque vous utilisez le chaînage optionnel avec une expression, si l'opérande gauche est null ou undefined, l'expression ne sera par évaluée. Par exemple :

+ +
let objetPotentiellementNul = null;
+let x = 0;
+let prop = objetPotentiellementNul?.[x++];
+
+console.log(x); // 0 car x n'a pas été incrémenté
+
+ +

Empiler les opérateurs de chaînage optionnel

+ +

Avec les structures imbriquées, il est possible d'utiliser le chaînage optionnel plusieurs fois :

+ +
let client = {
+  nom: "Carl",
+  details: {
+    age: 82,
+    localisation: "Paradise Falls"
+    // adresse détaillée inconnue
+  }
+};
+let villeDuClient = client.details?.adresse?.ville;
+
+// … cela fonctionne aussi avec le chaînage optionnel sur les appels de fonction
+let durée = vacations.trip?.getTime?.();
+
+ +

Combinaison avec l'opérateur de coalescence des nuls (Nullish coalescing operator)

+ +

L'{{JSxRef("Opérateurs/Nullish_coalescing_operator", "Opérateur de coalescence des nuls (Nullish coalescing operator)", '', 1)}} peut être utilisé après un chaînage optionnel afin de construire une valeur par défaut quand aucune n'a été trouvée :

+ +
let client = {
+  nom: "Carl",
+  details: { age: 82 }
+};
+const villeDuClient = client?.ville ?? "Ville Inconnue";
+console.log(villeDuClient); // Ville inconnue
+ +

Spécifications

+ + + + + + + + + + + + +
Specification
{{SpecName('ESDraft', '#prod-OptionalExpression', 'optional expression')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.optional_chaining")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/property_accessors/index.html b/files/fr/web/javascript/reference/operators/property_accessors/index.html deleted file mode 100644 index 8a1ab4bbd6..0000000000 --- a/files/fr/web/javascript/reference/operators/property_accessors/index.html +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: Accesseurs de propriétés -slug: Web/JavaScript/Reference/Operators/Property_Accessors -tags: - - JavaScript - - Opérateur - - Reference -translation_of: Web/JavaScript/Reference/Operators/Property_Accessors -original_slug: Web/JavaScript/Reference/Opérateurs/Opérateurs_de_membres ---- -
{{jsSidebar("Operators")}}
- -

Les accesseurs de propriété permettent de fournir un accès aux propriétés d'un objet en utilisant une notation avec un point ou une notation avec des crochets

- -
{{EmbedInteractiveExample("pages/js/expressions-propertyaccessors.html")}}
- -

Syntaxe

- -
objet.propriété
-objet["propriété"]
-
- -

Description

- -

Les objets peuvent être vus comme des tableaux associatifs (map, dictionnaires, table de hachage, annuaire, etc.). Les clés (keys) de ce tableau sont les noms des propriétés de l'objet. Lorsqu'on parle d'objets, on fait généralement une distinction entre les propriétés et les méthodes. En réalité cette différence est plus dûe à une convention qu'à une réelle distinction. En effet, une méthode est simplement une propriété qu'on peut appeler (sa valeur fera souvent référence à une instance de {{jsxref("Function")}}).

- -

Il existe deux façons d'accéder aux propriétés d'un objet : la notation avec point et la notation avec crochets.

- -

Notation avec point

- -
obtenir = objet.propriété;
-objet.propriété = définir;
-
- -

propriété doit être un identifiant JavaScript valide, c'est-à-dire une séquence de caractères alphanumériques, soulignés (« _ ») et signes dollar (« $ »), qui ne peut commencer par un nombre. Par exemple, objet.$1 est valide, mais objet.1 ne l'est pas.

- -
document.createElement('pre');
-
- -

Ici, la méthode createElement est obtenue depuis l'objet document et est appelée.

- -

Si on utilise une méthode pour un littéral numérique et que celui-ci ne possède pas de point décimal ni d'exposant lié à la notation scientifique, il faudra laisser un ou plusieurs blancs afin que l'appel soit bien interprété comme un appel de méthode plutôt que comme un séparateur décimal :

- -
77 .toExponential();
-// ou
-77
-.toExponential();
-// ou, mieux pour la lisibilité
-(77).toExponential();
-// ou encore
-77.0.toExponential();
-// 77. correspond à 77.0 et là il n'y a aucun doute
-
- -

Notation avec crochets

- -
obtenir = objet[nom_de_propriété];
-objet[nom_de_propriété] = définir;
-
- -

nom_de_propriété est une chaîne de caractères ou un {{jsxref("Symbol","symbole","","")}}. Elle n'a pas besoin d'être un identifiant valide ; elle peut avoir n'importe quelle valeur, par exemple "1foo", "!bar!" ou même " " (une espace).

- -

Exemple

- -
document['createElement']('pre');
-
- -

Cette ligne fait exactement la même chose que l'exemple précédent.

- -

Noms de propriétés

- -

Les noms de propriétés doivent être des chaînes de caractères ou des symboles. Cela signifie que les autres types d'objet ne peuvent pas être utilisés comme clés d'un objet. Tout autre type d'objet, même un nombre, sera converti en une chaîne via sa méthode toString.

- -

Exemples

- -
var objet = {};
-objet['1'] = 'valeur';
-console.log(objet[1]);
-
- -

Ceci affichera « valeur », étant donné que le nombre 1 sera converti en une chaîne "1".

- -
var toto = {propriété_unique : 1}, truc = {propriété_unique : 2}, objet = {};
-objet[toto] = 'valeur';
-console.log(objet[truc]);
-
- -

Ce code affichera également « valeur », étant donné que toto et truc seront convertis en la même chaîne de caractères. Dans le cas du moteur JavaScript SpiderMonkey, cette chaîne serait "['object Object']".

- -

Liaison de méthodes

- -

Une méthode n'est pas liée à l'objet dont elle est une méthode. En particulier, this n'est pas défini dans une méthode, c'est-à-dire que this ne fait pas nécessairement référence à un objet contenant la méthode. En réalité, this est « passé » par l'appel de la fonction.

- -

Pour plus d'informations, consultez la page sur l'opérateur this et les liaisons de méthodes.

- -

Note concernant eval

- -

Les nouveaux venus en JavaScript font souvent l'erreur d'utiliser {{jsxref("eval", "eval()")}} alors que la notation avec crochets pourrait être utilisée. Par exemple, la syntaxe suivante est utilisée dans de nombreux scripts.

- -
x = eval('document.formulaire.' + controle + '.value');
-
- -

eval est lente et insécurisée et devrait être évitée dès que possible. Il est préférable d'utiliser la notation avec crochets :

- -
x = document.formulaire[controle].value;
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-property-accessors', 'Property Accessors')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-property-accessors', 'Accesseurs de propriété')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.2.1', 'Accesseurs de propriété')}}{{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.2.1', 'Accesseurs de propriété')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.property_accessors")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/property_accessors/index.md b/files/fr/web/javascript/reference/operators/property_accessors/index.md new file mode 100644 index 0000000000..8a1ab4bbd6 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/property_accessors/index.md @@ -0,0 +1,151 @@ +--- +title: Accesseurs de propriétés +slug: Web/JavaScript/Reference/Operators/Property_Accessors +tags: + - JavaScript + - Opérateur + - Reference +translation_of: Web/JavaScript/Reference/Operators/Property_Accessors +original_slug: Web/JavaScript/Reference/Opérateurs/Opérateurs_de_membres +--- +
{{jsSidebar("Operators")}}
+ +

Les accesseurs de propriété permettent de fournir un accès aux propriétés d'un objet en utilisant une notation avec un point ou une notation avec des crochets

+ +
{{EmbedInteractiveExample("pages/js/expressions-propertyaccessors.html")}}
+ +

Syntaxe

+ +
objet.propriété
+objet["propriété"]
+
+ +

Description

+ +

Les objets peuvent être vus comme des tableaux associatifs (map, dictionnaires, table de hachage, annuaire, etc.). Les clés (keys) de ce tableau sont les noms des propriétés de l'objet. Lorsqu'on parle d'objets, on fait généralement une distinction entre les propriétés et les méthodes. En réalité cette différence est plus dûe à une convention qu'à une réelle distinction. En effet, une méthode est simplement une propriété qu'on peut appeler (sa valeur fera souvent référence à une instance de {{jsxref("Function")}}).

+ +

Il existe deux façons d'accéder aux propriétés d'un objet : la notation avec point et la notation avec crochets.

+ +

Notation avec point

+ +
obtenir = objet.propriété;
+objet.propriété = définir;
+
+ +

propriété doit être un identifiant JavaScript valide, c'est-à-dire une séquence de caractères alphanumériques, soulignés (« _ ») et signes dollar (« $ »), qui ne peut commencer par un nombre. Par exemple, objet.$1 est valide, mais objet.1 ne l'est pas.

+ +
document.createElement('pre');
+
+ +

Ici, la méthode createElement est obtenue depuis l'objet document et est appelée.

+ +

Si on utilise une méthode pour un littéral numérique et que celui-ci ne possède pas de point décimal ni d'exposant lié à la notation scientifique, il faudra laisser un ou plusieurs blancs afin que l'appel soit bien interprété comme un appel de méthode plutôt que comme un séparateur décimal :

+ +
77 .toExponential();
+// ou
+77
+.toExponential();
+// ou, mieux pour la lisibilité
+(77).toExponential();
+// ou encore
+77.0.toExponential();
+// 77. correspond à 77.0 et là il n'y a aucun doute
+
+ +

Notation avec crochets

+ +
obtenir = objet[nom_de_propriété];
+objet[nom_de_propriété] = définir;
+
+ +

nom_de_propriété est une chaîne de caractères ou un {{jsxref("Symbol","symbole","","")}}. Elle n'a pas besoin d'être un identifiant valide ; elle peut avoir n'importe quelle valeur, par exemple "1foo", "!bar!" ou même " " (une espace).

+ +

Exemple

+ +
document['createElement']('pre');
+
+ +

Cette ligne fait exactement la même chose que l'exemple précédent.

+ +

Noms de propriétés

+ +

Les noms de propriétés doivent être des chaînes de caractères ou des symboles. Cela signifie que les autres types d'objet ne peuvent pas être utilisés comme clés d'un objet. Tout autre type d'objet, même un nombre, sera converti en une chaîne via sa méthode toString.

+ +

Exemples

+ +
var objet = {};
+objet['1'] = 'valeur';
+console.log(objet[1]);
+
+ +

Ceci affichera « valeur », étant donné que le nombre 1 sera converti en une chaîne "1".

+ +
var toto = {propriété_unique : 1}, truc = {propriété_unique : 2}, objet = {};
+objet[toto] = 'valeur';
+console.log(objet[truc]);
+
+ +

Ce code affichera également « valeur », étant donné que toto et truc seront convertis en la même chaîne de caractères. Dans le cas du moteur JavaScript SpiderMonkey, cette chaîne serait "['object Object']".

+ +

Liaison de méthodes

+ +

Une méthode n'est pas liée à l'objet dont elle est une méthode. En particulier, this n'est pas défini dans une méthode, c'est-à-dire que this ne fait pas nécessairement référence à un objet contenant la méthode. En réalité, this est « passé » par l'appel de la fonction.

+ +

Pour plus d'informations, consultez la page sur l'opérateur this et les liaisons de méthodes.

+ +

Note concernant eval

+ +

Les nouveaux venus en JavaScript font souvent l'erreur d'utiliser {{jsxref("eval", "eval()")}} alors que la notation avec crochets pourrait être utilisée. Par exemple, la syntaxe suivante est utilisée dans de nombreux scripts.

+ +
x = eval('document.formulaire.' + controle + '.value');
+
+ +

eval est lente et insécurisée et devrait être évitée dès que possible. Il est préférable d'utiliser la notation avec crochets :

+ +
x = document.formulaire[controle].value;
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-property-accessors', 'Property Accessors')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-property-accessors', 'Accesseurs de propriété')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.2.1', 'Accesseurs de propriété')}}{{Spec2('ES5.1')}}
{{SpecName('ES1', '#sec-11.2.1', 'Accesseurs de propriété')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.property_accessors")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/remainder/index.html b/files/fr/web/javascript/reference/operators/remainder/index.html deleted file mode 100644 index c5df6dd43d..0000000000 --- a/files/fr/web/javascript/reference/operators/remainder/index.html +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Reste (%) -slug: Web/JavaScript/Reference/Operators/Remainder -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.remainder -translation-of: Web/JavaScript/Reference/Operators/Remainder ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur du reste (%) renvoie le reste de la division de l'opérande gauche par l'opérande droit. Le résultat a toujours le signe du numérateur.

- -
{{EmbedInteractiveExample("pages/js/expressions-remainder.html")}}
- -

Bien que dans la plupart des langages, % est un opérateur de reste, pour d'autres (par exemple Python, Perl) c'est un opérateur de modulo. Lorsqu'on utilise des valeurs positives, les deux opérateurs sont équivalents mais lorsque le numérateur et de dénominateur ont des signes différents, le reste et le modulo fourniront des signes différents. Pour obtenir une opération équivalente au modulo en JavaScript, on pourra utiliser ((a % n ) + n ) % n.

- -

Syntaxe

- -
-Opérateur : var1 % var2
-
- -

Exemples

- -

Reste avec numérateur positif

- -
-12 % 5  //  2
- 1 % -2 //  1
- 1 % 2  //  1
- 2 % 3  //  2
-5.5 % 2 // 1.5
-
- -

Reste avec numérateur négatif

- -
--12 % 5 // -2
--1 % 2  // -1
--4 % 2  // -0
-
- -

Reste avec NaN

- -
-NaN % 2 // NaN
-
- -

Reste avec l'infini

- -
-Infinity % 2 // NaN
-Infinity % 0 // NaN
-Infinity % Infinity // NaN
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/remainder/index.md b/files/fr/web/javascript/reference/operators/remainder/index.md new file mode 100644 index 0000000000..c5df6dd43d --- /dev/null +++ b/files/fr/web/javascript/reference/operators/remainder/index.md @@ -0,0 +1,80 @@ +--- +title: Reste (%) +slug: Web/JavaScript/Reference/Operators/Remainder +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.remainder +translation-of: Web/JavaScript/Reference/Operators/Remainder +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur du reste (%) renvoie le reste de la division de l'opérande gauche par l'opérande droit. Le résultat a toujours le signe du numérateur.

+ +
{{EmbedInteractiveExample("pages/js/expressions-remainder.html")}}
+ +

Bien que dans la plupart des langages, % est un opérateur de reste, pour d'autres (par exemple Python, Perl) c'est un opérateur de modulo. Lorsqu'on utilise des valeurs positives, les deux opérateurs sont équivalents mais lorsque le numérateur et de dénominateur ont des signes différents, le reste et le modulo fourniront des signes différents. Pour obtenir une opération équivalente au modulo en JavaScript, on pourra utiliser ((a % n ) + n ) % n.

+ +

Syntaxe

+ +
+Opérateur : var1 % var2
+
+ +

Exemples

+ +

Reste avec numérateur positif

+ +
+12 % 5  //  2
+ 1 % -2 //  1
+ 1 % 2  //  1
+ 2 % 3  //  2
+5.5 % 2 // 1.5
+
+ +

Reste avec numérateur négatif

+ +
+-12 % 5 // -2
+-1 % 2  // -1
+-4 % 2  // -0
+
+ +

Reste avec NaN

+ +
+NaN % 2 // NaN
+
+ +

Reste avec l'infini

+ +
+Infinity % 2 // NaN
+Infinity % 0 // NaN
+Infinity % Infinity // NaN
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/remainder_assignment/index.html b/files/fr/web/javascript/reference/operators/remainder_assignment/index.html deleted file mode 100644 index 87a47940d9..0000000000 --- a/files/fr/web/javascript/reference/operators/remainder_assignment/index.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Affectation après reste (%=) -slug: Web/JavaScript/Reference/Operators/Remainder_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.remainder_assignment -translation-of: Web/JavaScript/Reference/Operators/Remainder_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de reste et d'affectation (%=) calcule le reste de la division de l'opérande gauche par l'opérande droit et affecte ce résultat à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-remainder-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x %= y
-Signification :  x  = x % y
-
- -

Exemples

- -

Utiliser l'opérateur de reste et d'affectation

- -
-let truc = 5;
-truc %= 2;      // 1
-truc %= 'toto'; // NaN
-truc %= 0;      // NaN
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/remainder_assignment/index.md b/files/fr/web/javascript/reference/operators/remainder_assignment/index.md new file mode 100644 index 0000000000..87a47940d9 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/remainder_assignment/index.md @@ -0,0 +1,50 @@ +--- +title: Affectation après reste (%=) +slug: Web/JavaScript/Reference/Operators/Remainder_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.remainder_assignment +translation-of: Web/JavaScript/Reference/Operators/Remainder_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de reste et d'affectation (%=) calcule le reste de la division de l'opérande gauche par l'opérande droit et affecte ce résultat à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-remainder-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x %= y
+Signification :  x  = x % y
+
+ +

Exemples

+ +

Utiliser l'opérateur de reste et d'affectation

+ +
+let truc = 5;
+truc %= 2;      // 1
+truc %= 'toto'; // NaN
+truc %= 0;      // NaN
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/right_shift/index.html b/files/fr/web/javascript/reference/operators/right_shift/index.html deleted file mode 100644 index 79c94864a3..0000000000 --- a/files/fr/web/javascript/reference/operators/right_shift/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Décalage binaire à droite (>>) -slug: Web/JavaScript/Reference/Operators/Right_shift -tags: - - Bitwise operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.right_shift -translation-of: Web/JavaScript/Reference/Operators/Right_shift ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de décalage binaire à droite (>>) décale la séquence de bits représentée par le premier opérande d'autant de bits vers la droite que le nombre indiqué par le second opérande. Les bits en excès à droite sont écartés. Pour le remplissage des bits par la gauche, c'est le bit le plus à gauche initialement qui est recopié autant de fois que nécessaire. Aussi, le bit le plus à gauche dans le résultat sera le même que le bit le plus à gauche de l'opérande et les deux valeurs auront donc le même signe.

- -
{{EmbedInteractiveExample("pages/js/expressions-right-shift.html")}}
- -

Syntaxe

- -
-a >> b
-
- -

Description

- -

Cet opérateur décale les bits de la valeur fournie par le premier opérande d'autant de fois qu'indiqué par le deuxième opérande. Les bits en excès à droite sont écartés et pour les bits les plus à gauche, c'est le bit initialement le plus à gauche qui est dupliqué. On garde ainsi le même signe entre la valeur du premier opérande et la valeur fournie par le résultat.

- -

Ainsi, 9 >> 2 donnera 2 :

- -
-       9 (base 10): 00000000000000000000000000001001 (base 2)
-                    --------------------------------
-  9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
-
- -

De même, -9 >> 2 donnera -3, car le signe est préservé :

- -
-       -9 (base 10): 11111111111111111111111111110111 (base 2)
-                     --------------------------------
-  -9 >> 2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)
-
- -

Exemples

- -

Utiliser le décalage à droite

- -
- 9 >> 2; //  2
--9 >> 2; // -3
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/right_shift/index.md b/files/fr/web/javascript/reference/operators/right_shift/index.md new file mode 100644 index 0000000000..79c94864a3 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/right_shift/index.md @@ -0,0 +1,67 @@ +--- +title: Décalage binaire à droite (>>) +slug: Web/JavaScript/Reference/Operators/Right_shift +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.right_shift +translation-of: Web/JavaScript/Reference/Operators/Right_shift +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de décalage binaire à droite (>>) décale la séquence de bits représentée par le premier opérande d'autant de bits vers la droite que le nombre indiqué par le second opérande. Les bits en excès à droite sont écartés. Pour le remplissage des bits par la gauche, c'est le bit le plus à gauche initialement qui est recopié autant de fois que nécessaire. Aussi, le bit le plus à gauche dans le résultat sera le même que le bit le plus à gauche de l'opérande et les deux valeurs auront donc le même signe.

+ +
{{EmbedInteractiveExample("pages/js/expressions-right-shift.html")}}
+ +

Syntaxe

+ +
+a >> b
+
+ +

Description

+ +

Cet opérateur décale les bits de la valeur fournie par le premier opérande d'autant de fois qu'indiqué par le deuxième opérande. Les bits en excès à droite sont écartés et pour les bits les plus à gauche, c'est le bit initialement le plus à gauche qui est dupliqué. On garde ainsi le même signe entre la valeur du premier opérande et la valeur fournie par le résultat.

+ +

Ainsi, 9 >> 2 donnera 2 :

+ +
+       9 (base 10): 00000000000000000000000000001001 (base 2)
+                    --------------------------------
+  9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
+
+ +

De même, -9 >> 2 donnera -3, car le signe est préservé :

+ +
+       -9 (base 10): 11111111111111111111111111110111 (base 2)
+                     --------------------------------
+  -9 >> 2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)
+
+ +

Exemples

+ +

Utiliser le décalage à droite

+ +
+ 9 >> 2; //  2
+-9 >> 2; // -3
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/right_shift_assignment/index.html b/files/fr/web/javascript/reference/operators/right_shift_assignment/index.html deleted file mode 100644 index 1674985313..0000000000 --- a/files/fr/web/javascript/reference/operators/right_shift_assignment/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Affectation après décalage à droite (>>=) -slug: Web/JavaScript/Reference/Operators/Right_shift_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.right_shift_assignment -translation: Web/JavaScript/Reference/Operators/Right_shift_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de décalage à droite et d'affectation (>>=) décale la séquence de bits indiquée par l'opérande gauche d'autant de bits qu'indiqués par l'opérande droit puis affecte le résultat obtenu à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-right-shift-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x >>= y
-Signification :  x   = x >> y
-
- -

Exemples

- -

Utiliser l'opérateur de décalage à droite et d'affectation

- -
-let a = 5; //   (00000000000000000000000000000101)
-a >>= 2;   // 1 (00000000000000000000000000000001)
-
-let b = -5; //  (-00000000000000000000000000000101)
-b >>= 2;  // -2 (-00000000000000000000000000000010)
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/right_shift_assignment/index.md b/files/fr/web/javascript/reference/operators/right_shift_assignment/index.md new file mode 100644 index 0000000000..1674985313 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/right_shift_assignment/index.md @@ -0,0 +1,51 @@ +--- +title: Affectation après décalage à droite (>>=) +slug: Web/JavaScript/Reference/Operators/Right_shift_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.right_shift_assignment +translation: Web/JavaScript/Reference/Operators/Right_shift_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de décalage à droite et d'affectation (>>=) décale la séquence de bits indiquée par l'opérande gauche d'autant de bits qu'indiqués par l'opérande droit puis affecte le résultat obtenu à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-right-shift-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x >>= y
+Signification :  x   = x >> y
+
+ +

Exemples

+ +

Utiliser l'opérateur de décalage à droite et d'affectation

+ +
+let a = 5; //   (00000000000000000000000000000101)
+a >>= 2;   // 1 (00000000000000000000000000000001)
+
+let b = -5; //  (-00000000000000000000000000000101)
+b >>= 2;  // -2 (-00000000000000000000000000000010)
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/spread_syntax/index.html b/files/fr/web/javascript/reference/operators/spread_syntax/index.html deleted file mode 100644 index a9e21fa187..0000000000 --- a/files/fr/web/javascript/reference/operators/spread_syntax/index.html +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: Syntaxe de décomposition -slug: Web/JavaScript/Reference/Operators/Spread_syntax -tags: - - ECMAScript 2015 - - ECMAScript6 - - JavaScript - - Reference - - Syntaxe -translation_of: Web/JavaScript/Reference/Operators/Spread_syntax -original_slug: Web/JavaScript/Reference/Opérateurs/Syntaxe_décomposition ---- -
{{jsSidebar("Operators")}}
- -

La syntaxe de décomposition permet d'étendre un itérable (par exemple une expression de tableau ou une chaîne de caractères) en lieu et place de plusieurs arguments (pour les appels de fonctions) ou de plusieurs éléments (pour les littéraux de tableaux) ou de paires clés-valeurs (pour les littéraux d'objets).

- -
{{EmbedInteractiveExample("pages/js/expressions-spreadsyntax.html")}}
- -

Syntaxe

- -

Pour l'utilisation de la décomposition dans les appels de fonction :

- -
f(...objetIterable);
-
- -

Pour les littéraux de tableaux :

- -
[...objetIterable, 4, 5, 6]
- -

Pour les littéraux objets (nouvelle fonctionnalité pour ECMAScript, actuellement en proposition de niveau 4, finalisée) :

- -
let objClone = { ...obj };
- -

Exemples

- -

Utiliser la décomposition dans les appels de fonction

- -

Améliorer la fonction apply()

- -

Il arrive souvent qu'on veuille utiliser {{jsxref( "Function.prototype.apply")}} avec un tableau parmi les arguments de la fonction utilisée :

- -
function f(x, y, z) { }
-var args = [0, 1, 2];
-f.apply(null, args);
- -

avec la décomposition, on peut désormais écrire :

- -
function f(x, y, z) { }
-var args = [0, 1, 2];
-f(...args);
- -

Tout argument passé à une fonction peut être décomposé grâce à cette syntaxe et cette syntaxe peut être utilisée pour plusieurs arguments.

- -
function f(v, w, x, y, z) { }
-var args = [0, 1];
-f(-1, ...args, 2, ...[3]);
- -

Utiliser apply() avec l'opérateur new

- -

Avec ES5, il n'est pas possible d'utiliser new avec apply (selon ES5 apply effectue un appel [[Call]] et pas un appel [[Construct]]). Avec ES2015, la syntaxe de décomposition permet de le faire naturellement :

- -
var champsDate = lireChampsDate(maBaseDeDonnées);
-var d = new Date(...champsDate);
- -

Afin d'utiliser new avec un tableau de paramètres, sans utiliser la décomposition, il faudrait l'employer indirectement grâce à une application partielle :

- -
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 monConstructeur () {
-   console.log("arguments.length: " + arguments.length);
-   console.log(arguments);
-   this.prop1="val1";
-   this.prop2="val2";
-};
-
-var mesArguments = ["bi", "bop", "bup", null];
-var monConstructeurAvecArguments = applyAndNew(monConstructor, mesArguments);
-
-console.log(new monConstructeurAvecArguments);
-// (log fourni par monConstructeur):           arguments.length: 4
-// (log fourni par monConstructeur):           ["bi", "bop", "bup", null]
-// (log fourni par "new monConstructeurAvecArguments"): {prop1: "val1", prop2: "val2"}
-
- -

Utiliser la décomposition dans les littéraux de tableau

- -

Améliorer les littéraux de tableau

- -

À l'heure actuelle, sans la décomposition, si on a un tableau et qu'on souhaite créer un nouveau tableau composé du premier, on ne peut pas utiliser un littéral de tableau et il faut utiliser des fonctions comme {{jsxref("Array.prototype.push", "push()")}}, {{jsxref("Array.prototype.splice", "splice()")}}, {{jsxref("Array.prototype.concat", "concat()")}}, etc. Avec la syntaxe de décomposition, cela devient plus succinct :

- -
var articulations = ['épaules', 'genoux'];
-var corps = ['têtes', ...articulations, 'bras', 'pieds'];
-// ["têtes", "épaules", "genoux", "bras", "pieds"]
-
- -

Comme pour les fonctions, la syntaxe peut être utilisé plusieurs fois.

- -

Copier un tableau

- -
var arr = [1, 2, 3];
-var arr2 = [...arr];
-arr2.push(4);
-
-console.log(arr2); // [1, 2, 3, 4]
-console.log(arr);  // [1, 2, 3] (inchangé)
-
- -
-

Note : Lorsqu'on utilise la décomposition pour copier un tableau, celle-ci ne s'applique qu'au premier niveau de profondeur. Par conséquent, il peut ne pas convenir pour la copie des tableaux multidimensionnels (des tableaux imbriqués dans d'autres tableaux) comme le montre l’exemple suivant (il en va de même avec {{jsxref("Object.assign()")}} et la décomposition).

-
- -
var a = [[1], [2], [3]];
-var b = [...a]; // b vaut [[1], [2], [3]]
-
-b.shift().shift(); // *a* vaut désormais [[], [2], [3]];
-
- -

Une meilleure façon de concaténer des tableaux

- -

{{jsxref("Array.prototype.concat", "concat")}} est souvent utilisé afin de concaténer un tableau à la suite d'une autre. Avec ES5, on aurait le code suivant :

- -
var arr1 = [0, 1, 2];
-var arr2 = [3, 4, 5];
-// On ajoute les éléments de arr2 après ceux de arr1
-var nouveauTableau = arr1.concat(arr2);
- -

Avec ES2015 et la décomposition, on peut écrire :

- -
var arr1 = [0, 1, 2];
-var arr2 = [3, 4, 5];
-arr1 = [...arr1, ...arr2]; // arr1 vaut [0, 1, 2, 3, 4, 5]
-
- -

{{jsxref("Array.prototype.unshift", "unshift")}} est souvent utilisé afin d'insérer des valeurs d'un tableau au début d'un autre tableau. Avec ES5, on peut écrire :

- -
var arr1 = [0, 1, 2];
-var arr2 = [3, 4, 5];
-// On ajoute tous les éléments
-// de arr2 au début de arr1
-Array.prototype.unshift.apply(arr1, arr2) // arr1 vaut [3, 4, 5, 0, 1, 2]
- -

Avec ES2015 et la décomposition, on peut écrire :

- -
var arr1 = [4, 5, 6];
-var arr2 = [1, 2, 3];
-arr1 = [...arr2, ...arr1];
-// arr1 vaut désormais [1, 2, 3, 4, 5, 6]
-
- -
-

Note : Il y a une différence avec unshift() : ici, on crée un nouveau tableau qui est affecté à arr1, le tableau original de arr1 n'est pas modifié "sur place".

-
- -

Utiliser la décomposition avec les littéraux objet

- -

La proposition relative à la décomposition des propriétés (actuellement au stade de proposition de niveau 4) vise à ajouter la décomposition des propriétés pour les littéraux objets. Cela permet de copier les propriétés énumérables directement rattachées à un objet source sur un nouvel objet.

- -

Le clonage superficiel (qui ne rattache pas le prototype) ou la fusion d'objets peut donc être obtenue avec une syntaxe plus concise que celle utilisant {{jsxref("Object.assign()")}}.

- -
var profil = { prenom: 'Sarah', profilComplet: false };
-var profilMisAJour = { nom: 'Dupont', profilComplet: true };
-
-var clone = { ...profil };
-// Object { prenom: 'Sarah', profilComplet: false }
-
-var fusion = { ...profil, ...profilMisAJour };
-// Object { prenom: 'Sarah', nom: 'Dupont', profilComplet: true };
- -

On notera que {{jsxref("Object.assign()")}} déclenche les mutateurs, ce qui n'est pas le cas pour la syntaxe de décomposition.

- -

Il n'est pas possible de remplacer ou de recopier le comportement de la fonction {{jsxref("Object.assign()")}} :

- -
var profil = { prenom: 'Sarah', profilComplet: false };
-var profilMisAJour = { nom: 'Dupont', profilComplet: true };
-
-const fusionner = ( ...objets) => {...objets};
-var nouveauProfil = fusionner(profil, profilMisAJour);
-// Object { 0: { prenom: 'Sarah', profilComplet: false }, 1: { nom: 'Dupont', profilComplet: true } }
-
-var autreNouveauProfil = fusion({}, obj1, obj2);
-// Object { 0: {}, 1: { prenom: 'Sarah', profilComplet: false }, 2: { nom: 'Dupont', profilComplet: true } }
-
- -

Dans l'exemple précédent, la syntaxe de décomposition ne fonctionne pas comme on pourrait s'y attendre : il décompose les arguments en un tableau grâce au paramètre du reste.

- -

La décomposition ne s'applique qu'aux itérables

- -

Pour rappel : la syntaxe de décomposition ne s'applique qu'aux objets itérables :

- -
var obj = {"clé1" : "valeur1"};
-function maFonction(x) {
-  console.log(x); // undefined
-}
-maFonction(...obj);
-var args = [...obj];
-console.log(args, args.length) //[] 0
- -

Utiliser la décomposition avec de nombreuses valeurs

- -

Lorsqu'on utilise la décomposition (comme dans les exemples précédents), il faut faire attention à ne pas dépasser le nombre maximal d'arguments du moteur JavaScript. En effet, la décomposition place toutes les valeurs sources dans la pile. Pour plus d'informations, consulter {{jsxref( "Function.prototype.apply")}}.

- -

Les paramètres du reste

- -

La syntaxe des paramètres du reste ressemble à la syntaxe de décomposition mais est utilisée afin de destructurer des tableaux et des objets. D'une certaine façon, la syntaxe du reste est l'opposée de la décomposition : la première collecte plusieurs éléments et les condense en un seul élément tandis que la seconde explose les éléments. Pour plus d'informations, voir la page sur les paramètres du reste.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array-initializer')}}{{Spec2('ES2015')}}Définie dans plusieurs sections de la spécification : initialisateur de tableau, listes d'argument.
{{SpecName('ES2018', '#sec-object-initializer')}}{{Spec2('ES2018')}}Définie dans la section sur les initialisateurs d'objet.
{{SpecName('ESDraft', '#sec-array-initializer')}}{{Spec2('ESDraft')}}Aucune modification.
{{SpecName('ESDraft', '#sec-object-initializer')}}{{Spec2('ESDraft')}}Aucune modification.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.spread")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/spread_syntax/index.md b/files/fr/web/javascript/reference/operators/spread_syntax/index.md new file mode 100644 index 0000000000..a9e21fa187 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/spread_syntax/index.md @@ -0,0 +1,259 @@ +--- +title: Syntaxe de décomposition +slug: Web/JavaScript/Reference/Operators/Spread_syntax +tags: + - ECMAScript 2015 + - ECMAScript6 + - JavaScript + - Reference + - Syntaxe +translation_of: Web/JavaScript/Reference/Operators/Spread_syntax +original_slug: Web/JavaScript/Reference/Opérateurs/Syntaxe_décomposition +--- +
{{jsSidebar("Operators")}}
+ +

La syntaxe de décomposition permet d'étendre un itérable (par exemple une expression de tableau ou une chaîne de caractères) en lieu et place de plusieurs arguments (pour les appels de fonctions) ou de plusieurs éléments (pour les littéraux de tableaux) ou de paires clés-valeurs (pour les littéraux d'objets).

+ +
{{EmbedInteractiveExample("pages/js/expressions-spreadsyntax.html")}}
+ +

Syntaxe

+ +

Pour l'utilisation de la décomposition dans les appels de fonction :

+ +
f(...objetIterable);
+
+ +

Pour les littéraux de tableaux :

+ +
[...objetIterable, 4, 5, 6]
+ +

Pour les littéraux objets (nouvelle fonctionnalité pour ECMAScript, actuellement en proposition de niveau 4, finalisée) :

+ +
let objClone = { ...obj };
+ +

Exemples

+ +

Utiliser la décomposition dans les appels de fonction

+ +

Améliorer la fonction apply()

+ +

Il arrive souvent qu'on veuille utiliser {{jsxref( "Function.prototype.apply")}} avec un tableau parmi les arguments de la fonction utilisée :

+ +
function f(x, y, z) { }
+var args = [0, 1, 2];
+f.apply(null, args);
+ +

avec la décomposition, on peut désormais écrire :

+ +
function f(x, y, z) { }
+var args = [0, 1, 2];
+f(...args);
+ +

Tout argument passé à une fonction peut être décomposé grâce à cette syntaxe et cette syntaxe peut être utilisée pour plusieurs arguments.

+ +
function f(v, w, x, y, z) { }
+var args = [0, 1];
+f(-1, ...args, 2, ...[3]);
+ +

Utiliser apply() avec l'opérateur new

+ +

Avec ES5, il n'est pas possible d'utiliser new avec apply (selon ES5 apply effectue un appel [[Call]] et pas un appel [[Construct]]). Avec ES2015, la syntaxe de décomposition permet de le faire naturellement :

+ +
var champsDate = lireChampsDate(maBaseDeDonnées);
+var d = new Date(...champsDate);
+ +

Afin d'utiliser new avec un tableau de paramètres, sans utiliser la décomposition, il faudrait l'employer indirectement grâce à une application partielle :

+ +
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 monConstructeur () {
+   console.log("arguments.length: " + arguments.length);
+   console.log(arguments);
+   this.prop1="val1";
+   this.prop2="val2";
+};
+
+var mesArguments = ["bi", "bop", "bup", null];
+var monConstructeurAvecArguments = applyAndNew(monConstructor, mesArguments);
+
+console.log(new monConstructeurAvecArguments);
+// (log fourni par monConstructeur):           arguments.length: 4
+// (log fourni par monConstructeur):           ["bi", "bop", "bup", null]
+// (log fourni par "new monConstructeurAvecArguments"): {prop1: "val1", prop2: "val2"}
+
+ +

Utiliser la décomposition dans les littéraux de tableau

+ +

Améliorer les littéraux de tableau

+ +

À l'heure actuelle, sans la décomposition, si on a un tableau et qu'on souhaite créer un nouveau tableau composé du premier, on ne peut pas utiliser un littéral de tableau et il faut utiliser des fonctions comme {{jsxref("Array.prototype.push", "push()")}}, {{jsxref("Array.prototype.splice", "splice()")}}, {{jsxref("Array.prototype.concat", "concat()")}}, etc. Avec la syntaxe de décomposition, cela devient plus succinct :

+ +
var articulations = ['épaules', 'genoux'];
+var corps = ['têtes', ...articulations, 'bras', 'pieds'];
+// ["têtes", "épaules", "genoux", "bras", "pieds"]
+
+ +

Comme pour les fonctions, la syntaxe peut être utilisé plusieurs fois.

+ +

Copier un tableau

+ +
var arr = [1, 2, 3];
+var arr2 = [...arr];
+arr2.push(4);
+
+console.log(arr2); // [1, 2, 3, 4]
+console.log(arr);  // [1, 2, 3] (inchangé)
+
+ +
+

Note : Lorsqu'on utilise la décomposition pour copier un tableau, celle-ci ne s'applique qu'au premier niveau de profondeur. Par conséquent, il peut ne pas convenir pour la copie des tableaux multidimensionnels (des tableaux imbriqués dans d'autres tableaux) comme le montre l’exemple suivant (il en va de même avec {{jsxref("Object.assign()")}} et la décomposition).

+
+ +
var a = [[1], [2], [3]];
+var b = [...a]; // b vaut [[1], [2], [3]]
+
+b.shift().shift(); // *a* vaut désormais [[], [2], [3]];
+
+ +

Une meilleure façon de concaténer des tableaux

+ +

{{jsxref("Array.prototype.concat", "concat")}} est souvent utilisé afin de concaténer un tableau à la suite d'une autre. Avec ES5, on aurait le code suivant :

+ +
var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+// On ajoute les éléments de arr2 après ceux de arr1
+var nouveauTableau = arr1.concat(arr2);
+ +

Avec ES2015 et la décomposition, on peut écrire :

+ +
var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+arr1 = [...arr1, ...arr2]; // arr1 vaut [0, 1, 2, 3, 4, 5]
+
+ +

{{jsxref("Array.prototype.unshift", "unshift")}} est souvent utilisé afin d'insérer des valeurs d'un tableau au début d'un autre tableau. Avec ES5, on peut écrire :

+ +
var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+// On ajoute tous les éléments
+// de arr2 au début de arr1
+Array.prototype.unshift.apply(arr1, arr2) // arr1 vaut [3, 4, 5, 0, 1, 2]
+ +

Avec ES2015 et la décomposition, on peut écrire :

+ +
var arr1 = [4, 5, 6];
+var arr2 = [1, 2, 3];
+arr1 = [...arr2, ...arr1];
+// arr1 vaut désormais [1, 2, 3, 4, 5, 6]
+
+ +
+

Note : Il y a une différence avec unshift() : ici, on crée un nouveau tableau qui est affecté à arr1, le tableau original de arr1 n'est pas modifié "sur place".

+
+ +

Utiliser la décomposition avec les littéraux objet

+ +

La proposition relative à la décomposition des propriétés (actuellement au stade de proposition de niveau 4) vise à ajouter la décomposition des propriétés pour les littéraux objets. Cela permet de copier les propriétés énumérables directement rattachées à un objet source sur un nouvel objet.

+ +

Le clonage superficiel (qui ne rattache pas le prototype) ou la fusion d'objets peut donc être obtenue avec une syntaxe plus concise que celle utilisant {{jsxref("Object.assign()")}}.

+ +
var profil = { prenom: 'Sarah', profilComplet: false };
+var profilMisAJour = { nom: 'Dupont', profilComplet: true };
+
+var clone = { ...profil };
+// Object { prenom: 'Sarah', profilComplet: false }
+
+var fusion = { ...profil, ...profilMisAJour };
+// Object { prenom: 'Sarah', nom: 'Dupont', profilComplet: true };
+ +

On notera que {{jsxref("Object.assign()")}} déclenche les mutateurs, ce qui n'est pas le cas pour la syntaxe de décomposition.

+ +

Il n'est pas possible de remplacer ou de recopier le comportement de la fonction {{jsxref("Object.assign()")}} :

+ +
var profil = { prenom: 'Sarah', profilComplet: false };
+var profilMisAJour = { nom: 'Dupont', profilComplet: true };
+
+const fusionner = ( ...objets) => {...objets};
+var nouveauProfil = fusionner(profil, profilMisAJour);
+// Object { 0: { prenom: 'Sarah', profilComplet: false }, 1: { nom: 'Dupont', profilComplet: true } }
+
+var autreNouveauProfil = fusion({}, obj1, obj2);
+// Object { 0: {}, 1: { prenom: 'Sarah', profilComplet: false }, 2: { nom: 'Dupont', profilComplet: true } }
+
+ +

Dans l'exemple précédent, la syntaxe de décomposition ne fonctionne pas comme on pourrait s'y attendre : il décompose les arguments en un tableau grâce au paramètre du reste.

+ +

La décomposition ne s'applique qu'aux itérables

+ +

Pour rappel : la syntaxe de décomposition ne s'applique qu'aux objets itérables :

+ +
var obj = {"clé1" : "valeur1"};
+function maFonction(x) {
+  console.log(x); // undefined
+}
+maFonction(...obj);
+var args = [...obj];
+console.log(args, args.length) //[] 0
+ +

Utiliser la décomposition avec de nombreuses valeurs

+ +

Lorsqu'on utilise la décomposition (comme dans les exemples précédents), il faut faire attention à ne pas dépasser le nombre maximal d'arguments du moteur JavaScript. En effet, la décomposition place toutes les valeurs sources dans la pile. Pour plus d'informations, consulter {{jsxref( "Function.prototype.apply")}}.

+ +

Les paramètres du reste

+ +

La syntaxe des paramètres du reste ressemble à la syntaxe de décomposition mais est utilisée afin de destructurer des tableaux et des objets. D'une certaine façon, la syntaxe du reste est l'opposée de la décomposition : la première collecte plusieurs éléments et les condense en un seul élément tandis que la seconde explose les éléments. Pour plus d'informations, voir la page sur les paramètres du reste.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-array-initializer')}}{{Spec2('ES2015')}}Définie dans plusieurs sections de la spécification : initialisateur de tableau, listes d'argument.
{{SpecName('ES2018', '#sec-object-initializer')}}{{Spec2('ES2018')}}Définie dans la section sur les initialisateurs d'objet.
{{SpecName('ESDraft', '#sec-array-initializer')}}{{Spec2('ESDraft')}}Aucune modification.
{{SpecName('ESDraft', '#sec-object-initializer')}}{{Spec2('ESDraft')}}Aucune modification.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.spread")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/strict_equality/index.html b/files/fr/web/javascript/reference/operators/strict_equality/index.html deleted file mode 100644 index ba45dffaae..0000000000 --- a/files/fr/web/javascript/reference/operators/strict_equality/index.html +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Égalité stricte (===) -slug: Web/JavaScript/Reference/Operators/Strict_equality -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.strict_equality -translation-of: Web/JavaScript/Reference/Operators/Strict_equality ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'égalité stricte (===) vérifie si ses deux opérandes sont égaux et renvoie un booléen correspondant au résultat. À la différence de l'opérateur d'égalité, l'opérateur d'égalité stricte considère toujours des opérandes de types différents comme étant différents.

- -
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
- -

Syntaxe

- -
-x === y
-
- -

Description

- -

Les opérateurs d'égalité stricte (=== et !==) utilisent l'algorithme de comparaison d'égalité stricte pour comparer deux opérandes.

- - - -

La différence fondamentale avec l'opérateur d'égalité (==) est que, lorsque les opérandes sont de types différents, == tentera une conversion vers un type commun avant la comparaison.

- -

Exemples

- -

Comparaison d'opérandes de même type

- -
-console.log("hello" === "hello");   // true
-console.log("hello" === "hola");    // false
-
-console.log(3 === 3);               // true
-console.log(3 === 4);               // false
-
-console.log(true === true);         // true
-console.log(true === false);        // false
-
-console.log(null === null);         // true
-
- -

Comparaison d'opérandes de types différents

- -
-console.log("3" === 3);           // false
-
-console.log(true === 1);          // false
-
-console.log(null === undefined);  // false
-
- -

Comparaison d'objets

- -
-const objet1 = {
-  name: "coucou"
-}
-
-const objet2 = {
-  name: "coucou"
-}
-
-console.log(objet1 === objet2);  // false
-console.log(objet1 === objet1);  // true
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/strict_equality/index.md b/files/fr/web/javascript/reference/operators/strict_equality/index.md new file mode 100644 index 0000000000..ba45dffaae --- /dev/null +++ b/files/fr/web/javascript/reference/operators/strict_equality/index.md @@ -0,0 +1,100 @@ +--- +title: Égalité stricte (===) +slug: Web/JavaScript/Reference/Operators/Strict_equality +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.strict_equality +translation-of: Web/JavaScript/Reference/Operators/Strict_equality +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'égalité stricte (===) vérifie si ses deux opérandes sont égaux et renvoie un booléen correspondant au résultat. À la différence de l'opérateur d'égalité, l'opérateur d'égalité stricte considère toujours des opérandes de types différents comme étant différents.

+ +
{{EmbedInteractiveExample("pages/js/expressions-strict-equality.html")}}
+ +

Syntaxe

+ +
+x === y
+
+ +

Description

+ +

Les opérateurs d'égalité stricte (=== et !==) utilisent l'algorithme de comparaison d'égalité stricte pour comparer deux opérandes.

+ + + +

La différence fondamentale avec l'opérateur d'égalité (==) est que, lorsque les opérandes sont de types différents, == tentera une conversion vers un type commun avant la comparaison.

+ +

Exemples

+ +

Comparaison d'opérandes de même type

+ +
+console.log("hello" === "hello");   // true
+console.log("hello" === "hola");    // false
+
+console.log(3 === 3);               // true
+console.log(3 === 4);               // false
+
+console.log(true === true);         // true
+console.log(true === false);        // false
+
+console.log(null === null);         // true
+
+ +

Comparaison d'opérandes de types différents

+ +
+console.log("3" === 3);           // false
+
+console.log(true === 1);          // false
+
+console.log(null === undefined);  // false
+
+ +

Comparaison d'objets

+ +
+const objet1 = {
+  name: "coucou"
+}
+
+const objet2 = {
+  name: "coucou"
+}
+
+console.log(objet1 === objet2);  // false
+console.log(objet1 === objet1);  // true
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/strict_inequality/index.html b/files/fr/web/javascript/reference/operators/strict_inequality/index.html deleted file mode 100644 index d436d5af46..0000000000 --- a/files/fr/web/javascript/reference/operators/strict_inequality/index.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Inégalité stricte (!==) -slug: Web/JavaScript/Reference/Operators/Strict_inequality -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.strict_inequality -translation-of: Web/JavaScript/Reference/Operators/Strict_inequality ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'inégalité stricte (!==) vérifie si ses deux opérandes ne sont pas égaux et renvoie un booléen correspondant au résultat. À la différence de l'opérateur d'inégalité, l'opérateur d'inégalité stricte considère toujours des opérandes de types différents comme étant différents.

- -
{{EmbedInteractiveExample("pages/js/expressions-strict-inequality.html")}}
- -

Syntaxe

- -
-x !== y
-
- -

Description

- -

L'opérateur d'inégalité stricte vérifie que ses deux opérandes ne sont pas égaux. Il s'agit de la négation de l'opérateur d'égalité stricte. Les deux expressions suivantes fourniront toujours le même résultat :

- -
-x !== y
-!(x === y)
-
- -

Pour plus de détails sur l'algorithme de comparaison utilisé, voir la page sur l'opérateur d'égalité stricte.

- -

À l'instar de l'opérateur d'égalité stricte, l'opérateur d'inégalité stricte considèrera toujours des opérandes de types différents comme étant différents :

- -
-3 !== "3"; // true
-
- -

Exemples

- -

Comparaison d'opérandes de même type

- -
-console.log("hello" !== "hello");   // false
-console.log("hello" !== "hola");    // true
-
-console.log(3 !== 3);               // false
-console.log(3 !== 4);               // true
-
-console.log(true !== true);         // false
-console.log(true !== false);        // true
-
-console.log(null !== null);         // false
-
- -

Comparaison d'opérandes de types différents

- -
-console.log("3" !== 3);           // true
-
-console.log(true !== 1);          // true
-
-console.log(null !== undefined);  // true
-
- -

Comparaison d'objets

- -
-const objet1 = {
-  name: "coucou"
-}
-
-const objet2 = {
-  name: "coucou"
-}
-
-console.log(objet1 !== objet2);  // true
-console.log(objet1 !== objet1);  // false
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/strict_inequality/index.md b/files/fr/web/javascript/reference/operators/strict_inequality/index.md new file mode 100644 index 0000000000..d436d5af46 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/strict_inequality/index.md @@ -0,0 +1,97 @@ +--- +title: Inégalité stricte (!==) +slug: Web/JavaScript/Reference/Operators/Strict_inequality +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.strict_inequality +translation-of: Web/JavaScript/Reference/Operators/Strict_inequality +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'inégalité stricte (!==) vérifie si ses deux opérandes ne sont pas égaux et renvoie un booléen correspondant au résultat. À la différence de l'opérateur d'inégalité, l'opérateur d'inégalité stricte considère toujours des opérandes de types différents comme étant différents.

+ +
{{EmbedInteractiveExample("pages/js/expressions-strict-inequality.html")}}
+ +

Syntaxe

+ +
+x !== y
+
+ +

Description

+ +

L'opérateur d'inégalité stricte vérifie que ses deux opérandes ne sont pas égaux. Il s'agit de la négation de l'opérateur d'égalité stricte. Les deux expressions suivantes fourniront toujours le même résultat :

+ +
+x !== y
+!(x === y)
+
+ +

Pour plus de détails sur l'algorithme de comparaison utilisé, voir la page sur l'opérateur d'égalité stricte.

+ +

À l'instar de l'opérateur d'égalité stricte, l'opérateur d'inégalité stricte considèrera toujours des opérandes de types différents comme étant différents :

+ +
+3 !== "3"; // true
+
+ +

Exemples

+ +

Comparaison d'opérandes de même type

+ +
+console.log("hello" !== "hello");   // false
+console.log("hello" !== "hola");    // true
+
+console.log(3 !== 3);               // false
+console.log(3 !== 4);               // true
+
+console.log(true !== true);         // false
+console.log(true !== false);        // true
+
+console.log(null !== null);         // false
+
+ +

Comparaison d'opérandes de types différents

+ +
+console.log("3" !== 3);           // true
+
+console.log(true !== 1);          // true
+
+console.log(null !== undefined);  // true
+
+ +

Comparaison d'objets

+ +
+const objet1 = {
+  name: "coucou"
+}
+
+const objet2 = {
+  name: "coucou"
+}
+
+console.log(objet1 !== objet2);  // true
+console.log(objet1 !== objet1);  // false
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/subtraction/index.html b/files/fr/web/javascript/reference/operators/subtraction/index.html deleted file mode 100644 index cdada5f8cb..0000000000 --- a/files/fr/web/javascript/reference/operators/subtraction/index.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Soustraction (-) -slug: Web/JavaScript/Reference/Operators/Subtraction -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.subtraction -translation-of: Web/JavaScript/Reference/Operators/Subtraction ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de soustraction (-) effectue la soustraction entre les deux opérandes et fournit la différence obtenue.

- -
{{EmbedInteractiveExample("pages/js/expressions-subtraction.html")}}
- -

Syntaxe

- -
-Opérateur : x - y
-
- -

Exemples

- -

Avec des valeurs numériques

- -
-5 - 3     // 2
-3 - 5     // -2
-
- -

Avec des valeurs non-numériques

- -
-'toto' - 3 // NaN
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/subtraction/index.md b/files/fr/web/javascript/reference/operators/subtraction/index.md new file mode 100644 index 0000000000..cdada5f8cb --- /dev/null +++ b/files/fr/web/javascript/reference/operators/subtraction/index.md @@ -0,0 +1,59 @@ +--- +title: Soustraction (-) +slug: Web/JavaScript/Reference/Operators/Subtraction +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.subtraction +translation-of: Web/JavaScript/Reference/Operators/Subtraction +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de soustraction (-) effectue la soustraction entre les deux opérandes et fournit la différence obtenue.

+ +
{{EmbedInteractiveExample("pages/js/expressions-subtraction.html")}}
+ +

Syntaxe

+ +
+Opérateur : x - y
+
+ +

Exemples

+ +

Avec des valeurs numériques

+ +
+5 - 3     // 2
+3 - 5     // -2
+
+ +

Avec des valeurs non-numériques

+ +
+'toto' - 3 // NaN
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/subtraction_assignment/index.html b/files/fr/web/javascript/reference/operators/subtraction_assignment/index.html deleted file mode 100644 index ad67f469d6..0000000000 --- a/files/fr/web/javascript/reference/operators/subtraction_assignment/index.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Affectation après soustraction (-=) -slug: Web/JavaScript/Reference/Operators/Subtraction_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.subtraction_assignment -translation-of: Web/JavaScript/Reference/Operators/Subtraction_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur d'affectation après soustraction (-=) calcule la soustraction de l'opérande gauche par l'opérande droit puis affecte le résultat à la variable représentée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-subtraction-assignment.html")}}
- -

Syntaxe

- -
-Opérateur : x -= y
-Signification :  x  = x - y
-
- -

Exemples

- -

Utiliser l'opérateur de soustraction et d'affectation

- -
-let truc = 5;
-truc -= 2;      // 3
-truc -= 'toto'; // NaN
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/subtraction_assignment/index.md b/files/fr/web/javascript/reference/operators/subtraction_assignment/index.md new file mode 100644 index 0000000000..ad67f469d6 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/subtraction_assignment/index.md @@ -0,0 +1,49 @@ +--- +title: Affectation après soustraction (-=) +slug: Web/JavaScript/Reference/Operators/Subtraction_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.subtraction_assignment +translation-of: Web/JavaScript/Reference/Operators/Subtraction_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur d'affectation après soustraction (-=) calcule la soustraction de l'opérande gauche par l'opérande droit puis affecte le résultat à la variable représentée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-subtraction-assignment.html")}}
+ +

Syntaxe

+ +
+Opérateur : x -= y
+Signification :  x  = x - y
+
+ +

Exemples

+ +

Utiliser l'opérateur de soustraction et d'affectation

+ +
+let truc = 5;
+truc -= 2;      // 3
+truc -= 'toto'; // NaN
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/super/index.html b/files/fr/web/javascript/reference/operators/super/index.html deleted file mode 100644 index 372dfcd497..0000000000 --- a/files/fr/web/javascript/reference/operators/super/index.html +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: super -slug: Web/JavaScript/Reference/Operators/super -tags: - - Classes - - ECMAScript 2015 - - JavaScript - - Language feature - - Left-hand-side expressions - - Operator -translation_of: Web/JavaScript/Reference/Operators/super -original_slug: Web/JavaScript/Reference/Opérateurs/super -browser-compat: javascript.operators.super ---- -
{{jsSidebar("Operators")}}
- -

Le mot-clé super est utilisé afin d'appeler ou d'accéder à des fonctions définies sur l'objet parent.

- -

Les expressions de la forme super.propriete et super[expr] sont valides pour n'importe quelle définition de méthode, que ce soit au sein d'une classe ou d'un littéral objet.

- -

Syntaxe

- -
super([arguments]); // Le constructeur parent est appelé
-super.functionOnParent([arguments]);
-
- -

Description

- -

Lorsqu'il est utilisé dans un constructeur, le mot-clé super est utilisé seul et doit apparaître avant le mot-clé this. Ce mot-clé peut également être utilisé afin d'appeler des fonctions sur un objet parent.

- -

Exemples

- -

Utiliser super avec les classes

- -

Ce fragment de code est tiré de cet exemple. Ici on utilise super() afin d'éviter la duplication des parties communes entre le constructeur de Rectangle et de Carre.

- -
class Rectangle {
-  constructor(hauteur, largeur) {
-    this.name = 'Rectangle';
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-  coucou(){
-    console.log('Coucou, je suis un ' + this.name + '.');
-  }
-  get aire() {
-    return this.hauteur * this.largeur;
-  }
-  set aire(valeur) {
-    this.hauteur = Math.sqrt(valeur);
-    this.largeur = Math.sqrt(valeur);
-  }
-}
-
-class Carre extends Rectangle {
-  constructor(longueur) {
-
-    // Ici, on appelle le constructeur de Rectangle
-    // qui est l'objet « parent » de Carré
-    super(longueur, longueur);
-
-    // Pour les classes dérivées, super() doit être appelé
-    // avant d'utiliser 'this' sinon cela entraînera une
-    // exception ReferenceError.
-    this.name = 'Carré';
-  }
-}
- -

Utiliser super pour appeler des méthodes statiques

- -

Il est possible d'utiliser super pour invoquer des méthodes statiques :

- -
class Rectangle {
-  constructor() {}
-  static logNbCotes() {
-    return "J'ai 4 côtés";
-  }
-}
-
-class Carre extends Rectangle {
-  constructor(){}
-  static logDescription() {
-    return super.logNbCotes() + ' qui sont tous égaux';
-  }
-}
-Carre.logDescription(); // "J'ai 4 côtés qui sont tous égaux"
-
- -

Supprimer des propriétés parentes lèvera une exception

- -

Il n'est pas possible d'utiliser l'opérateur delete sur super.prop ou super[expr] pour supprimer une propriété de la classe parente, cela renverra une exception ReferenceError :

- -
class Base {
-  toto() {}
-}
-
-class Derivee extends Base {
-  delete() {
-    delete super.toto; // À ne pas faire
-  }
-}
-
-new Derivee().delete();
-// ReferenceError : suppression invalide avec 'super'
- -

super.prop ne peut pas surcharger les propriétés non modifiables

- -

Lorsque des propriétés sont définies sans accès en écriture (non-writable), par exemple avec Object.defineProperty(), super ne peut pas surcharger les valeurs de ces propriétés.

- -
class X {
-  constructor() {
-    Object.defineProperty(this, "prop", {
-      configurable: true,
-      writable: false,
-      value: 1
-    });
-  }
-}
-class Y extends X {
-  constructor() {
-    super();
-  }
-  toto(){
-    super.prop = 2; // Impossible de surcharger
-  }
-}
-const y = new Y();
-y.toto(); // TypeError "prop" est en lecture seule
-console.log(y.prop); // 1
-
- -

Utiliser super.prop sur les littéraux objets

- -

super peut également être utilisé avec la notation littérale. Dans l'exemple qui suit, deux objets définissent chacun une méthode. Le deuxième objet utilise super pour appeler la méthode du premier objet. Cela fonctionne grâce à Object.setPrototypeOf() avec lequel on définit que le prototype de obj2 est obj1. De cette façon, super peut parcourir la chaîne de prototypes et trouver methode1 dans obj1.

- -
const obj1 = {
-  methode1() {
-    console.log("méthode 1");
-  }
-}
-
-const obj2 = {
-  methode2() {
-    super.methode1();
-  }
-}
-
-Object.setPrototypeOf(obj2, obj1);
-obj2.methode2(); // affiche "méthode 1" dans la console
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/super/index.md b/files/fr/web/javascript/reference/operators/super/index.md new file mode 100644 index 0000000000..372dfcd497 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/super/index.md @@ -0,0 +1,165 @@ +--- +title: super +slug: Web/JavaScript/Reference/Operators/super +tags: + - Classes + - ECMAScript 2015 + - JavaScript + - Language feature + - Left-hand-side expressions + - Operator +translation_of: Web/JavaScript/Reference/Operators/super +original_slug: Web/JavaScript/Reference/Opérateurs/super +browser-compat: javascript.operators.super +--- +
{{jsSidebar("Operators")}}
+ +

Le mot-clé super est utilisé afin d'appeler ou d'accéder à des fonctions définies sur l'objet parent.

+ +

Les expressions de la forme super.propriete et super[expr] sont valides pour n'importe quelle définition de méthode, que ce soit au sein d'une classe ou d'un littéral objet.

+ +

Syntaxe

+ +
super([arguments]); // Le constructeur parent est appelé
+super.functionOnParent([arguments]);
+
+ +

Description

+ +

Lorsqu'il est utilisé dans un constructeur, le mot-clé super est utilisé seul et doit apparaître avant le mot-clé this. Ce mot-clé peut également être utilisé afin d'appeler des fonctions sur un objet parent.

+ +

Exemples

+ +

Utiliser super avec les classes

+ +

Ce fragment de code est tiré de cet exemple. Ici on utilise super() afin d'éviter la duplication des parties communes entre le constructeur de Rectangle et de Carre.

+ +
class Rectangle {
+  constructor(hauteur, largeur) {
+    this.name = 'Rectangle';
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+  coucou(){
+    console.log('Coucou, je suis un ' + this.name + '.');
+  }
+  get aire() {
+    return this.hauteur * this.largeur;
+  }
+  set aire(valeur) {
+    this.hauteur = Math.sqrt(valeur);
+    this.largeur = Math.sqrt(valeur);
+  }
+}
+
+class Carre extends Rectangle {
+  constructor(longueur) {
+
+    // Ici, on appelle le constructeur de Rectangle
+    // qui est l'objet « parent » de Carré
+    super(longueur, longueur);
+
+    // Pour les classes dérivées, super() doit être appelé
+    // avant d'utiliser 'this' sinon cela entraînera une
+    // exception ReferenceError.
+    this.name = 'Carré';
+  }
+}
+ +

Utiliser super pour appeler des méthodes statiques

+ +

Il est possible d'utiliser super pour invoquer des méthodes statiques :

+ +
class Rectangle {
+  constructor() {}
+  static logNbCotes() {
+    return "J'ai 4 côtés";
+  }
+}
+
+class Carre extends Rectangle {
+  constructor(){}
+  static logDescription() {
+    return super.logNbCotes() + ' qui sont tous égaux';
+  }
+}
+Carre.logDescription(); // "J'ai 4 côtés qui sont tous égaux"
+
+ +

Supprimer des propriétés parentes lèvera une exception

+ +

Il n'est pas possible d'utiliser l'opérateur delete sur super.prop ou super[expr] pour supprimer une propriété de la classe parente, cela renverra une exception ReferenceError :

+ +
class Base {
+  toto() {}
+}
+
+class Derivee extends Base {
+  delete() {
+    delete super.toto; // À ne pas faire
+  }
+}
+
+new Derivee().delete();
+// ReferenceError : suppression invalide avec 'super'
+ +

super.prop ne peut pas surcharger les propriétés non modifiables

+ +

Lorsque des propriétés sont définies sans accès en écriture (non-writable), par exemple avec Object.defineProperty(), super ne peut pas surcharger les valeurs de ces propriétés.

+ +
class X {
+  constructor() {
+    Object.defineProperty(this, "prop", {
+      configurable: true,
+      writable: false,
+      value: 1
+    });
+  }
+}
+class Y extends X {
+  constructor() {
+    super();
+  }
+  toto(){
+    super.prop = 2; // Impossible de surcharger
+  }
+}
+const y = new Y();
+y.toto(); // TypeError "prop" est en lecture seule
+console.log(y.prop); // 1
+
+ +

Utiliser super.prop sur les littéraux objets

+ +

super peut également être utilisé avec la notation littérale. Dans l'exemple qui suit, deux objets définissent chacun une méthode. Le deuxième objet utilise super pour appeler la méthode du premier objet. Cela fonctionne grâce à Object.setPrototypeOf() avec lequel on définit que le prototype de obj2 est obj1. De cette façon, super peut parcourir la chaîne de prototypes et trouver methode1 dans obj1.

+ +
const obj1 = {
+  methode1() {
+    console.log("méthode 1");
+  }
+}
+
+const obj2 = {
+  methode2() {
+    super.methode1();
+  }
+}
+
+Object.setPrototypeOf(obj2, obj1);
+obj2.methode2(); // affiche "méthode 1" dans la console
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/this/index.html b/files/fr/web/javascript/reference/operators/this/index.html deleted file mode 100644 index 17677cc5a1..0000000000 --- a/files/fr/web/javascript/reference/operators/this/index.html +++ /dev/null @@ -1,417 +0,0 @@ ---- -title: L'opérateur this -slug: Web/JavaScript/Reference/Operators/this -tags: - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/this -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_this ---- -
{{jsSidebar("Operators")}}
- -

En JavaScript, le mot-clé this se comporte légèrement différemment des autres langages de programmation. Son comportement variera également légèrement selon qu'on utilise le mode strict ou le mode non-strict.

- -

Dans la plupart des cas, la valeur de this sera déterminée à partir de la façon dont une fonction est appelée. Il n'est pas possible de lui affecter une valeur lors de l'exécution et sa valeur peut être différente à chaque fois que la fonction est appelée. La méthode {{jsxref("Function.prototype.bind()","bind()")}} a été introduite avec ECMAScript 5 pour définir la valeur de this pour une fonction, indépendamment de la façon dont elle est appelée. ECMAScript 2015 (ES6) a ajouté les fonctions fléchées dans lesquelles this correspond à la valeur du contexte englobant.

- -
{{EmbedInteractiveExample("pages/js/expressions-this.html")}}
- -

Syntaxe

- -
this
- -

Valeur

- -

L'objet JavaScript représentant le contexte dans lequel le code courant est exécuté.

- -

Dans le contexte global

- -

Dans le contexte global d'exécution (c'est-à-dire, celui en dehors de toute fonction), this fait référence à l'objet global (qu'on utilise ou non le mode strict).

- -
// Si l'environnement de script est un navigateur,
-// l'objet window sera l'objet global
-console.log(this === window); // true
-
-this.a = 37;
-console.log(window.a); // 37
-
-this.b = "MDN";
-console.log(window.b); // "MDN"
-console.log(b);        // "MDN"
-
- -
-

Note : Il est également possible d'accéder au contexte global avec la propriété {{jsxref("globalThis")}} quel que soit le contexte utilisé pour l'exécution.

-
- -

Dans le contexte d'une fonction

- -

S'il est utilisé dans une fonction, la valeur de this dépendra de la façon dont la fonction a été appelée.

- -

Avec un appel simple

- -
function f1(){
-  return this;
-}
-
-// Dans un navigateur
-f1() === window; // true (objet global)
-
-// Côté serveur (ex. Node)
-f1() === global; // true
-
- -

Dans cet exemple, la valeur de this n'est pas définie lors de l'appel. Le code n'étant pas en mode strict, this doit toujours être un objet et ce sera donc l'objet global (soit {{domxref("Window", "window")}} pour un navigateur).

- -
function f2(){
-  "use strict"; // on utilise le mode strict
-  return this;
-}
-
-f2() === undefined; // true
-
- -

En mode strict, la valeur de this est conservée (il reste le même) entre le moment de sa définition et l'entrée dans le contexte d'exécution. S'il n'est pas défini, il reste undefined. Il pourrait être défini avec n'importe quelle autre valeur, telle que null ou 42 ou "Je ne suis pas this".

- -

Note : Dans ce deuxième exemple,this vaut {{jsxref("undefined")}} car f2 a été appelé sans « base » (ex. : window.f2()). Cette fonctionnalité ne fut pas correctement implémentée dans certains navigateurs aux débuts du mode strict, en effet, certains renvoyaient alors l'objet window.

- -

call et apply

- -

Pour passer this d'un contexte à un autre, on pourra utiliser {{jsxref("Function.prototype.call()", "call()")}} ou {{jsxref("Function.prototype.apply()", "apply()")}} :

- -
// Un objet peut être passé en premier argument
-// de call ou de apply
-var obj = { a: "Toto" };
-
-// Ici, on déclare une variable et la variable est affectée à l'objet global window comme propriété de celui-ci
-var a = "Global";
-
-function whatsThis(arg) {
-  // La valeur de this ici dépend de la façon
-  // dont la fonction est appelée
-  return this.a;
-}
-
-whatsThis();          // 'Global' car celui-ci dans la fonction n'est pas défini, il est donc défini par défaut sur l'objet global window
-whatsThis.call(obj);  // "Toto"
-whatsThis.apply(obj); // "Toto"
-
- -

Lorsque le mot-clé this est utilisé dans le corps d'une fonction, il est possible d'utiliser les méthodes {{jsxref("Function.prototype.call()", "call()")}} ou {{jsxref("Function.prototype.apply()", "apply()")}} pour lier this à un objet donné. Toutes les fonctions héritent de ces méthodes grâce à {{jsxref("Function.prototype")}}.

- -
function ajout(c, d){
-  return this.a + this.b + c + d;
-}
-
-var o = {a:1, b:3};
-
-// Le premier paramètre correspond à l'objet qu'on souhaite
-// lier à 'this', les paramètres suivants sont les arguments
-// à utiliser dans l'appel de la fonction
-ajout.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
-
-// Le premier paramètre correspond à l'objet qu'on souhaite
-// lier à 'this', le second paramètre est le tableau dont les
-// les éléments sont les arguments à passer à la fonction
-ajout.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
-
- -

Note : En mode non-strict, si la valeur à lier à this, passée à call ou apply, n'est pas un objet, le moteur JavaScript tentera de la convertir en un objet grâce à l'opération interne ToObject. Si la valeur est d'un type primitif autre qu'objet, 7 ou 'toto' par exemple, elle sera convertie en un objet grâce au constructeur associé. Ainsi, on aura le nombre 7 converti en un objet grâce à new Number(7) et la chaîne 'toto' convertie en objet grâce à new String('toto').

- -
function truc() {
-  console.log(Object.prototype.toString.call(this));
-}
-
-truc.call(7);     // [object Number]
-truc.call('foo'); // [object String]
-
- -

La méthode bind

- -

Avec ECMAScript 5, une nouvelle fonction fut introduite : {{jsxref("Function.prototype.bind()")}}. Lorsqu'on appelle f.bind(unObjet), on crée une nouvelle fonction qui possède le même corps et la même portée que f, mais où this sera lié, de façon permanente, au premier argument passé à bind, quelle que soit la façon dont la méthode est utilisée.

- -
function f(){
-  return this.a;
-}
-
-var g = f.bind({a:"azerty"});
-console.log(g()); // azerty
-
-var h = g.bind({a:"coucou"}); // bind ne fonctionne qu'une seule fois
-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
-
- -

Avec les fonctions fléchées

- -

En utilisant les fonctions fléchées, this correspond à la valeur de this utilisé dans le contexte englobant. Lorsqu'on utilise une fonction fléchée dans du code global, this sera l'objet global :

- -
var objetGlobal = this;
-var toto = (() => this);
-console.log(toto() === objetGlobal); // true
- -

Peu importe la façon dont toto sera appelée, this sera toujours l'objet global. Cela est également valable pour les méthodes d'objet (où généralement this correspond à l'objet courant) ou lorsque call, apply ou bind sont utilisés :

- -
// Appelé comme la méthode d'un objet
-var obj = {toto: toto};
-console.log(obj.toto() === objetGlobal); // true
-
-// Ici on utilise call
-console.log(toto.call(obj) === objetGlobal); // true
-// Là on utilise bind
-toto = toto.bind(obj);
-console.log(toto() === objetGlobal); // true
- -

Quelle que soit la méthode utilisée le this de toto sera défini avec la valeur qu'il avait lors de la création (dans l'exemple précédent, il s'agit de l'objet global). Cela vaut également pour les fonctions fléchées créées dans d'autres fonctions : this prendra la valeur de this dans le contexte englobant.

- -
// On crée un objet obj qui a une méthode truc
-// qui renvoie une fonction qui renvoie la
-// valeur de this.
-// La fonction qui est renvoyée est créée sous
-// la forme d'une fonction fléchée. this est
-// donc fixé de façon permanente avec la valeur
-// de this du contexte englobant.
-var obj = { truc : function() {
-                    var x = (() => this);
-                    return x;
-                  }
-          };
-// On appelle truc comme une méthode d'obj, this
-// vaudra donc obj. On récupère la fonction
-// renvoyée par truc et on en stocke une référence
-// avec la variable fn
-var fn = obj.truc();
-
-// On appelle fn sans définir this, par défaut
-// en mode strict cela correspondrait à l'objet
-// global ou à undefined
-console.log(fn() === obj); // true
-
-// Attention à ne pas référence la méthode d'obj
-// sans l'appeler
-var fn2 = obj.truc;
-// Appeler le this de la fonction fléchée dans ce contexte
-// renverra window car c'est le this associé à fn2 (qui
-// correspond au contexte global)
-console.log(fn2()() == window); // true
- -

Dans l'exemple précédent, la fonction affectée à obj.truc renvoie une autre fonction créée sous la forme d'une fonction fléchée. Par conséquent, this vaut toujours obj.truc lorsque la fonction est appelée. Lorsque la fonction est renvoyée, this continue de correspondre à la valeur initiale. Dans ce code, this vaut obj et garde cette valeur, même lorsqu'il est appelé plus tard.

- -

En tant que méthode d'un objet

- -

Lorsqu'une fonction est appelée comme méthode d'un objet, this correspondra à l'objet possédant la méthode qu'on appelle.

- -

Ainsi, dans l'exemple suivant, lorsqu'on appelle o.f(), le this contenu à l'intérieur de la fonction correspond à l'objet o.

- -
var o = {
-  prop: 37,
-  f: function() {
-    return this.prop;
-  }
-};
-
-console.log(o.f()); // 37
-
- -

On notera que ce comportement n'est pas du tout affecté par la façon ou l'endroit de la définition de la fonction. Dans l'exemple précédent, on aurait très bien pu définir la fonction plus tard et la rattacher à une propriété de o plutôt que de la déclarer de cette façon. On aura le même résultat en faisant ainsi :

- -
var o = {prop: 37};
-
-function indépendante() {
-  return this.prop;
-}
-
-o.f = indépendante;
-
-console.log(o.f()); // 37
-
- -

On voit ici que ce qui importe est la façon dont la fonction est appelée et non pas la façon dont elle est définie. Ici la fonction est appelée comme une propriété (méthode) de o.

- -

De la même façon, this n'est affecté que par la référence la plus proche. Autrement dit, dans l'exemple suivant quand on appelle la fonction o.b.g, on appelle la méthode g de l'objet o.b. Ainsi, au moment de l'exécution, this fera référence à o.b. Le fait que cet objet soit une propriété de o n'a aucun impact : seule la référence objet la plus proche compte.

- -
o.b = {g: indépendante, prop: 42};
-console.log(o.b.g()); // 42
-
- -

this sur la chaîne de prototypes de l'objet

- -

Ce qui a été vu ci-avant est également applicable pour les méthodes qui sont présentes sur la chaîne de prototypes de l'objet. Si une méthode se situe sur la chaîne de prototype, this fera référence à l'objet appelant (de la même façon que si la méthode était une propriété directe de l'objet).

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

Dans cet exemple, l'objet qui est affecté à la variable p ne possède pas directement la propriété f, il en hérite de par son prototype. Cela n'impacte en rien la détermination de this car la recherche de la propriété f remonte le long de la chaîne de prototype et s'arrête à o. Au début de cette recherche, on a une référence à p.f, aussi this fera référence à l'objet représenté par p. Autrement dit f étant appelé comme une méthode de p, this fera ici référence à p. Cette fonctionnalité fait partie des caractéristiques de l'héritage prototypal de JavaScript.

- -

this dans un getter ou setter

- -

Ici aussi, on a le même principe lorsque la fonction est appelée à partir d'un accesseur (getter) ou d'un mutateur (setter). Une fonction utilisée comme accesseur ou mutateur verra son this lié à l'objet à partir duquel on souhaite accéder/changer la propriété.

- -
function moduleRéel(){
-  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, 'moduleRéel', {
-    get: moduleRéel, enumerable:true, configurable:true});
-
-console.log(o.phase, o.moduleRéel); // logs -0.78 1.4142
-
- -

En tant que constructeur

- -

Lorsqu'une fonction est utilisée comme constructeur (c'est-à-dire qu'elle est invoquée avec le mot-clé {{jsxref("Opérateurs/L_opérateur_new","new")}}), le this correspondant sera lié au nouvel objet en train d'être construit.

- -
-

Note : Par défaut, un constructeur renverra l'objet auquel this fait référence. Cependant si la valeur de retour du constructeur est définie et est un objet, ce sera elle qui sera renvoyée (sinon ce sera la valeur de this).

-
- -
/*
- * Les constructeurs fonctionnent de la façon suivante :
- *
- * function MonConstructeur(){
- *   // le corps de la fonction
- *   // on crée des propriétés sur |this|
- *   // par exemple
- *   this.fum = "nom";
- *   // etc.
- *
- *   // Si la fonction utilise une instruction de
- *   // retour (return) et renvoie un objet
- *   // ce sera cet objet qui sera le résultat de
- *   // l'expression |new|.
- *   // Sinon, le résultat sera l'objet
- *   // lié à |this|
- *   // (ce second cas est celui qu'on rencontre
- *   // fréquemment).
- * }
- */
-
-function C(){
-  this.a = 37;
-}
-
-var o = new C();
-console.log(o.a); // 37
-
-
-function C2(){
-  this.a = 37;
-  return {a:38};
-}
-
-o = new C2();
-console.log(o.a); // 38
-
- -

Dans le dernier exemple (C2), on renvoie un objet lors de la construction. L'objet qui était lié this est alors abandonné. (L'instruction "this.a = 37;" devient alors totalement inutile, bien qu'elle soit exécutée, elle n'aura aucun effet de bord.)

- -

En tant que gestionnaire d'événement DOM

- -

Lorsqu'une fonction est utilisée comme gestionnaire d'événement (event handler), le this correspondant prendra la valeur de l'élément ayant déclenché l'événement (certains navigateurs ne suivent pas cette convention et les gestionnaires sont ajoutés dynamiquement avec d'autres méthodes qu'{{domxref("EventTarget.addEventListener()", "addEventListener()")}}).

- -
// Lorsque cette fonction est appelée
-// comme listener, l'élément associé
-// sera coloré en bleu
-function bluify(e){
-  // Cette proposition est toujours vraie
-  console.log(this === e.currentTarget);
-
-  // true lorsque currentTarget et target correspondent
-  // au même objet
-  console.log(this === e.target);
-
-  this.style.backgroundColor = '#A5D9F3';
-}
-
-// On obtient une liste de tous les éléments
-// contenus dans le document
-var elements = document.getElementsByTagName('*');
-
-// On ajout le listener bluify pour réagier au clic
-// Quand on clique sur un élément, il deviendra bleu
-for(var i=0 ; i<elements.length ; i++){
-  elements[i].addEventListener('click', bluify, false);
-}
- -

En tant que gestionnaire d'événements in-line

- -

Lorsque le code est appelé depuis un gestionnaire d'événement « en ligne » (in-line), la valeur de this correspondra à l'élément du DOM sur lequel on a placé le listener. Ainsi :

- -
<button onclick="console.log(this.tagName.toLowerCase());">
-  Afficher this
-</button>
-
- -

montrera le texte button lorsqu'on cliquera dessus. Attention, seul le code externe verra la valeur de this affectée de cette façon :

- -
<button onclick="console.log((function(){return this})());">
-  Afficher le this interne
-</button>
-
- -

Ici, on utilise this à l'intérieur d'une fonction et il n'est pas défini en amont. Il renvoie donc l'objet global (l'objet window pour un navigateur avec du code non-strict).

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-this-keyword', 'Le mot-clé this')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-this-keyword', 'Le mot-clé this')}}{{Spec2('ES2015')}}
{{SpecName('ES5.1', '#sec-11.1.1', 'Le mot-clé this')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.1.1', 'Le mot-clé this')}}{{Spec2('ES3')}}
{{SpecName('ES1', '#sec-11.1.1', 'Le mot-clé this')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.this")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/this/index.md b/files/fr/web/javascript/reference/operators/this/index.md new file mode 100644 index 0000000000..17677cc5a1 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/this/index.md @@ -0,0 +1,417 @@ +--- +title: L'opérateur this +slug: Web/JavaScript/Reference/Operators/this +tags: + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/this +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_this +--- +
{{jsSidebar("Operators")}}
+ +

En JavaScript, le mot-clé this se comporte légèrement différemment des autres langages de programmation. Son comportement variera également légèrement selon qu'on utilise le mode strict ou le mode non-strict.

+ +

Dans la plupart des cas, la valeur de this sera déterminée à partir de la façon dont une fonction est appelée. Il n'est pas possible de lui affecter une valeur lors de l'exécution et sa valeur peut être différente à chaque fois que la fonction est appelée. La méthode {{jsxref("Function.prototype.bind()","bind()")}} a été introduite avec ECMAScript 5 pour définir la valeur de this pour une fonction, indépendamment de la façon dont elle est appelée. ECMAScript 2015 (ES6) a ajouté les fonctions fléchées dans lesquelles this correspond à la valeur du contexte englobant.

+ +
{{EmbedInteractiveExample("pages/js/expressions-this.html")}}
+ +

Syntaxe

+ +
this
+ +

Valeur

+ +

L'objet JavaScript représentant le contexte dans lequel le code courant est exécuté.

+ +

Dans le contexte global

+ +

Dans le contexte global d'exécution (c'est-à-dire, celui en dehors de toute fonction), this fait référence à l'objet global (qu'on utilise ou non le mode strict).

+ +
// Si l'environnement de script est un navigateur,
+// l'objet window sera l'objet global
+console.log(this === window); // true
+
+this.a = 37;
+console.log(window.a); // 37
+
+this.b = "MDN";
+console.log(window.b); // "MDN"
+console.log(b);        // "MDN"
+
+ +
+

Note : Il est également possible d'accéder au contexte global avec la propriété {{jsxref("globalThis")}} quel que soit le contexte utilisé pour l'exécution.

+
+ +

Dans le contexte d'une fonction

+ +

S'il est utilisé dans une fonction, la valeur de this dépendra de la façon dont la fonction a été appelée.

+ +

Avec un appel simple

+ +
function f1(){
+  return this;
+}
+
+// Dans un navigateur
+f1() === window; // true (objet global)
+
+// Côté serveur (ex. Node)
+f1() === global; // true
+
+ +

Dans cet exemple, la valeur de this n'est pas définie lors de l'appel. Le code n'étant pas en mode strict, this doit toujours être un objet et ce sera donc l'objet global (soit {{domxref("Window", "window")}} pour un navigateur).

+ +
function f2(){
+  "use strict"; // on utilise le mode strict
+  return this;
+}
+
+f2() === undefined; // true
+
+ +

En mode strict, la valeur de this est conservée (il reste le même) entre le moment de sa définition et l'entrée dans le contexte d'exécution. S'il n'est pas défini, il reste undefined. Il pourrait être défini avec n'importe quelle autre valeur, telle que null ou 42 ou "Je ne suis pas this".

+ +

Note : Dans ce deuxième exemple,this vaut {{jsxref("undefined")}} car f2 a été appelé sans « base » (ex. : window.f2()). Cette fonctionnalité ne fut pas correctement implémentée dans certains navigateurs aux débuts du mode strict, en effet, certains renvoyaient alors l'objet window.

+ +

call et apply

+ +

Pour passer this d'un contexte à un autre, on pourra utiliser {{jsxref("Function.prototype.call()", "call()")}} ou {{jsxref("Function.prototype.apply()", "apply()")}} :

+ +
// Un objet peut être passé en premier argument
+// de call ou de apply
+var obj = { a: "Toto" };
+
+// Ici, on déclare une variable et la variable est affectée à l'objet global window comme propriété de celui-ci
+var a = "Global";
+
+function whatsThis(arg) {
+  // La valeur de this ici dépend de la façon
+  // dont la fonction est appelée
+  return this.a;
+}
+
+whatsThis();          // 'Global' car celui-ci dans la fonction n'est pas défini, il est donc défini par défaut sur l'objet global window
+whatsThis.call(obj);  // "Toto"
+whatsThis.apply(obj); // "Toto"
+
+ +

Lorsque le mot-clé this est utilisé dans le corps d'une fonction, il est possible d'utiliser les méthodes {{jsxref("Function.prototype.call()", "call()")}} ou {{jsxref("Function.prototype.apply()", "apply()")}} pour lier this à un objet donné. Toutes les fonctions héritent de ces méthodes grâce à {{jsxref("Function.prototype")}}.

+ +
function ajout(c, d){
+  return this.a + this.b + c + d;
+}
+
+var o = {a:1, b:3};
+
+// Le premier paramètre correspond à l'objet qu'on souhaite
+// lier à 'this', les paramètres suivants sont les arguments
+// à utiliser dans l'appel de la fonction
+ajout.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
+
+// Le premier paramètre correspond à l'objet qu'on souhaite
+// lier à 'this', le second paramètre est le tableau dont les
+// les éléments sont les arguments à passer à la fonction
+ajout.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
+
+ +

Note : En mode non-strict, si la valeur à lier à this, passée à call ou apply, n'est pas un objet, le moteur JavaScript tentera de la convertir en un objet grâce à l'opération interne ToObject. Si la valeur est d'un type primitif autre qu'objet, 7 ou 'toto' par exemple, elle sera convertie en un objet grâce au constructeur associé. Ainsi, on aura le nombre 7 converti en un objet grâce à new Number(7) et la chaîne 'toto' convertie en objet grâce à new String('toto').

+ +
function truc() {
+  console.log(Object.prototype.toString.call(this));
+}
+
+truc.call(7);     // [object Number]
+truc.call('foo'); // [object String]
+
+ +

La méthode bind

+ +

Avec ECMAScript 5, une nouvelle fonction fut introduite : {{jsxref("Function.prototype.bind()")}}. Lorsqu'on appelle f.bind(unObjet), on crée une nouvelle fonction qui possède le même corps et la même portée que f, mais où this sera lié, de façon permanente, au premier argument passé à bind, quelle que soit la façon dont la méthode est utilisée.

+ +
function f(){
+  return this.a;
+}
+
+var g = f.bind({a:"azerty"});
+console.log(g()); // azerty
+
+var h = g.bind({a:"coucou"}); // bind ne fonctionne qu'une seule fois
+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
+
+ +

Avec les fonctions fléchées

+ +

En utilisant les fonctions fléchées, this correspond à la valeur de this utilisé dans le contexte englobant. Lorsqu'on utilise une fonction fléchée dans du code global, this sera l'objet global :

+ +
var objetGlobal = this;
+var toto = (() => this);
+console.log(toto() === objetGlobal); // true
+ +

Peu importe la façon dont toto sera appelée, this sera toujours l'objet global. Cela est également valable pour les méthodes d'objet (où généralement this correspond à l'objet courant) ou lorsque call, apply ou bind sont utilisés :

+ +
// Appelé comme la méthode d'un objet
+var obj = {toto: toto};
+console.log(obj.toto() === objetGlobal); // true
+
+// Ici on utilise call
+console.log(toto.call(obj) === objetGlobal); // true
+// Là on utilise bind
+toto = toto.bind(obj);
+console.log(toto() === objetGlobal); // true
+ +

Quelle que soit la méthode utilisée le this de toto sera défini avec la valeur qu'il avait lors de la création (dans l'exemple précédent, il s'agit de l'objet global). Cela vaut également pour les fonctions fléchées créées dans d'autres fonctions : this prendra la valeur de this dans le contexte englobant.

+ +
// On crée un objet obj qui a une méthode truc
+// qui renvoie une fonction qui renvoie la
+// valeur de this.
+// La fonction qui est renvoyée est créée sous
+// la forme d'une fonction fléchée. this est
+// donc fixé de façon permanente avec la valeur
+// de this du contexte englobant.
+var obj = { truc : function() {
+                    var x = (() => this);
+                    return x;
+                  }
+          };
+// On appelle truc comme une méthode d'obj, this
+// vaudra donc obj. On récupère la fonction
+// renvoyée par truc et on en stocke une référence
+// avec la variable fn
+var fn = obj.truc();
+
+// On appelle fn sans définir this, par défaut
+// en mode strict cela correspondrait à l'objet
+// global ou à undefined
+console.log(fn() === obj); // true
+
+// Attention à ne pas référence la méthode d'obj
+// sans l'appeler
+var fn2 = obj.truc;
+// Appeler le this de la fonction fléchée dans ce contexte
+// renverra window car c'est le this associé à fn2 (qui
+// correspond au contexte global)
+console.log(fn2()() == window); // true
+ +

Dans l'exemple précédent, la fonction affectée à obj.truc renvoie une autre fonction créée sous la forme d'une fonction fléchée. Par conséquent, this vaut toujours obj.truc lorsque la fonction est appelée. Lorsque la fonction est renvoyée, this continue de correspondre à la valeur initiale. Dans ce code, this vaut obj et garde cette valeur, même lorsqu'il est appelé plus tard.

+ +

En tant que méthode d'un objet

+ +

Lorsqu'une fonction est appelée comme méthode d'un objet, this correspondra à l'objet possédant la méthode qu'on appelle.

+ +

Ainsi, dans l'exemple suivant, lorsqu'on appelle o.f(), le this contenu à l'intérieur de la fonction correspond à l'objet o.

+ +
var o = {
+  prop: 37,
+  f: function() {
+    return this.prop;
+  }
+};
+
+console.log(o.f()); // 37
+
+ +

On notera que ce comportement n'est pas du tout affecté par la façon ou l'endroit de la définition de la fonction. Dans l'exemple précédent, on aurait très bien pu définir la fonction plus tard et la rattacher à une propriété de o plutôt que de la déclarer de cette façon. On aura le même résultat en faisant ainsi :

+ +
var o = {prop: 37};
+
+function indépendante() {
+  return this.prop;
+}
+
+o.f = indépendante;
+
+console.log(o.f()); // 37
+
+ +

On voit ici que ce qui importe est la façon dont la fonction est appelée et non pas la façon dont elle est définie. Ici la fonction est appelée comme une propriété (méthode) de o.

+ +

De la même façon, this n'est affecté que par la référence la plus proche. Autrement dit, dans l'exemple suivant quand on appelle la fonction o.b.g, on appelle la méthode g de l'objet o.b. Ainsi, au moment de l'exécution, this fera référence à o.b. Le fait que cet objet soit une propriété de o n'a aucun impact : seule la référence objet la plus proche compte.

+ +
o.b = {g: indépendante, prop: 42};
+console.log(o.b.g()); // 42
+
+ +

this sur la chaîne de prototypes de l'objet

+ +

Ce qui a été vu ci-avant est également applicable pour les méthodes qui sont présentes sur la chaîne de prototypes de l'objet. Si une méthode se situe sur la chaîne de prototype, this fera référence à l'objet appelant (de la même façon que si la méthode était une propriété directe de l'objet).

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

Dans cet exemple, l'objet qui est affecté à la variable p ne possède pas directement la propriété f, il en hérite de par son prototype. Cela n'impacte en rien la détermination de this car la recherche de la propriété f remonte le long de la chaîne de prototype et s'arrête à o. Au début de cette recherche, on a une référence à p.f, aussi this fera référence à l'objet représenté par p. Autrement dit f étant appelé comme une méthode de p, this fera ici référence à p. Cette fonctionnalité fait partie des caractéristiques de l'héritage prototypal de JavaScript.

+ +

this dans un getter ou setter

+ +

Ici aussi, on a le même principe lorsque la fonction est appelée à partir d'un accesseur (getter) ou d'un mutateur (setter). Une fonction utilisée comme accesseur ou mutateur verra son this lié à l'objet à partir duquel on souhaite accéder/changer la propriété.

+ +
function moduleRéel(){
+  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, 'moduleRéel', {
+    get: moduleRéel, enumerable:true, configurable:true});
+
+console.log(o.phase, o.moduleRéel); // logs -0.78 1.4142
+
+ +

En tant que constructeur

+ +

Lorsqu'une fonction est utilisée comme constructeur (c'est-à-dire qu'elle est invoquée avec le mot-clé {{jsxref("Opérateurs/L_opérateur_new","new")}}), le this correspondant sera lié au nouvel objet en train d'être construit.

+ +
+

Note : Par défaut, un constructeur renverra l'objet auquel this fait référence. Cependant si la valeur de retour du constructeur est définie et est un objet, ce sera elle qui sera renvoyée (sinon ce sera la valeur de this).

+
+ +
/*
+ * Les constructeurs fonctionnent de la façon suivante :
+ *
+ * function MonConstructeur(){
+ *   // le corps de la fonction
+ *   // on crée des propriétés sur |this|
+ *   // par exemple
+ *   this.fum = "nom";
+ *   // etc.
+ *
+ *   // Si la fonction utilise une instruction de
+ *   // retour (return) et renvoie un objet
+ *   // ce sera cet objet qui sera le résultat de
+ *   // l'expression |new|.
+ *   // Sinon, le résultat sera l'objet
+ *   // lié à |this|
+ *   // (ce second cas est celui qu'on rencontre
+ *   // fréquemment).
+ * }
+ */
+
+function C(){
+  this.a = 37;
+}
+
+var o = new C();
+console.log(o.a); // 37
+
+
+function C2(){
+  this.a = 37;
+  return {a:38};
+}
+
+o = new C2();
+console.log(o.a); // 38
+
+ +

Dans le dernier exemple (C2), on renvoie un objet lors de la construction. L'objet qui était lié this est alors abandonné. (L'instruction "this.a = 37;" devient alors totalement inutile, bien qu'elle soit exécutée, elle n'aura aucun effet de bord.)

+ +

En tant que gestionnaire d'événement DOM

+ +

Lorsqu'une fonction est utilisée comme gestionnaire d'événement (event handler), le this correspondant prendra la valeur de l'élément ayant déclenché l'événement (certains navigateurs ne suivent pas cette convention et les gestionnaires sont ajoutés dynamiquement avec d'autres méthodes qu'{{domxref("EventTarget.addEventListener()", "addEventListener()")}}).

+ +
// Lorsque cette fonction est appelée
+// comme listener, l'élément associé
+// sera coloré en bleu
+function bluify(e){
+  // Cette proposition est toujours vraie
+  console.log(this === e.currentTarget);
+
+  // true lorsque currentTarget et target correspondent
+  // au même objet
+  console.log(this === e.target);
+
+  this.style.backgroundColor = '#A5D9F3';
+}
+
+// On obtient une liste de tous les éléments
+// contenus dans le document
+var elements = document.getElementsByTagName('*');
+
+// On ajout le listener bluify pour réagier au clic
+// Quand on clique sur un élément, il deviendra bleu
+for(var i=0 ; i<elements.length ; i++){
+  elements[i].addEventListener('click', bluify, false);
+}
+ +

En tant que gestionnaire d'événements in-line

+ +

Lorsque le code est appelé depuis un gestionnaire d'événement « en ligne » (in-line), la valeur de this correspondra à l'élément du DOM sur lequel on a placé le listener. Ainsi :

+ +
<button onclick="console.log(this.tagName.toLowerCase());">
+  Afficher this
+</button>
+
+ +

montrera le texte button lorsqu'on cliquera dessus. Attention, seul le code externe verra la valeur de this affectée de cette façon :

+ +
<button onclick="console.log((function(){return this})());">
+  Afficher le this interne
+</button>
+
+ +

Ici, on utilise this à l'intérieur d'une fonction et il n'est pas défini en amont. Il renvoie donc l'objet global (l'objet window pour un navigateur avec du code non-strict).

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-this-keyword', 'Le mot-clé this')}}{{Spec2('ESDraft')}}
{{SpecName('ES2015', '#sec-this-keyword', 'Le mot-clé this')}}{{Spec2('ES2015')}}
{{SpecName('ES5.1', '#sec-11.1.1', 'Le mot-clé this')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.1.1', 'Le mot-clé this')}}{{Spec2('ES3')}}
{{SpecName('ES1', '#sec-11.1.1', 'Le mot-clé this')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.this")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/typeof/index.html b/files/fr/web/javascript/reference/operators/typeof/index.html deleted file mode 100644 index 87cbf9acc3..0000000000 --- a/files/fr/web/javascript/reference/operators/typeof/index.html +++ /dev/null @@ -1,270 +0,0 @@ ---- -title: L'opérateur typeof -slug: Web/JavaScript/Reference/Operators/typeof -tags: - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/typeof -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_typeof ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur typeof renvoie une chaîne qui indique le type de son opérande.

- -
{{EmbedInteractiveExample("pages/js/expressions-typeof.html")}}
- -

Syntaxe

- -

L'opérateur typeof est suivi de son opérande :

- -
typeof operande
- -

Paramètre

- -

operande est une expression qui représente la valeur dont on souhaite obtenir le type.

- -

Description

- -

Le tableau qui suit liste les résultats possibles de l'opérateur typeof. Pour plus d'informations sur les types et valeurs primitives en JavaScript, voir la page sur les types et structures de données JavaScript.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeRésultat
indéfini"undefined"
nul"object" (voir ci-après)
booléen"boolean"
nombre"number"
grand entier"bigint"
chaîne de caractère"string"
symbole (nouveauté d'ECMAScript 6 / 2015)"symbol"
objet de l'environnement (fourni par l'environnement dans lequel est utilisé JS)Résultat différent selon l'implémentation
Objet Function (au sens ECMA-262, un objet qui implémente [[Call]])"function"
Tout autre objet"object"
- -

Exemples

- -
// Pour les nombres
-typeof 37 === 'number';
-typeof 3.14 === 'number';
-typeof(42) === 'number';
-typeof Math.LN2 === 'number';
-typeof Infinity === 'number';
-typeof NaN === 'number'; // Bien que littéralement ce soit "Not-A-Number"…
-typeof Number('1') === 'number'; // Number essaie de convertir l'argument en nombre
-
-// Grand entier
-typeof 42n === 'bigint';
-
-// Les chaînes de caractères
-typeof "" === 'string';
-typeof "bla" === 'string';
-typeof "1" === 'string'; // on a ici un nombre écrit sous forme d'une chaîne
-typeof (typeof 1) === 'string'; // typeof renvoie toujours une chaîne
-typeof String(1) === 'string'; // String convertit n'importe quelle valeur en chaîne
-
-
-// Les booléens
-typeof true === 'boolean';
-typeof false === 'boolean';
-typeof Boolean(1) === 'boolean'; // Boolean convertit n'importe quelle valeur en son équivalent logique
-typeof !!(1) === 'boolean'; // deux appels à l'opérateur ! (le NON logique) sont équivalents à Boolean()
-
-
-// Les symboles
-typeof Symbol() === 'symbol'
-typeof Symbol('foo') === 'symbol'
-typeof Symbol.iterator === 'symbol'
-
-
-// Indéfini
-typeof undefined === 'undefined';
-typeof blabla === 'undefined'; // pour une variable indéfinie
-
-
-// Les objets
-typeof {a:1} === 'object';
-
-// Utiliser la méthode Array.isArray ou Object.prototype.toString.call
-// afin de différencier les objets des tableaux
-typeof [1, 2, 4] === 'object';
-
-typeof new Date() === 'object';
-typeof /regex/ === 'object'; // Voir la section sur les expressions rationnelles
-
-// Les expressions suivantes sont source de confusion
-// à ne pas utiliser sous cette forme
-typeof new Boolean(true) === 'object';
-typeof new Number(1) === 'object';
-typeof new String("abc") === 'object';
-
-
-// Les fonctions
-typeof function(){} === 'function';
-typeof class C {} === 'function';
-typeof Math.sin === 'function';
-
- -

Informations supplémentaires

- -

null

- -
// Cela est valable depuis les commencements de JavaScript
-typeof null === 'object';
-
- -

Lors de la première implémentation de JavaScript, les valeurs JavaScript étaient représentées avec une étiquette de type et une valeur. Pour les objets, l'étiquette de type était 0. null était représenté par la valeur NULL (0x00 pour la plupart des plates-formes). Par conséquent, l'étiquette de type de null valait 0, d'où le comportement de typeof (source).

- -

Un correctif fut proposé pour ECMAScript mais il fut refusé. Avec cette version, on aurait eu typeof null === 'null'.

- -

Utiliser l'opérateur new

- -
// Tous les constructeurs doivent être employés
-// avec le mot-clé "new"
-var maChaine = new String("toto");
-var monNombre = new Number(100);
-
-typeof maChaine;  // renverra "object"
-typeof monNombre; // renverra "object"
-
-// En revanche avec le constructeur Function,
-// on aura :
-var maFonction = new Function();
-typeof maFonction; // renverra "function"
- -

Utilisation des parenthèses

- -
// Les parenthèses peuvent s'avérer utile pour
-// déterminer le type de données d'une expression
-// complète
-
-var maDonnee = 99;
-
-typeof maDonnee + 'Toto';   // renverra 'number Toto'
-typeof (maDonnee + 'Toto'); // renverra 'string'
-
- -

Expressions rationnelles

- -

Les expressions rationnelles qu'on peut appeler directement furent parfois ajoutées de façon non standard dans certains navigateurs.

- -
typeof /s/ === 'function'; // Chrome 1 à 12 : Non conforme à ECMAScript 5.1
-typeof /s/ === 'object';   // À partir de Firefox 5 : Conforme à ECMAScript 5.1
-
- -

Zone morte temporaire (Temporal Dead Zone / TDZ)

- -

Avant ECMAScript 2015 (ES6), typeof retournait toujours une chaîne de caractères, quel que soit l'opérande utilisé. On ne pouvait pas avoir d'erreur en utilisant typeof.

- -

Avec l'apparition des opérateurs let et const, si on utilise typeof sur des variables déclarées avec ces opérateurs (ou avec une classe) avant leur déclaration, cela déclenchera une erreur {{jsxref("ReferenceError")}}. Si on utilise typeof sur une variable déclarée avec var avant la déclaration, cela renverra undefined. Les variables déclarées avec let et const sont en fait placées dans une zone morte temporaire entre le début du bloc et leur initialisation et dans cette zone, tout accès à la variable produit une erreur.

- -
typeof variableGlobaleNonDeclaree === "undefined";
-
-typeof variableLet; // ReferenceError
-let variableLet;
-
-typeof constante;   // ReferenceError
-const constante = "coucou";
-
-typeof maClasse; // ReferenceError
-class maClasse{};
- -

Exceptions

- -

Tous les navigateurs actuels exposent un objet non-standard {{domxref("document.all")}} dont le type est "undefined".

- -
typeof document.all === "undefined";
- -

Bien que la spécification requière que les objets exostiques aient des types différents, ces types doivent être des chaînes différentes des chaînes existantes pour les objets standards. À ce titre, le type de document.all représente une violation « volontaire » du standard ECMAScript original.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-typeof-operator', 'Opérateur typeof')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-typeof-operator', 'Opérateur typeof')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.4.3', 'Opérateur typeof')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.4.3', 'Opérateur typeof')}}{{Spec2('ES3')}}
{{SpecName('ES1', '#sec-11.4.3', 'Opérateur typeof')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.1.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.typeof")}}

- -

Notes spécifiques à IE

- -

Pour les versions 6, 7 et 8 d'Internet Explorer, les objets de l'environnement hôte sont des objets et non des fonctions. Par exemple, on aura :

- -
typeof alert === 'object'
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/typeof/index.md b/files/fr/web/javascript/reference/operators/typeof/index.md new file mode 100644 index 0000000000..87cbf9acc3 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/typeof/index.md @@ -0,0 +1,270 @@ +--- +title: L'opérateur typeof +slug: Web/JavaScript/Reference/Operators/typeof +tags: + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/typeof +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_typeof +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur typeof renvoie une chaîne qui indique le type de son opérande.

+ +
{{EmbedInteractiveExample("pages/js/expressions-typeof.html")}}
+ +

Syntaxe

+ +

L'opérateur typeof est suivi de son opérande :

+ +
typeof operande
+ +

Paramètre

+ +

operande est une expression qui représente la valeur dont on souhaite obtenir le type.

+ +

Description

+ +

Le tableau qui suit liste les résultats possibles de l'opérateur typeof. Pour plus d'informations sur les types et valeurs primitives en JavaScript, voir la page sur les types et structures de données JavaScript.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeRésultat
indéfini"undefined"
nul"object" (voir ci-après)
booléen"boolean"
nombre"number"
grand entier"bigint"
chaîne de caractère"string"
symbole (nouveauté d'ECMAScript 6 / 2015)"symbol"
objet de l'environnement (fourni par l'environnement dans lequel est utilisé JS)Résultat différent selon l'implémentation
Objet Function (au sens ECMA-262, un objet qui implémente [[Call]])"function"
Tout autre objet"object"
+ +

Exemples

+ +
// Pour les nombres
+typeof 37 === 'number';
+typeof 3.14 === 'number';
+typeof(42) === 'number';
+typeof Math.LN2 === 'number';
+typeof Infinity === 'number';
+typeof NaN === 'number'; // Bien que littéralement ce soit "Not-A-Number"…
+typeof Number('1') === 'number'; // Number essaie de convertir l'argument en nombre
+
+// Grand entier
+typeof 42n === 'bigint';
+
+// Les chaînes de caractères
+typeof "" === 'string';
+typeof "bla" === 'string';
+typeof "1" === 'string'; // on a ici un nombre écrit sous forme d'une chaîne
+typeof (typeof 1) === 'string'; // typeof renvoie toujours une chaîne
+typeof String(1) === 'string'; // String convertit n'importe quelle valeur en chaîne
+
+
+// Les booléens
+typeof true === 'boolean';
+typeof false === 'boolean';
+typeof Boolean(1) === 'boolean'; // Boolean convertit n'importe quelle valeur en son équivalent logique
+typeof !!(1) === 'boolean'; // deux appels à l'opérateur ! (le NON logique) sont équivalents à Boolean()
+
+
+// Les symboles
+typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+
+
+// Indéfini
+typeof undefined === 'undefined';
+typeof blabla === 'undefined'; // pour une variable indéfinie
+
+
+// Les objets
+typeof {a:1} === 'object';
+
+// Utiliser la méthode Array.isArray ou Object.prototype.toString.call
+// afin de différencier les objets des tableaux
+typeof [1, 2, 4] === 'object';
+
+typeof new Date() === 'object';
+typeof /regex/ === 'object'; // Voir la section sur les expressions rationnelles
+
+// Les expressions suivantes sont source de confusion
+// à ne pas utiliser sous cette forme
+typeof new Boolean(true) === 'object';
+typeof new Number(1) === 'object';
+typeof new String("abc") === 'object';
+
+
+// Les fonctions
+typeof function(){} === 'function';
+typeof class C {} === 'function';
+typeof Math.sin === 'function';
+
+ +

Informations supplémentaires

+ +

null

+ +
// Cela est valable depuis les commencements de JavaScript
+typeof null === 'object';
+
+ +

Lors de la première implémentation de JavaScript, les valeurs JavaScript étaient représentées avec une étiquette de type et une valeur. Pour les objets, l'étiquette de type était 0. null était représenté par la valeur NULL (0x00 pour la plupart des plates-formes). Par conséquent, l'étiquette de type de null valait 0, d'où le comportement de typeof (source).

+ +

Un correctif fut proposé pour ECMAScript mais il fut refusé. Avec cette version, on aurait eu typeof null === 'null'.

+ +

Utiliser l'opérateur new

+ +
// Tous les constructeurs doivent être employés
+// avec le mot-clé "new"
+var maChaine = new String("toto");
+var monNombre = new Number(100);
+
+typeof maChaine;  // renverra "object"
+typeof monNombre; // renverra "object"
+
+// En revanche avec le constructeur Function,
+// on aura :
+var maFonction = new Function();
+typeof maFonction; // renverra "function"
+ +

Utilisation des parenthèses

+ +
// Les parenthèses peuvent s'avérer utile pour
+// déterminer le type de données d'une expression
+// complète
+
+var maDonnee = 99;
+
+typeof maDonnee + 'Toto';   // renverra 'number Toto'
+typeof (maDonnee + 'Toto'); // renverra 'string'
+
+ +

Expressions rationnelles

+ +

Les expressions rationnelles qu'on peut appeler directement furent parfois ajoutées de façon non standard dans certains navigateurs.

+ +
typeof /s/ === 'function'; // Chrome 1 à 12 : Non conforme à ECMAScript 5.1
+typeof /s/ === 'object';   // À partir de Firefox 5 : Conforme à ECMAScript 5.1
+
+ +

Zone morte temporaire (Temporal Dead Zone / TDZ)

+ +

Avant ECMAScript 2015 (ES6), typeof retournait toujours une chaîne de caractères, quel que soit l'opérande utilisé. On ne pouvait pas avoir d'erreur en utilisant typeof.

+ +

Avec l'apparition des opérateurs let et const, si on utilise typeof sur des variables déclarées avec ces opérateurs (ou avec une classe) avant leur déclaration, cela déclenchera une erreur {{jsxref("ReferenceError")}}. Si on utilise typeof sur une variable déclarée avec var avant la déclaration, cela renverra undefined. Les variables déclarées avec let et const sont en fait placées dans une zone morte temporaire entre le début du bloc et leur initialisation et dans cette zone, tout accès à la variable produit une erreur.

+ +
typeof variableGlobaleNonDeclaree === "undefined";
+
+typeof variableLet; // ReferenceError
+let variableLet;
+
+typeof constante;   // ReferenceError
+const constante = "coucou";
+
+typeof maClasse; // ReferenceError
+class maClasse{};
+ +

Exceptions

+ +

Tous les navigateurs actuels exposent un objet non-standard {{domxref("document.all")}} dont le type est "undefined".

+ +
typeof document.all === "undefined";
+ +

Bien que la spécification requière que les objets exostiques aient des types différents, ces types doivent être des chaînes différentes des chaînes existantes pour les objets standards. À ce titre, le type de document.all représente une violation « volontaire » du standard ECMAScript original.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-typeof-operator', 'Opérateur typeof')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-typeof-operator', 'Opérateur typeof')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-11.4.3', 'Opérateur typeof')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-11.4.3', 'Opérateur typeof')}}{{Spec2('ES3')}}
{{SpecName('ES1', '#sec-11.4.3', 'Opérateur typeof')}}{{Spec2('ES1')}}Définition initiale, implémentée avec JavaScript 1.1.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.typeof")}}

+ +

Notes spécifiques à IE

+ +

Pour les versions 6, 7 et 8 d'Internet Explorer, les objets de l'environnement hôte sont des objets et non des fonctions. Par exemple, on aura :

+ +
typeof alert === 'object'
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/unary_negation/index.html b/files/fr/web/javascript/reference/operators/unary_negation/index.html deleted file mode 100644 index bbe81aaeb6..0000000000 --- a/files/fr/web/javascript/reference/operators/unary_negation/index.html +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Négation unaire (-) -slug: Web/JavaScript/Reference/Operators/Unary_negation -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.unary_negation -translation_of: Web/JavaScript/Reference/Operators/Unary_negation ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de négation unaire (-) se place devant son opérande et le transforme en son opposé.

- -
{{EmbedInteractiveExample("pages/js/expressions-unary-negation.html")}}
- -

Syntaxe

- -
-Opérateur : -x
-
- -

Exemples

- -

Avec des nombres

- -
const x = 3;
-const y = -x;
-
-// y = -3
-// x = 3
-
- -

Avec des valeurs non-numériques

- -

L'opérateur de négation unaire peut être utilisé pour convertir une valeur non-numérique en nombre.

- -
const x = "4";
-const y = -x;
-
-// y = -4
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/unary_negation/index.md b/files/fr/web/javascript/reference/operators/unary_negation/index.md new file mode 100644 index 0000000000..bbe81aaeb6 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/unary_negation/index.md @@ -0,0 +1,65 @@ +--- +title: Négation unaire (-) +slug: Web/JavaScript/Reference/Operators/Unary_negation +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.unary_negation +translation_of: Web/JavaScript/Reference/Operators/Unary_negation +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de négation unaire (-) se place devant son opérande et le transforme en son opposé.

+ +
{{EmbedInteractiveExample("pages/js/expressions-unary-negation.html")}}
+ +

Syntaxe

+ +
+Opérateur : -x
+
+ +

Exemples

+ +

Avec des nombres

+ +
const x = 3;
+const y = -x;
+
+// y = -3
+// x = 3
+
+ +

Avec des valeurs non-numériques

+ +

L'opérateur de négation unaire peut être utilisé pour convertir une valeur non-numérique en nombre.

+ +
const x = "4";
+const y = -x;
+
+// y = -4
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/unary_plus/index.html b/files/fr/web/javascript/reference/operators/unary_plus/index.html deleted file mode 100644 index 37e7148369..0000000000 --- a/files/fr/web/javascript/reference/operators/unary_plus/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Plus unaire (+) -slug: Web/JavaScript/Reference/Operators/Unary_plus -tags: - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.unary_plus -translation_of: Web/JavaScript/Reference/Operators/Unary_plus ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de plus unaire (+) précède son opérande et évalue son opérande en essayant de le convertir en nombre si ce n'est pas déjà une valeur numérique.

- -
{{EmbedInteractiveExample("pages/js/expressions-unary-plus.html", "taller")}}
- -

Syntaxe

- -
-Opérateur : +x
-
- -

Description

- -

Bien que la négation unaire (-) puisse également être utilisée pour convertir des valeurs non-numérique, le plus unaire est plus rapide et plus conventionnel, car il n'effectue pas d'autres opérations que la conversion. Il peut être utilisé pour convertir les représentations textuelles d'entiers ou de flottants ainsi que les valeurs true, false, et null. Les représentations entières au format décimal ou hexadécimal sont toutes les deux prises en charge. Les nombres négatifs sont pris en charge (hors représentation hexadécimale). L'utilisation de cet opérateur sur les valeurs de type BigInt déclenchera une exception TypeError. Si l'analyse de valeur ne permet pas de déduire une valeur numérique, le résultat sera NaN.

- -

Exemples

- -

Avec des nombres

- -
const x = 1;
-const y = -1;
-
-console.log(+x);
-// 1
-console.log(+y);
-// -1
- -

Avec des valeurs non-numériques

- -
+true  // 1
-+false // 0
-+null  // 0
-+function(val){ return val } // NaN
-+1n    // throws TypeError: Cannot convert BigInt value to number
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/unary_plus/index.md b/files/fr/web/javascript/reference/operators/unary_plus/index.md new file mode 100644 index 0000000000..37e7148369 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/unary_plus/index.md @@ -0,0 +1,69 @@ +--- +title: Plus unaire (+) +slug: Web/JavaScript/Reference/Operators/Unary_plus +tags: + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.unary_plus +translation_of: Web/JavaScript/Reference/Operators/Unary_plus +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de plus unaire (+) précède son opérande et évalue son opérande en essayant de le convertir en nombre si ce n'est pas déjà une valeur numérique.

+ +
{{EmbedInteractiveExample("pages/js/expressions-unary-plus.html", "taller")}}
+ +

Syntaxe

+ +
+Opérateur : +x
+
+ +

Description

+ +

Bien que la négation unaire (-) puisse également être utilisée pour convertir des valeurs non-numérique, le plus unaire est plus rapide et plus conventionnel, car il n'effectue pas d'autres opérations que la conversion. Il peut être utilisé pour convertir les représentations textuelles d'entiers ou de flottants ainsi que les valeurs true, false, et null. Les représentations entières au format décimal ou hexadécimal sont toutes les deux prises en charge. Les nombres négatifs sont pris en charge (hors représentation hexadécimale). L'utilisation de cet opérateur sur les valeurs de type BigInt déclenchera une exception TypeError. Si l'analyse de valeur ne permet pas de déduire une valeur numérique, le résultat sera NaN.

+ +

Exemples

+ +

Avec des nombres

+ +
const x = 1;
+const y = -1;
+
+console.log(+x);
+// 1
+console.log(+y);
+// -1
+ +

Avec des valeurs non-numériques

+ +
+true  // 1
++false // 0
++null  // 0
++function(val){ return val } // NaN
++1n    // throws TypeError: Cannot convert BigInt value to number
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/unsigned_right_shift/index.html b/files/fr/web/javascript/reference/operators/unsigned_right_shift/index.html deleted file mode 100644 index e3255ae767..0000000000 --- a/files/fr/web/javascript/reference/operators/unsigned_right_shift/index.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Décalage binaire à droite non-signé (>>>) -slug: Web/JavaScript/Reference/Operators/Unsigned_right_shift -tags: - - Bitwise operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.unsigned_right_shift ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de décalage binaire à droite non-signé (>>>) décale la séquence de bits formée par le premier opérande d'autant de bits vers la droite que la valeur indiquée par le second opérande. Les bits en excès à droite sont écartés et ce sont des zéros qui sont ajoutés à gauches. Le bit de signe devient alors nécessairement 0 et le résultat est donc positif. À la différence des autres opérateurs binaires, cet opérateur renvoie un entier non-signé sur 32 bits.

- -
{{EmbedInteractiveExample("pages/js/expressions-unsigned-right-shift.html")}}
- -

Syntaxe

- -
-a >>> b
-
- -

Description

- -

Ce opérateur décale les bits du premier opérande vers la droite, selon la valeur du deuxième opérande. Les bits dépassant à droite sont éliminés tandis que des zéros sont ajoutés à gauche. Le bit de signe vaut alors 0 et en conséquence le résultat est positif. La valeur fournie par cet opérateur, à la différence des autres opérateurs binaires, est une valeur entière sur 32 bits non-signée.

- -

Pour les nombres positifts, le décalage binaire à droite et le décalage binaire à droite non-signés renverront le même résultat. Par exemple, 9 >>> 2 renvoie 2, également renvoyé par 9 >> 2:

- -
-        9 (base 10): 00000000000000000000000000001001 (base 2)
-                     --------------------------------
-  9 >>> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
-
- -

Toutefois, ce n'est pas le cas pour les nombres négatifs : -9 >>> 2 renverra 1073741821, qui est différent de -9 >> 2 (qui renvoie -3) :

- -
-        -9 (base 10): 11111111111111111111111111110111 (base 2)
-                      --------------------------------
-  -9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)
-
- -

Exemples

- -

Utiliser le décalage à droite non-signé

- -
- 9 >>> 2; // 2
--9 >>> 2; // 1073741821
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/unsigned_right_shift/index.md b/files/fr/web/javascript/reference/operators/unsigned_right_shift/index.md new file mode 100644 index 0000000000..e3255ae767 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/unsigned_right_shift/index.md @@ -0,0 +1,66 @@ +--- +title: Décalage binaire à droite non-signé (>>>) +slug: Web/JavaScript/Reference/Operators/Unsigned_right_shift +tags: + - Bitwise operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.unsigned_right_shift +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de décalage binaire à droite non-signé (>>>) décale la séquence de bits formée par le premier opérande d'autant de bits vers la droite que la valeur indiquée par le second opérande. Les bits en excès à droite sont écartés et ce sont des zéros qui sont ajoutés à gauches. Le bit de signe devient alors nécessairement 0 et le résultat est donc positif. À la différence des autres opérateurs binaires, cet opérateur renvoie un entier non-signé sur 32 bits.

+ +
{{EmbedInteractiveExample("pages/js/expressions-unsigned-right-shift.html")}}
+ +

Syntaxe

+ +
+a >>> b
+
+ +

Description

+ +

Ce opérateur décale les bits du premier opérande vers la droite, selon la valeur du deuxième opérande. Les bits dépassant à droite sont éliminés tandis que des zéros sont ajoutés à gauche. Le bit de signe vaut alors 0 et en conséquence le résultat est positif. La valeur fournie par cet opérateur, à la différence des autres opérateurs binaires, est une valeur entière sur 32 bits non-signée.

+ +

Pour les nombres positifts, le décalage binaire à droite et le décalage binaire à droite non-signés renverront le même résultat. Par exemple, 9 >>> 2 renvoie 2, également renvoyé par 9 >> 2:

+ +
+        9 (base 10): 00000000000000000000000000001001 (base 2)
+                     --------------------------------
+  9 >>> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)
+
+ +

Toutefois, ce n'est pas le cas pour les nombres négatifs : -9 >>> 2 renverra 1073741821, qui est différent de -9 >> 2 (qui renvoie -3) :

+ +
+        -9 (base 10): 11111111111111111111111111110111 (base 2)
+                      --------------------------------
+  -9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)
+
+ +

Exemples

+ +

Utiliser le décalage à droite non-signé

+ +
+ 9 >>> 2; // 2
+-9 >>> 2; // 1073741821
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html b/files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html deleted file mode 100644 index 1196307586..0000000000 --- a/files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.html +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Affectation après décalage à droite non signé (>>>=) -slug: Web/JavaScript/Reference/Operators/Unsigned_right_shift_assignment -tags: - - Assignment operator - - JavaScript - - Language feature - - Operator - - Reference -browser-compat: javascript.operators.unsigned_right_shift_assignment -translation-of: Web/JavaScript/Reference/Operators/Unsigned_right_shift_assignment ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur de décalage à droite non signé et d'affectation (>>>=) décale la séquence de bits fournie par l'opérande gauche vers la droite, d'autant de bits qu'indiqués par l'opérande droit, puis affecte le résultat de l'opération à la variable indiquée par l'opérande gauche.

- -
{{EmbedInteractiveExample("pages/js/expressions-unsigned-right-shift-assignment.html")}}
- -

Syntax

- -
-Opérateur : x >>>= y
-Signification :  x    = x >>> y
-
- -

Exemples

- -

Utiliser l'opérateur de décalage à droite non signé et d'affectation

- -
-let a = 5; //   (00000000000000000000000000000101)
-a >>>= 2;  // 1 (00000000000000000000000000000001)
-
-let b = -5; // (-00000000000000000000000000000101)
-b >>>= 2;   // 1073741822 (00111111111111111111111111111110)
-
- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.md b/files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.md new file mode 100644 index 0000000000..1196307586 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/unsigned_right_shift_assignment/index.md @@ -0,0 +1,51 @@ +--- +title: Affectation après décalage à droite non signé (>>>=) +slug: Web/JavaScript/Reference/Operators/Unsigned_right_shift_assignment +tags: + - Assignment operator + - JavaScript + - Language feature + - Operator + - Reference +browser-compat: javascript.operators.unsigned_right_shift_assignment +translation-of: Web/JavaScript/Reference/Operators/Unsigned_right_shift_assignment +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur de décalage à droite non signé et d'affectation (>>>=) décale la séquence de bits fournie par l'opérande gauche vers la droite, d'autant de bits qu'indiqués par l'opérande droit, puis affecte le résultat de l'opération à la variable indiquée par l'opérande gauche.

+ +
{{EmbedInteractiveExample("pages/js/expressions-unsigned-right-shift-assignment.html")}}
+ +

Syntax

+ +
+Opérateur : x >>>= y
+Signification :  x    = x >>> y
+
+ +

Exemples

+ +

Utiliser l'opérateur de décalage à droite non signé et d'affectation

+ +
+let a = 5; //   (00000000000000000000000000000101)
+a >>>= 2;  // 1 (00000000000000000000000000000001)
+
+let b = -5; // (-00000000000000000000000000000101)
+b >>>= 2;   // 1073741822 (00111111111111111111111111111110)
+
+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/void/index.html b/files/fr/web/javascript/reference/operators/void/index.html deleted file mode 100644 index 19a2c21318..0000000000 --- a/files/fr/web/javascript/reference/operators/void/index.html +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: L'opérateur void -slug: Web/JavaScript/Reference/Operators/void -tags: - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/void -original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_void ---- -
{{jsSidebar("Operators")}}
- -

L'opérateur void permet d'évaluer une expression donnée et de renvoyer undefined.

- -
{{EmbedInteractiveExample("pages/js/expressions-voidoperator.html")}}
- -

Syntaxe

- -
void expression
- -

Description

- -

Cet opérateur permet d'évaluer des expressions retournant une valeur là où on attend une expression qui vaut {{jsxref("undefined")}}.

- -

L'opérateur void est souvent utilisé pour obtenir la valeur undefined, généralement avec "void(0)" (qui est l'équivalent de "void 0"). Pour ce cas d'exemple, on aurait très bien pu utiliser la variable globale {{jsxref("undefined")}}.

- -

Attention à la précédence des opérateurs et notamment de celle de void, si besoin, on pourra utiliser des parenthèses pour clarifier la résolution de l'expression :

- -
void 2 == '2';    // renvoie false
-void (2 === '2'); // renvoie undefined
- -

Expressions de fonction appelées immédiatement

- -

Lorsqu'on utilise tout un script dans une fonction qu'on évalue immédiatement, void peut être utilisé pour que le mot-clé function soit traité comme une expression plutôt que comme une déclaration.

- -
void function iife() {
-    var toto = function () {};
-    var machin = function () {};
-    var truc = function () {
-        toto();
-        machin();
-     };
-    var bidule = function () {};
-
-    truc();
-    bidule();
-}();
-
- -

Les URI JavaScript

- -

Lorsqu'un navigateur utilise une URI avec javascript:, le code de l'URI est évalué et le résultat remplace le contenu de la page, sauf si la valeur renvoyée vaut {{jsxref("Objets_globaux/undefined","undefined")}}. L'utilisateur void peut alors être utilisé pour renvoyer cette valeur. Par exemple :

- -
<a href="javascript:void(0);">
-  Cliquer ici (sans effet)
-</a>
-
-<a href="javascript:void(document.body.style.backgroundColor='green');">
-  Cliquer ici pour rendre le fond vert
-</a>
- -

Malgré cela, il n'est pas recommandé d'utiliser le pseudo-protocole javascript:, on lui préférera des méthodes moins risquées et moins intrusives comme les gestionnaires d'événements.

- -

Fonctions fléchées sans valeur de retour

- -

Les fonctions fléchées raccourcissent la syntaxe pour obtenir la valeur d'une fonction avec le résultat d'une expression qui constitue le corps de la fonction. Ainsi, la fonction renvoie nécessairement une valeur. Aussi, convertir une base de code afin d'utiliser des fonctions fléchées peut avoir certains effets de bord lorsqu'on souhaite qu'une fonction soit simplement exécutée mais pas que sa valeur de retour interfère avec le reste.

- -

Pour éviter de transmettre cette valeur de retour, on pourra utiliser l'opérateur void :

- -
button.onclick = () => void faireQQc();
- -

Ainsi, la valeur de retour de la fonction faireQQc sera bloquée par void et c'est undefined qui sera la valeur de retour de la fonction fléchée. Cela s'avère utile si on change l'API de faireQQc par exemple et qu'on souhaite éviter les effets de bord causés par cette modification.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-void-operator', 'Opérateur void')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-void-operator', 'L\'opérateur void')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.4.2', 'L\'opérateur void')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.4.2', 'L\'opérateur void')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-11.4.2', 'L\'opérateur void')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.void")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/void/index.md b/files/fr/web/javascript/reference/operators/void/index.md new file mode 100644 index 0000000000..19a2c21318 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/void/index.md @@ -0,0 +1,119 @@ +--- +title: L'opérateur void +slug: Web/JavaScript/Reference/Operators/void +tags: + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/void +original_slug: Web/JavaScript/Reference/Opérateurs/L_opérateur_void +--- +
{{jsSidebar("Operators")}}
+ +

L'opérateur void permet d'évaluer une expression donnée et de renvoyer undefined.

+ +
{{EmbedInteractiveExample("pages/js/expressions-voidoperator.html")}}
+ +

Syntaxe

+ +
void expression
+ +

Description

+ +

Cet opérateur permet d'évaluer des expressions retournant une valeur là où on attend une expression qui vaut {{jsxref("undefined")}}.

+ +

L'opérateur void est souvent utilisé pour obtenir la valeur undefined, généralement avec "void(0)" (qui est l'équivalent de "void 0"). Pour ce cas d'exemple, on aurait très bien pu utiliser la variable globale {{jsxref("undefined")}}.

+ +

Attention à la précédence des opérateurs et notamment de celle de void, si besoin, on pourra utiliser des parenthèses pour clarifier la résolution de l'expression :

+ +
void 2 == '2';    // renvoie false
+void (2 === '2'); // renvoie undefined
+ +

Expressions de fonction appelées immédiatement

+ +

Lorsqu'on utilise tout un script dans une fonction qu'on évalue immédiatement, void peut être utilisé pour que le mot-clé function soit traité comme une expression plutôt que comme une déclaration.

+ +
void function iife() {
+    var toto = function () {};
+    var machin = function () {};
+    var truc = function () {
+        toto();
+        machin();
+     };
+    var bidule = function () {};
+
+    truc();
+    bidule();
+}();
+
+ +

Les URI JavaScript

+ +

Lorsqu'un navigateur utilise une URI avec javascript:, le code de l'URI est évalué et le résultat remplace le contenu de la page, sauf si la valeur renvoyée vaut {{jsxref("Objets_globaux/undefined","undefined")}}. L'utilisateur void peut alors être utilisé pour renvoyer cette valeur. Par exemple :

+ +
<a href="javascript:void(0);">
+  Cliquer ici (sans effet)
+</a>
+
+<a href="javascript:void(document.body.style.backgroundColor='green');">
+  Cliquer ici pour rendre le fond vert
+</a>
+ +

Malgré cela, il n'est pas recommandé d'utiliser le pseudo-protocole javascript:, on lui préférera des méthodes moins risquées et moins intrusives comme les gestionnaires d'événements.

+ +

Fonctions fléchées sans valeur de retour

+ +

Les fonctions fléchées raccourcissent la syntaxe pour obtenir la valeur d'une fonction avec le résultat d'une expression qui constitue le corps de la fonction. Ainsi, la fonction renvoie nécessairement une valeur. Aussi, convertir une base de code afin d'utiliser des fonctions fléchées peut avoir certains effets de bord lorsqu'on souhaite qu'une fonction soit simplement exécutée mais pas que sa valeur de retour interfère avec le reste.

+ +

Pour éviter de transmettre cette valeur de retour, on pourra utiliser l'opérateur void :

+ +
button.onclick = () => void faireQQc();
+ +

Ainsi, la valeur de retour de la fonction faireQQc sera bloquée par void et c'est undefined qui sera la valeur de retour de la fonction fléchée. Cela s'avère utile si on change l'API de faireQQc par exemple et qu'on souhaite éviter les effets de bord causés par cette modification.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-void-operator', 'Opérateur void')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-void-operator', 'L\'opérateur void')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-11.4.2', 'L\'opérateur void')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-11.4.2', 'L\'opérateur void')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-11.4.2', 'L\'opérateur void')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.1
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.void")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/yield/index.html b/files/fr/web/javascript/reference/operators/yield/index.html deleted file mode 100644 index b3b31488d4..0000000000 --- a/files/fr/web/javascript/reference/operators/yield/index.html +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: yield -slug: Web/JavaScript/Reference/Operators/yield -tags: - - ECMAScript 2015 - - Générateurs - - Itérateur - - JavaScript - - Opérateur -translation_of: Web/JavaScript/Reference/Operators/yield -original_slug: Web/JavaScript/Reference/Opérateurs/yield ---- -
{{jsSidebar("Operators")}}
- -

Le mot-clé yield est utilisé pour suspendre et reprendre une fonction génératrice ({{jsxref("Statements/function*", "function*")}} ou une fonction génératrice historique).

- -
{{EmbedInteractiveExample("pages/js/expressions-yield.html")}}
- -

Syntaxe

- -
[[rv =]] yield [[expression]];
- -
-
expression
-
Définit la valeur à retourner depuis la fonction génératrice via le protocole itérateur. Si omise, undefined sera retournée à la place.
-
rv
-
Retourne la valeur optionnelle passée à la méthode next() pour reprendre son exécution.
-
- -

Description

- -

Le mot-clé yield suspend une fonction génératrice et la valeur de l'expression suivant le mot-clé yield est retournée à l'appelant du générateur. Il peut être vu comme une version générateur du mot-clé return.

- -

Le mot-clé yield ne peut être appelé qu'à partir de la fonction génératrice qui le contient. Il ne peut pas être utilisé depuis des fonctions imbriquées ou avec des callbacks.

- -

Le mot-clé yield retourne en fait un objet IteratorResult ayant deux propriétés, value et done. La propriété value est le résultat de l'évaluation de l'expression yield, et done est false, indiquant que la fonction génératrice n'est pas complètement terminée.

- -

Une fois suspendue sur une expression yield, l'exécution du code du générateur reste suspendue jusqu'à ce que la méthode next() du générateur soit appelée. Chaque fois que la méthode next() du générateur est appelée, le générateur reprend l'exécution et s'exécute jusqu'à ce qu'elle atteigne l'une des situations suivantes :

- - - -

Si une valeur optionnelle est passée à la méthode next() du générateur, cette valeur devient la valeur retournée par l'opération yield en cours du générateur.

- -

Entre le chemin de code du générateur, ses opérateurs yield, et la possibilité de spécifier une nouvelle valeur de départ en la passant à {{jsxref ("Generator.prototype.next()")}}, les générateurs offrent énormément de puissance et de contrôle.

- -

Exemples

- -

Le code suivant est la déclaration d'un exemple de fonction génératrice :

- -
function* compteVentesPommes () {
-  var listeVentes = [3, 7, 5];
-  for (var i = 0; i < listeVentes.length; i++) {
-    yield listeVentes[i];
-  }
-}
- -

Une fois qu'une fonction génératrice est définie, elle peut être utilisée en construisant un itérateur comme indiqué.

- -
var magasinPommes = compteVentesPommes(); // Générateur { }
-console.log(magasinPommes.next()); // { value: 3, done: false }
-console.log(magasinPommes.next()); // { value: 7, done: false }
-console.log(magasinPommes.next()); // { value: 5, done: false }
-console.log(magasinPommes.next()); // { value: undefined, done: true }
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES2015', '#prod-YieldExpression', 'Yield')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.yield")}}

- -

Notes spécifiques à Firefox

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/yield/index.md b/files/fr/web/javascript/reference/operators/yield/index.md new file mode 100644 index 0000000000..b3b31488d4 --- /dev/null +++ b/files/fr/web/javascript/reference/operators/yield/index.md @@ -0,0 +1,124 @@ +--- +title: yield +slug: Web/JavaScript/Reference/Operators/yield +tags: + - ECMAScript 2015 + - Générateurs + - Itérateur + - JavaScript + - Opérateur +translation_of: Web/JavaScript/Reference/Operators/yield +original_slug: Web/JavaScript/Reference/Opérateurs/yield +--- +
{{jsSidebar("Operators")}}
+ +

Le mot-clé yield est utilisé pour suspendre et reprendre une fonction génératrice ({{jsxref("Statements/function*", "function*")}} ou une fonction génératrice historique).

+ +
{{EmbedInteractiveExample("pages/js/expressions-yield.html")}}
+ +

Syntaxe

+ +
[[rv =]] yield [[expression]];
+ +
+
expression
+
Définit la valeur à retourner depuis la fonction génératrice via le protocole itérateur. Si omise, undefined sera retournée à la place.
+
rv
+
Retourne la valeur optionnelle passée à la méthode next() pour reprendre son exécution.
+
+ +

Description

+ +

Le mot-clé yield suspend une fonction génératrice et la valeur de l'expression suivant le mot-clé yield est retournée à l'appelant du générateur. Il peut être vu comme une version générateur du mot-clé return.

+ +

Le mot-clé yield ne peut être appelé qu'à partir de la fonction génératrice qui le contient. Il ne peut pas être utilisé depuis des fonctions imbriquées ou avec des callbacks.

+ +

Le mot-clé yield retourne en fait un objet IteratorResult ayant deux propriétés, value et done. La propriété value est le résultat de l'évaluation de l'expression yield, et done est false, indiquant que la fonction génératrice n'est pas complètement terminée.

+ +

Une fois suspendue sur une expression yield, l'exécution du code du générateur reste suspendue jusqu'à ce que la méthode next() du générateur soit appelée. Chaque fois que la méthode next() du générateur est appelée, le générateur reprend l'exécution et s'exécute jusqu'à ce qu'elle atteigne l'une des situations suivantes :

+ + + +

Si une valeur optionnelle est passée à la méthode next() du générateur, cette valeur devient la valeur retournée par l'opération yield en cours du générateur.

+ +

Entre le chemin de code du générateur, ses opérateurs yield, et la possibilité de spécifier une nouvelle valeur de départ en la passant à {{jsxref ("Generator.prototype.next()")}}, les générateurs offrent énormément de puissance et de contrôle.

+ +

Exemples

+ +

Le code suivant est la déclaration d'un exemple de fonction génératrice :

+ +
function* compteVentesPommes () {
+  var listeVentes = [3, 7, 5];
+  for (var i = 0; i < listeVentes.length; i++) {
+    yield listeVentes[i];
+  }
+}
+ +

Une fois qu'une fonction génératrice est définie, elle peut être utilisée en construisant un itérateur comme indiqué.

+ +
var magasinPommes = compteVentesPommes(); // Générateur { }
+console.log(magasinPommes.next()); // { value: 3, done: false }
+console.log(magasinPommes.next()); // { value: 7, done: false }
+console.log(magasinPommes.next()); // { value: 5, done: false }
+console.log(magasinPommes.next()); // { value: undefined, done: true }
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES2015', '#prod-YieldExpression', 'Yield')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.yield")}}

+ +

Notes spécifiques à Firefox

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/operators/yield_star_/index.html b/files/fr/web/javascript/reference/operators/yield_star_/index.html deleted file mode 100644 index 0ce1a73abd..0000000000 --- a/files/fr/web/javascript/reference/operators/yield_star_/index.html +++ /dev/null @@ -1,159 +0,0 @@ ---- -title: yield* -slug: Web/JavaScript/Reference/Operators/yield* -tags: - - ECMAScript 2015 - - Generators - - Iterable - - Iterator - - JavaScript - - Operator - - Reference -translation_of: Web/JavaScript/Reference/Operators/yield* -original_slug: Web/JavaScript/Reference/Opérateurs/yield* ---- -
{{jsSidebar("Operators")}}
- -

Une expression yield* est utilisée afin de déléguer le mécanisme d'itération/génération à un autre {{jsxref("Instructions/function*", "générateur")}} ou à un autre objet itérable.

- -
{{EmbedInteractiveExample("pages/js/expressions-yieldasterisk.html")}}
- -

Syntaxe

- -
 yield* [[expression]];
- -
-
expression
-
L'expression qui renvoie un objet itérable.
-
- -

Description

- -

L'expression yield* itère sur l'opérande et génère chaque valeur générée par l'opérande.

- -

La valeur de l'expression yield* est la valeur renvoyée par l'itérateur lorsque celui est terminé (la propriété done vaut true).

- -

Exemples

- -

Délégation de la génération

- -

Dans le code suivant, les valeurs générées par g1() sont renvoyées grâce aux appels à la fonction next(), comme pour celles renvoyées par g2().

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

Les autres objets itérables

- -

yield* peut également être utilisé avec d'autres sortes d'itérables (chaînes, tableaux ou arguments) :

- -
function* g3() {
-  yield* [1, 2];
-  yield* "34";
-  yield* Array.from(arguments);
-}
-
-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: undefined, done: true }
- -

La valeur de l'expression yield*

- -

yield* est une expression et non une instruction, elle est donc évaluée et fournit une valeur :

- -
function* g4() {
-  yield* [1, 2, 3];
-  return "toto";
-}
-
-var résultat;
-
-function* g5() {
-  résultat = 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() renvoie{ value: "toto", done: true } at this point
-
-console.log(résultat);          // "toto"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-function-definitions-runtime-semantics-evaluation', 'Yield')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-generator-function-definitions-runtime-semantics-evaluation', 'Yield')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.operators.yield_star")}}

- -

Notes relatives à Firefox

- - - -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/operators/yield_star_/index.md b/files/fr/web/javascript/reference/operators/yield_star_/index.md new file mode 100644 index 0000000000..0ce1a73abd --- /dev/null +++ b/files/fr/web/javascript/reference/operators/yield_star_/index.md @@ -0,0 +1,159 @@ +--- +title: yield* +slug: Web/JavaScript/Reference/Operators/yield* +tags: + - ECMAScript 2015 + - Generators + - Iterable + - Iterator + - JavaScript + - Operator + - Reference +translation_of: Web/JavaScript/Reference/Operators/yield* +original_slug: Web/JavaScript/Reference/Opérateurs/yield* +--- +
{{jsSidebar("Operators")}}
+ +

Une expression yield* est utilisée afin de déléguer le mécanisme d'itération/génération à un autre {{jsxref("Instructions/function*", "générateur")}} ou à un autre objet itérable.

+ +
{{EmbedInteractiveExample("pages/js/expressions-yieldasterisk.html")}}
+ +

Syntaxe

+ +
 yield* [[expression]];
+ +
+
expression
+
L'expression qui renvoie un objet itérable.
+
+ +

Description

+ +

L'expression yield* itère sur l'opérande et génère chaque valeur générée par l'opérande.

+ +

La valeur de l'expression yield* est la valeur renvoyée par l'itérateur lorsque celui est terminé (la propriété done vaut true).

+ +

Exemples

+ +

Délégation de la génération

+ +

Dans le code suivant, les valeurs générées par g1() sont renvoyées grâce aux appels à la fonction next(), comme pour celles renvoyées par g2().

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

Les autres objets itérables

+ +

yield* peut également être utilisé avec d'autres sortes d'itérables (chaînes, tableaux ou arguments) :

+ +
function* g3() {
+  yield* [1, 2];
+  yield* "34";
+  yield* Array.from(arguments);
+}
+
+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: undefined, done: true }
+ +

La valeur de l'expression yield*

+ +

yield* est une expression et non une instruction, elle est donc évaluée et fournit une valeur :

+ +
function* g4() {
+  yield* [1, 2, 3];
+  return "toto";
+}
+
+var résultat;
+
+function* g5() {
+  résultat = 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() renvoie{ value: "toto", done: true } at this point
+
+console.log(résultat);          // "toto"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-function-definitions-runtime-semantics-evaluation', 'Yield')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-generator-function-definitions-runtime-semantics-evaluation', 'Yield')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.operators.yield_star")}}

+ +

Notes relatives à Firefox

+ + + +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/async_function/index.html b/files/fr/web/javascript/reference/statements/async_function/index.html deleted file mode 100644 index 02131e514b..0000000000 --- a/files/fr/web/javascript/reference/statements/async_function/index.html +++ /dev/null @@ -1,258 +0,0 @@ ---- -title: async function -slug: Web/JavaScript/Reference/Statements/async_function -tags: - - Experimental - - Function - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/async_function -original_slug: Web/JavaScript/Reference/Instructions/async_function ---- -
{{jsSidebar("Statements")}}
- -

La déclaration async function définit une fonction asynchrone qui renvoie un objet {{jsxref("Objets_globaux/AsyncFunction","AsyncFunction")}}. Une fonction asynchrone est une fonction qui s'exécute de façon asynchrone grâce à la boucle d'évènement en utilisant une promesse ({{jsxref("Promise")}}) comme valeur de retour.

- -
-

On peut également définir des fonctions asynchrones grâce au constructeur {{jsxref("AsyncFunction")}} et via une {{jsxref("Opérateurs/async_function", "expression de fonction asynchrone","",1)}}.

-
- -
{{EmbedInteractiveExample("pages/js/statement-async.html", "taller")}}
- -

Syntaxe

- -
async function name([param[, param[, ... param]]]) {
-   instructions
-}
-
- -

Paramètres

- -
-
name
-
Le nom de la fonction.
-
param
-
Le nom d'un argument à passer à la fonction.
-
instructions
-
Les instructions qui composent le corps de la fonction.
-
- -

Valeur de retour

- -

Une promesse ({{jsxref("Promise")}}) qui sera résolue avec la valeur renvoyée par la fonction asynchrone ou qui sera rompue s'il y a une exception non interceptée émise depuis la fonction asynchrone.

- -

Description

- -

Une fonction async peut contenir une expression {{jsxref("Opérateurs/await", "await")}} qui interrompt l'exécution de la fonction asynchrone et attend la résolution de la promesse passée Promise. La fonction asynchrone reprend ensuite puis renvoie la valeur de résolution.
-
- Le mot-clé await est uniquement valide au sein des fonctions asynchrones. Si ce mot-clé est utilisé en dehors du corps d'une fonction asynchrone, cela provoquera une exception {{jsxref("SyntaxError")}}.

- -
-

Note : Lorsqu'une fonction aysnchrone est mise en pause, la fonction appelante continue son exécution (car elle a reçu la promesse implicite renvoyée par la fonction async).

-
- -
-

Note : Le but des fonctions async/await est de simplifier l'utilisation synchrone des promesses et d'opérer sur des groupes de promesses. De la même façon que les promesses sont semblables à des callbacks structurés, async/await est semblable à la combinaison des générateurs et des promesses.

-
- -

Exemples

- -

Exemple simple

- -
var resolveAfter2Seconds = function() {
-  console.log("Initialisation de la promesse lente");
-  return new Promise(resolve => {
-    setTimeout(function() {
-      resolve("lente");
-      console.log("La promesse lente est terminée");
-    }, 2000);
-  });
-};
-
-var resolveAfter1Second = function() {
-  console.log("Initialisation de la promesse rapide");
-  return new Promise(resolve => {
-    setTimeout(function() {
-      resolve("rapide");
-      console.log("La promesse rapide est terminée");
-    }, 1000);
-  });
-};
-
-var sequentialStart = async function() {
-  console.log('==Début séquentiel==');
-
-  // 1. L'exécution atteint ce point quasi-instantanément
-  const lente = await resolveAfter2Seconds();
-  console.log(lente); // 2. cela s'exécute 2s après 1.
-
-  const rapide = await resolveAfter1Second();
-  console.log(rapide); // 3. cela s'exécute 3s après 1.
-}
-
-var concurrentStart = async function() {
-  console.log('==Début concurrentiel avec await==');
-  const lente = resolveAfter2Seconds(); // le minuteur démarre immédiatement
-  const rapide = resolveAfter1Second();  // le minuteur démarre immédiatement
-
-  // 1. L'exécution atteint ce point quasi-instantanément
-  console.log(await lente); // 2. s'exécute 2s après 1.
-  console.log(await rapide); // 3. s'exécute 2s après 1., immédiatement après 2.,
-                             // car "rapide" est déjà résolue
-}
-
-var concurrentPromise = function() {
-  console.log('==Début concurrentiel avec Promise.all==');
-  return Promise.all([resolveAfter2Seconds(), resolveAfter1Second()]).then((messages) => {
-    console.log(messages[0]); // lente
-    console.log(messages[1]); // rapide
-  });
-}
-
-var parallel = async function() {
-  console.log('==Exécution parallèle avec await Promise.all==');
-
-  // Démarre 2 tâches en parallèle et on attend que les deux soient finies
-  await Promise.all([
-      (async()=>console.log(await resolveAfter2Seconds()))(),
-      (async()=>console.log(await resolveAfter1Second()))()
-  ]);
-}
-
-// Cette fonction ne gère pas les erreurs
-// voir les avertissement ci-après !
-var parallelPromise = function() {
-  console.log('==Exécution parallèle avec Promise.then==');
-  resolveAfter2Seconds().then((message)=>console.log(message));
-  resolveAfter1Second().then((message)=>console.log(message));
-}
-
-sequentialStart(); // après 2 secondes, "lente" est affichée, après une
-                   // autre seconde, c'est "rapide" qui est affichée
-
-// on attend que l'étape précédente soit terminée
-setTimeout(concurrentStart, 4000); // 2s avant d'afficher "lente" puis "rapide"
-
-// on attend à nouveau
-setTimeout(concurrentPromise, 7000); // identique à concurrentStart
-
-// on attend à nouveau
-setTimeout(parallel, 10000); // réellement parallele : après 1 seconde,
-                             // affiche "rapide" et après une autre seconde
-                             // affiche "lente"
-
-// on attend à nouveau
-setTimeout(parallelPromise, 13000); // identique à parallel
-
- -

await et l'exécution parallèle

- -

Dans sequentialStart, l'exécution est arrêtée pendant deux secondes avant le premier await puis encore une autre seconde avant le deuxième await. Le deuxième minuteur n'est pas créé tant que le premier n'est pas écoulé. Le code s'exécute donc au moins en 3 secondes.

- -

Avec concurrentStart, les deux minuteurs sont créés puis attendus derrière un await Les minuteurs sont exécutés de façon concurrente. L'ensemble du code se termine donc en au moins 2 secondes plutôt qu'en 3 secondes.
- Toutefois, les appels utilisant  await sont exécutés séquentiellement et la deuxième instruction avec await attendra que la première ait été  traitée. Le minuteur le plus rapide est donc créé juste après le premier.

- -

Si on souhaite avoir deux tâches qui s'exécutent réellement en parallèle, on pourra utiliser  await Promise.all([job1(), job2()]) comme illustré ci-avant avec parallel.

- -

async/await, Promise.prototype.then() et la gestion des erreurs

- -

La plupart des fonctions asynchrones peuvent être écrites avec des promesses. Toutefois, les fonctions asynchrones qui utilisent async se prêtent mieux à la gestion des erreurs.

- -

concurrentStart et concurrentPromise sont fonctionnellement équivalentes.
- Avec concurrentStart, si l'un des deux appels échoue, l'exception sera immédiatement interceptée et l'exécution de la fonction asynchrone sera interrompue. L'erreur sera propagée à la fonction appelante via la valeur de retour qui est une promesse implicite.
- Pour obtenir les mêmes sécurités avec les promesses, il faut s'assurer que la fonction renvoie une promesse qui gère ce cas d'échec. Pour concurrentPromise cela signifie qu'il faut renvoyer la promesse de Promise.all([]).then().

- -

Bien entendu, il est toutefois possible d'avoir des fonctions asynchrones (avec async) qui gobent des erreurs involontairement. Si on considère la fonction parallel ci-avant, s'il n'y avait eu aucun await ou return pour le résultat de Promise.all([]), aucune erreur n'aurait été propagée.
- Bien que l'exemple parallelPromise paraisse simple, il ne gère aucune erreur du tout. Il aurait fallu utiliser un return Promise.all([]) analogue.

- -

Réécrire une chaîne de promesses avec une fonction asynchrone

- -

Lorsqu'on utilise une API qui renvoie des promesses ({{jsxref("Promise")}}), on construit une chaîne de promesses et on divise la fonction en de nombreuses branches :

- -
function getProcessedData(url) {
-  return downloadData(url) // renvoie une promesse
-    .catch(e => {
-      return downloadFallbackData(url);  // renvoie une promesse
-    })
-    .then(v => {
-      return processDataInWorker(v); // renvoie une promesse
-    });
-}
-
- -

Cela peut être réécrit avec une seule fonction asynchrone, de la façon suivante :

- -
async function getProcessedData(url) {
-  let v;
-  try {
-    v = await downloadData(url);
-  } catch(e) {
-    v = await downloadFallbackData(url);
-  }
-  return processDataInWorker(v);
-}
-
- -

On voit dans l'exemple précédent qu'il n'y a pas de await pour l'instruction return car la valeur de retour d'une fonction asynchrone est implicitement enveloppée dans un appel à {{jsxref("Promise.resolve")}}.

- -

Différences entre return et return await

- -

La conversion automatique des valeurs en promesses avec {{jsxref("Promise.resolve")}} ne signifie pas que return await valeurPromesse sera équivalent à return valeurPromesse.

- -

Si on reprend l'exemple précédent et qu'on le réécrit avec return await et qu'on intercepte une éventuelle erreur de la promesse :

- -
async function getProcessedData(url) {
-  let v;
-  try {
-     v = await downloadData(url);
-  } catch(e) {
-    v = await downloadFallbackData(url);
-  }
-  try {
-    return await processDataInWorker(v); // et non plus simplement return
-  } catch(e) {
-    return null;
-  }
-}
- -

Si on avait simplement écrit return processDataInWorker(v);, la promesse renvoyée par la fonction aurait déclenché une exception plutôt que d'être résolue avec la valeur null.

- -

Lorsqu'on utilise return toto;, la valeur toto sera immédiatement renvoyée (sans lever d'exception, quel que soit le cas), tandis que return await toto; attendra la résolution de toto ou son échec et lèvera une exception si besoin avant de parvenir à renvoyer une valeur.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-async-function-definitions', 'async function')}}{{Spec2('ES8')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.async_function")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/async_function/index.md b/files/fr/web/javascript/reference/statements/async_function/index.md new file mode 100644 index 0000000000..02131e514b --- /dev/null +++ b/files/fr/web/javascript/reference/statements/async_function/index.md @@ -0,0 +1,258 @@ +--- +title: async function +slug: Web/JavaScript/Reference/Statements/async_function +tags: + - Experimental + - Function + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/async_function +original_slug: Web/JavaScript/Reference/Instructions/async_function +--- +
{{jsSidebar("Statements")}}
+ +

La déclaration async function définit une fonction asynchrone qui renvoie un objet {{jsxref("Objets_globaux/AsyncFunction","AsyncFunction")}}. Une fonction asynchrone est une fonction qui s'exécute de façon asynchrone grâce à la boucle d'évènement en utilisant une promesse ({{jsxref("Promise")}}) comme valeur de retour.

+ +
+

On peut également définir des fonctions asynchrones grâce au constructeur {{jsxref("AsyncFunction")}} et via une {{jsxref("Opérateurs/async_function", "expression de fonction asynchrone","",1)}}.

+
+ +
{{EmbedInteractiveExample("pages/js/statement-async.html", "taller")}}
+ +

Syntaxe

+ +
async function name([param[, param[, ... param]]]) {
+   instructions
+}
+
+ +

Paramètres

+ +
+
name
+
Le nom de la fonction.
+
param
+
Le nom d'un argument à passer à la fonction.
+
instructions
+
Les instructions qui composent le corps de la fonction.
+
+ +

Valeur de retour

+ +

Une promesse ({{jsxref("Promise")}}) qui sera résolue avec la valeur renvoyée par la fonction asynchrone ou qui sera rompue s'il y a une exception non interceptée émise depuis la fonction asynchrone.

+ +

Description

+ +

Une fonction async peut contenir une expression {{jsxref("Opérateurs/await", "await")}} qui interrompt l'exécution de la fonction asynchrone et attend la résolution de la promesse passée Promise. La fonction asynchrone reprend ensuite puis renvoie la valeur de résolution.
+
+ Le mot-clé await est uniquement valide au sein des fonctions asynchrones. Si ce mot-clé est utilisé en dehors du corps d'une fonction asynchrone, cela provoquera une exception {{jsxref("SyntaxError")}}.

+ +
+

Note : Lorsqu'une fonction aysnchrone est mise en pause, la fonction appelante continue son exécution (car elle a reçu la promesse implicite renvoyée par la fonction async).

+
+ +
+

Note : Le but des fonctions async/await est de simplifier l'utilisation synchrone des promesses et d'opérer sur des groupes de promesses. De la même façon que les promesses sont semblables à des callbacks structurés, async/await est semblable à la combinaison des générateurs et des promesses.

+
+ +

Exemples

+ +

Exemple simple

+ +
var resolveAfter2Seconds = function() {
+  console.log("Initialisation de la promesse lente");
+  return new Promise(resolve => {
+    setTimeout(function() {
+      resolve("lente");
+      console.log("La promesse lente est terminée");
+    }, 2000);
+  });
+};
+
+var resolveAfter1Second = function() {
+  console.log("Initialisation de la promesse rapide");
+  return new Promise(resolve => {
+    setTimeout(function() {
+      resolve("rapide");
+      console.log("La promesse rapide est terminée");
+    }, 1000);
+  });
+};
+
+var sequentialStart = async function() {
+  console.log('==Début séquentiel==');
+
+  // 1. L'exécution atteint ce point quasi-instantanément
+  const lente = await resolveAfter2Seconds();
+  console.log(lente); // 2. cela s'exécute 2s après 1.
+
+  const rapide = await resolveAfter1Second();
+  console.log(rapide); // 3. cela s'exécute 3s après 1.
+}
+
+var concurrentStart = async function() {
+  console.log('==Début concurrentiel avec await==');
+  const lente = resolveAfter2Seconds(); // le minuteur démarre immédiatement
+  const rapide = resolveAfter1Second();  // le minuteur démarre immédiatement
+
+  // 1. L'exécution atteint ce point quasi-instantanément
+  console.log(await lente); // 2. s'exécute 2s après 1.
+  console.log(await rapide); // 3. s'exécute 2s après 1., immédiatement après 2.,
+                             // car "rapide" est déjà résolue
+}
+
+var concurrentPromise = function() {
+  console.log('==Début concurrentiel avec Promise.all==');
+  return Promise.all([resolveAfter2Seconds(), resolveAfter1Second()]).then((messages) => {
+    console.log(messages[0]); // lente
+    console.log(messages[1]); // rapide
+  });
+}
+
+var parallel = async function() {
+  console.log('==Exécution parallèle avec await Promise.all==');
+
+  // Démarre 2 tâches en parallèle et on attend que les deux soient finies
+  await Promise.all([
+      (async()=>console.log(await resolveAfter2Seconds()))(),
+      (async()=>console.log(await resolveAfter1Second()))()
+  ]);
+}
+
+// Cette fonction ne gère pas les erreurs
+// voir les avertissement ci-après !
+var parallelPromise = function() {
+  console.log('==Exécution parallèle avec Promise.then==');
+  resolveAfter2Seconds().then((message)=>console.log(message));
+  resolveAfter1Second().then((message)=>console.log(message));
+}
+
+sequentialStart(); // après 2 secondes, "lente" est affichée, après une
+                   // autre seconde, c'est "rapide" qui est affichée
+
+// on attend que l'étape précédente soit terminée
+setTimeout(concurrentStart, 4000); // 2s avant d'afficher "lente" puis "rapide"
+
+// on attend à nouveau
+setTimeout(concurrentPromise, 7000); // identique à concurrentStart
+
+// on attend à nouveau
+setTimeout(parallel, 10000); // réellement parallele : après 1 seconde,
+                             // affiche "rapide" et après une autre seconde
+                             // affiche "lente"
+
+// on attend à nouveau
+setTimeout(parallelPromise, 13000); // identique à parallel
+
+ +

await et l'exécution parallèle

+ +

Dans sequentialStart, l'exécution est arrêtée pendant deux secondes avant le premier await puis encore une autre seconde avant le deuxième await. Le deuxième minuteur n'est pas créé tant que le premier n'est pas écoulé. Le code s'exécute donc au moins en 3 secondes.

+ +

Avec concurrentStart, les deux minuteurs sont créés puis attendus derrière un await Les minuteurs sont exécutés de façon concurrente. L'ensemble du code se termine donc en au moins 2 secondes plutôt qu'en 3 secondes.
+ Toutefois, les appels utilisant  await sont exécutés séquentiellement et la deuxième instruction avec await attendra que la première ait été  traitée. Le minuteur le plus rapide est donc créé juste après le premier.

+ +

Si on souhaite avoir deux tâches qui s'exécutent réellement en parallèle, on pourra utiliser  await Promise.all([job1(), job2()]) comme illustré ci-avant avec parallel.

+ +

async/await, Promise.prototype.then() et la gestion des erreurs

+ +

La plupart des fonctions asynchrones peuvent être écrites avec des promesses. Toutefois, les fonctions asynchrones qui utilisent async se prêtent mieux à la gestion des erreurs.

+ +

concurrentStart et concurrentPromise sont fonctionnellement équivalentes.
+ Avec concurrentStart, si l'un des deux appels échoue, l'exception sera immédiatement interceptée et l'exécution de la fonction asynchrone sera interrompue. L'erreur sera propagée à la fonction appelante via la valeur de retour qui est une promesse implicite.
+ Pour obtenir les mêmes sécurités avec les promesses, il faut s'assurer que la fonction renvoie une promesse qui gère ce cas d'échec. Pour concurrentPromise cela signifie qu'il faut renvoyer la promesse de Promise.all([]).then().

+ +

Bien entendu, il est toutefois possible d'avoir des fonctions asynchrones (avec async) qui gobent des erreurs involontairement. Si on considère la fonction parallel ci-avant, s'il n'y avait eu aucun await ou return pour le résultat de Promise.all([]), aucune erreur n'aurait été propagée.
+ Bien que l'exemple parallelPromise paraisse simple, il ne gère aucune erreur du tout. Il aurait fallu utiliser un return Promise.all([]) analogue.

+ +

Réécrire une chaîne de promesses avec une fonction asynchrone

+ +

Lorsqu'on utilise une API qui renvoie des promesses ({{jsxref("Promise")}}), on construit une chaîne de promesses et on divise la fonction en de nombreuses branches :

+ +
function getProcessedData(url) {
+  return downloadData(url) // renvoie une promesse
+    .catch(e => {
+      return downloadFallbackData(url);  // renvoie une promesse
+    })
+    .then(v => {
+      return processDataInWorker(v); // renvoie une promesse
+    });
+}
+
+ +

Cela peut être réécrit avec une seule fonction asynchrone, de la façon suivante :

+ +
async function getProcessedData(url) {
+  let v;
+  try {
+    v = await downloadData(url);
+  } catch(e) {
+    v = await downloadFallbackData(url);
+  }
+  return processDataInWorker(v);
+}
+
+ +

On voit dans l'exemple précédent qu'il n'y a pas de await pour l'instruction return car la valeur de retour d'une fonction asynchrone est implicitement enveloppée dans un appel à {{jsxref("Promise.resolve")}}.

+ +

Différences entre return et return await

+ +

La conversion automatique des valeurs en promesses avec {{jsxref("Promise.resolve")}} ne signifie pas que return await valeurPromesse sera équivalent à return valeurPromesse.

+ +

Si on reprend l'exemple précédent et qu'on le réécrit avec return await et qu'on intercepte une éventuelle erreur de la promesse :

+ +
async function getProcessedData(url) {
+  let v;
+  try {
+     v = await downloadData(url);
+  } catch(e) {
+    v = await downloadFallbackData(url);
+  }
+  try {
+    return await processDataInWorker(v); // et non plus simplement return
+  } catch(e) {
+    return null;
+  }
+}
+ +

Si on avait simplement écrit return processDataInWorker(v);, la promesse renvoyée par la fonction aurait déclenché une exception plutôt que d'être résolue avec la valeur null.

+ +

Lorsqu'on utilise return toto;, la valeur toto sera immédiatement renvoyée (sans lever d'exception, quel que soit le cas), tandis que return await toto; attendra la résolution de toto ou son échec et lèvera une exception si besoin avant de parvenir à renvoyer une valeur.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}{{Spec2('ESDraft')}}
{{SpecName('ES8', '#sec-async-function-definitions', 'async function')}}{{Spec2('ES8')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.async_function")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/block/index.html b/files/fr/web/javascript/reference/statements/block/index.html deleted file mode 100644 index 74780b7415..0000000000 --- a/files/fr/web/javascript/reference/statements/block/index.html +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: bloc -slug: Web/JavaScript/Reference/Statements/block -tags: - - JavaScript - - Language feature - - Reference - - Statement -browser-compat: javascript.statements.block -translation_of: Web/JavaScript/Reference/Statements/block -original_slug: Web/JavaScript/Reference/Instructions/bloc ---- -
{{jsSidebar("Statements")}}
- -

Une instruction de bloc est utilisée afin de grouper zéro ou plusieurs instructions. Le bloc est délimité par une paire d'accolades. On peut éventuellement « étiqueter » un bloc avec un label.

- -
{{EmbedInteractiveExample("pages/js/statement-block.html", "taller")}}
- -

Syntaxe

- -

Instruction de bloc

- -
{
-  instruction_1;
-  instruction_2;
-  ...
-  instruction_n;
-}
-
- -

Instruction de bloc étiquetée

- -
// ou, avec une étiquette :
-label: {
-  instruction_1;
-  instruction_2;
-  ...
-  instruction_n;
-}
-
- -
-
instruction_1, instruction_2, instruction_n
-
Les instructions qu'on souhaite regrouper au sein du bloc.
-
label {{optional_inline}}
-
Une étiquette qui permet une identification visuelle de la cible d'une instruction break.
-
- -

Description

- -

Cette instruction est le plus souvent utilisée avec les instructions de contrôle (ex. if…else, for, while). On verra ainsi :

- -
while (x < 10) {
-  x++;
-}
-
- -

On peut voir dans cet exemple que cette instruction se termine sans point-virgule.

- -

L'instruction de bloc est souvent appelée instruction composée (compound statement) dans d'autres langages. En effet, elle permet d'utiliser plusieurs instructions là où JavaScript n'attend qu'une instruction. C'est une pratique courante que de combiner plusieurs instructions grâce aux blocs. À l'opposé, on peut utiliser une instruction vide pour ne rien faire là où JavaScript attend une instruction.

- -

Exemples

- -

Règles de portée pour var ou les déclarations de fonction en mode non-strict

- -

Les variables déclarées avec var ou créées avec une déclaration de fonction en mode non-strict n'ont pas une portée limitée au bloc. Les variables introduites dans un bloc auront la portée de la fonction ou du script englobant ce bloc. Les variables pourront alors être utilisées en dehors du bloc. Autrement dit, une instruction de bloc n'introduit pas une portée :

- -
var x = 1;
-{
-  var x = 2;
-}
-console.log(x); // affiche 2 dans la console
-
- -

On voit 2 dans la console, car l'instruction var x contenue dans le bloc appartient à la même portée que l'instruction var x située avant le bloc.

- -

En mode non-strict, les déclarations de fonction à l'intérieur des blocs peuvent se comporter étrangement, il est déconseillé de les utiliser.

- -

Règles de portée pour let, const ou les déclarations de fonction en mode strict

- -

En revanche, les identifiants déclarés avec let et const possèdent une portée limitée au bloc :

- -
let x = 1;
-{
-  let x = 2;
-}
-console.log(x); // affiche 1 dans la console
- -

L'instruction x = 2 est limitée à la portée du bloc dans laquelle elle est présente.

- -

Il en va de même pour const:

- -
const c = 1;
-{
-  const c = 2;
-}
-console.log(c); // affiche 1, ne déclenche pas de SyntaxError
- -

L'instruction const c = 2 ne déclenche pas SyntaxError: Identifier 'c' has already been declared, car cet identifiant est bien unique pour ce bloc.

- -

En mode strict, à partir de ES2015, les fonctions à l'intérieur des blocs ont une portée qui correspond à ce bloc. Avant ES2015, les fonctions de bloc étaient interdites.

- -

Spécifications

- -

{{Specifications}}

- -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/block/index.md b/files/fr/web/javascript/reference/statements/block/index.md new file mode 100644 index 0000000000..74780b7415 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/block/index.md @@ -0,0 +1,117 @@ +--- +title: bloc +slug: Web/JavaScript/Reference/Statements/block +tags: + - JavaScript + - Language feature + - Reference + - Statement +browser-compat: javascript.statements.block +translation_of: Web/JavaScript/Reference/Statements/block +original_slug: Web/JavaScript/Reference/Instructions/bloc +--- +
{{jsSidebar("Statements")}}
+ +

Une instruction de bloc est utilisée afin de grouper zéro ou plusieurs instructions. Le bloc est délimité par une paire d'accolades. On peut éventuellement « étiqueter » un bloc avec un label.

+ +
{{EmbedInteractiveExample("pages/js/statement-block.html", "taller")}}
+ +

Syntaxe

+ +

Instruction de bloc

+ +
{
+  instruction_1;
+  instruction_2;
+  ...
+  instruction_n;
+}
+
+ +

Instruction de bloc étiquetée

+ +
// ou, avec une étiquette :
+label: {
+  instruction_1;
+  instruction_2;
+  ...
+  instruction_n;
+}
+
+ +
+
instruction_1, instruction_2, instruction_n
+
Les instructions qu'on souhaite regrouper au sein du bloc.
+
label {{optional_inline}}
+
Une étiquette qui permet une identification visuelle de la cible d'une instruction break.
+
+ +

Description

+ +

Cette instruction est le plus souvent utilisée avec les instructions de contrôle (ex. if…else, for, while). On verra ainsi :

+ +
while (x < 10) {
+  x++;
+}
+
+ +

On peut voir dans cet exemple que cette instruction se termine sans point-virgule.

+ +

L'instruction de bloc est souvent appelée instruction composée (compound statement) dans d'autres langages. En effet, elle permet d'utiliser plusieurs instructions là où JavaScript n'attend qu'une instruction. C'est une pratique courante que de combiner plusieurs instructions grâce aux blocs. À l'opposé, on peut utiliser une instruction vide pour ne rien faire là où JavaScript attend une instruction.

+ +

Exemples

+ +

Règles de portée pour var ou les déclarations de fonction en mode non-strict

+ +

Les variables déclarées avec var ou créées avec une déclaration de fonction en mode non-strict n'ont pas une portée limitée au bloc. Les variables introduites dans un bloc auront la portée de la fonction ou du script englobant ce bloc. Les variables pourront alors être utilisées en dehors du bloc. Autrement dit, une instruction de bloc n'introduit pas une portée :

+ +
var x = 1;
+{
+  var x = 2;
+}
+console.log(x); // affiche 2 dans la console
+
+ +

On voit 2 dans la console, car l'instruction var x contenue dans le bloc appartient à la même portée que l'instruction var x située avant le bloc.

+ +

En mode non-strict, les déclarations de fonction à l'intérieur des blocs peuvent se comporter étrangement, il est déconseillé de les utiliser.

+ +

Règles de portée pour let, const ou les déclarations de fonction en mode strict

+ +

En revanche, les identifiants déclarés avec let et const possèdent une portée limitée au bloc :

+ +
let x = 1;
+{
+  let x = 2;
+}
+console.log(x); // affiche 1 dans la console
+ +

L'instruction x = 2 est limitée à la portée du bloc dans laquelle elle est présente.

+ +

Il en va de même pour const:

+ +
const c = 1;
+{
+  const c = 2;
+}
+console.log(c); // affiche 1, ne déclenche pas de SyntaxError
+ +

L'instruction const c = 2 ne déclenche pas SyntaxError: Identifier 'c' has already been declared, car cet identifiant est bien unique pour ce bloc.

+ +

En mode strict, à partir de ES2015, les fonctions à l'intérieur des blocs ont une portée qui correspond à ce bloc. Avant ES2015, les fonctions de bloc étaient interdites.

+ +

Spécifications

+ +

{{Specifications}}

+ +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/break/index.html b/files/fr/web/javascript/reference/statements/break/index.html deleted file mode 100644 index 95e5144230..0000000000 --- a/files/fr/web/javascript/reference/statements/break/index.html +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: break -slug: Web/JavaScript/Reference/Statements/break -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/break -original_slug: Web/JavaScript/Reference/Instructions/break ---- -
{{jsSidebar("Statements")}}
- -

L'instruction break permet de terminer la boucle en cours ou l'instruction {{jsxref("Instructions/switch", "switch")}} ou {{jsxref("Instructions/label", "label")}} en cours et de passer le contrôle du programme à l'instruction suivant l'instruction terminée.

- -
{{EmbedInteractiveExample("pages/js/statement-break.html")}}
- -

Syntaxe

- -
break [label];
- -
-
label {{optional_inline}}
-
Un identifiant optionnel associé avec l'étiquette (label) de l'instruction. Si l'instruction à terminer n'est pas une boucle ou une instruction {{jsxref("Instructions/switch", "switch")}}, ce paramètre est nécessaire.
-
- -

Description

- -

L'instruction break peut être utilisée avec une étiquette (label) optionnelle qui permet d'interrompre une instruction étiquetée. L'instruction break doit être imbriquée au sein de l'instruction référencée. L'instruction étiquetée peut correspondre à n'importe quel instruction de {{jsxref("Instructions/bloc", "bloc","",1)}} ; il n'est pas nécessaire qu'elle soit précédée par une instruction de boucle.

- -

Une instruction break, suivie ou non d'une étiquette, ne peut pas être utilisée dans le corps d'une fonction appartenant elle-même à une boucle, à une instruction {{jsxref("Instructions/switch")}} ou à une instruction label.

- -

Exemples

- -

Exemple simple utilisant break

- -

La fonction qui suit utilise une instruction break qui interrompt la boucle {{jsxref("Instructions/while", "while")}} lorsque i vaut 3, grâce à l'instruction qui suit, la fonction renvoie 3 * x.

- -
function testBreak(x) {
-   var i = 0;
-
-   while (i < 6) {
-      if (i == 3) {
-         break;
-      }
-      i += 1;
-   }
-   return i * x;
-}
- -

Utiliser break avec les labels

- -

Dans le code suivant, on utilise les instructions break avec des blocs étiquetés. Une instruction break doit être présente à l'intérieur du bloc auquel elle fait référence. Ici, on voit que bloc_interne est compris dans bloc_externe.

- -
bloc_externe: {
-
-  bloc_interne: {
-    console.log ('1');
-    break bloc_externe;  // interrompt bloc_externe ET bloc_interne
-    console.log (':-('); // ignoré
-  }
-
-  console.log ('2');     // ignoré
-}
-
- -

Dans le code qui suit, on utilise également des instructions break avec des blocs étiquetés mais on obtient une exception SyntaxError car l'instruction break au sein de bloc_1 référence bloc_2, or bloc_1 n'est pas compris dans bloc_2 :

- -
bloc_1: {
-  console.log ('1');
-  break bloc_2;  // SyntaxError: label not found
-}
-
-bloc_2: {
-  console.log ('2');
-}
-
- -

Utiliser break dans des fonctions imbriquées dans des boucles

- -

Dans le cas d'une fonction imbriquée dans une boucle while :

- -
function testBreak(x){
-  var i = 0;
-  while (i < 6) {
-    if (i === 3) {
-      (function() {
-        break;
-      })();
-    }
-    i += 1;
-  }
-  return i * x;
-}
-
-testBreak(1); // SyntaxError: Illegal break statement
- -

Dans le cas d'une fonction imbriquée dans une instruction label :

- -
bloc_1: {
-  console.log('1');
-  (function() {
-    break bloc_1; // SyntaxError: Undefined label 'bloc_1'
-  })();
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Version non étiquetée.
{{SpecName('ES3')}}{{Spec2('ES3')}}Version étiquetée ajoutée.
{{SpecName('ES5.1', '#sec-12.8', 'instruction break')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-break-statement', 'instruction break')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-break-statement', 'Break statement')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.break")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/break/index.md b/files/fr/web/javascript/reference/statements/break/index.md new file mode 100644 index 0000000000..95e5144230 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/break/index.md @@ -0,0 +1,153 @@ +--- +title: break +slug: Web/JavaScript/Reference/Statements/break +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/break +original_slug: Web/JavaScript/Reference/Instructions/break +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction break permet de terminer la boucle en cours ou l'instruction {{jsxref("Instructions/switch", "switch")}} ou {{jsxref("Instructions/label", "label")}} en cours et de passer le contrôle du programme à l'instruction suivant l'instruction terminée.

+ +
{{EmbedInteractiveExample("pages/js/statement-break.html")}}
+ +

Syntaxe

+ +
break [label];
+ +
+
label {{optional_inline}}
+
Un identifiant optionnel associé avec l'étiquette (label) de l'instruction. Si l'instruction à terminer n'est pas une boucle ou une instruction {{jsxref("Instructions/switch", "switch")}}, ce paramètre est nécessaire.
+
+ +

Description

+ +

L'instruction break peut être utilisée avec une étiquette (label) optionnelle qui permet d'interrompre une instruction étiquetée. L'instruction break doit être imbriquée au sein de l'instruction référencée. L'instruction étiquetée peut correspondre à n'importe quel instruction de {{jsxref("Instructions/bloc", "bloc","",1)}} ; il n'est pas nécessaire qu'elle soit précédée par une instruction de boucle.

+ +

Une instruction break, suivie ou non d'une étiquette, ne peut pas être utilisée dans le corps d'une fonction appartenant elle-même à une boucle, à une instruction {{jsxref("Instructions/switch")}} ou à une instruction label.

+ +

Exemples

+ +

Exemple simple utilisant break

+ +

La fonction qui suit utilise une instruction break qui interrompt la boucle {{jsxref("Instructions/while", "while")}} lorsque i vaut 3, grâce à l'instruction qui suit, la fonction renvoie 3 * x.

+ +
function testBreak(x) {
+   var i = 0;
+
+   while (i < 6) {
+      if (i == 3) {
+         break;
+      }
+      i += 1;
+   }
+   return i * x;
+}
+ +

Utiliser break avec les labels

+ +

Dans le code suivant, on utilise les instructions break avec des blocs étiquetés. Une instruction break doit être présente à l'intérieur du bloc auquel elle fait référence. Ici, on voit que bloc_interne est compris dans bloc_externe.

+ +
bloc_externe: {
+
+  bloc_interne: {
+    console.log ('1');
+    break bloc_externe;  // interrompt bloc_externe ET bloc_interne
+    console.log (':-('); // ignoré
+  }
+
+  console.log ('2');     // ignoré
+}
+
+ +

Dans le code qui suit, on utilise également des instructions break avec des blocs étiquetés mais on obtient une exception SyntaxError car l'instruction break au sein de bloc_1 référence bloc_2, or bloc_1 n'est pas compris dans bloc_2 :

+ +
bloc_1: {
+  console.log ('1');
+  break bloc_2;  // SyntaxError: label not found
+}
+
+bloc_2: {
+  console.log ('2');
+}
+
+ +

Utiliser break dans des fonctions imbriquées dans des boucles

+ +

Dans le cas d'une fonction imbriquée dans une boucle while :

+ +
function testBreak(x){
+  var i = 0;
+  while (i < 6) {
+    if (i === 3) {
+      (function() {
+        break;
+      })();
+    }
+    i += 1;
+  }
+  return i * x;
+}
+
+testBreak(1); // SyntaxError: Illegal break statement
+ +

Dans le cas d'une fonction imbriquée dans une instruction label :

+ +
bloc_1: {
+  console.log('1');
+  (function() {
+    break bloc_1; // SyntaxError: Undefined label 'bloc_1'
+  })();
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Version non étiquetée.
{{SpecName('ES3')}}{{Spec2('ES3')}}Version étiquetée ajoutée.
{{SpecName('ES5.1', '#sec-12.8', 'instruction break')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-break-statement', 'instruction break')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-break-statement', 'Break statement')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.break")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/class/index.html b/files/fr/web/javascript/reference/statements/class/index.html deleted file mode 100644 index f88cd3f9b3..0000000000 --- a/files/fr/web/javascript/reference/statements/class/index.html +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: class -slug: Web/JavaScript/Reference/Statements/class -tags: - - Classes - - ECMAScript 2015 - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/class -original_slug: Web/JavaScript/Reference/Instructions/class ---- -
{{jsSidebar("Statements")}}
- -

La déclaration class crée une nouvelle classe avec le nom fourni en utilisant l'héritage à base de prototypes pour émuler le fonctionnement de classe.

- -
{{EmbedInteractiveExample("pages/js/statement-class.html")}}
- - - -

Il est aussi possible de définir une classe avec une {{jsxref("Opérateurs/class", "expression class","",1)}}.

- -

Syntaxe

- -
class nom [extends]{
-  // corps de la classe
-}
-
- -

Description

- -

Les déclarations qui composent le corps de la classe sont exécutées en mode strict. La propriété du constructeur est optionnelle.

- -

Les déclarations utilisées dans les classes ne sont pas remontées (hoisted) (à la différence des déclarations de fonctions).

- -

Exemples

- -

Déclarer une classe simple

- -

Dans l'exemple qui suit, on définit une classe Polygone pour laquelle on crée un sous-classe Carré. On note ici que la méthode super() ne peut être utilisée qu'au sein d'un constructeur et doit être appelée avant l'utilisation du mot-clé this.

- -
class Polygone {
-  constructor(hauteur, largeur) {
-    this.nom = 'Polygone';
-    this.hauteur = hauteur;
-    this.largeur = largeur;
-  }
-}
-
-class Carré extends Polygone {
-  constructor(longueur) {
-    super(longueur,longueur);
-    this.nom = 'Carré';
-  }
-}
-
- -
-

Attention : Déclarer une classe deux fois lèvera une exception SyntaxError. De même, on ne pourra pas réutiliser un nom qui a déjà été utilisé dans une expression de classe.

- -
// Deux déclarations avec le même nom
-class Toto {};
-class Toto {}; // Uncaught SyntaxError: Identifier 'Toto' has already been declared
-
-// Expression puis déclaration
-var Truc = class {};
-class Truc {}; // Uncaught TypeError: Identifier 'Truc' has already been declared
-
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Définitions de classe')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2016')}} 
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2017')}} 
{{SpecName('ESDraft', '#sec-class-definitions', 'Définitions de classe')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.class")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/class/index.md b/files/fr/web/javascript/reference/statements/class/index.md new file mode 100644 index 0000000000..f88cd3f9b3 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/class/index.md @@ -0,0 +1,113 @@ +--- +title: class +slug: Web/JavaScript/Reference/Statements/class +tags: + - Classes + - ECMAScript 2015 + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/class +original_slug: Web/JavaScript/Reference/Instructions/class +--- +
{{jsSidebar("Statements")}}
+ +

La déclaration class crée une nouvelle classe avec le nom fourni en utilisant l'héritage à base de prototypes pour émuler le fonctionnement de classe.

+ +
{{EmbedInteractiveExample("pages/js/statement-class.html")}}
+ + + +

Il est aussi possible de définir une classe avec une {{jsxref("Opérateurs/class", "expression class","",1)}}.

+ +

Syntaxe

+ +
class nom [extends]{
+  // corps de la classe
+}
+
+ +

Description

+ +

Les déclarations qui composent le corps de la classe sont exécutées en mode strict. La propriété du constructeur est optionnelle.

+ +

Les déclarations utilisées dans les classes ne sont pas remontées (hoisted) (à la différence des déclarations de fonctions).

+ +

Exemples

+ +

Déclarer une classe simple

+ +

Dans l'exemple qui suit, on définit une classe Polygone pour laquelle on crée un sous-classe Carré. On note ici que la méthode super() ne peut être utilisée qu'au sein d'un constructeur et doit être appelée avant l'utilisation du mot-clé this.

+ +
class Polygone {
+  constructor(hauteur, largeur) {
+    this.nom = 'Polygone';
+    this.hauteur = hauteur;
+    this.largeur = largeur;
+  }
+}
+
+class Carré extends Polygone {
+  constructor(longueur) {
+    super(longueur,longueur);
+    this.nom = 'Carré';
+  }
+}
+
+ +
+

Attention : Déclarer une classe deux fois lèvera une exception SyntaxError. De même, on ne pourra pas réutiliser un nom qui a déjà été utilisé dans une expression de classe.

+ +
// Deux déclarations avec le même nom
+class Toto {};
+class Toto {}; // Uncaught SyntaxError: Identifier 'Toto' has already been declared
+
+// Expression puis déclaration
+var Truc = class {};
+class Truc {}; // Uncaught TypeError: Identifier 'Truc' has already been declared
+
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-class-definitions', 'Définitions de classe')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2016')}} 
{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2017')}} 
{{SpecName('ESDraft', '#sec-class-definitions', 'Définitions de classe')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.class")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/const/index.html b/files/fr/web/javascript/reference/statements/const/index.html deleted file mode 100644 index ed27748ab3..0000000000 --- a/files/fr/web/javascript/reference/statements/const/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: const -slug: Web/JavaScript/Reference/Statements/const -tags: - - ECMAScript 2015 - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/const -original_slug: Web/JavaScript/Reference/Instructions/const ---- -
{{jsSidebar("Statements")}}
- -

La déclaration const permet de créer une constante nommée accessible uniquement en lecture. Cela ne signifie pas que la valeur contenue est immuable, uniquement que l'identifiant ne peut pas être réaffecté. Autrement dit la valeur d'une constante ne peut pas être modifiée par des réaffectations ultérieures. Une constante ne peut pas être déclarée à nouveau.

- -
{{EmbedInteractiveExample("pages/js/statement-const.html")}}
- -

Syntaxe

- -
const nom1 = valeur1 [, nom2 = valeur2 [, ... [, nomN = valeurN]]];
- -
-
nomN
-
Le nom de la constante. Ce nom peut être n'importe quel identifiant valide.
-
valeurN
-
La valeur à associer à la constante. Cette valeur peut être n'importe quelle expression valide (éventuellement une expression de fonction).
-
- -

Description

- -

Cette déclaration permet de créer une constante qui peut être globale ou locale pour la fonction dans laquelle elle a été déclarée. Les constantes font partie de la portée du bloc (comme les variables définies avec let). À la différence des variables définies avec var, les constantes déclarées au niveau global ne sont pas des propriétés de l'objet global ({{domxref("window")}} dans le cas du navigateur). Il est nécessaire d'initialiser une constante lors de sa déclaration. Au sein d'une même portée, il est impossible d'avoir une constante qui partage le même nom qu'une variable ou qu'une fonction.

- -

Attention, la déclaration const crée une référence en lecture seule vers une valeur. Cela ne signifie pas que la valeur référencée ne peut pas être modifiée ! Ainsi, si le contenu de la constante est un objet, l'objet lui-même pourra toujours être modifié.

- -
-

Note : Les aspects liés à la zone morte temporelle de let s'appliquent également à const.

-
- -

Exemples

- -

Les instructions suivantes illustrent comment fonctionne cette déclaration. On pourra tester ces instructions dans la console afin d'observer le comportement obtenu :

- -
// On définit ma_fav comme une constante
-// et on lui affecte la valeur 7
-// Généralement, par convention, les
-// constantes sont en majuscules
-const MA_FAV = 7;
-
-// Cette réaffectation lèvera une exception TypeError
-MA_FAV = 20;
-
-// affichera 7
-console.log("mon nombre favori est : " + MA_FAV);
-
-// toute tentative de redéclaration renvoie une erreur
-// SyntaxError: Identifier 'MY_FAV' has already been declared
-const MA_FAV = 20;
-
-// le nom ma_fav est réservé par la constante ci-dessus
-// cette déclaration échouera donc également
-var MA_FAV = 20;
-
-// cela renvoie également une erreur
-let MA_FAV = 20;
-
-
-// On notera l'importance de la portée de bloc :
-if (MA_FAV === 7) {
-  // cela fonctionne sans problème et crée
-  // une nouvelle variable dans cette portée
-  let MA_FAV =  20;
-
-  // Ici, MA_FAV vaut 20
-  console.log("mon nombre préféré est " + MA_FAV);
-
-  // L'instruction suivante est remontée dans le
-  // contexte global et provoque une erreur !
-  var MA_FAV = 20;
-
-}
-
-// MA_FAV vaut toujours 7
-console.log("mon nombre favori est " + MA_FAV);
-
-// const nécessite une initialisation
-const TOTO; // SyntaxError: Missing initializer in const
-
-// const fonctionne également avec les objects
-const monObjet = {"clé": "valeur"};
-
-// Écraser l'objet échouera comme précédemment
-monObjet = {"autreClé": "valeur"};
-
-// En revanche, les clés d'un objet ne sont pas
-// protégés et on peut donc, de façon valide, avoir
-monObjet.clé = "autreValeur";
-// On utilisera Object.freeze() afin qu'un objet soit immuable
-
-// Il en va de même avec les tableaux
-const mon_tableau = [];
-// On peut ajouter des éléments au tableau
-mon_tableau.push("A"); // ["A"]
-// Mais on ne peut pas affecter une nouvelle valeur
-mon_tableau = ["B"]; // lève une exception
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Déclarations let et const')}}{{Spec2('ESDraft')}}Aucune modification.
{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Déclarations let et const')}}{{Spec2('ES2015')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.const")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/const/index.md b/files/fr/web/javascript/reference/statements/const/index.md new file mode 100644 index 0000000000..ed27748ab3 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/const/index.md @@ -0,0 +1,141 @@ +--- +title: const +slug: Web/JavaScript/Reference/Statements/const +tags: + - ECMAScript 2015 + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/const +original_slug: Web/JavaScript/Reference/Instructions/const +--- +
{{jsSidebar("Statements")}}
+ +

La déclaration const permet de créer une constante nommée accessible uniquement en lecture. Cela ne signifie pas que la valeur contenue est immuable, uniquement que l'identifiant ne peut pas être réaffecté. Autrement dit la valeur d'une constante ne peut pas être modifiée par des réaffectations ultérieures. Une constante ne peut pas être déclarée à nouveau.

+ +
{{EmbedInteractiveExample("pages/js/statement-const.html")}}
+ +

Syntaxe

+ +
const nom1 = valeur1 [, nom2 = valeur2 [, ... [, nomN = valeurN]]];
+ +
+
nomN
+
Le nom de la constante. Ce nom peut être n'importe quel identifiant valide.
+
valeurN
+
La valeur à associer à la constante. Cette valeur peut être n'importe quelle expression valide (éventuellement une expression de fonction).
+
+ +

Description

+ +

Cette déclaration permet de créer une constante qui peut être globale ou locale pour la fonction dans laquelle elle a été déclarée. Les constantes font partie de la portée du bloc (comme les variables définies avec let). À la différence des variables définies avec var, les constantes déclarées au niveau global ne sont pas des propriétés de l'objet global ({{domxref("window")}} dans le cas du navigateur). Il est nécessaire d'initialiser une constante lors de sa déclaration. Au sein d'une même portée, il est impossible d'avoir une constante qui partage le même nom qu'une variable ou qu'une fonction.

+ +

Attention, la déclaration const crée une référence en lecture seule vers une valeur. Cela ne signifie pas que la valeur référencée ne peut pas être modifiée ! Ainsi, si le contenu de la constante est un objet, l'objet lui-même pourra toujours être modifié.

+ +
+

Note : Les aspects liés à la zone morte temporelle de let s'appliquent également à const.

+
+ +

Exemples

+ +

Les instructions suivantes illustrent comment fonctionne cette déclaration. On pourra tester ces instructions dans la console afin d'observer le comportement obtenu :

+ +
// On définit ma_fav comme une constante
+// et on lui affecte la valeur 7
+// Généralement, par convention, les
+// constantes sont en majuscules
+const MA_FAV = 7;
+
+// Cette réaffectation lèvera une exception TypeError
+MA_FAV = 20;
+
+// affichera 7
+console.log("mon nombre favori est : " + MA_FAV);
+
+// toute tentative de redéclaration renvoie une erreur
+// SyntaxError: Identifier 'MY_FAV' has already been declared
+const MA_FAV = 20;
+
+// le nom ma_fav est réservé par la constante ci-dessus
+// cette déclaration échouera donc également
+var MA_FAV = 20;
+
+// cela renvoie également une erreur
+let MA_FAV = 20;
+
+
+// On notera l'importance de la portée de bloc :
+if (MA_FAV === 7) {
+  // cela fonctionne sans problème et crée
+  // une nouvelle variable dans cette portée
+  let MA_FAV =  20;
+
+  // Ici, MA_FAV vaut 20
+  console.log("mon nombre préféré est " + MA_FAV);
+
+  // L'instruction suivante est remontée dans le
+  // contexte global et provoque une erreur !
+  var MA_FAV = 20;
+
+}
+
+// MA_FAV vaut toujours 7
+console.log("mon nombre favori est " + MA_FAV);
+
+// const nécessite une initialisation
+const TOTO; // SyntaxError: Missing initializer in const
+
+// const fonctionne également avec les objects
+const monObjet = {"clé": "valeur"};
+
+// Écraser l'objet échouera comme précédemment
+monObjet = {"autreClé": "valeur"};
+
+// En revanche, les clés d'un objet ne sont pas
+// protégés et on peut donc, de façon valide, avoir
+monObjet.clé = "autreValeur";
+// On utilisera Object.freeze() afin qu'un objet soit immuable
+
+// Il en va de même avec les tableaux
+const mon_tableau = [];
+// On peut ajouter des éléments au tableau
+mon_tableau.push("A"); // ["A"]
+// Mais on ne peut pas affecter une nouvelle valeur
+mon_tableau = ["B"]; // lève une exception
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Déclarations let et const')}}{{Spec2('ESDraft')}}Aucune modification.
{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Déclarations let et const')}}{{Spec2('ES2015')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.const")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/continue/index.html b/files/fr/web/javascript/reference/statements/continue/index.html deleted file mode 100644 index 97157d8740..0000000000 --- a/files/fr/web/javascript/reference/statements/continue/index.html +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: continue -slug: Web/JavaScript/Reference/Statements/continue -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/continue -original_slug: Web/JavaScript/Reference/Instructions/continue ---- -
{{jsSidebar("Statements")}}
- -

L'instruction continue arrête l'exécution des instructions pour l'itération de la boucle courante ou de la boucle étiquetée. L'exécution est reprise à l'itération suivante.

- -
{{EmbedInteractiveExample("pages/js/statement-continue.html")}}
- -

Syntaxe

- -
continue [ label ];
- -
-
label
-
Paramètre optionnel. Un identifiant associé à l'étiquette (label) de l'instruction pour laquelle on souhaite finir l'itération en cours.
-
- -

Description

- -

Contrairement à {{jsxref("Instructions/break", "break")}}, continue ne termine pas la boucle complètement :

- - - - - -

L'instruction continue peut éventuellement contenir une étiquette (label) qui permet de tirer parti des instructions de boucles étiquetées (plutôt que de ne traiter que la boucle courante). Dans le cas où l'étiquette est utilisée, il faut que l'instruction continue soit imbriquée dans l'instruction étiquetée.

- -

Exemples

- -

Utiliser continue avec while

- -

L'instruction suivante illustre comment on peut utiliser continue au sein d'une boucle {{jsxref("Instructions/while", "while")}}, ici continue est utilisé lorsque i vaut 3. On a donc n qui prend les valeurs 1, 3, 7, et 12.

- -
var i = 0;
-var n = 0;
-while (i < 5) {
-  i++;
-  if (i === 3) {
-    continue;
-  }
-  n += i;
-}
-
- -

Utiliser continue avec une étiquette

- -

Dans l'exemple suivant, on a une instruction étiquetée vérifIetJ qui contient une autre instruction étiquetée vérifJ. Si l'instruction continue est utilisée, le programme reprend l'exécution au début de l'instruction vérifJ. Chaque fois que continue utilisé, vérifJ réitère jusqu'à ce que sa condition renvoie false. Lorsque c'est le cas, le reste de l'instruction vérifIetJ est exécuté.

- -

Si continue utilisait l'étiquette vérifIetJ, le programme continuerait au début de l'instruction vérifIetJ.

- -

Voir aussi {{jsxref("Instructions/label", "label")}}.

- -
var i = 0;
-var j = 8;
-
-vérifIetJ: while (i < 4) {
-  console.log("i : " + i);
-  i += 1;
-
-  vérifJ: while (j > 4) {
-    console.log("j : "+ j);
-    j -= 1;
-    if ((j % 2) == 0){
-      continue vérifJ;
-    }
-    console.log(j + " est impaire.");
-   }
-   console.log("i = " + i);
-   console.log("j = " + j);
-}
-
- -

En utilisant le fragment ci-avant, on aura le résultat suivant :

- -
"i : 0"
-
-// début de vérifJ
-"j : 8"
-"7 est impair"
-"j : 7"
-"j : 6"
-"5 est impair."
-"j : 5"
-// fin de vérifJ
-
-"i = 1"
-"j = 4"
-
-"i : 1"
-"i = 2"
-"j = 4"
-
-"i : 2"
-"i = 3"
-"j = 4"
-
-"i : 3"
-"i = 4"
-"j = 4"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Pas de version étiquetée.
{{SpecName('ES3')}}{{Spec2('ES3')}}Ajout de la version étiquetée.
{{SpecName('ES5.1', '#sec-12.7', 'instruction continue')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-continue-statement', 'instruction continue')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-continue-statement', 'instruction continue')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.continue")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/continue/index.md b/files/fr/web/javascript/reference/statements/continue/index.md new file mode 100644 index 0000000000..97157d8740 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/continue/index.md @@ -0,0 +1,160 @@ +--- +title: continue +slug: Web/JavaScript/Reference/Statements/continue +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/continue +original_slug: Web/JavaScript/Reference/Instructions/continue +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction continue arrête l'exécution des instructions pour l'itération de la boucle courante ou de la boucle étiquetée. L'exécution est reprise à l'itération suivante.

+ +
{{EmbedInteractiveExample("pages/js/statement-continue.html")}}
+ +

Syntaxe

+ +
continue [ label ];
+ +
+
label
+
Paramètre optionnel. Un identifiant associé à l'étiquette (label) de l'instruction pour laquelle on souhaite finir l'itération en cours.
+
+ +

Description

+ +

Contrairement à {{jsxref("Instructions/break", "break")}}, continue ne termine pas la boucle complètement :

+ + + + + +

L'instruction continue peut éventuellement contenir une étiquette (label) qui permet de tirer parti des instructions de boucles étiquetées (plutôt que de ne traiter que la boucle courante). Dans le cas où l'étiquette est utilisée, il faut que l'instruction continue soit imbriquée dans l'instruction étiquetée.

+ +

Exemples

+ +

Utiliser continue avec while

+ +

L'instruction suivante illustre comment on peut utiliser continue au sein d'une boucle {{jsxref("Instructions/while", "while")}}, ici continue est utilisé lorsque i vaut 3. On a donc n qui prend les valeurs 1, 3, 7, et 12.

+ +
var i = 0;
+var n = 0;
+while (i < 5) {
+  i++;
+  if (i === 3) {
+    continue;
+  }
+  n += i;
+}
+
+ +

Utiliser continue avec une étiquette

+ +

Dans l'exemple suivant, on a une instruction étiquetée vérifIetJ qui contient une autre instruction étiquetée vérifJ. Si l'instruction continue est utilisée, le programme reprend l'exécution au début de l'instruction vérifJ. Chaque fois que continue utilisé, vérifJ réitère jusqu'à ce que sa condition renvoie false. Lorsque c'est le cas, le reste de l'instruction vérifIetJ est exécuté.

+ +

Si continue utilisait l'étiquette vérifIetJ, le programme continuerait au début de l'instruction vérifIetJ.

+ +

Voir aussi {{jsxref("Instructions/label", "label")}}.

+ +
var i = 0;
+var j = 8;
+
+vérifIetJ: while (i < 4) {
+  console.log("i : " + i);
+  i += 1;
+
+  vérifJ: while (j > 4) {
+    console.log("j : "+ j);
+    j -= 1;
+    if ((j % 2) == 0){
+      continue vérifJ;
+    }
+    console.log(j + " est impaire.");
+   }
+   console.log("i = " + i);
+   console.log("j = " + j);
+}
+
+ +

En utilisant le fragment ci-avant, on aura le résultat suivant :

+ +
"i : 0"
+
+// début de vérifJ
+"j : 8"
+"7 est impair"
+"j : 7"
+"j : 6"
+"5 est impair."
+"j : 5"
+// fin de vérifJ
+
+"i = 1"
+"j = 4"
+
+"i : 1"
+"i = 2"
+"j = 4"
+
+"i : 2"
+"i = 3"
+"j = 4"
+
+"i : 3"
+"i = 4"
+"j = 4"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Pas de version étiquetée.
{{SpecName('ES3')}}{{Spec2('ES3')}}Ajout de la version étiquetée.
{{SpecName('ES5.1', '#sec-12.7', 'instruction continue')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-continue-statement', 'instruction continue')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-continue-statement', 'instruction continue')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.continue")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/debugger/index.html b/files/fr/web/javascript/reference/statements/debugger/index.html deleted file mode 100644 index 9307a7f217..0000000000 --- a/files/fr/web/javascript/reference/statements/debugger/index.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: debugger -slug: Web/JavaScript/Reference/Statements/debugger -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/debugger -original_slug: Web/JavaScript/Reference/Instructions/debugger ---- -
{{jsSidebar("Statements")}}
- -

L'instruction debugger permet de faire appel à un outil de débogage (qui peut par exemple permettre de placer un point d'arrêt). Si cette fonctionnalité de débogage n'est pas disponible, l'instruction n'aura aucun effet.

- -

Syntaxe

- -
debugger;
- -

Exemples

- -

Dans l'exemple qui suit, on utilise un code avec l'instruction debugger qui permet de démarrer un débogueur (s'il existe) lorsque la fonction est appelée :

- -
function codeProbablementBogue() {
-    debugger;
-    // exécuter des instructions qu'on veut
-    // examiner, exécuter pas à pas etc.
-}
- -

Lors que le débogueur est lancé, l'exécution est interrompue au niveau de l'instruction debugger. Cela agit comme un point d'arrêt dans le code du script :

- -

Paused at a debugger statement.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-debugger-statement', 'Debugger statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-debugger-statement', 'instruction debugger')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.15', 'instruction debugger')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES3', '#sec-7.5.3', 'instruction debugger')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-7.4.3', 'instruction debugger')}}{{Spec2('ES1')}}Uniquement mentionné comme mot-clé réservé.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.debugger")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/debugger/index.md b/files/fr/web/javascript/reference/statements/debugger/index.md new file mode 100644 index 0000000000..9307a7f217 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/debugger/index.md @@ -0,0 +1,78 @@ +--- +title: debugger +slug: Web/JavaScript/Reference/Statements/debugger +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/debugger +original_slug: Web/JavaScript/Reference/Instructions/debugger +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction debugger permet de faire appel à un outil de débogage (qui peut par exemple permettre de placer un point d'arrêt). Si cette fonctionnalité de débogage n'est pas disponible, l'instruction n'aura aucun effet.

+ +

Syntaxe

+ +
debugger;
+ +

Exemples

+ +

Dans l'exemple qui suit, on utilise un code avec l'instruction debugger qui permet de démarrer un débogueur (s'il existe) lorsque la fonction est appelée :

+ +
function codeProbablementBogue() {
+    debugger;
+    // exécuter des instructions qu'on veut
+    // examiner, exécuter pas à pas etc.
+}
+ +

Lors que le débogueur est lancé, l'exécution est interrompue au niveau de l'instruction debugger. Cela agit comme un point d'arrêt dans le code du script :

+ +

Paused at a debugger statement.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-debugger-statement', 'Debugger statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-debugger-statement', 'instruction debugger')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.15', 'instruction debugger')}}{{Spec2('ES5.1')}}Définition initiale
{{SpecName('ES3', '#sec-7.5.3', 'instruction debugger')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-7.4.3', 'instruction debugger')}}{{Spec2('ES1')}}Uniquement mentionné comme mot-clé réservé.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.debugger")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/do...while/index.html b/files/fr/web/javascript/reference/statements/do...while/index.html deleted file mode 100644 index 4913e642ce..0000000000 --- a/files/fr/web/javascript/reference/statements/do...while/index.html +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: do...while -slug: Web/JavaScript/Reference/Statements/do...while -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/do...while -original_slug: Web/JavaScript/Reference/Instructions/do...while ---- -
{{jsSidebar("Statements")}}
- -

L'instruction do...while crée une boucle qui exécute une instruction jusqu'à ce qu'une condition de test ne soit plus vérifiée. La condition est testée après que l'instruction soit exécutée, le bloc d'instructions défini dans la boucle est donc exécuté au moins une fois.

- -
{{EmbedInteractiveExample("pages/js/statement-dowhile.html")}}
- -

Syntaxe

- -
do
-   instruction
-while (condition);
-
- -
-
instruction
-
Une instruction exécutée au moins une fois et ré-exécutée chaque fois que la condition de test est évaluée à true. On peut exécuter plusieurs instructions au sein d'une boucle grâce à l'instruction {{jsxref("Instructions/block", "block")}} ({ ... }) qui permet de grouper différentes instructions en une seule.
-
condition
-
Une expression évaluée après chaque passage dans la boucle. Si l'évaluation de la condition donne true (la condition est vérifiée), instruction sera exécutée à nouveau. Lorsque condition donne false, le contrôle passe à l'instruction suivant la boucle do...while.
-
- -

Exemples

- -

Utiliser do...while

- -

Dans l'exemple suivant, la boucle do...while est parcourue au moins une fois et répétée jusqu'à ce que i ne soit plus strictement inférieur à 5.

- -
var i = 0;
-do {
-   i += 1;
-   console.log(i);
-} while (i < 5);
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-12.6.1', 'instruction do-while')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-do-while-statement', 'instruction do-while')}}{{Spec2('ES6')}}Le point-virgule de fin est désormais optionnel.
{{SpecName('ESDraft', '#sec-do-while-statement', 'instruction do-while')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- - - -

{{Compat("javascript.statements.do_while")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/do...while/index.md b/files/fr/web/javascript/reference/statements/do...while/index.md new file mode 100644 index 0000000000..4913e642ce --- /dev/null +++ b/files/fr/web/javascript/reference/statements/do...while/index.md @@ -0,0 +1,87 @@ +--- +title: do...while +slug: Web/JavaScript/Reference/Statements/do...while +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/do...while +original_slug: Web/JavaScript/Reference/Instructions/do...while +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction do...while crée une boucle qui exécute une instruction jusqu'à ce qu'une condition de test ne soit plus vérifiée. La condition est testée après que l'instruction soit exécutée, le bloc d'instructions défini dans la boucle est donc exécuté au moins une fois.

+ +
{{EmbedInteractiveExample("pages/js/statement-dowhile.html")}}
+ +

Syntaxe

+ +
do
+   instruction
+while (condition);
+
+ +
+
instruction
+
Une instruction exécutée au moins une fois et ré-exécutée chaque fois que la condition de test est évaluée à true. On peut exécuter plusieurs instructions au sein d'une boucle grâce à l'instruction {{jsxref("Instructions/block", "block")}} ({ ... }) qui permet de grouper différentes instructions en une seule.
+
condition
+
Une expression évaluée après chaque passage dans la boucle. Si l'évaluation de la condition donne true (la condition est vérifiée), instruction sera exécutée à nouveau. Lorsque condition donne false, le contrôle passe à l'instruction suivant la boucle do...while.
+
+ +

Exemples

+ +

Utiliser do...while

+ +

Dans l'exemple suivant, la boucle do...while est parcourue au moins une fois et répétée jusqu'à ce que i ne soit plus strictement inférieur à 5.

+ +
var i = 0;
+do {
+   i += 1;
+   console.log(i);
+} while (i < 5);
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-12.6.1', 'instruction do-while')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-do-while-statement', 'instruction do-while')}}{{Spec2('ES6')}}Le point-virgule de fin est désormais optionnel.
{{SpecName('ESDraft', '#sec-do-while-statement', 'instruction do-while')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ + + +

{{Compat("javascript.statements.do_while")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/empty/index.html b/files/fr/web/javascript/reference/statements/empty/index.html deleted file mode 100644 index a1dbfb03c2..0000000000 --- a/files/fr/web/javascript/reference/statements/empty/index.html +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: vide -slug: Web/JavaScript/Reference/Statements/Empty -tags: - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/Empty -original_slug: Web/JavaScript/Reference/Instructions/Vide ---- -
{{jsSidebar("Statements")}}
- -

Une instruction vide est utilisée pour ne fournir aucune instruction là où JavaScript en attendrait une.

- -
{{EmbedInteractiveExample("pages/js/statement-empty.html")}}
- -

Syntaxe

- -
;
-
- -

Description

- -

L'instruction vide est représentée par un point-virgule (;) qui indique qu'il n'y a aucune instruction à exécuter, même si JavaScript requiert une instruction à cet emplacement. Le comportement réciproque, où on souhaite exécuter plusieurs instructions là où JavaScript en attend une est possible grâce à l'instruction bloc qui permet de combiner plusieurs instructions en une seule.

- -

Exemples

- -

L'instruction vide peut être utilisée dans les boucles. Par exemple, ici on a un corps de boucle totalement vide :

- -
var arr = [1, 2, 3];
-
-// Affecter 0 pour toutes les valeurs du tableau
-for (i = 0; i < arr.length; arr[i++] = 0) /* instruction vide */ ;
-
-console.log(arr)
-// [0, 0, 0]
-
- -
-

Note : Cela peut être raisonnable que de commenter l'utilisation d'une instruction vide pour la rendre visible et l'expliciter. Par exemple, dans le code qui suit, le point-virgule ne semble pas intentionnel :

-
- -
if (condition);  // Attention, ce "if" ne fait rien !
-   finDuMonde()  // Cette méthode est donc toujours lancée !!!
-
- -

Un autre exemple avec une instruction {{jsxref("Instructions/if...else")}} sans accolade ({}). Si trois vaut true, rien ne sera exécuté, peu importera la valeur de quatre, la fonction chargerFusée() ne sera pas exécutée.

- -
if (un)
-  faire1èreEtape();
-else if (deux)
-  faire4èmeEtape();
-else if (trois)
-  ; // rien ici
-else if (quatre)
-  faire4èmeEtape();
-else
-  chargerFusée();
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-empty-statement', 'Instruction vide')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-empty-statement', 'instruction vide')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.3', 'instruction vide')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-12.3', 'instruction vide')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.3', 'instruction vide')}}{{Spec2('ES1')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.empty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/empty/index.md b/files/fr/web/javascript/reference/statements/empty/index.md new file mode 100644 index 0000000000..a1dbfb03c2 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/empty/index.md @@ -0,0 +1,105 @@ +--- +title: vide +slug: Web/JavaScript/Reference/Statements/Empty +tags: + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/Empty +original_slug: Web/JavaScript/Reference/Instructions/Vide +--- +
{{jsSidebar("Statements")}}
+ +

Une instruction vide est utilisée pour ne fournir aucune instruction là où JavaScript en attendrait une.

+ +
{{EmbedInteractiveExample("pages/js/statement-empty.html")}}
+ +

Syntaxe

+ +
;
+
+ +

Description

+ +

L'instruction vide est représentée par un point-virgule (;) qui indique qu'il n'y a aucune instruction à exécuter, même si JavaScript requiert une instruction à cet emplacement. Le comportement réciproque, où on souhaite exécuter plusieurs instructions là où JavaScript en attend une est possible grâce à l'instruction bloc qui permet de combiner plusieurs instructions en une seule.

+ +

Exemples

+ +

L'instruction vide peut être utilisée dans les boucles. Par exemple, ici on a un corps de boucle totalement vide :

+ +
var arr = [1, 2, 3];
+
+// Affecter 0 pour toutes les valeurs du tableau
+for (i = 0; i < arr.length; arr[i++] = 0) /* instruction vide */ ;
+
+console.log(arr)
+// [0, 0, 0]
+
+ +
+

Note : Cela peut être raisonnable que de commenter l'utilisation d'une instruction vide pour la rendre visible et l'expliciter. Par exemple, dans le code qui suit, le point-virgule ne semble pas intentionnel :

+
+ +
if (condition);  // Attention, ce "if" ne fait rien !
+   finDuMonde()  // Cette méthode est donc toujours lancée !!!
+
+ +

Un autre exemple avec une instruction {{jsxref("Instructions/if...else")}} sans accolade ({}). Si trois vaut true, rien ne sera exécuté, peu importera la valeur de quatre, la fonction chargerFusée() ne sera pas exécutée.

+ +
if (un)
+  faire1èreEtape();
+else if (deux)
+  faire4èmeEtape();
+else if (trois)
+  ; // rien ici
+else if (quatre)
+  faire4èmeEtape();
+else
+  chargerFusée();
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-empty-statement', 'Instruction vide')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-empty-statement', 'instruction vide')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.3', 'instruction vide')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-12.3', 'instruction vide')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.3', 'instruction vide')}}{{Spec2('ES1')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.empty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/export/index.html b/files/fr/web/javascript/reference/statements/export/index.html deleted file mode 100644 index 30f421a8c5..0000000000 --- a/files/fr/web/javascript/reference/statements/export/index.html +++ /dev/null @@ -1,181 +0,0 @@ ---- -title: export -slug: Web/JavaScript/Reference/Statements/export -tags: - - ECMAScript 2015 - - Instruction - - JavaScript - - Modules - - export -translation_of: Web/JavaScript/Reference/Statements/export -original_slug: Web/JavaScript/Reference/Instructions/export ---- -
{{jsSidebar("Statements")}}
- -

L'instruction export est utilisée lors de la création de modules JavaScript pour exporter des fonctions, des objets ou des valeurs primitives à partir du module, de sorte qu'ils puissent être utilisés par d'autres programmes grâce à l'instruction {{jsxref("Instructions/import", "import")}}.

- -

Les modules exportés sont interprétés en mode strict dans tous les cas. L'instruction export ne peut pas être utilisée dans les scripts embarqués.

- -

Syntaxe

- -
// Exporter des propriétés individuelles
-export let nom1, nom2, …, nomN; // utilisable avec var, const
-export let nom1 = …, nom2 = …, …, nomN; // utilisable avec var, const
-export function nomFonction(){...}
-export class NomClasse {...}
-
-// Export d'une liste de valeur
-export { nom1, nom2, …, nomN };
-
-// Renommage des valeurs exportées
-export { variable1 as nom1, variable2 as nom2, …, nomN };
-
-// Renommage avec la décomposition pour l'affectation
-export const { nom1, nom2: truc } = o;
-
-// Exports par défauts
-export default expression;
-export default function (…) { … } // fonctionne avec class, function*
-export default function nom1(…) { … } // fonctionne avec class, function*
-export { nom1 as default, … };
-
-// Agrégation de modules
-export * from …;
-export { nom1, nom2, …, nomN } from …;
-export { import1 as nom1, import2 as nom2, …, nomN } from …;
-export { default } from …;
- -
-
nomN
-
Identifiant à exporter (afin qu'il puisse être importé via {{jsxref("Statements/import", "import")}} dans un autre script).
-
- -

Description

- -

Il existe deux types d'export différents : les exports nommés et les exports par défaut. Il est possible d'avoir plusieurs exports nommés mais un seul export par défaut. Chaque type correspond à une des syntaxes ci-dessus :

- - - -

Les exports nommés sont utiles pour exporter plusieurs valeurs. Lors de l'importation, il est obligatoire d'utiliser le même nom de l'objet correspondant.

- -

Mais un export par défaut peut être importé avec n'importe quel nom, par exemple :

- -
let k;
-export default k = 12; // dans le fichier test.js
-import m from './test'; // notez que nous avons la liberté d'utiliser import m au lieu de import k, parce que k était l'export par défaut
-console.log (m); // enregistrera 12
- -

La syntaxe suivante n'exporte pas le défaut depuis le module importé :

- -
export * from …;
- -

Si vous avez besoin d'exporter le défaut, écrivez ce qui suit à la place :

- -
export {default} from 'mod';
- -

Il est possible de renommer un export afin d'éviter des conflits de nommage :

- -
export { maFonction as fonction1
-         maVariable as variable1 };
- -

On peut également agréger les valeurs exportées à celles d'autres modules qu'on aurait importés :

- -
// Dans moduleParent.js
-export { maFonction, maVariable } from 'moduleFils1.js';
-export { maClasse } from 'moduleFils2.js'
-
-// Dans le module de plus haut niveau
-import { maFonction, maVariable, maClasse } from 'moduleParent.js';
- -

Exemples

- -

Utilisation d'exports nommés

- -

Dans le module, on pourra utiliser le code suivant :

- -
// module "mon-module.js"
-function cube(x) {
-  return x * x * x;
-}
-const machin = Math.PI + Math.SQRT2;
-export { cube, machin };
-
- -

De cette façon, dans un autre script, on pourra avoir :

- -
import { cube, machin } from 'mon-module';
-console.log(cube(3)); // 27
-console.log(machin);    // 4.555806215962888
- -
-

Note : Si l'import est réalisé dans un script HTML, il faut que celui-ci soit chargé avec l'attribut {{htmlattrxref("type")}} "module" : <script type="module" src="./demo.js"></script> sinon il y aura une erreur quant aux origines multiples (CORS).
- Il n'est pas possible de charger des modules JavaScript via une URL file:// pour des raisons de sécurité (voir CORS également). Il faudra utiliser un serveur HTTP.

-
- -

Utilisation d'exports par défaut

- -

Si on souhaite n'exporter qu'une seule valeur ou avoir une valeur de secours pour le module, on peut utiliser un export par défaut :

- -
// module "mon-module.js"
-export default function cube(x) {
-  return x * x * x;
-}
-
- -

Alors, dans un autre script, il sera facile d'importer l'export par défaut :

- -
import cube from './mon-module.js';
-console.log(cube(3)); // 27
-
- -

Notez qu'il n'est pas possible d'utiliser var, let ou const avec export default.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaire
{{SpecName('ES2015', '#sec-exports', 'Exports')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-exports', 'Exports')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.export")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/export/index.md b/files/fr/web/javascript/reference/statements/export/index.md new file mode 100644 index 0000000000..30f421a8c5 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/export/index.md @@ -0,0 +1,181 @@ +--- +title: export +slug: Web/JavaScript/Reference/Statements/export +tags: + - ECMAScript 2015 + - Instruction + - JavaScript + - Modules + - export +translation_of: Web/JavaScript/Reference/Statements/export +original_slug: Web/JavaScript/Reference/Instructions/export +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction export est utilisée lors de la création de modules JavaScript pour exporter des fonctions, des objets ou des valeurs primitives à partir du module, de sorte qu'ils puissent être utilisés par d'autres programmes grâce à l'instruction {{jsxref("Instructions/import", "import")}}.

+ +

Les modules exportés sont interprétés en mode strict dans tous les cas. L'instruction export ne peut pas être utilisée dans les scripts embarqués.

+ +

Syntaxe

+ +
// Exporter des propriétés individuelles
+export let nom1, nom2, …, nomN; // utilisable avec var, const
+export let nom1 = …, nom2 = …, …, nomN; // utilisable avec var, const
+export function nomFonction(){...}
+export class NomClasse {...}
+
+// Export d'une liste de valeur
+export { nom1, nom2, …, nomN };
+
+// Renommage des valeurs exportées
+export { variable1 as nom1, variable2 as nom2, …, nomN };
+
+// Renommage avec la décomposition pour l'affectation
+export const { nom1, nom2: truc } = o;
+
+// Exports par défauts
+export default expression;
+export default function (…) { … } // fonctionne avec class, function*
+export default function nom1(…) { … } // fonctionne avec class, function*
+export { nom1 as default, … };
+
+// Agrégation de modules
+export * from …;
+export { nom1, nom2, …, nomN } from …;
+export { import1 as nom1, import2 as nom2, …, nomN } from …;
+export { default } from …;
+ +
+
nomN
+
Identifiant à exporter (afin qu'il puisse être importé via {{jsxref("Statements/import", "import")}} dans un autre script).
+
+ +

Description

+ +

Il existe deux types d'export différents : les exports nommés et les exports par défaut. Il est possible d'avoir plusieurs exports nommés mais un seul export par défaut. Chaque type correspond à une des syntaxes ci-dessus :

+ + + +

Les exports nommés sont utiles pour exporter plusieurs valeurs. Lors de l'importation, il est obligatoire d'utiliser le même nom de l'objet correspondant.

+ +

Mais un export par défaut peut être importé avec n'importe quel nom, par exemple :

+ +
let k;
+export default k = 12; // dans le fichier test.js
+import m from './test'; // notez que nous avons la liberté d'utiliser import m au lieu de import k, parce que k était l'export par défaut
+console.log (m); // enregistrera 12
+ +

La syntaxe suivante n'exporte pas le défaut depuis le module importé :

+ +
export * from …;
+ +

Si vous avez besoin d'exporter le défaut, écrivez ce qui suit à la place :

+ +
export {default} from 'mod';
+ +

Il est possible de renommer un export afin d'éviter des conflits de nommage :

+ +
export { maFonction as fonction1
+         maVariable as variable1 };
+ +

On peut également agréger les valeurs exportées à celles d'autres modules qu'on aurait importés :

+ +
// Dans moduleParent.js
+export { maFonction, maVariable } from 'moduleFils1.js';
+export { maClasse } from 'moduleFils2.js'
+
+// Dans le module de plus haut niveau
+import { maFonction, maVariable, maClasse } from 'moduleParent.js';
+ +

Exemples

+ +

Utilisation d'exports nommés

+ +

Dans le module, on pourra utiliser le code suivant :

+ +
// module "mon-module.js"
+function cube(x) {
+  return x * x * x;
+}
+const machin = Math.PI + Math.SQRT2;
+export { cube, machin };
+
+ +

De cette façon, dans un autre script, on pourra avoir :

+ +
import { cube, machin } from 'mon-module';
+console.log(cube(3)); // 27
+console.log(machin);    // 4.555806215962888
+ +
+

Note : Si l'import est réalisé dans un script HTML, il faut que celui-ci soit chargé avec l'attribut {{htmlattrxref("type")}} "module" : <script type="module" src="./demo.js"></script> sinon il y aura une erreur quant aux origines multiples (CORS).
+ Il n'est pas possible de charger des modules JavaScript via une URL file:// pour des raisons de sécurité (voir CORS également). Il faudra utiliser un serveur HTTP.

+
+ +

Utilisation d'exports par défaut

+ +

Si on souhaite n'exporter qu'une seule valeur ou avoir une valeur de secours pour le module, on peut utiliser un export par défaut :

+ +
// module "mon-module.js"
+export default function cube(x) {
+  return x * x * x;
+}
+
+ +

Alors, dans un autre script, il sera facile d'importer l'export par défaut :

+ +
import cube from './mon-module.js';
+console.log(cube(3)); // 27
+
+ +

Notez qu'il n'est pas possible d'utiliser var, let ou const avec export default.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaire
{{SpecName('ES2015', '#sec-exports', 'Exports')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ESDraft', '#sec-exports', 'Exports')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.export")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/for-await...of/index.html b/files/fr/web/javascript/reference/statements/for-await...of/index.html deleted file mode 100644 index 131c9c4ef3..0000000000 --- a/files/fr/web/javascript/reference/statements/for-await...of/index.html +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: for await...of -slug: Web/JavaScript/Reference/Statements/for-await...of -tags: - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/for-await...of -original_slug: Web/JavaScript/Reference/Instructions/for-await...of ---- -
{{jsSidebar("Statements")}}
- -

L'instruction for await...of permet de créer une boucle qui parcourt les objets itérables asynchrones de la même façon qu'on parcourt les itérables synchrones (tels que les chaînes de caractères ({{jsxref("String")}}), les tableaux {{jsxref("Array")}}, les objets semblables aux tableaux comme {{jsxref("Fonctions/arguments", "arguments")}} ou {{domxref("NodeList")}}), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}}. Cette instruction invoque un mécanisme d'itération spécifique et les instructions à exécuter pour chaque propriété de l'objet.

- -

Syntaxe

- -
for await (variable of iterable) {
-  instruction
-}
-
- -
-
variable
-
À chaque itération, la valeur d'une propriété différente est affectée à variable. Cette variable peut être déclarée avec const, let ou var.
-
iterable
-
Un objet pour lequel on parcourt les propriétés itérables.
-
- -

Exemples

- -

Parcourir des itérables asynchrones

- -
var asyncIterable = {
-  [Symbol.asyncIterator]() {
-    return {
-      i: 0,
-      next() {
-        if (this.i < 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
-
- -

Parcourir des générateurs asynchrones

- -

Les générateurs asynchrones implémentent le protocole d'itérateur asynchrone et on peut donc les parcourir avec for await...of:

- -
async function* asyncGenerator() {
-  var i = 0;
-  while (i < 3) {
-    yield i++;
-  }
-}
-
-(async function() {
-  for await (let num of asyncGenerator()) {
-    console.log(num);
-  }
-})();
-// 0
-// 1
-// 2
- -

Pour prendre un exemple plus concret, on peut parcourir les données fournies par une API avec un générateur asynchrone grâce à for await... of. Dans cet exemple, on commence par créer un itérateur asynchrone à partir d'un flux de données puis on utilise cet itérateur et for await...of afin de calculer la taille de la réponse fournie par l'API :

- -
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();
-  }
-}
-// On récupère les données d'une URL et
-// on calcule la taille de la réponse
-// avec un générateur asynchrone
-async function getResponseSize(url) {
-  const response = await fetch(url);
-  // La taille de la réponse, exprimée en octets.
-  let responseSize = 0;
-  // La boucle for-await-of qui parcourt, de façon asynchrone,
-  // chaque portion de la réponse.
-  for await (const chunk of streamAsyncIterator(response.body)) {
-    responseSize += chunk.length;
-  }
-
-  console.log(`Taille de la réponse : ${responseSize} octets`);
-  return responseSize;
-}
-getResponseSize('https://jsonplaceholder.typicode.com/photos');
- -

Spécifications

- - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'ECMAScript Language: The for-in, for-of, and for-await-of Statements')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.for_await_of")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/for-await...of/index.md b/files/fr/web/javascript/reference/statements/for-await...of/index.md new file mode 100644 index 0000000000..131c9c4ef3 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/for-await...of/index.md @@ -0,0 +1,139 @@ +--- +title: for await...of +slug: Web/JavaScript/Reference/Statements/for-await...of +tags: + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/for-await...of +original_slug: Web/JavaScript/Reference/Instructions/for-await...of +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction for await...of permet de créer une boucle qui parcourt les objets itérables asynchrones de la même façon qu'on parcourt les itérables synchrones (tels que les chaînes de caractères ({{jsxref("String")}}), les tableaux {{jsxref("Array")}}, les objets semblables aux tableaux comme {{jsxref("Fonctions/arguments", "arguments")}} ou {{domxref("NodeList")}}), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}}. Cette instruction invoque un mécanisme d'itération spécifique et les instructions à exécuter pour chaque propriété de l'objet.

+ +

Syntaxe

+ +
for await (variable of iterable) {
+  instruction
+}
+
+ +
+
variable
+
À chaque itération, la valeur d'une propriété différente est affectée à variable. Cette variable peut être déclarée avec const, let ou var.
+
iterable
+
Un objet pour lequel on parcourt les propriétés itérables.
+
+ +

Exemples

+ +

Parcourir des itérables asynchrones

+ +
var asyncIterable = {
+  [Symbol.asyncIterator]() {
+    return {
+      i: 0,
+      next() {
+        if (this.i < 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
+
+ +

Parcourir des générateurs asynchrones

+ +

Les générateurs asynchrones implémentent le protocole d'itérateur asynchrone et on peut donc les parcourir avec for await...of:

+ +
async function* asyncGenerator() {
+  var i = 0;
+  while (i < 3) {
+    yield i++;
+  }
+}
+
+(async function() {
+  for await (let num of asyncGenerator()) {
+    console.log(num);
+  }
+})();
+// 0
+// 1
+// 2
+ +

Pour prendre un exemple plus concret, on peut parcourir les données fournies par une API avec un générateur asynchrone grâce à for await... of. Dans cet exemple, on commence par créer un itérateur asynchrone à partir d'un flux de données puis on utilise cet itérateur et for await...of afin de calculer la taille de la réponse fournie par l'API :

+ +
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();
+  }
+}
+// On récupère les données d'une URL et
+// on calcule la taille de la réponse
+// avec un générateur asynchrone
+async function getResponseSize(url) {
+  const response = await fetch(url);
+  // La taille de la réponse, exprimée en octets.
+  let responseSize = 0;
+  // La boucle for-await-of qui parcourt, de façon asynchrone,
+  // chaque portion de la réponse.
+  for await (const chunk of streamAsyncIterator(response.body)) {
+    responseSize += chunk.length;
+  }
+
+  console.log(`Taille de la réponse : ${responseSize} octets`);
+  return responseSize;
+}
+getResponseSize('https://jsonplaceholder.typicode.com/photos');
+ +

Spécifications

+ + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'ECMAScript Language: The for-in, for-of, and for-await-of Statements')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.for_await_of")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/for...in/index.html b/files/fr/web/javascript/reference/statements/for...in/index.html deleted file mode 100644 index 09e460472d..0000000000 --- a/files/fr/web/javascript/reference/statements/for...in/index.html +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: for...in -slug: Web/JavaScript/Reference/Statements/for...in -tags: - - Instruction - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/for...in -original_slug: Web/JavaScript/Reference/Instructions/for...in ---- -
{{jsSidebar("Statements")}}
- -

L'instruction for...in permet d'itérer sur les propriétés énumérables d'un objet qui ne sont pas des symboles. Pour chaque propriété obtenue, on exécute une instruction (ou plusieurs grâce à un {{jsxref("Instructions/bloc","bloc","",1)}} d'instructions).

- -
{{EmbedInteractiveExample("pages/js/statement-forin.html")}}
- -

Syntaxe

- -
for (variable in objet) {
-  instructions
-}
- -
-
variable
-
Un nom de propriété différent est assigné à la variable à chaque itération de la boucle.
-
objet
-
L'objet dont les propriétés énumérables et qui ne sont pas des symboles sont parcourues par la boucle.
-
- -

Description

- -

Une boucle for...in ne parcourt que les propriétés énumérables et qui ne sont pas des symboles. Les objets qui ont été créés par des constructeurs intégrés comme Array et Object ont hérité de propriétés non énumérables de Object.prototype et String.prototype comme les méthodes {{jsxref("String.prototype.indexOf","indexOf()")}} du type {{jsxref("String")}} ou {{jsxref("Object.prototype.toString","toString()")}} depuis {{jsxref("Object")}}. La boucle parcourera toutes les propriétés énumérables de l'objet et aussi celles dont il hérite du prototype du constructeur (les propriétés les plus proches de l'objet dans la chaîne des prototypes primeront sur les propriétés des prototypes).

- -

Les propriétés ajoutées, modifiées ou supprimées

- -

Une boucle for...in parcourt les propriétés d'un objet dans un ordre arbitraire (voir l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}} pour plus d'explications quant à l'impossibilité de se fier à un tel ordre, au moins dans le cas où on souhaite gérer plusieurs navigateurs).

- -

Si une propriété est modifiée dans une des itérations de la boucle et que la boucle itère ensuite sur cette propriété, sa valeur sera celle qui a été modifiée. Une propriété qui a été supprimée avant que la boucle n'itère sur celle-là ne sera pas dans la boucle. Les propriétés qui ont été ajoutées à l'objet pendant la boucle peuvent être ou ne pas être pris en compte.

- -

Une bonne pratique consiste à ne pas ajouter, modifier ou supprimer une propriété d'un objet lors d'une itération qui ne concerne pas cette propriété. Il n'y a aucune certitude concernant la prise en compte d'une propriété ajoutée lors d'une telle boucle et il en va de même pour savoir si on a visité une propriété avant ou après qu'elle ait été modifiée ou de savoir si une itération de la boucle concernera une propriété avant que celle-ci soit supprimée.

- -

Utiliser for...in et parcourir un tableau

- -
-

Note : for...in ne doit pas être utilisée pour parcourir un {{jsxref("Array")}} lorsque l'ordre des éléments est important.

-
- -

Les éléments des indices d'un tableau sont des propriétés énumérables dont les noms sont des entiers, excepté cela, elles sont en tout point identiques aux propriétés des objets en général. Ici aussi, il n'y a aucune certitude que for...in renvoie les indices dans un ordre particulier. Cette instruction listera également les propriétés énumérables dont les noms ne sont pas des entiers et celles qui sont héritées.

- -

L'ordre dans lequel le parcours est effectué dépend de l'implémentation. Dans le cas d'un parcours de tableau utilisant for...in, on pourrait très bien avoir un ordre qui ne soit pas le même entre les différents environnements. Pour cette raison, il est préférable d'utiliser une boucle {{jsxref("Instructions/for","for")}} utilisant un compteur numérique (ou {{jsxref("Array.prototype.forEach","Array.forEach()")}} ou encore {{jsxref("Instructions/for...of","for...of")}}) lorsqu'on souhaite parcourir des tableaux dans un ordre bien défini.

- -

Itérer uniquement sur les propriétés non héritées

- -

Si on souhaite ne parcourir que les propriétés propres d'un objet et pas celles rattachées à ses prototypes, on peut utiliser la méthode {{jsxref("Object.getOwnPropertyNames()")}} ou bien effectuer un test grâce à la méthode {{jsxref("Object.prototype.hasOwnProperty()")}} voire avec {{jsxref("Object.prototype.propertyIsEnumerable()")}}

- -

Exemples

- -

La boucle for...in qui suit utilise parcourt l'objet obj et ses propriétés énumérables qui ne sont pas des symboles en fournissant la chaîne de caractères qui décrit le nom de la propriété et sa valeur.

- -
var obj = {a:1, b:2, c:3};
-
-for (var prop in obj) {
-  console.log(`obj.${prop} = ${obj[prop]}`);
-}
-
-// Affiche dans la console :
-// "obj.a = 1"
-// "obj.b = 2"
-// "obj.c = 3"
- -

La fonction qui suit utilise {{jsxref("Object.hasOwnProperty", "hasOwnProperty()")}} pour ne pas afficher les propriétés héritées :

- -
var triangle = {a:1, b:2, c:3};
-
-function TriangleCouleur() {
-  this.couleur = "rouge";
-}
-
-TriangleCouleur.prototype = triangle;
-
-var obj = new TriangleCouleur();
-
-for (var prop in obj) {
-  if( obj.hasOwnProperty( prop ) ) {
-    console.log(`obj.${prop} = ${obj[prop]}`);
-  }
-}
-
-// Affichera dans la console :
-// "obj.couleur = rouge"
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1', '#sec-12.6.3', 'for...in statement')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-12.6.4', 'for...in statement')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-for-in-and-for-of-statements', 'for...in statement')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'for...in statement')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.for_in")}}

- -

Expressions avec initialisateur

- -

Avant SpiderMonkey 40 {{geckoRelease(40)}}, il était possible d'utiliser un initialisateur (i=0) dans un boucle for...in :

- -
var obj = {a:1, b:2, c:3};
-for(var i=0 in obj) {
-  console.log(obj[i]);
-}
-// 1
-// 2
-// 3
-
- -

Ce comportement non-standard a été retiré avec la version 40. Cela provoquera désormais une exception {{jsxref("SyntaxError")}} ("for-in loop head declarations may not have initializers") en mode strict (cf. {{bug(748550)}} et {{bug(1164741)}}).

- -

Les autres moteurs, tels que v8 (Chrome), Chakra (IE/Edge) et JSC (WebKit/Safari) recherchent également comment retirer ce comportement non standard.

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/for...in/index.md b/files/fr/web/javascript/reference/statements/for...in/index.md new file mode 100644 index 0000000000..09e460472d --- /dev/null +++ b/files/fr/web/javascript/reference/statements/for...in/index.md @@ -0,0 +1,156 @@ +--- +title: for...in +slug: Web/JavaScript/Reference/Statements/for...in +tags: + - Instruction + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/for...in +original_slug: Web/JavaScript/Reference/Instructions/for...in +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction for...in permet d'itérer sur les propriétés énumérables d'un objet qui ne sont pas des symboles. Pour chaque propriété obtenue, on exécute une instruction (ou plusieurs grâce à un {{jsxref("Instructions/bloc","bloc","",1)}} d'instructions).

+ +
{{EmbedInteractiveExample("pages/js/statement-forin.html")}}
+ +

Syntaxe

+ +
for (variable in objet) {
+  instructions
+}
+ +
+
variable
+
Un nom de propriété différent est assigné à la variable à chaque itération de la boucle.
+
objet
+
L'objet dont les propriétés énumérables et qui ne sont pas des symboles sont parcourues par la boucle.
+
+ +

Description

+ +

Une boucle for...in ne parcourt que les propriétés énumérables et qui ne sont pas des symboles. Les objets qui ont été créés par des constructeurs intégrés comme Array et Object ont hérité de propriétés non énumérables de Object.prototype et String.prototype comme les méthodes {{jsxref("String.prototype.indexOf","indexOf()")}} du type {{jsxref("String")}} ou {{jsxref("Object.prototype.toString","toString()")}} depuis {{jsxref("Object")}}. La boucle parcourera toutes les propriétés énumérables de l'objet et aussi celles dont il hérite du prototype du constructeur (les propriétés les plus proches de l'objet dans la chaîne des prototypes primeront sur les propriétés des prototypes).

+ +

Les propriétés ajoutées, modifiées ou supprimées

+ +

Une boucle for...in parcourt les propriétés d'un objet dans un ordre arbitraire (voir l'opérateur {{jsxref("Opérateurs/L_opérateur_delete","delete")}} pour plus d'explications quant à l'impossibilité de se fier à un tel ordre, au moins dans le cas où on souhaite gérer plusieurs navigateurs).

+ +

Si une propriété est modifiée dans une des itérations de la boucle et que la boucle itère ensuite sur cette propriété, sa valeur sera celle qui a été modifiée. Une propriété qui a été supprimée avant que la boucle n'itère sur celle-là ne sera pas dans la boucle. Les propriétés qui ont été ajoutées à l'objet pendant la boucle peuvent être ou ne pas être pris en compte.

+ +

Une bonne pratique consiste à ne pas ajouter, modifier ou supprimer une propriété d'un objet lors d'une itération qui ne concerne pas cette propriété. Il n'y a aucune certitude concernant la prise en compte d'une propriété ajoutée lors d'une telle boucle et il en va de même pour savoir si on a visité une propriété avant ou après qu'elle ait été modifiée ou de savoir si une itération de la boucle concernera une propriété avant que celle-ci soit supprimée.

+ +

Utiliser for...in et parcourir un tableau

+ +
+

Note : for...in ne doit pas être utilisée pour parcourir un {{jsxref("Array")}} lorsque l'ordre des éléments est important.

+
+ +

Les éléments des indices d'un tableau sont des propriétés énumérables dont les noms sont des entiers, excepté cela, elles sont en tout point identiques aux propriétés des objets en général. Ici aussi, il n'y a aucune certitude que for...in renvoie les indices dans un ordre particulier. Cette instruction listera également les propriétés énumérables dont les noms ne sont pas des entiers et celles qui sont héritées.

+ +

L'ordre dans lequel le parcours est effectué dépend de l'implémentation. Dans le cas d'un parcours de tableau utilisant for...in, on pourrait très bien avoir un ordre qui ne soit pas le même entre les différents environnements. Pour cette raison, il est préférable d'utiliser une boucle {{jsxref("Instructions/for","for")}} utilisant un compteur numérique (ou {{jsxref("Array.prototype.forEach","Array.forEach()")}} ou encore {{jsxref("Instructions/for...of","for...of")}}) lorsqu'on souhaite parcourir des tableaux dans un ordre bien défini.

+ +

Itérer uniquement sur les propriétés non héritées

+ +

Si on souhaite ne parcourir que les propriétés propres d'un objet et pas celles rattachées à ses prototypes, on peut utiliser la méthode {{jsxref("Object.getOwnPropertyNames()")}} ou bien effectuer un test grâce à la méthode {{jsxref("Object.prototype.hasOwnProperty()")}} voire avec {{jsxref("Object.prototype.propertyIsEnumerable()")}}

+ +

Exemples

+ +

La boucle for...in qui suit utilise parcourt l'objet obj et ses propriétés énumérables qui ne sont pas des symboles en fournissant la chaîne de caractères qui décrit le nom de la propriété et sa valeur.

+ +
var obj = {a:1, b:2, c:3};
+
+for (var prop in obj) {
+  console.log(`obj.${prop} = ${obj[prop]}`);
+}
+
+// Affiche dans la console :
+// "obj.a = 1"
+// "obj.b = 2"
+// "obj.c = 3"
+ +

La fonction qui suit utilise {{jsxref("Object.hasOwnProperty", "hasOwnProperty()")}} pour ne pas afficher les propriétés héritées :

+ +
var triangle = {a:1, b:2, c:3};
+
+function TriangleCouleur() {
+  this.couleur = "rouge";
+}
+
+TriangleCouleur.prototype = triangle;
+
+var obj = new TriangleCouleur();
+
+for (var prop in obj) {
+  if( obj.hasOwnProperty( prop ) ) {
+    console.log(`obj.${prop} = ${obj[prop]}`);
+  }
+}
+
+// Affichera dans la console :
+// "obj.couleur = rouge"
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1', '#sec-12.6.3', 'for...in statement')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-12.6.4', 'for...in statement')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-for-in-and-for-of-statements', 'for...in statement')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'for...in statement')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.for_in")}}

+ +

Expressions avec initialisateur

+ +

Avant SpiderMonkey 40 {{geckoRelease(40)}}, il était possible d'utiliser un initialisateur (i=0) dans un boucle for...in :

+ +
var obj = {a:1, b:2, c:3};
+for(var i=0 in obj) {
+  console.log(obj[i]);
+}
+// 1
+// 2
+// 3
+
+ +

Ce comportement non-standard a été retiré avec la version 40. Cela provoquera désormais une exception {{jsxref("SyntaxError")}} ("for-in loop head declarations may not have initializers") en mode strict (cf. {{bug(748550)}} et {{bug(1164741)}}).

+ +

Les autres moteurs, tels que v8 (Chrome), Chakra (IE/Edge) et JSC (WebKit/Safari) recherchent également comment retirer ce comportement non standard.

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/for...of/index.html b/files/fr/web/javascript/reference/statements/for...of/index.html deleted file mode 100644 index dfda033855..0000000000 --- a/files/fr/web/javascript/reference/statements/for...of/index.html +++ /dev/null @@ -1,313 +0,0 @@ ---- -title: for...of -slug: Web/JavaScript/Reference/Statements/for...of -tags: - - ECMAScript 2015 - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/for...of -original_slug: Web/JavaScript/Reference/Instructions/for...of ---- -
{{jsSidebar("Statements")}}
- -

L'instruction for...of permet de créer une boucle {{jsxref("Array")}} qui parcourt un {{jsxref("Les_protocoles_iteration","objet itérable","#Le_protocole_.C2.AB_it.C3.A9rable_.C2.BB",1)}} (ce qui inclut les objets {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, {{jsxref("String")}}, {{jsxref("TypedArray")}}, l'objet {{jsxref("Fonctions/arguments","arguments")}}, etc.) et qui permet d'exécuter une ou plusieurs instructions pour la valeur de chaque propriété.

- -
{{EmbedInteractiveExample("pages/js/statement-forof.html")}}
- -

Syntaxe

- -
for (variable of iterable)
-  instruction
-
- -
-
variable
-
À chaque itération, la valeur d'une propriété différente est affectée à variable (cette variable peut être déclarée avec const, let ou var).
-
iterable
-
L'objet dont on parcourt les propriétés énumérables.
-
instruction
-
Une instruction à exécuter pour chaque propriété, cette instruction peut être composée de plusieurs instructions en utilisant un {{jsxref("Instructions/bloc","bloc","",1)}} d'instructions.
-
- -

Exemples

- -

Utiliser for...of sur un tableau

- -
let tableauItérable = [1, 2, 3];
-
-for (let valeur of tableauItérable) {
-  console.log(valeur);
-}
-// 1
-// 2
-// 3
- -

Si la variable n'est pas réaffectée dans la boucle, on pourra également utiliser const à la place de let :

- -
let tableauItérable = [1, 2, 3];
-
-for (const valeur of tableauItérable) {
-  console.log(valeur);
-}
-// 1
-// 2
-// 3
- -

Parcourir une chaîne de caractères avec for...of

- -
let iterable = 'pixel';
-
-for (let valeur of iterable) {
-  console.log(valeur);
-}
-// p
-// i
-// x
-// e
-// l
- -

Parcourir un tableau typé ({{jsxref("TypedArray")}})

- -
let iterable = new Uint8Array([0x00, 0xff]);
-
-for (let valeur of iterable) {
-  console.log(valeur);
-}
-// 0
-// 255
- -

Parcourir une {{jsxref("Map")}}

- -
let iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);
-
-for (let element of iterable) {
-  console.log(element);
-}
-// ['a', 1]
-// ['b', 2]
-// ['c', 3]
-
-for (let [clef, valeur] of iterable) {
-  console.log(valeur);
-}
-// 1
-// 2
-// 3
- -

Utiliser Array.prototype.forEach()

- -

Pour obtenir les mêmes valeurs qu'avec une boucle for...of, on peut utiliser la méthode {{jsxref("Array.prototype.forEach()")}} :

- -
let arr = [3, 5, 7];
-arr.toto = "coucou";
-
-arr.forEach(function (element, index) {
-  console.log(element); // affiche "3", "5", "7"
-  console.log(index);  // affiche "0", "1", "2"
-});
-
-// ou avec Object.keys()
-
-Object.keys(arr).forEach(function (element, index) {
-  console.log(arr[element]); // affiche "3", "5", "7", "coucou"
-  console.log(arr[index]);  // affiche "3", "5", "7", undefined
-});
- -

Parcourir l'objet arguments

- -

Il est possible de parcourir l'objet {{jsxref("Fonctions/arguments", "arguments")}} afin d'examiner l'ensemble des paramètres passés à la fonction :

- -
(function() {
-  for (let argument of arguments){
-    console.log(argument);
-  }
-})(1, 2, 3);
-
-// 1
-// 2
-// 3
-
- -

Parcourir des collections DOM

- -

Il est possible de parcourir des collections DOM telles que {{domxref("NodeList")}}. Dans cet exemple, on ajoute une classe read aux paragraphes qui sont des descendants directs d'un article :

- -
// Note : Cela ne fonctionnera que pour les plates-formes
-// qui implémentent NodeList.prototype[Symbol.iterator]
-let articleParagraphs = document.querySelectorAll("article > p");
-
-for (let paragraph of articleParagraphs) {
-  paragraph.classList.add("read");
-}
-
- -

Clôturer les itérateurs

- -

Dans les boucles for...of, on peut provoquer la fin de l'itérateur avec break, continue, throw, ou return. Dans ces cas, l'itérateur est fermé.

- -
function* toto() {
-  yield 1;
-  yield 2;
-  yield 3;
-};
-
-for (let o of toto()) {
-  console.log(o);
-  break; // L'itérateur est fermé
-}
-
- -

Itérer sur les générateurs

- -

Grâce à cette instruction, on peut également itérer sur les {{jsxref("Instructions/function*","générateurs","",1)}} :

- -
function* fibonacci() { // une fonction génératrice
-  let [prev, curr] = [0, 1];
-  while (true) {
-    [prev, curr] = [curr, prev + curr];
-    yield curr;
-  }
-}
-
-for (let n of fibonacci()) {
-  console.log(n);
-  // on arrête la séquence à 1000
-  if (n >= 1000){
-    break;
-  }
-}
-
- -

Itérer sur les autres objets itérables

- -

Il est aussi possible d'itérer sur un objet qui implémente le protocole itérable de façon explicite :

- -
var iterable = {
-  [Symbol.iterator]() {
-    return {
-      i: 0,
-      next() {
-        if (this.i < 3) {
-          return { value: this.i++, done: false };
-        }
-        return { value: undefined, done: true };
-      }
-    };
-  }
-};
-
-for (let value of iterable) {
-  console.log(value);
-}
-console.log("fini !");
-// 0
-// 1
-// 2
- -

Les différences entre for...of et for...in

- -

Les deux instructions for...in et for...of permettent de parcourir un ensemble. Mais elles ne parcourent pas le même ensemble.

- -

L'instruction {{jsxref("Instructions/for...in", "for...in")}} permet de parcourir les propriétés énumérables d'un objet dans un ordre arbitraire.

- -

L'instruction for...of permet quant à elle de parcourir les données contenues dans l'objet itérable visé.

- -

Dans l'exemple qui suit, on illustre la différence de comportement entre une boucle for...of et une boucle for...in utilisées sur un tableau ({{jsxref("Array")}}).

- -
Object.prototype.objCustom = function() {};
-Array.prototype.arrCustom = function() {};
-
-let iterable = [3, 5, 7];
-iterable.toto = 'coucou';
-
-for (let i in iterable) {
-  console.log(i); // affiche 0, 1, 2, "toto",
-                  // "arrCustom", "objCustom"
-}
-
-for (let i in iterable) {
-  if (iterable.hasOwnProperty(i)) {
-    console.log(i); // affiche 0, 1, 2, "toto"
-  }
-}
-
-for (let i of iterable) {
-  console.log(i); // affiche 3, 5, 7
-}
-
- -

Chaque objet héritera de la propriété objCustom et chaque objet qui est un tableau ({{jsxref("Array")}}) héritera de la propriété arrCustom car on les ajoute aux prototypes {{jsxref("Object.prototype")}} et {{jsxref("Array.prototype")}}. L'objet iterable hérite donc des propriétés objCustom et arrCustom grâce à l'héritage et à la chaîne de prototypes.

- -
for (let i in iterable) {
-  console.log(i); // affiche 0, 1, 2, "toto",
-                  // "arrCustom" et "objCustom"
-}
- -

Cette boucle ne parcourt que les propriétés énumérables de l'objet iterable dans un ordre arbitraire. Les éléments du tableau 3, 5, 7 ou hello ne sont pas affichés car ce ne sont pas des propriétés (et encore moins des propriétés énumérables). En revanche, on retrouve bien les indices du tableau et les propriétés arrCustom et objCustom. Pour décrire plus précisément ce comportement, vous pouvez consulter {{jsxref("Instructions/for...in", "for...in", "#/fr/docs/Web/JavaScript/Reference/Instructions/for...in#Utiliser_for...in_et_parcourir_un_tableau")}}.

- -
for (let i in iterable) {
-  if (iterable.hasOwnProperty(i)) {
-    console.log(i); // affiche 0, 1, 2, "toto"
-  }
-}
- -

Cette boucle ressemble à la première mais ajoute la méthode {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}} qui permet de vérifier si la propriété énumérable recensée est directement disponible sur l'objet (c'est-à-dire si elle n'est pas héritée). La console affiche donc les propriétés 0, 1, 2 et toto car ce sont des propriétés directement rattachées à l'objet iterable. En revanche, les propriétés arrCustom et objCustom ne sont pas affichées car elles proviennent de l'héritage.

- -
for (let i of iterable) {
-  console.log(i); // affiche 3, 5, 7
-}
- -

Cette boucle parcourt les valeurs définies comme itérables par l'objet itérable et dans ce cas ce sont les éléments du tableau 3, 5, 7 et pas les propriétés de l'objet.

- -

Attention à ne pas réutiliser les générateurs

- -

Les générateurs ne doivent pas être réutilisés, même lorsque la boucle for...of a été interrompue (par exemple lorsque {{jsxref("Instructions/break","break")}} est utilisé). Lorsqu'on quitte une boucle, le générateur est clôturé et si on l'utilise à nouveau, il ne fournira aucun résultat. Firefox n'a pas encore implémenté ce comportement standard (cf. {{bug("1147371")}}).

- -
var gen = (function *(){
-  yield 1;
-  yield 2;
-  yield 3;
-})();
-for (let o of gen) {
-  console.log(o);
-  break; // L'itérateur est fermé
-}
-
-// Le générateur ne doit pas être réutilisé !
-for (let o of gen){
-  console.log(o); // Ceci n'est jamais exécuté
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-for-in-and-for-of-statements', 'instruction for...of')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'instruction for...of')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.for_of")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/for...of/index.md b/files/fr/web/javascript/reference/statements/for...of/index.md new file mode 100644 index 0000000000..dfda033855 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/for...of/index.md @@ -0,0 +1,313 @@ +--- +title: for...of +slug: Web/JavaScript/Reference/Statements/for...of +tags: + - ECMAScript 2015 + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/for...of +original_slug: Web/JavaScript/Reference/Instructions/for...of +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction for...of permet de créer une boucle {{jsxref("Array")}} qui parcourt un {{jsxref("Les_protocoles_iteration","objet itérable","#Le_protocole_.C2.AB_it.C3.A9rable_.C2.BB",1)}} (ce qui inclut les objets {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, {{jsxref("String")}}, {{jsxref("TypedArray")}}, l'objet {{jsxref("Fonctions/arguments","arguments")}}, etc.) et qui permet d'exécuter une ou plusieurs instructions pour la valeur de chaque propriété.

+ +
{{EmbedInteractiveExample("pages/js/statement-forof.html")}}
+ +

Syntaxe

+ +
for (variable of iterable)
+  instruction
+
+ +
+
variable
+
À chaque itération, la valeur d'une propriété différente est affectée à variable (cette variable peut être déclarée avec const, let ou var).
+
iterable
+
L'objet dont on parcourt les propriétés énumérables.
+
instruction
+
Une instruction à exécuter pour chaque propriété, cette instruction peut être composée de plusieurs instructions en utilisant un {{jsxref("Instructions/bloc","bloc","",1)}} d'instructions.
+
+ +

Exemples

+ +

Utiliser for...of sur un tableau

+ +
let tableauItérable = [1, 2, 3];
+
+for (let valeur of tableauItérable) {
+  console.log(valeur);
+}
+// 1
+// 2
+// 3
+ +

Si la variable n'est pas réaffectée dans la boucle, on pourra également utiliser const à la place de let :

+ +
let tableauItérable = [1, 2, 3];
+
+for (const valeur of tableauItérable) {
+  console.log(valeur);
+}
+// 1
+// 2
+// 3
+ +

Parcourir une chaîne de caractères avec for...of

+ +
let iterable = 'pixel';
+
+for (let valeur of iterable) {
+  console.log(valeur);
+}
+// p
+// i
+// x
+// e
+// l
+ +

Parcourir un tableau typé ({{jsxref("TypedArray")}})

+ +
let iterable = new Uint8Array([0x00, 0xff]);
+
+for (let valeur of iterable) {
+  console.log(valeur);
+}
+// 0
+// 255
+ +

Parcourir une {{jsxref("Map")}}

+ +
let iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);
+
+for (let element of iterable) {
+  console.log(element);
+}
+// ['a', 1]
+// ['b', 2]
+// ['c', 3]
+
+for (let [clef, valeur] of iterable) {
+  console.log(valeur);
+}
+// 1
+// 2
+// 3
+ +

Utiliser Array.prototype.forEach()

+ +

Pour obtenir les mêmes valeurs qu'avec une boucle for...of, on peut utiliser la méthode {{jsxref("Array.prototype.forEach()")}} :

+ +
let arr = [3, 5, 7];
+arr.toto = "coucou";
+
+arr.forEach(function (element, index) {
+  console.log(element); // affiche "3", "5", "7"
+  console.log(index);  // affiche "0", "1", "2"
+});
+
+// ou avec Object.keys()
+
+Object.keys(arr).forEach(function (element, index) {
+  console.log(arr[element]); // affiche "3", "5", "7", "coucou"
+  console.log(arr[index]);  // affiche "3", "5", "7", undefined
+});
+ +

Parcourir l'objet arguments

+ +

Il est possible de parcourir l'objet {{jsxref("Fonctions/arguments", "arguments")}} afin d'examiner l'ensemble des paramètres passés à la fonction :

+ +
(function() {
+  for (let argument of arguments){
+    console.log(argument);
+  }
+})(1, 2, 3);
+
+// 1
+// 2
+// 3
+
+ +

Parcourir des collections DOM

+ +

Il est possible de parcourir des collections DOM telles que {{domxref("NodeList")}}. Dans cet exemple, on ajoute une classe read aux paragraphes qui sont des descendants directs d'un article :

+ +
// Note : Cela ne fonctionnera que pour les plates-formes
+// qui implémentent NodeList.prototype[Symbol.iterator]
+let articleParagraphs = document.querySelectorAll("article > p");
+
+for (let paragraph of articleParagraphs) {
+  paragraph.classList.add("read");
+}
+
+ +

Clôturer les itérateurs

+ +

Dans les boucles for...of, on peut provoquer la fin de l'itérateur avec break, continue, throw, ou return. Dans ces cas, l'itérateur est fermé.

+ +
function* toto() {
+  yield 1;
+  yield 2;
+  yield 3;
+};
+
+for (let o of toto()) {
+  console.log(o);
+  break; // L'itérateur est fermé
+}
+
+ +

Itérer sur les générateurs

+ +

Grâce à cette instruction, on peut également itérer sur les {{jsxref("Instructions/function*","générateurs","",1)}} :

+ +
function* fibonacci() { // une fonction génératrice
+  let [prev, curr] = [0, 1];
+  while (true) {
+    [prev, curr] = [curr, prev + curr];
+    yield curr;
+  }
+}
+
+for (let n of fibonacci()) {
+  console.log(n);
+  // on arrête la séquence à 1000
+  if (n >= 1000){
+    break;
+  }
+}
+
+ +

Itérer sur les autres objets itérables

+ +

Il est aussi possible d'itérer sur un objet qui implémente le protocole itérable de façon explicite :

+ +
var iterable = {
+  [Symbol.iterator]() {
+    return {
+      i: 0,
+      next() {
+        if (this.i < 3) {
+          return { value: this.i++, done: false };
+        }
+        return { value: undefined, done: true };
+      }
+    };
+  }
+};
+
+for (let value of iterable) {
+  console.log(value);
+}
+console.log("fini !");
+// 0
+// 1
+// 2
+ +

Les différences entre for...of et for...in

+ +

Les deux instructions for...in et for...of permettent de parcourir un ensemble. Mais elles ne parcourent pas le même ensemble.

+ +

L'instruction {{jsxref("Instructions/for...in", "for...in")}} permet de parcourir les propriétés énumérables d'un objet dans un ordre arbitraire.

+ +

L'instruction for...of permet quant à elle de parcourir les données contenues dans l'objet itérable visé.

+ +

Dans l'exemple qui suit, on illustre la différence de comportement entre une boucle for...of et une boucle for...in utilisées sur un tableau ({{jsxref("Array")}}).

+ +
Object.prototype.objCustom = function() {};
+Array.prototype.arrCustom = function() {};
+
+let iterable = [3, 5, 7];
+iterable.toto = 'coucou';
+
+for (let i in iterable) {
+  console.log(i); // affiche 0, 1, 2, "toto",
+                  // "arrCustom", "objCustom"
+}
+
+for (let i in iterable) {
+  if (iterable.hasOwnProperty(i)) {
+    console.log(i); // affiche 0, 1, 2, "toto"
+  }
+}
+
+for (let i of iterable) {
+  console.log(i); // affiche 3, 5, 7
+}
+
+ +

Chaque objet héritera de la propriété objCustom et chaque objet qui est un tableau ({{jsxref("Array")}}) héritera de la propriété arrCustom car on les ajoute aux prototypes {{jsxref("Object.prototype")}} et {{jsxref("Array.prototype")}}. L'objet iterable hérite donc des propriétés objCustom et arrCustom grâce à l'héritage et à la chaîne de prototypes.

+ +
for (let i in iterable) {
+  console.log(i); // affiche 0, 1, 2, "toto",
+                  // "arrCustom" et "objCustom"
+}
+ +

Cette boucle ne parcourt que les propriétés énumérables de l'objet iterable dans un ordre arbitraire. Les éléments du tableau 3, 5, 7 ou hello ne sont pas affichés car ce ne sont pas des propriétés (et encore moins des propriétés énumérables). En revanche, on retrouve bien les indices du tableau et les propriétés arrCustom et objCustom. Pour décrire plus précisément ce comportement, vous pouvez consulter {{jsxref("Instructions/for...in", "for...in", "#/fr/docs/Web/JavaScript/Reference/Instructions/for...in#Utiliser_for...in_et_parcourir_un_tableau")}}.

+ +
for (let i in iterable) {
+  if (iterable.hasOwnProperty(i)) {
+    console.log(i); // affiche 0, 1, 2, "toto"
+  }
+}
+ +

Cette boucle ressemble à la première mais ajoute la méthode {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}} qui permet de vérifier si la propriété énumérable recensée est directement disponible sur l'objet (c'est-à-dire si elle n'est pas héritée). La console affiche donc les propriétés 0, 1, 2 et toto car ce sont des propriétés directement rattachées à l'objet iterable. En revanche, les propriétés arrCustom et objCustom ne sont pas affichées car elles proviennent de l'héritage.

+ +
for (let i of iterable) {
+  console.log(i); // affiche 3, 5, 7
+}
+ +

Cette boucle parcourt les valeurs définies comme itérables par l'objet itérable et dans ce cas ce sont les éléments du tableau 3, 5, 7 et pas les propriétés de l'objet.

+ +

Attention à ne pas réutiliser les générateurs

+ +

Les générateurs ne doivent pas être réutilisés, même lorsque la boucle for...of a été interrompue (par exemple lorsque {{jsxref("Instructions/break","break")}} est utilisé). Lorsqu'on quitte une boucle, le générateur est clôturé et si on l'utilise à nouveau, il ne fournira aucun résultat. Firefox n'a pas encore implémenté ce comportement standard (cf. {{bug("1147371")}}).

+ +
var gen = (function *(){
+  yield 1;
+  yield 2;
+  yield 3;
+})();
+for (let o of gen) {
+  console.log(o);
+  break; // L'itérateur est fermé
+}
+
+// Le générateur ne doit pas être réutilisé !
+for (let o of gen){
+  console.log(o); // Ceci n'est jamais exécuté
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-for-in-and-for-of-statements', 'instruction for...of')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'instruction for...of')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.for_of")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/for/index.html b/files/fr/web/javascript/reference/statements/for/index.html deleted file mode 100644 index 7b8da7b5f4..0000000000 --- a/files/fr/web/javascript/reference/statements/for/index.html +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: for -slug: Web/JavaScript/Reference/Statements/for -tags: - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/for -original_slug: Web/JavaScript/Reference/Instructions/for ---- -
{{jsSidebar("Statements")}}
- -

L'instruction for crée une boucle composée de trois expressions optionnelles séparées par des points-virgules et encadrées entre des parenthèses qui sont suivies par une instruction (généralement une instruction de bloc) à exécuter dans la boucle.

- -
{{EmbedInteractiveExample("pages/js/statement-for.html")}}
- -

Syntaxe

- -
for ([initialisation]; [condition]; [expression_finale])
-   instruction
-
- -

Paramètres

- -
-
initialisation
-
Une expression (pouvant être une expression d'affectation) ou une déclaration de variable. Cette expression est évaluée une fois avant que la boucle démarre. On utilise généralement une variable qui agit comme un compteur. Cette expression peut éventuellement déclarer de nouvelles variables avec le mot-clé var ou let. Les variables déclarées avec var se situent dans la même portée que la boucle for (elles ne sont pas locales au sein de la boucle), les variables déclarées avec let sont locales à la boucle. Le résultat de l'expression n'est pas utilisé.
-
condition
-
Une expression qui est évaluée avant chaque itération de la boucle. Si cette expression est vérifiée, l'instruction est exécutée. Ce test est optionnel. S'il n'est pas présent, la condition sera toujours vérifiée. Si l'expression n'est pas vérifiée (i.e. vaut false), l'exécution se poursuivra à la première expression qui suit la boucle for.
-
expression_finale
-
Une expression qui est évaluée à la fin de chaque itération. Cela se produit avant l'évaluation de l'expression condition. Cette expression est généralement utilisée pour mettre à jour ou incrémenter le compteur qu'est la variable d'initialisation.
-
instruction
-
Une instruction qui est exécutée tant que la condition de la boucle est vérifiée. Afin d'exécuter plusieurs instructions au sein d'une telle boucle, il faudra utiliser une instruction de bloc ({ ... }) qui regroupera ces différentes instructions.
-
- -

Exemples

- -

Utiliser for

- -

L'instruction for qui suit débute en déclarant la variable i et en l'initialisant à 0. Elle vérifie que i est inférieur (strictement) à 9 et exécute ensuite les deux instructions contenues dans la boucle, ensuite elle incrémente i de 1, ce qui sera fait à chaque passage dans la boucle.

- -
for (var i = 0; i < 9; i++) {
-   n += i;
-   myfunc(n);
-}
-
- -

Expressions optionnelles pour for

- -

Les trois expressions qui composent l'instruction for sont optionnelles :

- -

Par exemple, le bloc pour l'initialisation peut ne pas être utilisé :

- -
var i = 0;
-for (; i < 9; i++) {
-    console.log(i);
-    // d'autres instructions
-}
-
- -

De même que pour le bloc d'initialisation, l'expression de condition est optionnelle. Attention, si l'expression de condition n'est pas utilisée, il faut s'assurer d'interrompre la boucle et de ne pas créer une boucle infinie.

- -
for (var i = 0;; i++) {
-   console.log(i);
-   if (i > 3) break;
-   // d'autres instructions
-}
- -

Les trois blocs d'expressions peuvent être omis. Encore une fois, il faudra utiliser une instruction {{jsxref("Instructions/break")}} pour terminer la boucle. Si le test se fait sur un seuil, on veillera à incrémenter la variable pour que la condition d'arrêt modifiée soit respectée.

- -
var i = 0;
-
-for (;;) {
-  if (i > 3) break;
-  console.log(i);
-  i++;
-}
-
- -

Utiliser for avec une instruction vide

- -

L'instruction for qui suit calcule le décalage d'un nœud et le fait dans la section qui correspond à l'expression finale. Il n'y a donc aucun intérêt à ajouter une instruction ou un bloc d'instruction dans la boucle pour faire ce calcul.

- -
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("Décalage de position : \"" + sId + "\" element:\n left: " + nLeft + "px;\n top: " + nTop + "px;");
-}
- -

Note : Dans cas, où on n'utilise pas la section d'instruction, il faut mettre un point-virgule immédiatement après la déclaration de la boucle.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-for-statement', 'for statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-for-statement', 'instruction for')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.6.3', 'instruction for')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-12.6.3', 'instruction for')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.6.2', 'instruction for')}}{{Spec2('ES1')}}Définition initiale
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.for")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/for/index.md b/files/fr/web/javascript/reference/statements/for/index.md new file mode 100644 index 0000000000..7b8da7b5f4 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/for/index.md @@ -0,0 +1,145 @@ +--- +title: for +slug: Web/JavaScript/Reference/Statements/for +tags: + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/for +original_slug: Web/JavaScript/Reference/Instructions/for +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction for crée une boucle composée de trois expressions optionnelles séparées par des points-virgules et encadrées entre des parenthèses qui sont suivies par une instruction (généralement une instruction de bloc) à exécuter dans la boucle.

+ +
{{EmbedInteractiveExample("pages/js/statement-for.html")}}
+ +

Syntaxe

+ +
for ([initialisation]; [condition]; [expression_finale])
+   instruction
+
+ +

Paramètres

+ +
+
initialisation
+
Une expression (pouvant être une expression d'affectation) ou une déclaration de variable. Cette expression est évaluée une fois avant que la boucle démarre. On utilise généralement une variable qui agit comme un compteur. Cette expression peut éventuellement déclarer de nouvelles variables avec le mot-clé var ou let. Les variables déclarées avec var se situent dans la même portée que la boucle for (elles ne sont pas locales au sein de la boucle), les variables déclarées avec let sont locales à la boucle. Le résultat de l'expression n'est pas utilisé.
+
condition
+
Une expression qui est évaluée avant chaque itération de la boucle. Si cette expression est vérifiée, l'instruction est exécutée. Ce test est optionnel. S'il n'est pas présent, la condition sera toujours vérifiée. Si l'expression n'est pas vérifiée (i.e. vaut false), l'exécution se poursuivra à la première expression qui suit la boucle for.
+
expression_finale
+
Une expression qui est évaluée à la fin de chaque itération. Cela se produit avant l'évaluation de l'expression condition. Cette expression est généralement utilisée pour mettre à jour ou incrémenter le compteur qu'est la variable d'initialisation.
+
instruction
+
Une instruction qui est exécutée tant que la condition de la boucle est vérifiée. Afin d'exécuter plusieurs instructions au sein d'une telle boucle, il faudra utiliser une instruction de bloc ({ ... }) qui regroupera ces différentes instructions.
+
+ +

Exemples

+ +

Utiliser for

+ +

L'instruction for qui suit débute en déclarant la variable i et en l'initialisant à 0. Elle vérifie que i est inférieur (strictement) à 9 et exécute ensuite les deux instructions contenues dans la boucle, ensuite elle incrémente i de 1, ce qui sera fait à chaque passage dans la boucle.

+ +
for (var i = 0; i < 9; i++) {
+   n += i;
+   myfunc(n);
+}
+
+ +

Expressions optionnelles pour for

+ +

Les trois expressions qui composent l'instruction for sont optionnelles :

+ +

Par exemple, le bloc pour l'initialisation peut ne pas être utilisé :

+ +
var i = 0;
+for (; i < 9; i++) {
+    console.log(i);
+    // d'autres instructions
+}
+
+ +

De même que pour le bloc d'initialisation, l'expression de condition est optionnelle. Attention, si l'expression de condition n'est pas utilisée, il faut s'assurer d'interrompre la boucle et de ne pas créer une boucle infinie.

+ +
for (var i = 0;; i++) {
+   console.log(i);
+   if (i > 3) break;
+   // d'autres instructions
+}
+ +

Les trois blocs d'expressions peuvent être omis. Encore une fois, il faudra utiliser une instruction {{jsxref("Instructions/break")}} pour terminer la boucle. Si le test se fait sur un seuil, on veillera à incrémenter la variable pour que la condition d'arrêt modifiée soit respectée.

+ +
var i = 0;
+
+for (;;) {
+  if (i > 3) break;
+  console.log(i);
+  i++;
+}
+
+ +

Utiliser for avec une instruction vide

+ +

L'instruction for qui suit calcule le décalage d'un nœud et le fait dans la section qui correspond à l'expression finale. Il n'y a donc aucun intérêt à ajouter une instruction ou un bloc d'instruction dans la boucle pour faire ce calcul.

+ +
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("Décalage de position : \"" + sId + "\" element:\n left: " + nLeft + "px;\n top: " + nTop + "px;");
+}
+ +

Note : Dans cas, où on n'utilise pas la section d'instruction, il faut mettre un point-virgule immédiatement après la déclaration de la boucle.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-for-statement', 'for statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-for-statement', 'instruction for')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.6.3', 'instruction for')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-12.6.3', 'instruction for')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.6.2', 'instruction for')}}{{Spec2('ES1')}}Définition initiale
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.for")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/function/index.html b/files/fr/web/javascript/reference/statements/function/index.html deleted file mode 100644 index 9a27ccb426..0000000000 --- a/files/fr/web/javascript/reference/statements/function/index.html +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: function -slug: Web/JavaScript/Reference/Statements/function -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/function -original_slug: Web/JavaScript/Reference/Instructions/function ---- -
{{jsSidebar("Statements")}}
- -

La déclaration function (ou l'instruction function) permet de définir une fonction et les paramètres que celle-ci utilise.

- -
{{EmbedInteractiveExample("pages/js/statement-function.html")}}
- - - -

Il est également possible de définir des fonctions en utilisant le constructeur {{jsxref("Function")}} et une {{jsxref("Opérateurs/L_opérateur_function", "expression de fonction","",1)}}.

- -

Syntaxe

- -
function nom([param1[, param2,[..., paramN]]]) {
-   [instructions]
-}
-
- -
-
nom
-
Le nom de la fonction.
-
paramN
-
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments (cela peut varier en fonction des moteurs).
-
instructions
-
Les instructions qui constituent le corps de la fonction.
-
- -

Description

- -

Une fonction créée via une déclaration de fonction est un objet Function et possède toutes les caractéristiques (propriétés, méthodes et comportement) d'un objet Function. Voir la page {{jsxref("Function")}} pour plus d'informations sur ces caractéristiques.

- -

Une fonction peut également être créée en utilisant une expression (voir {{jsxref("Opérateurs/L_opérateur_function", "les expressions de fonctions","",1)}}).

- -

Par défaut, une fonction renvoie {{jsxref("undefined")}}. Pour renvoyer une autre valeur en résultat, une fonction doit utiliser une instruction {{jsxref("Instructions/return", "return")}} qui définit la valeur à retourner.

- -

Fonctions créées conditionnellement

- -

Il est possible de déclarer des fonctions de façon conditionnelle (c'est-à-dire qu'on peut placer une instruction de déclaration de fonction au sein d'une instruction if). La plupart des navigateurs, autres que ceux basés sur Gecko, traiteront cette déclaration conditionnelle comme si elle était inconditionnelle (que la condition souhaitée soit vérifiée ou non) (voir cet article (en anglais) pour un aperçu). Pour cette raison, les déclarations de fonctions ne devraient pas être utilisées pour créer des fonctions de façon conditionnelle. Pour ce faire, il faut privilégier les expressions de fonctions.

- -
var remontee = "toto" in this;
-console.log(`'toto' ${remontee ? "est" : "n'est pas"} remontée. typeof toto vaut ${typeof toto}`);
-if (false) {
-  function toto(){ return 1; }
-}
-
-// Pour Chrome:
-// 'toto' est remontée. typeof toto vaut undefined
-//
-// Pour Firefox:
-// 'toto' est remontée. typeof toto vaut undefined
-//
-// Pour Edge:
-// 'toto' n'est pas remontée. typeof toto vaut undefined
-//
-// Pour Safari:
-// 'toto' est remontée. typeof toto vaut function
-
- -

On obtient exactement les mêmes résultats si la condition est vérifiée (ici avec true) :

- -
var remontee = "toto" in this;
-console.log(`'toto' ${remontee ? "est" : "n'est pas"} remontée. typeof toto vaut ${typeof toto}`);
-if (true) {
-  function toto(){ return 1; }
-}
-
-// Pour Chrome:
-// 'toto' est remontée. typeof toto vaut undefined
-//
-// Pour Firefox:
-// 'toto' est remontée. typeof toto vaut undefined
-//
-// Pour Edge:
-// 'toto' n'est pas remontée. typeof toto vaut undefined
-//
-// Pour Safari:
-// 'toto' est remontée. typeof toto vaut function
- -

La « remontée » des déclarations de fonction

- -

Lorsqu'on utilise une déclaration de fonction pour créer une fonction, la définition de la fonction est « remontée ». Il devient donc possible d'utiliser la fonction avant de l'avoir déclarée :

- -
remontée(); // affiche "toto" dans la console
-
-function remontée() {
-  console.log("toto");
-}
-
- -

On notera que les {{jsxref("Opérateurs/L_opérateur_function", "expressions de fonctions","",1)}} ne sont pas remontées :

- -
nonRemontée(); // TypeError: nonRemontée is not a function
-
-var nonRemontée = function() {
-   console.log("truc");
-};
-
- -

Exemples

- -

Utiliser function

- -

Dans l'exemple qui suit, on déclare une fonction qui renvoie le total des ventes en fonction des nombres d'unités vendues pour les produits a, b, et c.

- -
function calc_ventes(nb_produits_a, nb_produits_b, nb_produits_c) {
-   return nb_produits_a*79 + nb_produits_b * 129 + nb_produits_c * 699;
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-function-definitions', 'Définition de fonction')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-13', 'Définition de fonction')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-13', 'Définition de fonction')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-13', 'Définition de fonction')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.function")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/function/index.md b/files/fr/web/javascript/reference/statements/function/index.md new file mode 100644 index 0000000000..9a27ccb426 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/function/index.md @@ -0,0 +1,172 @@ +--- +title: function +slug: Web/JavaScript/Reference/Statements/function +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/function +original_slug: Web/JavaScript/Reference/Instructions/function +--- +
{{jsSidebar("Statements")}}
+ +

La déclaration function (ou l'instruction function) permet de définir une fonction et les paramètres que celle-ci utilise.

+ +
{{EmbedInteractiveExample("pages/js/statement-function.html")}}
+ + + +

Il est également possible de définir des fonctions en utilisant le constructeur {{jsxref("Function")}} et une {{jsxref("Opérateurs/L_opérateur_function", "expression de fonction","",1)}}.

+ +

Syntaxe

+ +
function nom([param1[, param2,[..., paramN]]]) {
+   [instructions]
+}
+
+ +
+
nom
+
Le nom de la fonction.
+
paramN
+
Le nom d'un argument à passer à la fonction. Une fonction peut avoir jusqu'à 255 arguments (cela peut varier en fonction des moteurs).
+
instructions
+
Les instructions qui constituent le corps de la fonction.
+
+ +

Description

+ +

Une fonction créée via une déclaration de fonction est un objet Function et possède toutes les caractéristiques (propriétés, méthodes et comportement) d'un objet Function. Voir la page {{jsxref("Function")}} pour plus d'informations sur ces caractéristiques.

+ +

Une fonction peut également être créée en utilisant une expression (voir {{jsxref("Opérateurs/L_opérateur_function", "les expressions de fonctions","",1)}}).

+ +

Par défaut, une fonction renvoie {{jsxref("undefined")}}. Pour renvoyer une autre valeur en résultat, une fonction doit utiliser une instruction {{jsxref("Instructions/return", "return")}} qui définit la valeur à retourner.

+ +

Fonctions créées conditionnellement

+ +

Il est possible de déclarer des fonctions de façon conditionnelle (c'est-à-dire qu'on peut placer une instruction de déclaration de fonction au sein d'une instruction if). La plupart des navigateurs, autres que ceux basés sur Gecko, traiteront cette déclaration conditionnelle comme si elle était inconditionnelle (que la condition souhaitée soit vérifiée ou non) (voir cet article (en anglais) pour un aperçu). Pour cette raison, les déclarations de fonctions ne devraient pas être utilisées pour créer des fonctions de façon conditionnelle. Pour ce faire, il faut privilégier les expressions de fonctions.

+ +
var remontee = "toto" in this;
+console.log(`'toto' ${remontee ? "est" : "n'est pas"} remontée. typeof toto vaut ${typeof toto}`);
+if (false) {
+  function toto(){ return 1; }
+}
+
+// Pour Chrome:
+// 'toto' est remontée. typeof toto vaut undefined
+//
+// Pour Firefox:
+// 'toto' est remontée. typeof toto vaut undefined
+//
+// Pour Edge:
+// 'toto' n'est pas remontée. typeof toto vaut undefined
+//
+// Pour Safari:
+// 'toto' est remontée. typeof toto vaut function
+
+ +

On obtient exactement les mêmes résultats si la condition est vérifiée (ici avec true) :

+ +
var remontee = "toto" in this;
+console.log(`'toto' ${remontee ? "est" : "n'est pas"} remontée. typeof toto vaut ${typeof toto}`);
+if (true) {
+  function toto(){ return 1; }
+}
+
+// Pour Chrome:
+// 'toto' est remontée. typeof toto vaut undefined
+//
+// Pour Firefox:
+// 'toto' est remontée. typeof toto vaut undefined
+//
+// Pour Edge:
+// 'toto' n'est pas remontée. typeof toto vaut undefined
+//
+// Pour Safari:
+// 'toto' est remontée. typeof toto vaut function
+ +

La « remontée » des déclarations de fonction

+ +

Lorsqu'on utilise une déclaration de fonction pour créer une fonction, la définition de la fonction est « remontée ». Il devient donc possible d'utiliser la fonction avant de l'avoir déclarée :

+ +
remontée(); // affiche "toto" dans la console
+
+function remontée() {
+  console.log("toto");
+}
+
+ +

On notera que les {{jsxref("Opérateurs/L_opérateur_function", "expressions de fonctions","",1)}} ne sont pas remontées :

+ +
nonRemontée(); // TypeError: nonRemontée is not a function
+
+var nonRemontée = function() {
+   console.log("truc");
+};
+
+ +

Exemples

+ +

Utiliser function

+ +

Dans l'exemple qui suit, on déclare une fonction qui renvoie le total des ventes en fonction des nombres d'unités vendues pour les produits a, b, et c.

+ +
function calc_ventes(nb_produits_a, nb_produits_b, nb_produits_c) {
+   return nb_produits_a*79 + nb_produits_b * 129 + nb_produits_c * 699;
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-function-definitions', 'Définition de fonction')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-13', 'Définition de fonction')}}{{Spec2('ES5.1')}} 
{{SpecName('ES3', '#sec-13', 'Définition de fonction')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-13', 'Définition de fonction')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.function")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/function_star_/index.html b/files/fr/web/javascript/reference/statements/function_star_/index.html deleted file mode 100644 index 2d13a1b8ae..0000000000 --- a/files/fr/web/javascript/reference/statements/function_star_/index.html +++ /dev/null @@ -1,241 +0,0 @@ ---- -title: function* -slug: Web/JavaScript/Reference/Statements/function* -tags: - - ECMAScript 2015 - - Function - - Generator - - Instruction - - Iterator - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/function* -original_slug: Web/JavaScript/Reference/Instructions/function* ---- -
{{jsSidebar("Statements")}}
- -

La déclaration function* (le mot-clé function suivi par un astérisque) permet de définir un générateur (aussi appelé une fonction génératrice) (un générateur est un objet {{jsxref("Generator")}}).

- -
{{EmbedInteractiveExample("pages/js/statement-functionasterisk.html")}}
- - - -
-

Il est également possible de définir un générateur en utilisant le constructeur {{jsxref("GeneratorFunction")}} et une expression {{jsxref("Opérateurs/function*", "function*")}}.

-
- -

Syntaxe

- -
function* nom([param1[, param2[, ... paramN]]]) {
-   instructions
-}
-
- -
-
nom
-
Le nom de la fonction.
-
paramN
-
Le nom d'un paramètre formel passé à la fonction.
-
instructions
-
Les instructions qui constituent le corps de la fonction.
-
- -

Description

- -

Les générateurs sont des fonctions qu'il est possible de quitter puis de reprendre. Le contexte d'un générateur (les liaisons avec ses variables) est sauvegardé entre les reprises successives.

- -

Les générateurs, combinés avec les promesses, sont des outils de programmation asynchrones puissants qui permettent de réduire les inconvénients causés par les callbacks (fonctions de rappel) et l'inversion de contrôle.

- -

Lorsqu'on appelle une fonction génératrice, son corps n'est pas exécuté immédiatement, c'est un {{jsxref("Les_protocoles_iteration","itérateur","#Le_protocole_.C2.AB_it.C3.A9rateur_.C2.BB",1)}} qui est renvoyé pour la fonction. Lorsque la méthode next() de l'itérateur est appelée, le corps de la fonction génératrice est utilisé jusqu'à ce que la première expression {{jsxref("Opérateurs/yield", "yield")}} soit trouvée. Cette expression définira la valeur à renvoyer pour l'itérateur. Si on utilise {{jsxref("Opérateurs/yield*", "yield*")}}, on pourra déléguer la génération des valeurs à une autre fonction génératrice. La méthode next() renvoie un objet dont la propriété value contient la valeur générée et une propriété done qui indique si le générateur a produit sa dernière valeur ou non. Lorsqu'on appelle la méthode next() avec un argument, cela reprendra l'exécution de la fonction génératrice et remplacera la valeur de l'expression yield (là où l'exécution avait été interrompue) avec la valeur de l'argument passé à next().

- -

On peut utiliser une instruction return dans un générateur. Lorsque cette instruction sera exécutée, le générateur sera terminé (done vaudra true). La valeur renvoyée par l'instruction return sera la valeur de terminaison du générateur. Une fois qu'un générateur est terminé, il ne peut plus produire d'autres valeurs.

- -

À l'instar d'une instruction return, une exception levée à l'intérieur du générateur entraînera la terminaison du générateur sauf si cette exception est interceptée. Lorsqu'un générateur est terminé, les appels suivants à next() n'exécuteront aucun code provenant du générateur, ils renverront simplement un objet de la forme {value: undefined, done: true}.

- -

Exemples

- -

Exemple simple

- -
function* creerID(){
-  var index = 0;
-  while (true) {
-    yield index++;
-  }
-}
-
-var gen = creerID();
-
-console.log(gen.next().value); // 0
-console.log(gen.next().value); // 1
-console.log(gen.next().value); // 2
-console.log(gen.next().value); // 3
-
- -

Exemple utilisant des arguments

- -
function* logGenerator() {
-  console.log(yield);
-  console.log(yield);
-  console.log(yield);
-}
-
-var gen = logGenerator();
-
-// le premier appel à next exécute la fonction depuis son
-// début jusqu'au premier yield rencontré
-gen.next();
-gen.next('bretzel');    // bretzel
-gen.next('california'); // california
-gen.next('mayonnaise'); // mayonnaise
-
- -

Exemple utilisant yield*

- -
function* autreGenerateur(i) {
-  yield i + 1;
-  yield i + 2;
-  yield i + 3;
-}
-function* generateur(i){
-  yield i;
-  yield* autreGenerateur(i);
-  yield i + 10;
-}
-
-var gen = generateur(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
-
- -

Utilisation de return

- -
function* yieldAndReturn() {
-  yield "Y";
-  return "R";
-  yield "inaccessible";
-}
-
-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 }
-
- -

Utiliser un générateur comme propriété

- -
const monObj = {
-  *generator () {
-    yield "a";
-    yield "b";
-  }
-}
-
-const gen = monObj.generator();
-
-console.log(gen.next()); // { value: "a", done: false }
-console.log(gen.next()); // { value: "b", done: false }
-console.log(gen.next()); // { value: undefined, done: true }
- -

Utiliser un générateur comme propriété calculée

- -
class Toto {
-  *[Symbol.iterator] () {
-    yield 1;
-    yield 2;
-  }
-}
-
-const monObj = {
-  *[Symbol.iterator] () {
-    yield "a";
-    yield "b";
-  }
-}
-
-console.log(Array.from(new Toto)); // [1, 2]
-console.log(Array.from(monObj));   // [ "a", "b"]
- -

Les générateurs ne sont pas constructibles

- -
function* f() {}
-var obj = new f; // lève une TypeError: f n'est pas un constructeur
-
- -

Générateur défini avec une expression

- -
const toto = function* () {
-  yield 10;
-  yield 20;
-};
-const truc = toto();
-console.log(truc.next()); // {value: 10, done: false}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ES2016', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ES2016')}}Les générateurs ne doivent pas gérer la trappe [[Construct]] et déclencher une exception s'ils sont utilisés avec new.
{{SpecName('ESDraft', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.generator_function")}}

- -

Notes spécifiques à Firefox

- -

Les générateurs et itérateurs dans Firefox pour les versions antérieures à Firefox 26

- -

Les anciennes versions de Firefox implémentaient une ancienne version de la proposition pour les générateurs. Dans cette version, les générateurs étaient définis avec le mot-clé function (sans astérisque) et étaient différents selon d'autres aspects. Voir la page sur les générateurs historiques pour plus d'informations.

- -

IteratorResult au lieu d'une exception

- -

À partir de Gecko 29 {{geckoRelease(29)}}, lorsqu'un générateur est terminé, il ne renvoie plus une exception {{jsxref("TypeError")}} « generator has already finished ». Il renvoie désormais un objet IteratorResult comme { value: undefined, done: true } ({{bug(958951)}}).

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/function_star_/index.md b/files/fr/web/javascript/reference/statements/function_star_/index.md new file mode 100644 index 0000000000..2d13a1b8ae --- /dev/null +++ b/files/fr/web/javascript/reference/statements/function_star_/index.md @@ -0,0 +1,241 @@ +--- +title: function* +slug: Web/JavaScript/Reference/Statements/function* +tags: + - ECMAScript 2015 + - Function + - Generator + - Instruction + - Iterator + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/function* +original_slug: Web/JavaScript/Reference/Instructions/function* +--- +
{{jsSidebar("Statements")}}
+ +

La déclaration function* (le mot-clé function suivi par un astérisque) permet de définir un générateur (aussi appelé une fonction génératrice) (un générateur est un objet {{jsxref("Generator")}}).

+ +
{{EmbedInteractiveExample("pages/js/statement-functionasterisk.html")}}
+ + + +
+

Il est également possible de définir un générateur en utilisant le constructeur {{jsxref("GeneratorFunction")}} et une expression {{jsxref("Opérateurs/function*", "function*")}}.

+
+ +

Syntaxe

+ +
function* nom([param1[, param2[, ... paramN]]]) {
+   instructions
+}
+
+ +
+
nom
+
Le nom de la fonction.
+
paramN
+
Le nom d'un paramètre formel passé à la fonction.
+
instructions
+
Les instructions qui constituent le corps de la fonction.
+
+ +

Description

+ +

Les générateurs sont des fonctions qu'il est possible de quitter puis de reprendre. Le contexte d'un générateur (les liaisons avec ses variables) est sauvegardé entre les reprises successives.

+ +

Les générateurs, combinés avec les promesses, sont des outils de programmation asynchrones puissants qui permettent de réduire les inconvénients causés par les callbacks (fonctions de rappel) et l'inversion de contrôle.

+ +

Lorsqu'on appelle une fonction génératrice, son corps n'est pas exécuté immédiatement, c'est un {{jsxref("Les_protocoles_iteration","itérateur","#Le_protocole_.C2.AB_it.C3.A9rateur_.C2.BB",1)}} qui est renvoyé pour la fonction. Lorsque la méthode next() de l'itérateur est appelée, le corps de la fonction génératrice est utilisé jusqu'à ce que la première expression {{jsxref("Opérateurs/yield", "yield")}} soit trouvée. Cette expression définira la valeur à renvoyer pour l'itérateur. Si on utilise {{jsxref("Opérateurs/yield*", "yield*")}}, on pourra déléguer la génération des valeurs à une autre fonction génératrice. La méthode next() renvoie un objet dont la propriété value contient la valeur générée et une propriété done qui indique si le générateur a produit sa dernière valeur ou non. Lorsqu'on appelle la méthode next() avec un argument, cela reprendra l'exécution de la fonction génératrice et remplacera la valeur de l'expression yield (là où l'exécution avait été interrompue) avec la valeur de l'argument passé à next().

+ +

On peut utiliser une instruction return dans un générateur. Lorsque cette instruction sera exécutée, le générateur sera terminé (done vaudra true). La valeur renvoyée par l'instruction return sera la valeur de terminaison du générateur. Une fois qu'un générateur est terminé, il ne peut plus produire d'autres valeurs.

+ +

À l'instar d'une instruction return, une exception levée à l'intérieur du générateur entraînera la terminaison du générateur sauf si cette exception est interceptée. Lorsqu'un générateur est terminé, les appels suivants à next() n'exécuteront aucun code provenant du générateur, ils renverront simplement un objet de la forme {value: undefined, done: true}.

+ +

Exemples

+ +

Exemple simple

+ +
function* creerID(){
+  var index = 0;
+  while (true) {
+    yield index++;
+  }
+}
+
+var gen = creerID();
+
+console.log(gen.next().value); // 0
+console.log(gen.next().value); // 1
+console.log(gen.next().value); // 2
+console.log(gen.next().value); // 3
+
+ +

Exemple utilisant des arguments

+ +
function* logGenerator() {
+  console.log(yield);
+  console.log(yield);
+  console.log(yield);
+}
+
+var gen = logGenerator();
+
+// le premier appel à next exécute la fonction depuis son
+// début jusqu'au premier yield rencontré
+gen.next();
+gen.next('bretzel');    // bretzel
+gen.next('california'); // california
+gen.next('mayonnaise'); // mayonnaise
+
+ +

Exemple utilisant yield*

+ +
function* autreGenerateur(i) {
+  yield i + 1;
+  yield i + 2;
+  yield i + 3;
+}
+function* generateur(i){
+  yield i;
+  yield* autreGenerateur(i);
+  yield i + 10;
+}
+
+var gen = generateur(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
+
+ +

Utilisation de return

+ +
function* yieldAndReturn() {
+  yield "Y";
+  return "R";
+  yield "inaccessible";
+}
+
+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 }
+
+ +

Utiliser un générateur comme propriété

+ +
const monObj = {
+  *generator () {
+    yield "a";
+    yield "b";
+  }
+}
+
+const gen = monObj.generator();
+
+console.log(gen.next()); // { value: "a", done: false }
+console.log(gen.next()); // { value: "b", done: false }
+console.log(gen.next()); // { value: undefined, done: true }
+ +

Utiliser un générateur comme propriété calculée

+ +
class Toto {
+  *[Symbol.iterator] () {
+    yield 1;
+    yield 2;
+  }
+}
+
+const monObj = {
+  *[Symbol.iterator] () {
+    yield "a";
+    yield "b";
+  }
+}
+
+console.log(Array.from(new Toto)); // [1, 2]
+console.log(Array.from(monObj));   // [ "a", "b"]
+ +

Les générateurs ne sont pas constructibles

+ +
function* f() {}
+var obj = new f; // lève une TypeError: f n'est pas un constructeur
+
+ +

Générateur défini avec une expression

+ +
const toto = function* () {
+  yield 10;
+  yield 20;
+};
+const truc = toto();
+console.log(truc.next()); // {value: 10, done: false}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ES2015')}}Définition initiale
{{SpecName('ES2016', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ES2016')}}Les générateurs ne doivent pas gérer la trappe [[Construct]] et déclencher une exception s'ils sont utilisés avec new.
{{SpecName('ESDraft', '#sec-generator-function-definitions', 'function*')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.generator_function")}}

+ +

Notes spécifiques à Firefox

+ +

Les générateurs et itérateurs dans Firefox pour les versions antérieures à Firefox 26

+ +

Les anciennes versions de Firefox implémentaient une ancienne version de la proposition pour les générateurs. Dans cette version, les générateurs étaient définis avec le mot-clé function (sans astérisque) et étaient différents selon d'autres aspects. Voir la page sur les générateurs historiques pour plus d'informations.

+ +

IteratorResult au lieu d'une exception

+ +

À partir de Gecko 29 {{geckoRelease(29)}}, lorsqu'un générateur est terminé, il ne renvoie plus une exception {{jsxref("TypeError")}} « generator has already finished ». Il renvoie désormais un objet IteratorResult comme { value: undefined, done: true } ({{bug(958951)}}).

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/if...else/index.html b/files/fr/web/javascript/reference/statements/if...else/index.html deleted file mode 100644 index 9af4f80a14..0000000000 --- a/files/fr/web/javascript/reference/statements/if...else/index.html +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: if...else -slug: Web/JavaScript/Reference/Statements/if...else -tags: - - JavaScript - - Reference - - Statement -browser-compat: javascript.statements.if_else -translation_of: Web/JavaScript/Reference/Statements/if...else -original_slug: Web/JavaScript/Reference/Instructions/if...else ---- -
{{jsSidebar("Statements")}}
- -

L'instruction if exécute une instruction si une condition donnée est vraie ou équivalente à vrai. Si la condition n'est pas vérifiée, il est possible d'utiliser une autre instruction.

- -
{{EmbedInteractiveExample("pages/js/statement-ifelse.html")}}
- -

Syntaxe

- -
if (condition)
-  statement1
-} else {
-  statement2
-}
- -
-
condition
-
Une expression qui est évaluée à true ou false.
-
statement1
-
L'instruction qui est exécutée si la condition est vérifiée (i.e. est évaluée à true). Cette instruction peut être n'importe quelle instruction valide, y compris une imbrication d'autres instructions if. Pour exécuter plusieurs instructions, on pourra utiliser un bloc d'instructions ({ ... }) qui permet de les regrouper. Pour n'exécuter aucune instruction, on pourra utiliser l'instruction vide.
-
statement2
-
Si la clause else existe, l'instruction qui est exécutée si la condition est évaluée à false. Comme pour la première, cette instruction peut être n'importe quelle instruction valide : une autre instruction if imbriquée, un bloc d'instruction, une instruction vide, etc.
-
- -

Description

- -

Plusieurs instructions if...else peuvent être imbriquées afin de créer une structure else if (on notera qu'il n'y a pas de mot-clé elseif en JavaScript).

- -
if (condition1)
-  instruction1
-else if (condition2)
-  instruction2
-else if (condition3)
-  instruction3
-...
-else
-  instructionN
-
- -

Si on indente correctement le code, on retrouve la structure exactement équivalente :

- -
if (condition1)
-  instruction1
-else
-  if (condition2)
-    instruction2
-  else
-    if (condition3)
-...
-
- -

Afin d'exécuter plusieurs instructions, on utilisera un {{jsxref("Statements/block","bloc d'instructions","",1)}} ({ ... }) pour regrouper les instructions souhaitées. Utiliser les blocs d'instructions est une bonne façon d'organiser son code, surtout lorsque celui-ci comporte des instructions conditionnelles imbriquées.

- -
if (condition) {
-  instructions1
-} else {
-  instructions2
-}
-
- -

Attention à ne pas confondre les valeurs booléennes « primitives » true et false avec les valeurs true et false d'un objet Boolean. Toute valeur qui n'est pas false, undefined, null, 0, -0, NaN ou la chaîne vide (""), et tout objet, y compris un objet Boolean dont la valeur est false, seront évalués à true lors d'une instruction conditionnelle if. Ainsi :

- -
var b = new Boolean(false);
-if (b) // la condition sera évaluée à true
-
- -

Exemples

- -

Utiliser if...else

- -
if (cipher_char == from_char) {
-  result = result + to_char;
-  x++;
-} else {
-  result = result + clear_char;
-}
- -

Utiliser else if

- -

Bien qu'il n'y ait pas de mot-clé elseif dans le langage JavaScript, il est possible d'imbriquer des instructions if...else à la suite les une des autres en plaçant un espace entre else et le début de l'instruction if imbriquée :

- -
if (x > 50){
-  // faire quelque chose
-} else if (x > 5) {
-  // faire autre chose
-} else {
-  // faire encore autre chose
-}
- -

Affectation de variable dans l'expression conditionnelle

- -

Il est conseillé de ne pas utiliser d'affectation au sein des expressions conditionnelles. En effet, l'affectation peut être confondue avec un test d'égalité lorsqu'on analyse le code. Il ne faut donc pas utiliser le code suivant (bien qu'il fonctionne) :

- -
if (x = y) {
-  /* exécuter les instructions */
-}
- -

S'il est nécessaire d'effectuer une telle affectation, une pratique courante consiste à ajouter des parenthèses de cette manière afin d'alerter le lecteur du code (exemple à utiliser) :

- -
if ((x = y)) {
-  /* exécuter les instructions */
-}
- -

Spécifications

- -{{Specifications}} - -

Compatibilité des navigateurs

- -

{{Compat}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/if...else/index.md b/files/fr/web/javascript/reference/statements/if...else/index.md new file mode 100644 index 0000000000..9af4f80a14 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/if...else/index.md @@ -0,0 +1,128 @@ +--- +title: if...else +slug: Web/JavaScript/Reference/Statements/if...else +tags: + - JavaScript + - Reference + - Statement +browser-compat: javascript.statements.if_else +translation_of: Web/JavaScript/Reference/Statements/if...else +original_slug: Web/JavaScript/Reference/Instructions/if...else +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction if exécute une instruction si une condition donnée est vraie ou équivalente à vrai. Si la condition n'est pas vérifiée, il est possible d'utiliser une autre instruction.

+ +
{{EmbedInteractiveExample("pages/js/statement-ifelse.html")}}
+ +

Syntaxe

+ +
if (condition)
+  statement1
+} else {
+  statement2
+}
+ +
+
condition
+
Une expression qui est évaluée à true ou false.
+
statement1
+
L'instruction qui est exécutée si la condition est vérifiée (i.e. est évaluée à true). Cette instruction peut être n'importe quelle instruction valide, y compris une imbrication d'autres instructions if. Pour exécuter plusieurs instructions, on pourra utiliser un bloc d'instructions ({ ... }) qui permet de les regrouper. Pour n'exécuter aucune instruction, on pourra utiliser l'instruction vide.
+
statement2
+
Si la clause else existe, l'instruction qui est exécutée si la condition est évaluée à false. Comme pour la première, cette instruction peut être n'importe quelle instruction valide : une autre instruction if imbriquée, un bloc d'instruction, une instruction vide, etc.
+
+ +

Description

+ +

Plusieurs instructions if...else peuvent être imbriquées afin de créer une structure else if (on notera qu'il n'y a pas de mot-clé elseif en JavaScript).

+ +
if (condition1)
+  instruction1
+else if (condition2)
+  instruction2
+else if (condition3)
+  instruction3
+...
+else
+  instructionN
+
+ +

Si on indente correctement le code, on retrouve la structure exactement équivalente :

+ +
if (condition1)
+  instruction1
+else
+  if (condition2)
+    instruction2
+  else
+    if (condition3)
+...
+
+ +

Afin d'exécuter plusieurs instructions, on utilisera un {{jsxref("Statements/block","bloc d'instructions","",1)}} ({ ... }) pour regrouper les instructions souhaitées. Utiliser les blocs d'instructions est une bonne façon d'organiser son code, surtout lorsque celui-ci comporte des instructions conditionnelles imbriquées.

+ +
if (condition) {
+  instructions1
+} else {
+  instructions2
+}
+
+ +

Attention à ne pas confondre les valeurs booléennes « primitives » true et false avec les valeurs true et false d'un objet Boolean. Toute valeur qui n'est pas false, undefined, null, 0, -0, NaN ou la chaîne vide (""), et tout objet, y compris un objet Boolean dont la valeur est false, seront évalués à true lors d'une instruction conditionnelle if. Ainsi :

+ +
var b = new Boolean(false);
+if (b) // la condition sera évaluée à true
+
+ +

Exemples

+ +

Utiliser if...else

+ +
if (cipher_char == from_char) {
+  result = result + to_char;
+  x++;
+} else {
+  result = result + clear_char;
+}
+ +

Utiliser else if

+ +

Bien qu'il n'y ait pas de mot-clé elseif dans le langage JavaScript, il est possible d'imbriquer des instructions if...else à la suite les une des autres en plaçant un espace entre else et le début de l'instruction if imbriquée :

+ +
if (x > 50){
+  // faire quelque chose
+} else if (x > 5) {
+  // faire autre chose
+} else {
+  // faire encore autre chose
+}
+ +

Affectation de variable dans l'expression conditionnelle

+ +

Il est conseillé de ne pas utiliser d'affectation au sein des expressions conditionnelles. En effet, l'affectation peut être confondue avec un test d'égalité lorsqu'on analyse le code. Il ne faut donc pas utiliser le code suivant (bien qu'il fonctionne) :

+ +
if (x = y) {
+  /* exécuter les instructions */
+}
+ +

S'il est nécessaire d'effectuer une telle affectation, une pratique courante consiste à ajouter des parenthèses de cette manière afin d'alerter le lecteur du code (exemple à utiliser) :

+ +
if ((x = y)) {
+  /* exécuter les instructions */
+}
+ +

Spécifications

+ +{{Specifications}} + +

Compatibilité des navigateurs

+ +

{{Compat}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/import.meta/index.html b/files/fr/web/javascript/reference/statements/import.meta/index.html deleted file mode 100644 index b4316ca46c..0000000000 --- a/files/fr/web/javascript/reference/statements/import.meta/index.html +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: import.meta -slug: Web/JavaScript/Reference/Statements/import.meta -tags: - - JavaScript - - Modules - - Reference -translation_of: Web/JavaScript/Reference/Statements/import.meta -original_slug: Web/JavaScript/Reference/Instructions/import.meta ---- -
{{JSSidebar("Statements")}}
- -

L'objet import.meta est une méta-propriété qui expose des métadonnées d'un module JavaScript spécifiques au contexte. Cet objet contient des informations à propos du module, telles que l'URL du module.

- -

Syntaxe

- -
import.meta
- -

Description

- -

L'objet import.meta se compose d'un mot-clé "import", suivi d'un point, puis du nom de propriété "meta". En temps normal, "import." serait utilisé comme contexte pour un accès à une propriété mais, dans ce cas, "import." n'est pas, à proprement parler, un objet.

- -

L'objet import.meta est créé par l'implémentation ECMAScript avec un prototype qui vaut {{jsxref("null")}}. Cet objet est extensible et ses propriétés sont accessibles en écriture, configurables et énumérables.

- -

Exemples

- -

Soit un module mon-module.js

- -
<script type="module" src="mon-module.js"></script>
-
- -

Il est possible d'accéder aux métadonnées du module grâce à l'objet import.meta.

- -
console.log(import.meta); // { url: "file:///home/user/mon-module.js" }
- -

Cet objet contient une propriété url qui indique l'URL de base du module. Dans le cas des scripts externes, celle-ci sera l'URL à partir de laquelle le script a été obtenu. Pour les scripts écrits dans le document, ce sera l'URL de base du document englobant.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour import.metaNiveau 3Définition initiale.
{{SpecName("HTML WHATWG","webappapis.html#hostgetimportmetaproperties","import.meta")}}{{Spec2("HTML WHATWG")}}Définition des propriétés import.meta en HTML.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.import_meta")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/import.meta/index.md b/files/fr/web/javascript/reference/statements/import.meta/index.md new file mode 100644 index 0000000000..b4316ca46c --- /dev/null +++ b/files/fr/web/javascript/reference/statements/import.meta/index.md @@ -0,0 +1,69 @@ +--- +title: import.meta +slug: Web/JavaScript/Reference/Statements/import.meta +tags: + - JavaScript + - Modules + - Reference +translation_of: Web/JavaScript/Reference/Statements/import.meta +original_slug: Web/JavaScript/Reference/Instructions/import.meta +--- +
{{JSSidebar("Statements")}}
+ +

L'objet import.meta est une méta-propriété qui expose des métadonnées d'un module JavaScript spécifiques au contexte. Cet objet contient des informations à propos du module, telles que l'URL du module.

+ +

Syntaxe

+ +
import.meta
+ +

Description

+ +

L'objet import.meta se compose d'un mot-clé "import", suivi d'un point, puis du nom de propriété "meta". En temps normal, "import." serait utilisé comme contexte pour un accès à une propriété mais, dans ce cas, "import." n'est pas, à proprement parler, un objet.

+ +

L'objet import.meta est créé par l'implémentation ECMAScript avec un prototype qui vaut {{jsxref("null")}}. Cet objet est extensible et ses propriétés sont accessibles en écriture, configurables et énumérables.

+ +

Exemples

+ +

Soit un module mon-module.js

+ +
<script type="module" src="mon-module.js"></script>
+
+ +

Il est possible d'accéder aux métadonnées du module grâce à l'objet import.meta.

+ +
console.log(import.meta); // { url: "file:///home/user/mon-module.js" }
+ +

Cet objet contient une propriété url qui indique l'URL de base du module. Dans le cas des scripts externes, celle-ci sera l'URL à partir de laquelle le script a été obtenu. Pour les scripts écrits dans le document, ce sera l'URL de base du document englobant.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour import.metaNiveau 3Définition initiale.
{{SpecName("HTML WHATWG","webappapis.html#hostgetimportmetaproperties","import.meta")}}{{Spec2("HTML WHATWG")}}Définition des propriétés import.meta en HTML.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.import_meta")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/import/index.html b/files/fr/web/javascript/reference/statements/import/index.html deleted file mode 100644 index e998fe745c..0000000000 --- a/files/fr/web/javascript/reference/statements/import/index.html +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: import -slug: Web/JavaScript/Reference/Statements/import -tags: - - ECMAScript 2015 - - Instruction - - JavaScript - - Modules - - import -translation_of: Web/JavaScript/Reference/Statements/import -original_slug: Web/JavaScript/Reference/Instructions/import ---- -
{{jsSidebar("Statements")}}
- -

L'instruction import est utilisée pour importer des liens qui sont exportés par un autre module. Les modules importés sont interprétés en mode strict dans tous les cas. L'instruction import ne peut pas être utilisée dans les scripts embarqués sauf si ceux-ci proviennent de ressources avec type="module".

- -
-

Note : Il existe également une forme fonctionnelle, import() (cf. ci-après) qui permet d'avoir des chargements dynamiques. La compatibilité ascendante peut être atteinte en utilisant l'attribut nomodule sur la balise {{HTMLElement("script")}}.

-
- -

Syntaxe

- -
import exportParDefaut from "nom-module";
-import * as nom from "nom-module";
-import { export } from "nom-module";
-import { export as alias } from "nom-module";
-import { export1 , export2 } from "nom-module";
-import { export1 , export2 as alias2 , [...] } from "nom-module";
-import exportParDefaut, { export [ , [...] ] } from "nom-module";
-import exportParDefaut, * as nom from "nom-module";
-import "nom-module";
-import { toto , truc } from "nom-module/chemin/vers/fichier-non-exporte";
-let promesse = import("nom-module");
- -
-
exportParDefaut
-
Nom qui fera référence à l'export par défaut du module.
-
nom-module
-
Le module depuis lequel importer. C'est souvent un chemin absolu ou relatif vers le fichier .js contenant le module. Certains empaqueteurs peuvent permettre ou requérir l'utilisation de l'extension ; vérifier votre environnement. Seules les String à apostrophes simples ou doubles sont autorisées.
-
nom
-
Nom de l'objet module qui sera utilisé comme un genre d'espace de noms lors de références aux imports.
-
export, exportN
-
Nom des exports à importer.
-
alias, aliasN
-
Noms qui feront référence aux imports nommés.
-
- -

Description

- -

Le paramètre nom est le nom de l'"objet module" qui sera utilisé comme un genre d'espace de noms lors de références aux exports. Les paramètres export indiquent les exports nommés individuellement, tandis que la syntaxe import * as nom les importe tous. Ci-dessous d'autres exemples pour clarifier la syntaxe.

- -

Importer l'intégralité du contenu d'un module

- -

Ce qui suit insère monModule dans la portée courante, contenant tous les exports  du module dans le fichier situé dans /modules/mon-module.js.

- -
import * as monModule from '/modules/mon-module.js';
-
- -

Ici, accéder aux exports signifie utiliser le nom du module (ici monModule) comme un espace de noms. Par exemple, si le module importé ci-dessus incluait un export faireToutesLesChosesIncroyables(), vous l'écririez comme ceci :

- -
monModule.faireToutesLesChosesIncroyables();
- -

Importer un seul export depuis un module

- -

Étant donné un objet ou une valeur nommé(e) monExport qui est exporté(e) depuis le module mon-module, soit implicitement (parce que l'intégralité du module est exportée), soit explicitement (en utilisant l'instruction {{jsxref("Statements/export", "export")}}), ce qui suit insére monExport dans la portée courante.

- -
import {monExport} from '/modules/mon-module.js';
- -

Importer plusieurs éléments exportés depuis un module

- -

Ce qui suit insère à la fois machin et truc dans la portée courante.

- -
import {machin, truc} from '/modules/mon-module.js';
- -

Importer un élément exporté avec un alias

- -

Vous pouvez renommer un export lors de l'importation. Par exemple, ce qui suit insére nomCourt dans la portée courante.

- -
import {nomDExportDeModuleVraimentVraimentLong as nomCourt}
-  from '/modules/mon-module.js';
- -

Renommer plusieurs exports pendant l'import

- -

Importe des exports multiples depuis un module avec des alias commodes :

- -
import {
-  nomDExportDeModuleVraimentVraimentLong as nomCourt,
-  unAutreNomDeModuleLong as court
-} from '/modules/mon-module.js';
- -

Importer un module uniquement pour ses effets de bord

- -

Importe un module complet pour ses effets de bord seulement, sans importer quoi que ce soit. Ce qui suit exécute le code global du module, mais n'importe en fait aucune valeur.

- -
import '/modules/mon-module.js';
-
- -

Importation des défauts

- -

Il est possible d'avoir un {{jsxref("Statements/export", "export")}} par défaut (que ce soit un objet, une fonction, une classe, etc.). L'instruction import peut alors être utilisée pour importer ces défauts.

- -

La version la plus simple importe directement le défaut :

- -
import monDefaut from '/modules/mon-module.js';
- -

Il est également possible d'utiliser la syntaxe de défaut avec celles vues ci-dessus (imports d'espaces de noms ou imports nommés). Dans de tels cas, l'import par défaut devra être déclaré en premier. Par exemple :

- -
import monDefaut, * as monModule from '/modules/mon-module.js';
-// monModule utilisé comme un espace de noms
- -

ou

- -
import monDefaut, {machin, truc} from '/modules/mon-module.js';
-// imports nommés spécifiques
-
- -

Imports dynamiques

- -

Le mot-clé import peut être utilisé comme une fonction afin d'importer dynamiquement un module (utile lorsqu'on souhaite charger un module selon une condition donnée ou faire du chargement à la demande). Lorsqu'il est utilisé de cette façon, il renvoie une promesse :

- -
import('/modules/mon-module.js')
-  .then((module) => {
-    // Faire quelque chose avec le module
-  });
- -

On peut utiliser cette forme avec le mot-clé await :

- -
let module = await import('/modules/mon-module.js');
- -

Exemples

- -

Importation depuis un module secondaire pour aider le traitement d'une requête AJAX JSON.

- -

Le module : fichier.js

- -
function getJSON(url, rappel) {
-  let xhr = new XMLHttpRequest();
-  xhr.onload = function () {
-    rappel(this.responseText)
-  };
-  xhr.open('GET', url, true);
-  xhr.send();
-}
-
-export function recupererContenuUtile(url, rappel) {
-  getJSON(url, donnees => rappel(JSON.parse(donnees)));
-}
- -

Le programme principal : principal.js

- -
import { recupererContenuUtile } from '/modules/fichier.js';
-
-recupererContenuUtile('http://www.example.com',
-    donnees => { faireQuelqueChoseDUtile(donnees); });
- -

Import dynamique

- -

Dans cet exemple, on voit comment charger une fonctionnalité sur une page lorsqu'un utilisateur effectue une certaine action. Ici, lorsque l'utilisateur clique sur un bouton, cela déclenche l'appel d'une fonction dans le module.

- -
const main = document.querySelector("main");
-for (const link of document.querySelectorAll("nav > a")) {
-  link.addEventListener("click", e => {
-    e.preventDefault();
-
-    import('/modules/mon-module.js')
-      .then(module => {
-        module.loadPageInto(main);
-      })
-      .catch(err => {
-        main.textContent = err.message;
-      });
-  });
-}
-
-;
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
Proposition pour les imports dynamiques « fonctionnels »Proposition de niveau 4Fera partie de ECMAScript 2020
{{SpecName("ESDraft", "#sec-imports", "Imports")}}{{Spec2("ESDraft")}}
{{SpecName("ES2018", "#sec-imports", "Imports")}}{{Spec2("ES2018")}}
{{SpecName("ES2017", "#sec-imports", "Imports")}}{{Spec2("ES2017")}}
{{SpecName("ES2016", "#sec-imports", "Imports")}}{{Spec2("ES2016")}}
{{SpecName("ES2015", "#sec-imports", "Imports")}}{{Spec2("ES2015")}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.import")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/import/index.md b/files/fr/web/javascript/reference/statements/import/index.md new file mode 100644 index 0000000000..e998fe745c --- /dev/null +++ b/files/fr/web/javascript/reference/statements/import/index.md @@ -0,0 +1,235 @@ +--- +title: import +slug: Web/JavaScript/Reference/Statements/import +tags: + - ECMAScript 2015 + - Instruction + - JavaScript + - Modules + - import +translation_of: Web/JavaScript/Reference/Statements/import +original_slug: Web/JavaScript/Reference/Instructions/import +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction import est utilisée pour importer des liens qui sont exportés par un autre module. Les modules importés sont interprétés en mode strict dans tous les cas. L'instruction import ne peut pas être utilisée dans les scripts embarqués sauf si ceux-ci proviennent de ressources avec type="module".

+ +
+

Note : Il existe également une forme fonctionnelle, import() (cf. ci-après) qui permet d'avoir des chargements dynamiques. La compatibilité ascendante peut être atteinte en utilisant l'attribut nomodule sur la balise {{HTMLElement("script")}}.

+
+ +

Syntaxe

+ +
import exportParDefaut from "nom-module";
+import * as nom from "nom-module";
+import { export } from "nom-module";
+import { export as alias } from "nom-module";
+import { export1 , export2 } from "nom-module";
+import { export1 , export2 as alias2 , [...] } from "nom-module";
+import exportParDefaut, { export [ , [...] ] } from "nom-module";
+import exportParDefaut, * as nom from "nom-module";
+import "nom-module";
+import { toto , truc } from "nom-module/chemin/vers/fichier-non-exporte";
+let promesse = import("nom-module");
+ +
+
exportParDefaut
+
Nom qui fera référence à l'export par défaut du module.
+
nom-module
+
Le module depuis lequel importer. C'est souvent un chemin absolu ou relatif vers le fichier .js contenant le module. Certains empaqueteurs peuvent permettre ou requérir l'utilisation de l'extension ; vérifier votre environnement. Seules les String à apostrophes simples ou doubles sont autorisées.
+
nom
+
Nom de l'objet module qui sera utilisé comme un genre d'espace de noms lors de références aux imports.
+
export, exportN
+
Nom des exports à importer.
+
alias, aliasN
+
Noms qui feront référence aux imports nommés.
+
+ +

Description

+ +

Le paramètre nom est le nom de l'"objet module" qui sera utilisé comme un genre d'espace de noms lors de références aux exports. Les paramètres export indiquent les exports nommés individuellement, tandis que la syntaxe import * as nom les importe tous. Ci-dessous d'autres exemples pour clarifier la syntaxe.

+ +

Importer l'intégralité du contenu d'un module

+ +

Ce qui suit insère monModule dans la portée courante, contenant tous les exports  du module dans le fichier situé dans /modules/mon-module.js.

+ +
import * as monModule from '/modules/mon-module.js';
+
+ +

Ici, accéder aux exports signifie utiliser le nom du module (ici monModule) comme un espace de noms. Par exemple, si le module importé ci-dessus incluait un export faireToutesLesChosesIncroyables(), vous l'écririez comme ceci :

+ +
monModule.faireToutesLesChosesIncroyables();
+ +

Importer un seul export depuis un module

+ +

Étant donné un objet ou une valeur nommé(e) monExport qui est exporté(e) depuis le module mon-module, soit implicitement (parce que l'intégralité du module est exportée), soit explicitement (en utilisant l'instruction {{jsxref("Statements/export", "export")}}), ce qui suit insére monExport dans la portée courante.

+ +
import {monExport} from '/modules/mon-module.js';
+ +

Importer plusieurs éléments exportés depuis un module

+ +

Ce qui suit insère à la fois machin et truc dans la portée courante.

+ +
import {machin, truc} from '/modules/mon-module.js';
+ +

Importer un élément exporté avec un alias

+ +

Vous pouvez renommer un export lors de l'importation. Par exemple, ce qui suit insére nomCourt dans la portée courante.

+ +
import {nomDExportDeModuleVraimentVraimentLong as nomCourt}
+  from '/modules/mon-module.js';
+ +

Renommer plusieurs exports pendant l'import

+ +

Importe des exports multiples depuis un module avec des alias commodes :

+ +
import {
+  nomDExportDeModuleVraimentVraimentLong as nomCourt,
+  unAutreNomDeModuleLong as court
+} from '/modules/mon-module.js';
+ +

Importer un module uniquement pour ses effets de bord

+ +

Importe un module complet pour ses effets de bord seulement, sans importer quoi que ce soit. Ce qui suit exécute le code global du module, mais n'importe en fait aucune valeur.

+ +
import '/modules/mon-module.js';
+
+ +

Importation des défauts

+ +

Il est possible d'avoir un {{jsxref("Statements/export", "export")}} par défaut (que ce soit un objet, une fonction, une classe, etc.). L'instruction import peut alors être utilisée pour importer ces défauts.

+ +

La version la plus simple importe directement le défaut :

+ +
import monDefaut from '/modules/mon-module.js';
+ +

Il est également possible d'utiliser la syntaxe de défaut avec celles vues ci-dessus (imports d'espaces de noms ou imports nommés). Dans de tels cas, l'import par défaut devra être déclaré en premier. Par exemple :

+ +
import monDefaut, * as monModule from '/modules/mon-module.js';
+// monModule utilisé comme un espace de noms
+ +

ou

+ +
import monDefaut, {machin, truc} from '/modules/mon-module.js';
+// imports nommés spécifiques
+
+ +

Imports dynamiques

+ +

Le mot-clé import peut être utilisé comme une fonction afin d'importer dynamiquement un module (utile lorsqu'on souhaite charger un module selon une condition donnée ou faire du chargement à la demande). Lorsqu'il est utilisé de cette façon, il renvoie une promesse :

+ +
import('/modules/mon-module.js')
+  .then((module) => {
+    // Faire quelque chose avec le module
+  });
+ +

On peut utiliser cette forme avec le mot-clé await :

+ +
let module = await import('/modules/mon-module.js');
+ +

Exemples

+ +

Importation depuis un module secondaire pour aider le traitement d'une requête AJAX JSON.

+ +

Le module : fichier.js

+ +
function getJSON(url, rappel) {
+  let xhr = new XMLHttpRequest();
+  xhr.onload = function () {
+    rappel(this.responseText)
+  };
+  xhr.open('GET', url, true);
+  xhr.send();
+}
+
+export function recupererContenuUtile(url, rappel) {
+  getJSON(url, donnees => rappel(JSON.parse(donnees)));
+}
+ +

Le programme principal : principal.js

+ +
import { recupererContenuUtile } from '/modules/fichier.js';
+
+recupererContenuUtile('http://www.example.com',
+    donnees => { faireQuelqueChoseDUtile(donnees); });
+ +

Import dynamique

+ +

Dans cet exemple, on voit comment charger une fonctionnalité sur une page lorsqu'un utilisateur effectue une certaine action. Ici, lorsque l'utilisateur clique sur un bouton, cela déclenche l'appel d'une fonction dans le module.

+ +
const main = document.querySelector("main");
+for (const link of document.querySelectorAll("nav > a")) {
+  link.addEventListener("click", e => {
+    e.preventDefault();
+
+    import('/modules/mon-module.js')
+      .then(module => {
+        module.loadPageInto(main);
+      })
+      .catch(err => {
+        main.textContent = err.message;
+      });
+  });
+}
+
+;
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
Proposition pour les imports dynamiques « fonctionnels »Proposition de niveau 4Fera partie de ECMAScript 2020
{{SpecName("ESDraft", "#sec-imports", "Imports")}}{{Spec2("ESDraft")}}
{{SpecName("ES2018", "#sec-imports", "Imports")}}{{Spec2("ES2018")}}
{{SpecName("ES2017", "#sec-imports", "Imports")}}{{Spec2("ES2017")}}
{{SpecName("ES2016", "#sec-imports", "Imports")}}{{Spec2("ES2016")}}
{{SpecName("ES2015", "#sec-imports", "Imports")}}{{Spec2("ES2015")}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.import")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/index.html b/files/fr/web/javascript/reference/statements/index.html deleted file mode 100644 index 1e372ad996..0000000000 --- a/files/fr/web/javascript/reference/statements/index.html +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Instructions -slug: Web/JavaScript/Reference/Statements -tags: - - JavaScript - - Reference - - statements -translation_of: Web/JavaScript/Reference/Statements -original_slug: Web/JavaScript/Reference/Instructions ---- -
{{jsSidebar("Statements")}}
- -

Les applications JavaScript sont composées de plusieurs instructions organisées grâce à une syntaxe. Une instruction peut s'étaler sur plusieurs lignes et on peut avoir plusieurs instructions sur une seule ligne si chaque instruction est séparée de la suivante par un point-virgule.

- -

Instructions et déclarations, par catégorie

- -

Pour une liste alphabétique, voir le volet de navigation situé à gauche sur cette page.

- -

Contrôle du flux

- -
-
{{jsxref("Instructions/bloc", "Bloc")}}
-
Une instruction de bloc est utilisée pour regrouper zéro ou plusieurs instructions. Un bloc est délimité par une paire d'accolades.
-
{{jsxref("Instructions/break", "break")}}
-
Cette instruction termine la boucle ou l'instruction switch ou l'instruction label en cours et continue l'exécution sur l'instruction suivant l'instruction terminée.
-
{{jsxref("Instructions/continue", "continue")}}
-
Cette instruction termine l'exécution des instructions dans la boucle courante, ou la boucle avec une étiquette correspondante, et continue l'exécution de la boucle dans l'itération suivante.
-
{{jsxref("Instructions/vide", "Vide")}}
-
Une instruction vide est utilisée pour ne fournir aucune instruction là où JavaScript en attendrait une.
-
{{jsxref("Instructions/if...else","if...else")}}
-
Cette instruction exécute une instruction si une condition donnée est vérifiée. Si la condition n'est pas vérifiée une autre instruction pourra être exécutée.
-
{{jsxref("Instructions/switch", "switch")}}
-
Cette instruction permet d'évaluer une expression et de faire correspondre le résultat de cette expression avec différents cas et d'exécuter les instructions associées aux cas qui ont chacun un identifiant.
-
{{jsxref("Instructions/throw", "throw")}}
-
Cette instruction lève une exception.
-
{{jsxref("Instructions/try...catch","try...catch")}}
-
Cette instruction permet de spécifier un ensemble d'instructions à tenter, et de préciser le traitement à effectuer dans le cas où une exception est produite.
-
- -

Déclarations

- -
-
{{jsxref("Instructions/var", "var")}}
-
-

Cette instruction permet de déclarer une variable, éventuellement en fournissant une valeur pour permettant de l'initialiser.

-
-
{{jsxref("Instructions/let", "let")}}
-
Cette instruction permet de déclarer une variable locale dans une portée d'un bloc et éventuellement d'initialiser sa valeur.
-
{{jsxref("Instructions/const", "const")}}
-
Cette instruction déclare une constante en lecture seule.
-
- -

Fonctions et classes

- -
-
{{jsxref("Instructions/function", "function")}}
-
Cette instruction déclare une fonction avec les paramètres donnés.
-
{{jsxref("Instructions/function*", "function*")}}
-
Les fonctions génératrices permettent de créer des itérateurs plus simplement.
-
{{experimental_inline}} {{jsxref("Instructions/async_function", "async function")}}
-
Cette instruction déclare une fonction asynchrone avec les paramètres associés.
-
{{jsxref("Instructions/return", "return")}}
-
Cette instruction spécifie la valeur de retour renvoyée par une fonction.
-
{{jsxref("Instructions/class", "class")}}
-
Déclare une classe.
-
- -

Itérations

- -
-
{{jsxref("Instructions/do...while", "do...while")}}
-
Cette instruction crée une boucle qui s'exécute tant que la condition est vraie. La condition est évaluée après avoir exécuté une itération de boucle, ce qui fait que cette boucle sera exécutée au moins une fois.
-
{{jsxref("Instructions/for", "for")}}
-
Cette instruction crée une boucle qui se base sur trois expressions facultatives. Ces expressions sont entre parenthèses, séparées par des points virgules et suivies par l'instruction à exécuter dans la boucle.
-
{{jsxref("Instructions/for_each...in", "for each...in")}} {{deprecated_inline}} {{non-standard_inline}}
-
Cette instruction itère une variable donnée sur toutes les propriétés d'un objet. Pour chaque propriété distincte, une instruction spécifique est exécutée.
-
{{jsxref("Instructions/for...in", "for...in")}}
-
Cette instruction effectue, dans un ordre arbitraire, une boucle sur les propriétés énumérables d'un objet. Pour chacune des différentes propriétés, des instructions peuvent être exécutées.
-
{{jsxref("Instructions/for...of", "for...of")}}
-
Cette instruction parcourt les objets sur lesquels on peut itérer (comme les tableaux, les itérateurs et générateurs). Pour ce faire, elle utilise un mécanisme d'itération sur mesure utilisant des instructions à exécuter pour chacune des différentes propriétés.
-
{{jsxref("Instructions/for-await...of","for await...of")}}
-
Cette instruction parcourt les objets itérables asynchrones tels que les tableaux, les itérateurs et générateurs. Elle utilise un mécanisme d'itération spécifique et des instructions sont exécutées pour la valeur de chaque propriété.
-
{{jsxref("Instructions/while", "while")}}
-
Cette instruction permet de créer une boucle qui s'exécute tant qu'une condition de test est vérifiée. La condition est évaluée avant d'exécuter l'instruction contenue dans la boucle.
-
- -

Autres

- -
-
{{jsxref("Instructions/debugger", "debugger")}}
-
Cette instruction appelle une fonctionnalité de débogage. Si aucune fonctionnalité de débogage n'est disponible, l'instruction n'a aucun effet.
-
{{jsxref("Instructions/export", "export")}}
-
Cette instruction permet à un script signé de fournir des propriétés, fonctions et des objets à d'autres scripts (signés ou non).
-
{{jsxref("Instructions/import", "import")}}
-
Cette instruction permet à un script d'importer des propriétés, fonctions ou objets depuis un script qui les exporte.
-
import.meta
-
Une méta propriété qui expose des métadonnées à propos du module JavaScript.
-
{{jsxref("Instructions/label", "label")}}
-
Cette instruction fournit un identifiant auquel il est possible de se référer en utilisant une instruction break ou continue.
-
{{jsxref("Instructions/with", "with")}} {{deprecated_inline}}
-
Cette instruction permet d'étendre la portée chaînée d'une instruction.
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ES1', '#sec-12', 'Statements')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES3', '#sec-12', 'Statements')}}{{Spec2('ES3')}}
{{SpecName('ES5.1', '#sec-12', 'Statements')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}{{Spec2('ES6')}}Nouveaux éléments : function*, let, for...of, yield, class
{{SpecName('ESDraft', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements")}}

- -

Voir aussi

- - \ No newline at end of file diff --git a/files/fr/web/javascript/reference/statements/index.md b/files/fr/web/javascript/reference/statements/index.md new file mode 100644 index 0000000000..1e372ad996 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/index.md @@ -0,0 +1,149 @@ +--- +title: Instructions +slug: Web/JavaScript/Reference/Statements +tags: + - JavaScript + - Reference + - statements +translation_of: Web/JavaScript/Reference/Statements +original_slug: Web/JavaScript/Reference/Instructions +--- +
{{jsSidebar("Statements")}}
+ +

Les applications JavaScript sont composées de plusieurs instructions organisées grâce à une syntaxe. Une instruction peut s'étaler sur plusieurs lignes et on peut avoir plusieurs instructions sur une seule ligne si chaque instruction est séparée de la suivante par un point-virgule.

+ +

Instructions et déclarations, par catégorie

+ +

Pour une liste alphabétique, voir le volet de navigation situé à gauche sur cette page.

+ +

Contrôle du flux

+ +
+
{{jsxref("Instructions/bloc", "Bloc")}}
+
Une instruction de bloc est utilisée pour regrouper zéro ou plusieurs instructions. Un bloc est délimité par une paire d'accolades.
+
{{jsxref("Instructions/break", "break")}}
+
Cette instruction termine la boucle ou l'instruction switch ou l'instruction label en cours et continue l'exécution sur l'instruction suivant l'instruction terminée.
+
{{jsxref("Instructions/continue", "continue")}}
+
Cette instruction termine l'exécution des instructions dans la boucle courante, ou la boucle avec une étiquette correspondante, et continue l'exécution de la boucle dans l'itération suivante.
+
{{jsxref("Instructions/vide", "Vide")}}
+
Une instruction vide est utilisée pour ne fournir aucune instruction là où JavaScript en attendrait une.
+
{{jsxref("Instructions/if...else","if...else")}}
+
Cette instruction exécute une instruction si une condition donnée est vérifiée. Si la condition n'est pas vérifiée une autre instruction pourra être exécutée.
+
{{jsxref("Instructions/switch", "switch")}}
+
Cette instruction permet d'évaluer une expression et de faire correspondre le résultat de cette expression avec différents cas et d'exécuter les instructions associées aux cas qui ont chacun un identifiant.
+
{{jsxref("Instructions/throw", "throw")}}
+
Cette instruction lève une exception.
+
{{jsxref("Instructions/try...catch","try...catch")}}
+
Cette instruction permet de spécifier un ensemble d'instructions à tenter, et de préciser le traitement à effectuer dans le cas où une exception est produite.
+
+ +

Déclarations

+ +
+
{{jsxref("Instructions/var", "var")}}
+
+

Cette instruction permet de déclarer une variable, éventuellement en fournissant une valeur pour permettant de l'initialiser.

+
+
{{jsxref("Instructions/let", "let")}}
+
Cette instruction permet de déclarer une variable locale dans une portée d'un bloc et éventuellement d'initialiser sa valeur.
+
{{jsxref("Instructions/const", "const")}}
+
Cette instruction déclare une constante en lecture seule.
+
+ +

Fonctions et classes

+ +
+
{{jsxref("Instructions/function", "function")}}
+
Cette instruction déclare une fonction avec les paramètres donnés.
+
{{jsxref("Instructions/function*", "function*")}}
+
Les fonctions génératrices permettent de créer des itérateurs plus simplement.
+
{{experimental_inline}} {{jsxref("Instructions/async_function", "async function")}}
+
Cette instruction déclare une fonction asynchrone avec les paramètres associés.
+
{{jsxref("Instructions/return", "return")}}
+
Cette instruction spécifie la valeur de retour renvoyée par une fonction.
+
{{jsxref("Instructions/class", "class")}}
+
Déclare une classe.
+
+ +

Itérations

+ +
+
{{jsxref("Instructions/do...while", "do...while")}}
+
Cette instruction crée une boucle qui s'exécute tant que la condition est vraie. La condition est évaluée après avoir exécuté une itération de boucle, ce qui fait que cette boucle sera exécutée au moins une fois.
+
{{jsxref("Instructions/for", "for")}}
+
Cette instruction crée une boucle qui se base sur trois expressions facultatives. Ces expressions sont entre parenthèses, séparées par des points virgules et suivies par l'instruction à exécuter dans la boucle.
+
{{jsxref("Instructions/for_each...in", "for each...in")}} {{deprecated_inline}} {{non-standard_inline}}
+
Cette instruction itère une variable donnée sur toutes les propriétés d'un objet. Pour chaque propriété distincte, une instruction spécifique est exécutée.
+
{{jsxref("Instructions/for...in", "for...in")}}
+
Cette instruction effectue, dans un ordre arbitraire, une boucle sur les propriétés énumérables d'un objet. Pour chacune des différentes propriétés, des instructions peuvent être exécutées.
+
{{jsxref("Instructions/for...of", "for...of")}}
+
Cette instruction parcourt les objets sur lesquels on peut itérer (comme les tableaux, les itérateurs et générateurs). Pour ce faire, elle utilise un mécanisme d'itération sur mesure utilisant des instructions à exécuter pour chacune des différentes propriétés.
+
{{jsxref("Instructions/for-await...of","for await...of")}}
+
Cette instruction parcourt les objets itérables asynchrones tels que les tableaux, les itérateurs et générateurs. Elle utilise un mécanisme d'itération spécifique et des instructions sont exécutées pour la valeur de chaque propriété.
+
{{jsxref("Instructions/while", "while")}}
+
Cette instruction permet de créer une boucle qui s'exécute tant qu'une condition de test est vérifiée. La condition est évaluée avant d'exécuter l'instruction contenue dans la boucle.
+
+ +

Autres

+ +
+
{{jsxref("Instructions/debugger", "debugger")}}
+
Cette instruction appelle une fonctionnalité de débogage. Si aucune fonctionnalité de débogage n'est disponible, l'instruction n'a aucun effet.
+
{{jsxref("Instructions/export", "export")}}
+
Cette instruction permet à un script signé de fournir des propriétés, fonctions et des objets à d'autres scripts (signés ou non).
+
{{jsxref("Instructions/import", "import")}}
+
Cette instruction permet à un script d'importer des propriétés, fonctions ou objets depuis un script qui les exporte.
+
import.meta
+
Une méta propriété qui expose des métadonnées à propos du module JavaScript.
+
{{jsxref("Instructions/label", "label")}}
+
Cette instruction fournit un identifiant auquel il est possible de se référer en utilisant une instruction break ou continue.
+
{{jsxref("Instructions/with", "with")}} {{deprecated_inline}}
+
Cette instruction permet d'étendre la portée chaînée d'une instruction.
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ES1', '#sec-12', 'Statements')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES3', '#sec-12', 'Statements')}}{{Spec2('ES3')}}
{{SpecName('ES5.1', '#sec-12', 'Statements')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}{{Spec2('ES6')}}Nouveaux éléments : function*, let, for...of, yield, class
{{SpecName('ESDraft', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements")}}

+ +

Voir aussi

+ + \ No newline at end of file diff --git a/files/fr/web/javascript/reference/statements/label/index.html b/files/fr/web/javascript/reference/statements/label/index.html deleted file mode 100644 index 1e0c12243a..0000000000 --- a/files/fr/web/javascript/reference/statements/label/index.html +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: label -slug: Web/JavaScript/Reference/Statements/label -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/label -original_slug: Web/JavaScript/Reference/Instructions/label ---- -
{{jsSidebar("Statements")}}
- -

Une instruction étiquetée (labeled en anglais) peut être utilisée avec les instructions {{jsxref("Instructions/break", "break")}} ou {{jsxref("Instructions/continue", "continue")}}. Un label permet d'identifier une instruction avec un identifiant pour y faire référence plus tard.

- -
{{EmbedInteractiveExample("pages/js/statement-label.html")}}
- - - -
-

Note : Les boucles ou les blocs étiquetés sont très rares et on peut généralement utiliser des appels de fonction plutôt que des sauts de boucle.

-
- -

Syntaxe

- -
label :
-   instruction
-
- -
-
label
-
N'importe quel identifiant JavaScript qui n'est pas un mot-clé réservé.
-
instruction
-
Une instruction. break peut être utilisé avec n'importe quelle instruction identifiée. continue ne peut être utilisé qu'avec des instructions de boucle.
-
- -

Description

- -

Une étiquette (label) peut être utilisée pour identifier une boucle et pour y faire référence à l'intérieur en utilisant les instructions break ou continue afin d'interrompre cette boucle ou de reprendre son exécution.

- -

JavaScript ne possède pas d'instruction goto, les étiquettes ne peuvent être utilisées que par les instructions break ou continue.

- -

En mode strict, on ne peut pas utiliser let comme étiquette, cela lèvera une exception {{jsxref("SyntaxError")}} (let est un identifiant réservé).

- -

Exemples

- -

Faire référence à une étiquette avec continue dans une boucle

- -
var i, j;
-
-boucle1:
-for (i = 0; i < 3; i++) {      //Le premier for correspond à "boucle1"
-   boucle2:
-   for (j = 0; j < 3; j++) {   //Le second for correspond à "boucle2"
-      if (i === 1 && j === 1) {
-         continue boucle1;
-      } else {
-         console.log("i = " + i + ", j = " + j);
-      }
-   }
-}
-
-// On aura les résultats suivants :
-//   "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"
-// On voit bien l'absence de "i = 1, j = 1" et "i = 1, j = 2"
-
- -

Second exemple utilisant continue

- -

Étant donné un tableau d'élément et un tableau de tests, cet exemple donne le nombre d'éléments qui ont réussi tous les tests.

- -
var nbItemsReussis = 0;
-var i, j;
-
-top:
-for (i = 0; i < items.length; i++){
-  for (j = 0; j < tests.length; j++){
-    if (!tests[j].reussi(items[i])){
-      continue top;
-    }
-  }
-  nbItemsReussis++;
-}
- -

Utiliser break avec une étiquette au sein d'une boucle for

- -
var i, j;
-
-boucle1:
-for (i = 0; i < 3; i++) { // première boucle étiquetée « boucle1 »
-  boucle2:
-  for (j =0; j < 3; j++) { // seconde boucle étiquetée « boucle2 »
-    if (i == 1 && j == 1) {
-      break boucle1;
-    }
-    console.log("i = " + i + ", j = " + j);
-  }
-}
-
-// Ce qui produira en sortie
-// (dans la console)
-// "i = 0, j = 0"
-// "i = 0, j = 1"
-// "i = 0, j = 2"
-// "i = 1, j = 0"
-// Ici on voit la différence avec l'exemple précédent utilisant continue
-
- -

Second exemple utilisant un label et break

- -

Étant donné un tableau d'éléments et un tableau de tests, cet exemple permet de déterminer si oui ou non tous les éléments ont réussis tous les tests.

- -
var toutReussi = true;
-var i, j;
-
-top:
-for (i = 0; items.length; i++)
-  for (j = 0; j < tests.length; i++)
-    if (!tests[j].reusi(items[i])){
-      toutReussi = false;
-      break top;
-    }
-
- -

Utilise un bloc étiqueté avec break

- -

On peut utiliser des étiquettes dans des blocs simples mais seul break permettra de faire référence à des étiquettes en dehors d'une boucle.

- -
toto: {
-  console.log("face");
-  break toto;
-  console.log("this will not be executed");
-}
-console.log("swap");
-
-// On aura alors dans la console :
-
-// "face"
-// "swap 
- -

Déclarations de fonctions étiquetées

- -

À partir d'ECMAScript 2015, les déclarations de fonctions étiquetées sont standardisées pour du code non-strict au sein de l'annexe de la spécification relative à la compatibilité web.

- -
L: function F() {}
- -

En revanche, en mode strict, cela lèvera une exception {{jsxref("SyntaxError")}}:

- -
"use strict";
-L: function F() {}
-// SyntaxError: functions cannot be labelled
- -

Les fonctions génératrices ne peuvent pas être étiquetées, en mode strict, comme en mode non-strict :

- -
L: function* F() {}
-// SyntaxError: generator functions cannot be labelled
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-12.12', 'Labelled statement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-labelled-statements', 'Labelled statement')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-labelled-statements', 'Labelled statement')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.label")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/label/index.md b/files/fr/web/javascript/reference/statements/label/index.md new file mode 100644 index 0000000000..1e0c12243a --- /dev/null +++ b/files/fr/web/javascript/reference/statements/label/index.md @@ -0,0 +1,205 @@ +--- +title: label +slug: Web/JavaScript/Reference/Statements/label +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/label +original_slug: Web/JavaScript/Reference/Instructions/label +--- +
{{jsSidebar("Statements")}}
+ +

Une instruction étiquetée (labeled en anglais) peut être utilisée avec les instructions {{jsxref("Instructions/break", "break")}} ou {{jsxref("Instructions/continue", "continue")}}. Un label permet d'identifier une instruction avec un identifiant pour y faire référence plus tard.

+ +
{{EmbedInteractiveExample("pages/js/statement-label.html")}}
+ + + +
+

Note : Les boucles ou les blocs étiquetés sont très rares et on peut généralement utiliser des appels de fonction plutôt que des sauts de boucle.

+
+ +

Syntaxe

+ +
label :
+   instruction
+
+ +
+
label
+
N'importe quel identifiant JavaScript qui n'est pas un mot-clé réservé.
+
instruction
+
Une instruction. break peut être utilisé avec n'importe quelle instruction identifiée. continue ne peut être utilisé qu'avec des instructions de boucle.
+
+ +

Description

+ +

Une étiquette (label) peut être utilisée pour identifier une boucle et pour y faire référence à l'intérieur en utilisant les instructions break ou continue afin d'interrompre cette boucle ou de reprendre son exécution.

+ +

JavaScript ne possède pas d'instruction goto, les étiquettes ne peuvent être utilisées que par les instructions break ou continue.

+ +

En mode strict, on ne peut pas utiliser let comme étiquette, cela lèvera une exception {{jsxref("SyntaxError")}} (let est un identifiant réservé).

+ +

Exemples

+ +

Faire référence à une étiquette avec continue dans une boucle

+ +
var i, j;
+
+boucle1:
+for (i = 0; i < 3; i++) {      //Le premier for correspond à "boucle1"
+   boucle2:
+   for (j = 0; j < 3; j++) {   //Le second for correspond à "boucle2"
+      if (i === 1 && j === 1) {
+         continue boucle1;
+      } else {
+         console.log("i = " + i + ", j = " + j);
+      }
+   }
+}
+
+// On aura les résultats suivants :
+//   "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"
+// On voit bien l'absence de "i = 1, j = 1" et "i = 1, j = 2"
+
+ +

Second exemple utilisant continue

+ +

Étant donné un tableau d'élément et un tableau de tests, cet exemple donne le nombre d'éléments qui ont réussi tous les tests.

+ +
var nbItemsReussis = 0;
+var i, j;
+
+top:
+for (i = 0; i < items.length; i++){
+  for (j = 0; j < tests.length; j++){
+    if (!tests[j].reussi(items[i])){
+      continue top;
+    }
+  }
+  nbItemsReussis++;
+}
+ +

Utiliser break avec une étiquette au sein d'une boucle for

+ +
var i, j;
+
+boucle1:
+for (i = 0; i < 3; i++) { // première boucle étiquetée « boucle1 »
+  boucle2:
+  for (j =0; j < 3; j++) { // seconde boucle étiquetée « boucle2 »
+    if (i == 1 && j == 1) {
+      break boucle1;
+    }
+    console.log("i = " + i + ", j = " + j);
+  }
+}
+
+// Ce qui produira en sortie
+// (dans la console)
+// "i = 0, j = 0"
+// "i = 0, j = 1"
+// "i = 0, j = 2"
+// "i = 1, j = 0"
+// Ici on voit la différence avec l'exemple précédent utilisant continue
+
+ +

Second exemple utilisant un label et break

+ +

Étant donné un tableau d'éléments et un tableau de tests, cet exemple permet de déterminer si oui ou non tous les éléments ont réussis tous les tests.

+ +
var toutReussi = true;
+var i, j;
+
+top:
+for (i = 0; items.length; i++)
+  for (j = 0; j < tests.length; i++)
+    if (!tests[j].reusi(items[i])){
+      toutReussi = false;
+      break top;
+    }
+
+ +

Utilise un bloc étiqueté avec break

+ +

On peut utiliser des étiquettes dans des blocs simples mais seul break permettra de faire référence à des étiquettes en dehors d'une boucle.

+ +
toto: {
+  console.log("face");
+  break toto;
+  console.log("this will not be executed");
+}
+console.log("swap");
+
+// On aura alors dans la console :
+
+// "face"
+// "swap 
+ +

Déclarations de fonctions étiquetées

+ +

À partir d'ECMAScript 2015, les déclarations de fonctions étiquetées sont standardisées pour du code non-strict au sein de l'annexe de la spécification relative à la compatibilité web.

+ +
L: function F() {}
+ +

En revanche, en mode strict, cela lèvera une exception {{jsxref("SyntaxError")}}:

+ +
"use strict";
+L: function F() {}
+// SyntaxError: functions cannot be labelled
+ +

Les fonctions génératrices ne peuvent pas être étiquetées, en mode strict, comme en mode non-strict :

+ +
L: function* F() {}
+// SyntaxError: generator functions cannot be labelled
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-12.12', 'Labelled statement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-labelled-statements', 'Labelled statement')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-labelled-statements', 'Labelled statement')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.label")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/let/index.html b/files/fr/web/javascript/reference/statements/let/index.html deleted file mode 100644 index da0d43626c..0000000000 --- a/files/fr/web/javascript/reference/statements/let/index.html +++ /dev/null @@ -1,368 +0,0 @@ ---- -title: let -slug: Web/JavaScript/Reference/Statements/let -tags: - - ECMAScript 2015 - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/let -original_slug: Web/JavaScript/Reference/Instructions/let ---- -
{{jsSidebar("Statements")}}
- -

L'instruction let permet de déclarer une variable dont la portée est celle du bloc courant, éventuellement en initialisant sa valeur.

- -
{{EmbedInteractiveExample("pages/js/statement-let.html")}}
- -

Syntaxe

- -
let var1 [= valeur1] [, var2 [= valeur2]] [, ..., varN [= valeurN]];
- -

Paramètres

- -
-
var1, var2, …, varN
-
Le nom de la ou des variables. Ces noms doivent être des identifiants JavaScript valides.
-
valeur1, valeur2, …, valeurN{{optional_inline}}
-
Pour chaque variable déclaré, on peut indiquer, de façon optionnelle, sa valeur initiale. Ces valeurs peuvent être n'importe quelle expression légale.
-
- -

Description

- -

let permet de déclarer des variables dont la portée est limitée à celle du bloc dans lequel elles sont déclarées. Le mot-clé {{jsxref("Instructions/var","var")}}, quant à lui, permet de définir une variable globale ou locale à une fonction (sans distinction des blocs utilisés dans la fonction).

- -

Une autre différence entre let et var est la façon dont la variable est initialisée : pour let, la variable est initialisée à l'endroit où le parseur évalue son contenu (cf. ci-après).

- -

À l'instar de {{jsxref("instructions/const", "const")}}, let ne crée pas de propriété sur l'objet {{domxref("window")}} quand les variables sont déclarées au niveau global.

- -

L'origine du nom let est décrite dans cette réponse (en anglais).

- -

Les portées de bloc avec let

- -

Le mot-clé let permet de définir des variables au sein d'un bloc et des blocs qu'il contient. var permet quant à lui de définir une variable dont la portée est celle de la fonction englobante.

- -
if (x > y) {
-  let gamma = 12.7 + y;
-  i = gamma * x;
-}
-
-function varTest() {
-  var x = 1;
-  if (true) {
-    var x = 2;  // c'est la même variable !
-    console.log(x);  // 2
-  }
-  console.log(x);  // 2
-}
-
-function letTest() {
-  let x = 1;
-  if (true) {
-    let x = 2;  // c'est une variable différente
-    console.log(x);  // 2
-  }
-  console.log(x);  // 1
-}
-
- -

Une meilleure lisibilité pour les fonctions internes

- -

let peut parfois permettre de rendre le code plus lisible lorsqu'on utilise des fonctions internes.

- -
var list = document.getElementById("list");
-
-for (let i = 1; i <= 5; i++) {
-  var item = document.createElement("li");
-  item.appendChild(document.createTextNode("Élément " + i));
-
-  item.onclick = function (ev) {
-    console.log("Clic sur l'élément " + i + ".");
-  };
-  list.appendChild(item);
-}
-
-// Pour obtenir le même effet avec var
-// il aurait fallu créer un contexte différent
-// avec une fermeture (closure) pour la valeur
-
-for (var i = 1; i <= 5; i++) {
-  var item = document.createElement("li");
-  item.appendChild(document.createTextNode("Item " + i));
-
-  (function(i) {
-    item.onclick = function(ev) {
-      console.log("Item " + i + " a reçu un clic.");
-    };
-  })(i);
-  list.appendChild(item);
-}
-
- -

Dans l'exemple précédent, cela fonctionne comme on l'attend car les cinq instances de la fonction anonyme sont liées à cinq instances différentes de i. Si on remplace let par {{jsxref("Instructions/var","var")}}, on n'obtiendra pas l'effet escompté car on aura une même variable pour cette portée i=6 (au lieu de 5 différentes).

- -

Règles de portées

- -

Les variables déclarées avec let appartiennent à la portée du bloc dans lequel elles sont définies et indirectement aux portées des blocs de ce bloc. D'une certaine façon let fonctionne comme var, la seule différence dans cette analogie est que let fonctionne avec les portées de bloc et var avec les portées des fonctions :

- -
function varTest() {
-  var x = 31;
-  if (true) {
-    var x = 71;  // c'est la même variable !
-    console.log(x);  // 71
-  }
-  console.log(x);  // 71
-}
-
-function letTest() {
-  let x = 31;
-  if (true) {
-    let x = 71;  // c'est une variable différente
-    console.log(x);  // 71
-  }
-  console.log(x);  // 31
-}
-
- -

Au niveau le plus haut (la portée globale), let crée une variable globale alors que var ajoute une propriété à l'objet global :

- -
var x = 'global';
-let y = 'global2';
-console.log(this.x); // "global"
-console.log(this.y); // undefined
-console.log(y);      // "global2"
-
- -

Émuler le fonctionnement des interfaces privées

- -

En utilisant l'instruction let avec des constructeurs, on peut créer des interfaces privées sans avoir à utiliser de fermetures :

- -
var Truc;
-
-{
-  let porteePrivee = new WeakMap();
-  let compteur = 0;
-
-  Truc = function() {
-    this.unePropriete = 'toto';
-
-    porteePrivee.set(this, {
-      cachee: ++compteur,
-    });
-  };
-
-  Truc.prototype.montrerPublique = function() {
-    return this.unePropriete;
-  };
-
-  Truc.prototype.montrerPrivee = function() {
-    return porteePrivee.get(this).cachee;
-  };
-}
-
-console.log(typeof porteePrivee);
-// "undefined"
-
-var truc = new Truc();
-
-console.log(truc);
-// Truc {unePropriete: "toto"}
-
-truc.montrerPublique();
-// "toto"
-
-truc.montrerPrivee();
-// 1
-
- -

Cette technique permet d'obtenir un état privé « statique ». Ainsi, dans l'exemple qui précède, toutes les instances de Truc partageront la même portéePrivée.
- Il était possible d'obtenir un tel isolement avec var mais il fallait passer par des fonctions isolées (généralement des fonctions immédiatement appelées (IIFE)).

- -

Zone morte temporaire (Temporal Dead Zone / TDZ)  et les erreurs liées à let

- -

Lorsqu'on redéclare une même variable au sein d'une même portée de bloc, cela entraîne une exception {{jsxref("SyntaxError")}}.

- -
if (x) {
-  let toto;
-  let toto; // SyntaxError
-}
- -

Avec ECMAScript 2015 (ES6), let remontera (hoisting) la déclaration variable au début de la portée (au début du bloc) mais pas l'initialisation. Si on fait référence à une variable dans un bloc avant la déclaration de celle-ci avec let, cela entraînera une exception {{jsxref("ReferenceError")}}. En effet, la variable est placée dans une « zone morte temporaire » entre le début du bloc et le moment où la déclaration est traitée. Autrement dit, la déclaration est bien remontée mais la variable ne peut pas être utilisée tant que l'affectation (qui n'est pas remontée) n'a pas été effectuée.

- -
function faire_quelque_chose() {
-  console.log(truc); // undefined
-  console.log(toto); // ReferenceError
-  let toto = 2;
-  var truc = 1;
-}
- -

Il est possible d'obtenir des erreurs au sein de l'instruction {{jsxref("Instructions/switch")}}. En effet, il y a un seul bloc implicite pour cette instruction.

- -
switch (x) {
-  case 0:
-    let toto;
-    break;
-
-  case 1:
-    let toto; // SyntaxError for redeclaration.
-    break;
-}
- -

Par contre, si on ajoute une instruction de bloc dans la clause case, cela créera une nouvelle portée et empêchera l'erreur :

- -
let x = 1;
-
-switch(x) {
-  case 0: {
-    let toto;
-    break;
-  }
-  case 1: {
-    let toto;
-    break;
-  }
-}
- -

Autres situations

- -

Lorsqu'on utilise let dans un bloc, sa portée est limitée à celle du bloc. On notera ici la différence avec var dont la portée est celle de la fonction où il est utilisé.

- -
var a = 1;
-var b = 2;
-
-if (a === 1) {
-  var a = 11; // la portée est la portée globale
-  let b = 22; // la portée est celle du bloc if
-
-  console.log(a);  // 11
-  console.log(b);  // 22
-}
-
-console.log(a); // 11
-console.log(b); // 2
-
- -

Cependant, la combinaison utilisée ci-après déclenchera une exception SyntaxError car la déclaration avec var est remontée en haut du bloc et il y a donc une redéclaration implicite de la variable (également utilisée avec let).

- -
let x = 1;
-
-if (true) {
-  var x = 2; // SyntaxError liée à la redéclaration
-}
-
- -

La zone morte temporaire et typeof

- -

Si on utilise typeof sur des variables non déclarées ou qui valent {{jsxref("undefined")}}, on obtiendra la valeur undefined. Mais si on utilise typeof sur une variable au sein de la zone morte temporaire de cette variable, cela déclenchera une {{jsxref("ReferenceError")}} :

- -
console.log(typeof variableNonDeclaree); // affiche 'undefined'
-
-console.log(typeof i); // ReferenceError
-let i = 10;
- -

Autre exemple lié à la zone morte temporaire et aux portées lexicales

- -

Dans l'exemple qui suit, dans l'expression toto + 55, l'identifiant toto fait référence à la variable du bloc courant et non à celle qui est déclarée au dessus et qui a la valeur 33. Dans l'instruction let toto = (toto + 55); l'instruction est bien remontée mais l'endroit où on utilise toto (dans le fragment (toto + 55)) est toujours dans la zone morte temporaire car toto n'a pas encore été affecté.

- -
function test(){
-  var toto = 33;
-  if (true) {
-    let toto = (toto + 55); // ReferenceError: can't access lexical declaration `toto` before initialization
-  }
-}
-test();
-
- -

Si on utilise let avec un nom de variable qui est le même que celui de l'argument passé à la fonction, on aura une erreur due à la confusion des portées :

- -
function go(n) {
-  for (let n of n.a){ // ReferenceError: can't access lexical declaration `n' before initialization
-    console.log(n);
-  }
-}
-go({a:[1, 2, 3]});
-
- -

Les variables déclarées avec let et les boucles for

- -

Le mot-clé let permet de lier des variables localement dans la portée des boucles for. Contrairement au mot-clé var qui lui rend les variables visibles depuis l'ensemble de la fonction qui contient la boucle.

- -
var a = 0;
-for ( let i = a; i < 10; i++ ) {
-  console.log(i);
-}
-
- -

Règles de portées

- -
for (let expr1; expr2; expr3) instruction
- -

Dans cet exemple, expr2, expr3, et instruction sont contenues dans un bloc implicite qui contient la variable de bloc local déclarée avec let expr1.

- -

Exemples

- -

let / var

- -

Lorsqu'il est utilisé dans un bloc, let permet de limiter la portée de la variable à ce bloc. var quant à lui limite la portée de la variable à la fonction.

- -
var a = 5;
-var b = 10;
-
-if (a === 5) {
-  let a = 4; // La portée est celle du bloc if
-  var b = 1; // La portée est celle interne à la fonction
-
-  console.log(a);  // 4
-  console.log(b);  // 1
-}
-
-console.log(a); // 5
-console.log(b); // 1
- -

let utilisé dans les boucles

- -

Le mot-clé let permet de lier des variables à la portée de la boucle plutôt qu'à celle de la fonction (avec var) :

- -
for (let i = 0; i<10; i++) {
-  console.log(i); // 0, 1, 2, 3, 4 ... 9
-}
-
-console.log(i); // i n'est pas défini
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}{{Spec2('ES2015')}}Définition initiale. Cette définition n'inclue pas les expressions et blocs let.
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.let")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/let/index.md b/files/fr/web/javascript/reference/statements/let/index.md new file mode 100644 index 0000000000..da0d43626c --- /dev/null +++ b/files/fr/web/javascript/reference/statements/let/index.md @@ -0,0 +1,368 @@ +--- +title: let +slug: Web/JavaScript/Reference/Statements/let +tags: + - ECMAScript 2015 + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/let +original_slug: Web/JavaScript/Reference/Instructions/let +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction let permet de déclarer une variable dont la portée est celle du bloc courant, éventuellement en initialisant sa valeur.

+ +
{{EmbedInteractiveExample("pages/js/statement-let.html")}}
+ +

Syntaxe

+ +
let var1 [= valeur1] [, var2 [= valeur2]] [, ..., varN [= valeurN]];
+ +

Paramètres

+ +
+
var1, var2, …, varN
+
Le nom de la ou des variables. Ces noms doivent être des identifiants JavaScript valides.
+
valeur1, valeur2, …, valeurN{{optional_inline}}
+
Pour chaque variable déclaré, on peut indiquer, de façon optionnelle, sa valeur initiale. Ces valeurs peuvent être n'importe quelle expression légale.
+
+ +

Description

+ +

let permet de déclarer des variables dont la portée est limitée à celle du bloc dans lequel elles sont déclarées. Le mot-clé {{jsxref("Instructions/var","var")}}, quant à lui, permet de définir une variable globale ou locale à une fonction (sans distinction des blocs utilisés dans la fonction).

+ +

Une autre différence entre let et var est la façon dont la variable est initialisée : pour let, la variable est initialisée à l'endroit où le parseur évalue son contenu (cf. ci-après).

+ +

À l'instar de {{jsxref("instructions/const", "const")}}, let ne crée pas de propriété sur l'objet {{domxref("window")}} quand les variables sont déclarées au niveau global.

+ +

L'origine du nom let est décrite dans cette réponse (en anglais).

+ +

Les portées de bloc avec let

+ +

Le mot-clé let permet de définir des variables au sein d'un bloc et des blocs qu'il contient. var permet quant à lui de définir une variable dont la portée est celle de la fonction englobante.

+ +
if (x > y) {
+  let gamma = 12.7 + y;
+  i = gamma * x;
+}
+
+function varTest() {
+  var x = 1;
+  if (true) {
+    var x = 2;  // c'est la même variable !
+    console.log(x);  // 2
+  }
+  console.log(x);  // 2
+}
+
+function letTest() {
+  let x = 1;
+  if (true) {
+    let x = 2;  // c'est une variable différente
+    console.log(x);  // 2
+  }
+  console.log(x);  // 1
+}
+
+ +

Une meilleure lisibilité pour les fonctions internes

+ +

let peut parfois permettre de rendre le code plus lisible lorsqu'on utilise des fonctions internes.

+ +
var list = document.getElementById("list");
+
+for (let i = 1; i <= 5; i++) {
+  var item = document.createElement("li");
+  item.appendChild(document.createTextNode("Élément " + i));
+
+  item.onclick = function (ev) {
+    console.log("Clic sur l'élément " + i + ".");
+  };
+  list.appendChild(item);
+}
+
+// Pour obtenir le même effet avec var
+// il aurait fallu créer un contexte différent
+// avec une fermeture (closure) pour la valeur
+
+for (var i = 1; i <= 5; i++) {
+  var item = document.createElement("li");
+  item.appendChild(document.createTextNode("Item " + i));
+
+  (function(i) {
+    item.onclick = function(ev) {
+      console.log("Item " + i + " a reçu un clic.");
+    };
+  })(i);
+  list.appendChild(item);
+}
+
+ +

Dans l'exemple précédent, cela fonctionne comme on l'attend car les cinq instances de la fonction anonyme sont liées à cinq instances différentes de i. Si on remplace let par {{jsxref("Instructions/var","var")}}, on n'obtiendra pas l'effet escompté car on aura une même variable pour cette portée i=6 (au lieu de 5 différentes).

+ +

Règles de portées

+ +

Les variables déclarées avec let appartiennent à la portée du bloc dans lequel elles sont définies et indirectement aux portées des blocs de ce bloc. D'une certaine façon let fonctionne comme var, la seule différence dans cette analogie est que let fonctionne avec les portées de bloc et var avec les portées des fonctions :

+ +
function varTest() {
+  var x = 31;
+  if (true) {
+    var x = 71;  // c'est la même variable !
+    console.log(x);  // 71
+  }
+  console.log(x);  // 71
+}
+
+function letTest() {
+  let x = 31;
+  if (true) {
+    let x = 71;  // c'est une variable différente
+    console.log(x);  // 71
+  }
+  console.log(x);  // 31
+}
+
+ +

Au niveau le plus haut (la portée globale), let crée une variable globale alors que var ajoute une propriété à l'objet global :

+ +
var x = 'global';
+let y = 'global2';
+console.log(this.x); // "global"
+console.log(this.y); // undefined
+console.log(y);      // "global2"
+
+ +

Émuler le fonctionnement des interfaces privées

+ +

En utilisant l'instruction let avec des constructeurs, on peut créer des interfaces privées sans avoir à utiliser de fermetures :

+ +
var Truc;
+
+{
+  let porteePrivee = new WeakMap();
+  let compteur = 0;
+
+  Truc = function() {
+    this.unePropriete = 'toto';
+
+    porteePrivee.set(this, {
+      cachee: ++compteur,
+    });
+  };
+
+  Truc.prototype.montrerPublique = function() {
+    return this.unePropriete;
+  };
+
+  Truc.prototype.montrerPrivee = function() {
+    return porteePrivee.get(this).cachee;
+  };
+}
+
+console.log(typeof porteePrivee);
+// "undefined"
+
+var truc = new Truc();
+
+console.log(truc);
+// Truc {unePropriete: "toto"}
+
+truc.montrerPublique();
+// "toto"
+
+truc.montrerPrivee();
+// 1
+
+ +

Cette technique permet d'obtenir un état privé « statique ». Ainsi, dans l'exemple qui précède, toutes les instances de Truc partageront la même portéePrivée.
+ Il était possible d'obtenir un tel isolement avec var mais il fallait passer par des fonctions isolées (généralement des fonctions immédiatement appelées (IIFE)).

+ +

Zone morte temporaire (Temporal Dead Zone / TDZ)  et les erreurs liées à let

+ +

Lorsqu'on redéclare une même variable au sein d'une même portée de bloc, cela entraîne une exception {{jsxref("SyntaxError")}}.

+ +
if (x) {
+  let toto;
+  let toto; // SyntaxError
+}
+ +

Avec ECMAScript 2015 (ES6), let remontera (hoisting) la déclaration variable au début de la portée (au début du bloc) mais pas l'initialisation. Si on fait référence à une variable dans un bloc avant la déclaration de celle-ci avec let, cela entraînera une exception {{jsxref("ReferenceError")}}. En effet, la variable est placée dans une « zone morte temporaire » entre le début du bloc et le moment où la déclaration est traitée. Autrement dit, la déclaration est bien remontée mais la variable ne peut pas être utilisée tant que l'affectation (qui n'est pas remontée) n'a pas été effectuée.

+ +
function faire_quelque_chose() {
+  console.log(truc); // undefined
+  console.log(toto); // ReferenceError
+  let toto = 2;
+  var truc = 1;
+}
+ +

Il est possible d'obtenir des erreurs au sein de l'instruction {{jsxref("Instructions/switch")}}. En effet, il y a un seul bloc implicite pour cette instruction.

+ +
switch (x) {
+  case 0:
+    let toto;
+    break;
+
+  case 1:
+    let toto; // SyntaxError for redeclaration.
+    break;
+}
+ +

Par contre, si on ajoute une instruction de bloc dans la clause case, cela créera une nouvelle portée et empêchera l'erreur :

+ +
let x = 1;
+
+switch(x) {
+  case 0: {
+    let toto;
+    break;
+  }
+  case 1: {
+    let toto;
+    break;
+  }
+}
+ +

Autres situations

+ +

Lorsqu'on utilise let dans un bloc, sa portée est limitée à celle du bloc. On notera ici la différence avec var dont la portée est celle de la fonction où il est utilisé.

+ +
var a = 1;
+var b = 2;
+
+if (a === 1) {
+  var a = 11; // la portée est la portée globale
+  let b = 22; // la portée est celle du bloc if
+
+  console.log(a);  // 11
+  console.log(b);  // 22
+}
+
+console.log(a); // 11
+console.log(b); // 2
+
+ +

Cependant, la combinaison utilisée ci-après déclenchera une exception SyntaxError car la déclaration avec var est remontée en haut du bloc et il y a donc une redéclaration implicite de la variable (également utilisée avec let).

+ +
let x = 1;
+
+if (true) {
+  var x = 2; // SyntaxError liée à la redéclaration
+}
+
+ +

La zone morte temporaire et typeof

+ +

Si on utilise typeof sur des variables non déclarées ou qui valent {{jsxref("undefined")}}, on obtiendra la valeur undefined. Mais si on utilise typeof sur une variable au sein de la zone morte temporaire de cette variable, cela déclenchera une {{jsxref("ReferenceError")}} :

+ +
console.log(typeof variableNonDeclaree); // affiche 'undefined'
+
+console.log(typeof i); // ReferenceError
+let i = 10;
+ +

Autre exemple lié à la zone morte temporaire et aux portées lexicales

+ +

Dans l'exemple qui suit, dans l'expression toto + 55, l'identifiant toto fait référence à la variable du bloc courant et non à celle qui est déclarée au dessus et qui a la valeur 33. Dans l'instruction let toto = (toto + 55); l'instruction est bien remontée mais l'endroit où on utilise toto (dans le fragment (toto + 55)) est toujours dans la zone morte temporaire car toto n'a pas encore été affecté.

+ +
function test(){
+  var toto = 33;
+  if (true) {
+    let toto = (toto + 55); // ReferenceError: can't access lexical declaration `toto` before initialization
+  }
+}
+test();
+
+ +

Si on utilise let avec un nom de variable qui est le même que celui de l'argument passé à la fonction, on aura une erreur due à la confusion des portées :

+ +
function go(n) {
+  for (let n of n.a){ // ReferenceError: can't access lexical declaration `n' before initialization
+    console.log(n);
+  }
+}
+go({a:[1, 2, 3]});
+
+ +

Les variables déclarées avec let et les boucles for

+ +

Le mot-clé let permet de lier des variables localement dans la portée des boucles for. Contrairement au mot-clé var qui lui rend les variables visibles depuis l'ensemble de la fonction qui contient la boucle.

+ +
var a = 0;
+for ( let i = a; i < 10; i++ ) {
+  console.log(i);
+}
+
+ +

Règles de portées

+ +
for (let expr1; expr2; expr3) instruction
+ +

Dans cet exemple, expr2, expr3, et instruction sont contenues dans un bloc implicite qui contient la variable de bloc local déclarée avec let expr1.

+ +

Exemples

+ +

let / var

+ +

Lorsqu'il est utilisé dans un bloc, let permet de limiter la portée de la variable à ce bloc. var quant à lui limite la portée de la variable à la fonction.

+ +
var a = 5;
+var b = 10;
+
+if (a === 5) {
+  let a = 4; // La portée est celle du bloc if
+  var b = 1; // La portée est celle interne à la fonction
+
+  console.log(a);  // 4
+  console.log(b);  // 1
+}
+
+console.log(a); // 5
+console.log(b); // 1
+ +

let utilisé dans les boucles

+ +

Le mot-clé let permet de lier des variables à la portée de la boucle plutôt qu'à celle de la fonction (avec var) :

+ +
for (let i = 0; i<10; i++) {
+  console.log(i); // 0, 1, 2, 3, 4 ... 9
+}
+
+console.log(i); // i n'est pas défini
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}{{Spec2('ES2015')}}Définition initiale. Cette définition n'inclue pas les expressions et blocs let.
{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.let")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/return/index.html b/files/fr/web/javascript/reference/statements/return/index.html deleted file mode 100644 index 44a2bc220f..0000000000 --- a/files/fr/web/javascript/reference/statements/return/index.html +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: return -slug: Web/JavaScript/Reference/Statements/return -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/return -original_slug: Web/JavaScript/Reference/Instructions/return ---- -
{{jsSidebar("Statements")}}
- -

L'instruction return met fin à l'exécution d'une fonction et définit une valeur à renvoyer à la fonction appelante.

- -
{{EmbedInteractiveExample("pages/js/statement-return.html")}}
- -

Syntaxe

- -
return [[expression]]; 
- -
-
expression
-
L'expression dont on souhaite renvoyer la valeur. Si elle est absente, la valeur renvoyée par défaut sera {{jsxref("undefined")}}.
-
- -

Description

- -

Lorsqu'une instruction return est utilisée dans une fonction, l'exécution de la fonction se termine. Si une valeur est fournie, elle sera renvoyée à l'appelant de la fonction. Si l'expression définissant la valeur de retour de la fonction est absente, la valeur undefined sera renvoyée. Par exemple, voici une fonction qui renvoie le carré de son argument x (où x est un nombre) :

- -
function carre(x) {
-  return x * x;
-}
-var demo = carre(3);
-// demo vaudra alors 9
-
- -

Les instructions qui suivent causeront chacune l'arrêt de l'exécution d'une fonction :

- -
return;
-return true;
-return false;
-return x;
-return x + y / 3;
-
- -

Ajout automatique de point-virgule

- -

L'instruction return peut être impactée par l'ajout automatique de point-virgule (ASI en anglais). Il est interdit d'avoir un caractère de fin de ligne entre le mot-clé return et l'expression :

- -
return
-a + b;
-
-
- -

Après ASI, cela sera transformé en :

- -
return;
-a + b;
-// Avertissement console : "expression non accessible
-// après une instruction return sans point-virgule"
-
- -
-

Note : À partir de Gecko 40 {{geckoRelease(40)}}, un avertissement sera affiché dans la console si l'analyse du code trouve une instruction semblable à une expression après une instruction return sans point-virgule. Voir le {{bug(1005110)}} pour plus d'informations.

-
- -

Pour éviter ce problème et l'insertion automatique, on peut, si besoin, utiliser des parenthèses.

- -
return (
-  a + b;
-);
- -

Exemples

- -

Utiliser return

- -

La fonction suivante renvoie le carré de son argument :

- -
function carré(x) {
-   return x * x;
-}
-
- -

Interrompre une fonction

- -

Une fonction s'arrête immédiatement à l'instant où l'instruction return est traitée.

- -
function compteur() {
-  for (var compte = 1; ; compte++) {  // boucle infinie
-    console.log(compte + "A"); // jusqu'à 5
-      if (compte === 5) {
-        return;
-      }
-      console.log(compte + "B");  // jusqu'à 4
-    }
-  console.log(compte + "C");  // cette instruction n'est jamais utilisée
-}
-
-compteur();
-
-// Résultat dans la console :
-// 1A
-// 1B
-// 2A
-// 2B
-// 3A
-// 3B
-// 4A
-// 4B
-// 5A
-
- -

Renvoyer une fonction

- -

Pour en savoir plus sur les fermetures (closures), voir cet article sur les fermetures.

- -
function magique() {
-  return function calc(x) { return x * 42 };
-}
-
-var réponse = magique();
-réponse(1337); // 56154
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-12.9', 'Return statement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-return-statement', 'Return statement')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-return-statement', 'Return statement')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.return")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/return/index.md b/files/fr/web/javascript/reference/statements/return/index.md new file mode 100644 index 0000000000..44a2bc220f --- /dev/null +++ b/files/fr/web/javascript/reference/statements/return/index.md @@ -0,0 +1,166 @@ +--- +title: return +slug: Web/JavaScript/Reference/Statements/return +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/return +original_slug: Web/JavaScript/Reference/Instructions/return +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction return met fin à l'exécution d'une fonction et définit une valeur à renvoyer à la fonction appelante.

+ +
{{EmbedInteractiveExample("pages/js/statement-return.html")}}
+ +

Syntaxe

+ +
return [[expression]]; 
+ +
+
expression
+
L'expression dont on souhaite renvoyer la valeur. Si elle est absente, la valeur renvoyée par défaut sera {{jsxref("undefined")}}.
+
+ +

Description

+ +

Lorsqu'une instruction return est utilisée dans une fonction, l'exécution de la fonction se termine. Si une valeur est fournie, elle sera renvoyée à l'appelant de la fonction. Si l'expression définissant la valeur de retour de la fonction est absente, la valeur undefined sera renvoyée. Par exemple, voici une fonction qui renvoie le carré de son argument x (où x est un nombre) :

+ +
function carre(x) {
+  return x * x;
+}
+var demo = carre(3);
+// demo vaudra alors 9
+
+ +

Les instructions qui suivent causeront chacune l'arrêt de l'exécution d'une fonction :

+ +
return;
+return true;
+return false;
+return x;
+return x + y / 3;
+
+ +

Ajout automatique de point-virgule

+ +

L'instruction return peut être impactée par l'ajout automatique de point-virgule (ASI en anglais). Il est interdit d'avoir un caractère de fin de ligne entre le mot-clé return et l'expression :

+ +
return
+a + b;
+
+
+ +

Après ASI, cela sera transformé en :

+ +
return;
+a + b;
+// Avertissement console : "expression non accessible
+// après une instruction return sans point-virgule"
+
+ +
+

Note : À partir de Gecko 40 {{geckoRelease(40)}}, un avertissement sera affiché dans la console si l'analyse du code trouve une instruction semblable à une expression après une instruction return sans point-virgule. Voir le {{bug(1005110)}} pour plus d'informations.

+
+ +

Pour éviter ce problème et l'insertion automatique, on peut, si besoin, utiliser des parenthèses.

+ +
return (
+  a + b;
+);
+ +

Exemples

+ +

Utiliser return

+ +

La fonction suivante renvoie le carré de son argument :

+ +
function carré(x) {
+   return x * x;
+}
+
+ +

Interrompre une fonction

+ +

Une fonction s'arrête immédiatement à l'instant où l'instruction return est traitée.

+ +
function compteur() {
+  for (var compte = 1; ; compte++) {  // boucle infinie
+    console.log(compte + "A"); // jusqu'à 5
+      if (compte === 5) {
+        return;
+      }
+      console.log(compte + "B");  // jusqu'à 4
+    }
+  console.log(compte + "C");  // cette instruction n'est jamais utilisée
+}
+
+compteur();
+
+// Résultat dans la console :
+// 1A
+// 1B
+// 2A
+// 2B
+// 3A
+// 3B
+// 4A
+// 4B
+// 5A
+
+ +

Renvoyer une fonction

+ +

Pour en savoir plus sur les fermetures (closures), voir cet article sur les fermetures.

+ +
function magique() {
+  return function calc(x) { return x * 42 };
+}
+
+var réponse = magique();
+réponse(1337); // 56154
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale.
{{SpecName('ES5.1', '#sec-12.9', 'Return statement')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-return-statement', 'Return statement')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-return-statement', 'Return statement')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.return")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/switch/index.html b/files/fr/web/javascript/reference/statements/switch/index.html deleted file mode 100644 index 7bf20d5913..0000000000 --- a/files/fr/web/javascript/reference/statements/switch/index.html +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: switch -slug: Web/JavaScript/Reference/Statements/switch -tags: - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/switch -original_slug: Web/JavaScript/Reference/Instructions/switch ---- -
{{jsSidebar("Statements")}}
- -

L'instruction switch évalue une expression et, selon le résultat obtenu et le cas associé, exécute les instructions correspondantes.

- -
{{EmbedInteractiveExample("pages/js/statement-switch.html")}}
- -

Syntaxe

- -
switch (expression) {
-  case valeur1:
-    // Instructions à exécuter lorsque le résultat
-    // de l'expression correspond à valeur1
-    instructions1;
-    [break;]
-  case valeur2:
-    // Instructions à exécuter lorsque le résultat
-    // de l'expression correspond à valeur2
-    instructions 2;
-    [break;]
-  ...
-  case valeurN:
-    // Instructions à exécuter lorsque le résultat
-    // de l'expression à valeurN
-    instructionsN;
-    [break;]
-  [default:
-    // Instructions à exécuter lorsqu'aucune des valeurs
-    // ne correspond
-    instructions_def;
-    [break;]]
-}
- -
-
expression
-
Une expression à comparer avec chacune des clause case.
-
case expressionN {{optional_inline}}
-
Une clause qu'on compare avec expression.
-
default {{optional_inline}}
-
Une clause exécutée si aucune correspondance n'est trouvée avec les clause case (et/ou s'il n'y a pas de break pour les clauses case précédentes).
-
instructionsN
-
Les instructions à exécuter lorsque l'expression correspond au cas présenté pour cette clause.
-
instructions_def
-
Les instructions à exécuter si l'expression ne correspond à aucun cas de figure précédemment décrit.
-
- -

Description

- -

Une instruction switch commence par évaluer l'expression fournie (cette évaluation ne se produit qu'une fois). Si une correspondance est trouvée, le programme exécutera les instructions associées. Si plusieurs cas de figure correspondent, le premier sera sélectionné (même si les cas sont différents les uns des autres).

- -

Le programme recherche tout d'abord une clause case dont l'expression est évaluée avec la même valeur que l'expression d'entrée (au sens de {{jsxref("Opérateurs/Opérateurs_de_comparaison","l'égalité stricte","#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)",1)}}. Si une telle clause est trouvée, les instructions associées sont exécutées. Si aucune clause case n'est trouvée, le programme recherche la clause optionnelle default et si elle existe, les instructions correspondantes sont exécutées. Si cette clause optionnelle n'est pas utilisée, le programme continue son exécution après l'instruction switch. Par convention, la clause default est utilisée en dernière mais cela n'est pas nécessaire.

- -

L'instruction {{jsxref("Instructions/break","break")}} peut optionnellement être utilisée pour chaque cas et permet de s'assurer que seules les instructions associées à ce cas seront exécutées. Si break n'est pas utilisé, le programme continuera son exécution avec les instructions suivantes (des autres cas de l'instruction switch).

- -

Exemples

- -

Utiliser switch

- -

Dans l'exemple suivant, si l'expression expr vaut "Bananes", le programme trouve la correspondance et exécute l'instruction associée. Lorsque l'instruction break est trouvée, le programme « sort » de l'instruction switch et continue l'exécution avec les instructions  suivantes. Si break n'avait pas été utilisé, l'instruction du cas "Cerises" aurait également été exécutée.

- -
switch (expr) {
-  case "Oranges":
-    console.log("Oranges : 0.59 € le kilo.");
-    break;
-  case "Pommes":
-    console.log("Pommes : 0.32 € le kilo.");
-    break;
-  case "Bananes":
-    console.log("Bananes : 0.48 € le kilo.");
-    break;
-  case "Cerises":
-    console.log("Cerises : 3.00 € le kilo.");
-    break;
-  case "Mangues":
-  case "Papayes":
-    console.log("Mangues et papayes : 2.79 € le kilo.");
-    break;
-  default:
-    console.log("Désolé, nous n'avons plus de " + expr + ".");
-}
-
-console.log("Autre chose ?");
-
- -

Que se passe-t-il si on oublie un break ?

- -

Si on omet une instruction break, le script exécutera les instructions pour le cas correspondant et aussi celles pour les cas suivants jusqu'à la fin de l'instruction switch ou jusqu'à une instruction break. Par exemple :

- -
var toto = 0;
-switch (toto) {
-    case -1:
-        console.log('moins un');
-        break;
-    case 0: // toto vaut 0 donc ce cas correspond
-        console.log(0);
-        // NOTE : le break aurait du être placé ici
-    case 1: // pas de break pour 'case 0:' les instructions de ce cas sont
-            // exécutées aussi
-        console.log(1);
-        break; // on a un break a ce niveau donc les instructions
-               // des cas suivants ne seront pas exécutées
-    case 2:
-        console.log(2);
-        break;
-    default:
-        console.log('default');
-}
- -

Peut-on intercaler la règle par défaut ?

- -

Oui, il est possible de placer le cas default entre deux autres cas. Ainsi, si on a une valeur qui ne correspond pas aux différents cas, elle passera par le bloc default puis par les autres s'il n'y a pas de break. Par exemple :

- -
var toto = 5
-switch (toto) {
-  case 2:
-    console.log(2); // ne sera pas exécuté
-    break;
-  default:
-    console.log("default"); // sera exécuté
-  case 1:
-    console.log("1"); // sera exécuté car il n'y a
-                      // pas de break avant
-}
-// La console affichera "default" puis "1"
-
- -

Méthodes pour regrouper différents cas

- -

Pour la source depuis laquelle les exemples suivants ont été adaptés, voir cette question Stack Overflow.

- -

Regrouper différents cas pour exécuter une unique opération

- -

Cette méthode utilise le fait que s'il n'y a pas d'instruction {{jsxref("Instructions/break","break")}}, l'exécution se poursuivra avec les instructions des cas suivants (même si les expressions de ces cas ne correspondent pas à la valeur de l'expression d'entrée).

- -

On peut donc regrouper différentes valeurs les unes à la suite des autres pour exécuter des instructions pour ces valeurs :

- -
var animal = 'girafe';
-switch (animal) {
-    case 'vache':
-    case 'girafe':
-    case 'chien':
-    case 'cochon':
-        console.log('Cet animal est un mammifère');
-        break;
-    case 'oiseau':
-    default:
-        console.log('Cet animal n\'est pas un mammifère.');
-}
- -

Chaîner des opérations

- -

Dans l'exemple qui suit, on illustre comment exécuter une série d'instructions qui varie en fonction du paramètre (ici un entier) fourni. Cela montre que les différents cas sont testés dans l'ordre dans lequel ils sont mis au sein du switch :

- -
var toto = 1;
-var output = 'Résultat : ';
-switch (toto) {
-    case 0:
-        output += 'Donc ';
-    case 1:
-        output += 'quel ';
-        output += 'est ';
-    case 2:
-        output += 'votre ';
-    case 3:
-        output += 'nom ';
-    case 4:
-        output += '?';
-        console.log(output);
-        break;
-    case 5:
-        output += '!';
-        console.log(output);
-        break;
-    default:
-        console.log('Veuillez choisir un nombre entre 0 et 5 !');
-}
- -

Selon les valeurs fournies à la variable toto, on aura les résultats suivants :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValeurTexte
toto vaut {{jsxref("NaN")}} ou est différent de 1, 2, 3, 4, 5 ou 0Veuillez choisir un nombre entre 0 et 5 !
0Résultat : Donc quel est votre nom ?
1Résultat : quel est votre nom ?
2Résultat : votre nom ?
3Résultat : nom ?
4Résultat : ?
5Résultat : !
- -

switch et les variables avec une portée de bloc

- -

Avec ECMAScript 2015 (ES6), on peut utiliser les instructions let et const pour déclarer des variables dont la portée sera celle du bloc englobant.

- -

Prenons cet exemple :

- -
const action = 'dire_bonjour';
-switch (action) {
-  case 'dire_bonjour':
-    let message = 'bonjour';
-    console.log(message);
-    break;
-  case 'dire_coucou':
-    let message = 'coucou';
-    console.log(message);
-    break;
-  default:
-    console.log('Aucune action reçue.');
-    break;
-}
- -

Si on exécute cet exemple, on aura l'erreur Uncaught SyntaxError: Identifier 'message' has already been declared qui n'est probablement pas le résultat espéré.

- -

Cela se produit car la première instruction let message = 'bonjour'; entre en conflit avec let message = 'coucou'; bien qu'elles soient rattachées à deux instructions case distinctes case 'dire_bonjour': et case 'dire_coucou': mais ces deux instructions s'inscrivent dans le même bloc et on a donc message déclaré deux fois dans le même bloc, soit deux fois dans la même portée.

- -

Pour régler ce problème, il suffit de rajouter des accolades pour définir un bloc d'instructions pour chaque case :

- -
const action = 'dire_bonjour';
-switch (action) {
-  case 'dire_bonjour': { // accolade ajoutée
-    let message = 'bonjour';
-    console.log(message);
-    break;
-  } // accolade ajoutée
-  case 'dire_coucou': { // accolade ajoutée
-    let message = 'coucou';
-    console.log(message);
-    break;
-  } // accolade ajoutée
-  default: { // accolade ajoutée
-    console.log('Aucune action reçue.');
-    break;
-  } // accolade ajoutée
-}
- -

Cette nouvelle version, exécutée, produira "bonjour" dans la console, sans causer d'erreur.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-12.11', 'instruction switch')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-switch-statement', 'instruction switch')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-switch-statement', 'switch statement')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.switch")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/switch/index.md b/files/fr/web/javascript/reference/statements/switch/index.md new file mode 100644 index 0000000000..7bf20d5913 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/switch/index.md @@ -0,0 +1,314 @@ +--- +title: switch +slug: Web/JavaScript/Reference/Statements/switch +tags: + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/switch +original_slug: Web/JavaScript/Reference/Instructions/switch +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction switch évalue une expression et, selon le résultat obtenu et le cas associé, exécute les instructions correspondantes.

+ +
{{EmbedInteractiveExample("pages/js/statement-switch.html")}}
+ +

Syntaxe

+ +
switch (expression) {
+  case valeur1:
+    // Instructions à exécuter lorsque le résultat
+    // de l'expression correspond à valeur1
+    instructions1;
+    [break;]
+  case valeur2:
+    // Instructions à exécuter lorsque le résultat
+    // de l'expression correspond à valeur2
+    instructions 2;
+    [break;]
+  ...
+  case valeurN:
+    // Instructions à exécuter lorsque le résultat
+    // de l'expression à valeurN
+    instructionsN;
+    [break;]
+  [default:
+    // Instructions à exécuter lorsqu'aucune des valeurs
+    // ne correspond
+    instructions_def;
+    [break;]]
+}
+ +
+
expression
+
Une expression à comparer avec chacune des clause case.
+
case expressionN {{optional_inline}}
+
Une clause qu'on compare avec expression.
+
default {{optional_inline}}
+
Une clause exécutée si aucune correspondance n'est trouvée avec les clause case (et/ou s'il n'y a pas de break pour les clauses case précédentes).
+
instructionsN
+
Les instructions à exécuter lorsque l'expression correspond au cas présenté pour cette clause.
+
instructions_def
+
Les instructions à exécuter si l'expression ne correspond à aucun cas de figure précédemment décrit.
+
+ +

Description

+ +

Une instruction switch commence par évaluer l'expression fournie (cette évaluation ne se produit qu'une fois). Si une correspondance est trouvée, le programme exécutera les instructions associées. Si plusieurs cas de figure correspondent, le premier sera sélectionné (même si les cas sont différents les uns des autres).

+ +

Le programme recherche tout d'abord une clause case dont l'expression est évaluée avec la même valeur que l'expression d'entrée (au sens de {{jsxref("Opérateurs/Opérateurs_de_comparaison","l'égalité stricte","#.C3.89galit.C3.A9_stricte_(.3D.3D.3D)",1)}}. Si une telle clause est trouvée, les instructions associées sont exécutées. Si aucune clause case n'est trouvée, le programme recherche la clause optionnelle default et si elle existe, les instructions correspondantes sont exécutées. Si cette clause optionnelle n'est pas utilisée, le programme continue son exécution après l'instruction switch. Par convention, la clause default est utilisée en dernière mais cela n'est pas nécessaire.

+ +

L'instruction {{jsxref("Instructions/break","break")}} peut optionnellement être utilisée pour chaque cas et permet de s'assurer que seules les instructions associées à ce cas seront exécutées. Si break n'est pas utilisé, le programme continuera son exécution avec les instructions suivantes (des autres cas de l'instruction switch).

+ +

Exemples

+ +

Utiliser switch

+ +

Dans l'exemple suivant, si l'expression expr vaut "Bananes", le programme trouve la correspondance et exécute l'instruction associée. Lorsque l'instruction break est trouvée, le programme « sort » de l'instruction switch et continue l'exécution avec les instructions  suivantes. Si break n'avait pas été utilisé, l'instruction du cas "Cerises" aurait également été exécutée.

+ +
switch (expr) {
+  case "Oranges":
+    console.log("Oranges : 0.59 € le kilo.");
+    break;
+  case "Pommes":
+    console.log("Pommes : 0.32 € le kilo.");
+    break;
+  case "Bananes":
+    console.log("Bananes : 0.48 € le kilo.");
+    break;
+  case "Cerises":
+    console.log("Cerises : 3.00 € le kilo.");
+    break;
+  case "Mangues":
+  case "Papayes":
+    console.log("Mangues et papayes : 2.79 € le kilo.");
+    break;
+  default:
+    console.log("Désolé, nous n'avons plus de " + expr + ".");
+}
+
+console.log("Autre chose ?");
+
+ +

Que se passe-t-il si on oublie un break ?

+ +

Si on omet une instruction break, le script exécutera les instructions pour le cas correspondant et aussi celles pour les cas suivants jusqu'à la fin de l'instruction switch ou jusqu'à une instruction break. Par exemple :

+ +
var toto = 0;
+switch (toto) {
+    case -1:
+        console.log('moins un');
+        break;
+    case 0: // toto vaut 0 donc ce cas correspond
+        console.log(0);
+        // NOTE : le break aurait du être placé ici
+    case 1: // pas de break pour 'case 0:' les instructions de ce cas sont
+            // exécutées aussi
+        console.log(1);
+        break; // on a un break a ce niveau donc les instructions
+               // des cas suivants ne seront pas exécutées
+    case 2:
+        console.log(2);
+        break;
+    default:
+        console.log('default');
+}
+ +

Peut-on intercaler la règle par défaut ?

+ +

Oui, il est possible de placer le cas default entre deux autres cas. Ainsi, si on a une valeur qui ne correspond pas aux différents cas, elle passera par le bloc default puis par les autres s'il n'y a pas de break. Par exemple :

+ +
var toto = 5
+switch (toto) {
+  case 2:
+    console.log(2); // ne sera pas exécuté
+    break;
+  default:
+    console.log("default"); // sera exécuté
+  case 1:
+    console.log("1"); // sera exécuté car il n'y a
+                      // pas de break avant
+}
+// La console affichera "default" puis "1"
+
+ +

Méthodes pour regrouper différents cas

+ +

Pour la source depuis laquelle les exemples suivants ont été adaptés, voir cette question Stack Overflow.

+ +

Regrouper différents cas pour exécuter une unique opération

+ +

Cette méthode utilise le fait que s'il n'y a pas d'instruction {{jsxref("Instructions/break","break")}}, l'exécution se poursuivra avec les instructions des cas suivants (même si les expressions de ces cas ne correspondent pas à la valeur de l'expression d'entrée).

+ +

On peut donc regrouper différentes valeurs les unes à la suite des autres pour exécuter des instructions pour ces valeurs :

+ +
var animal = 'girafe';
+switch (animal) {
+    case 'vache':
+    case 'girafe':
+    case 'chien':
+    case 'cochon':
+        console.log('Cet animal est un mammifère');
+        break;
+    case 'oiseau':
+    default:
+        console.log('Cet animal n\'est pas un mammifère.');
+}
+ +

Chaîner des opérations

+ +

Dans l'exemple qui suit, on illustre comment exécuter une série d'instructions qui varie en fonction du paramètre (ici un entier) fourni. Cela montre que les différents cas sont testés dans l'ordre dans lequel ils sont mis au sein du switch :

+ +
var toto = 1;
+var output = 'Résultat : ';
+switch (toto) {
+    case 0:
+        output += 'Donc ';
+    case 1:
+        output += 'quel ';
+        output += 'est ';
+    case 2:
+        output += 'votre ';
+    case 3:
+        output += 'nom ';
+    case 4:
+        output += '?';
+        console.log(output);
+        break;
+    case 5:
+        output += '!';
+        console.log(output);
+        break;
+    default:
+        console.log('Veuillez choisir un nombre entre 0 et 5 !');
+}
+ +

Selon les valeurs fournies à la variable toto, on aura les résultats suivants :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValeurTexte
toto vaut {{jsxref("NaN")}} ou est différent de 1, 2, 3, 4, 5 ou 0Veuillez choisir un nombre entre 0 et 5 !
0Résultat : Donc quel est votre nom ?
1Résultat : quel est votre nom ?
2Résultat : votre nom ?
3Résultat : nom ?
4Résultat : ?
5Résultat : !
+ +

switch et les variables avec une portée de bloc

+ +

Avec ECMAScript 2015 (ES6), on peut utiliser les instructions let et const pour déclarer des variables dont la portée sera celle du bloc englobant.

+ +

Prenons cet exemple :

+ +
const action = 'dire_bonjour';
+switch (action) {
+  case 'dire_bonjour':
+    let message = 'bonjour';
+    console.log(message);
+    break;
+  case 'dire_coucou':
+    let message = 'coucou';
+    console.log(message);
+    break;
+  default:
+    console.log('Aucune action reçue.');
+    break;
+}
+ +

Si on exécute cet exemple, on aura l'erreur Uncaught SyntaxError: Identifier 'message' has already been declared qui n'est probablement pas le résultat espéré.

+ +

Cela se produit car la première instruction let message = 'bonjour'; entre en conflit avec let message = 'coucou'; bien qu'elles soient rattachées à deux instructions case distinctes case 'dire_bonjour': et case 'dire_coucou': mais ces deux instructions s'inscrivent dans le même bloc et on a donc message déclaré deux fois dans le même bloc, soit deux fois dans la même portée.

+ +

Pour régler ce problème, il suffit de rajouter des accolades pour définir un bloc d'instructions pour chaque case :

+ +
const action = 'dire_bonjour';
+switch (action) {
+  case 'dire_bonjour': { // accolade ajoutée
+    let message = 'bonjour';
+    console.log(message);
+    break;
+  } // accolade ajoutée
+  case 'dire_coucou': { // accolade ajoutée
+    let message = 'coucou';
+    console.log(message);
+    break;
+  } // accolade ajoutée
+  default: { // accolade ajoutée
+    console.log('Aucune action reçue.');
+    break;
+  } // accolade ajoutée
+}
+ +

Cette nouvelle version, exécutée, produira "bonjour" dans la console, sans causer d'erreur.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2
{{SpecName('ES5.1', '#sec-12.11', 'instruction switch')}}{{Spec2('ES5.1')}} 
{{SpecName('ES6', '#sec-switch-statement', 'instruction switch')}}{{Spec2('ES6')}} 
{{SpecName('ESDraft', '#sec-switch-statement', 'switch statement')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.switch")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/throw/index.html b/files/fr/web/javascript/reference/statements/throw/index.html deleted file mode 100644 index 4f250245c0..0000000000 --- a/files/fr/web/javascript/reference/statements/throw/index.html +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: throw -slug: Web/JavaScript/Reference/Statements/throw -tags: - - Exception - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/throw -original_slug: Web/JavaScript/Reference/Instructions/throw ---- -
{{jsSidebar("Statements")}}
- -

L'instruction throw permet de lever une exception définie par l'utilisateur. L'exécution de la fonction courante sera stoppée (les instructions situées après l'instruction throw ne seront pas exécutées) et le contrôle sera passé au premier bloc {{jsxref("Instructions/try...catch","catch")}} de la pile d'appels. Si aucun bloc catch ne se trouve dans les fonctions de la pile d'appels, le programme sera terminé.

- -
{{EmbedInteractiveExample("pages/js/statement-throw.html")}}
- -

Syntaxe

- -
throw expression; 
- -
-
expression
-
L'expression qui fournit l'exception à lever.
-
- -

Description

- -

L'instruction throw permet de lever (throw en anglais) une exception. Lorsqu'on lève une exception, expression fournit la valeur de l'exception. Chacune des instructions ci-après permet de lever une exception :

- -
throw "monErreur"; // génère une exception étant une chaîne de caractères
-throw 42;          // génère une exception ayant la valeur 42
-throw true;        // génère une exception ayant la valeur true
-throw new Error("Obligatoire");  // génère un objet Error avec le message "Obligatoire"
- -

On notera également que l'instruction throw est affectée par {{jsxref("Grammaire_lexicale","l'insertion automatique de point-virgule","#Insertion_automatique_de_points-virgules",1)}} car il n'est pas permis d'avoir un caractère de fin de ligne entre le mot-clé throw et l'expression.

- -

Exemples

- -

Lever une exception qui est un objet

- -

Il est possible de lever une exception qui est un objet et de faire référence aux propriétés de cet objet au sein du bloc catch. Dans l'exemple suivant, on crée un objet monException du type ExceptionUtilisateur puis on utilise cet objet avec une instruction throw.

- -
function ExceptionUtilisateur(message) {
-   this.message = message;
-   this.name = "ExceptionUtilisateur";
-}
-function getNomMois(mo) {
-   mo = mo-1; // Adjust month number for array index (1=Jan, 12=Dec)
-   var mois = ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil",
-      "Août", "Sept", "Oct", "Nov", "Déc"];
-   if (mois[mo] !== undefined) {
-      return mois[mo];
-   } else {
-      throw new ExceptionUtilisateur("Numéro de mois invalide");
-   }
-}
-
-try {
-   // les instructions à tenter
-   var monMois = 15; // 15 est en dehors des limites prévues
-   var nomMois = getNomMois(monMois);
-} catch (e) {
-   nomMois = "unknown";
-   console.error(e.message, e.name); // on passe les caractéristiques de l'exception
-                                     // à un gestionnaire d'erreur
-}
-
- -

Deuxième exemple avec un objet

- -

Ici, on cherche à valider une chaîne de caractères représentant un code postal américain. Si le format utilisé est invalide, cela provoquera une exception avec un objet du type ZipFormatIncorrectException. (Le mot-clé {{jsxref("Instructions/const","const")}} introduit avec ECMAScript 6 est utilisé dans cet exemple).

- -
/*
- * Crée un objet ZipCode.
- *
- * Les formats acceptés sont :
- *    12345
- *    12345-6789
- *    123456789
- *    12345 6789
- *
- * Si l'argument passé au constructeur ZipCode n'est pas conforme
- * à un de ces formats, une exception sera levée.
- */
-
-function ZipCode(zip) {
-   zip = new String(zip);
-   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
-   if (pattern.test(zip)) {
-      // la valeur du code sera la première correspondance
-      // dans la chaîne
-      this.value = zip.match(pattern)[0];
-      this.valueOf = function() {
-         return this.value
-      };
-      this.toString = function() {
-         return String(this.value)
-      };
-   } else {
-      throw new ZipFormatIncorrectException(zip);
-   }
-}
-
-function ZipFormatIncorrectException(value) {
-   this.value = value;
-   this.message = "le format n'est pas conforme";
-   this.toString = function() {
-      return this.value + this.message;
-   };
-}
-
-/*
- * Cette fonction pourrait être utilisée dans un script
- * pour valider des adresses
- */
-
-const ZIPCODE_INVALID = -1;
-const ZIPCODE_UNKNOWN_ERROR = -2;
-
-function vérifierZipCode(z) {
-   try {
-      z = new ZipCode(z);
-   } catch (e) {
-      if (e instanceof ZipFormatIncorrectException) {
-         return ZIPCODE_INVALID;
-      } else {
-         return ZIPCODE_UNKNOWN_ERROR;
-      }
-   }
-   return z;
-}
-
-a = vérifierZipCode(95060);         // renvoie 95060
-b = vérifierZipCode(9560);          // renvoie -1
-c = vérifierZipCode("a");           // renvoie -1
-d = vérifierZipCode("95060");       // renvoie 95060
-e = vérifierZipCode("95060 1234");  // renvoie 95060 1234
-
- -

Propager une exception

- -

L'instruction throw peut être utilisée pour transmettre une exception qui aurait été interceptée avec {{jsxref("Instructions/try...catch","catch")}}. Dans l'exemple suivant, on intercepte une exception avec une valeur numérique et on propage l'exception si la valeur est supérieure à 50. L'exception qui est levée se propage dans la fonction appelante ou au niveau le plus haut, visible par l'utilisateur.

- -
try {
-   throw n; // lève une exception avec une valeur numérique
-} catch (e) {
-   if (e <= 50) {
-      // des instructions pour gérer les cas entre 1 et 50
-   } else {
-      // ce cas ne peut pas être géré maintenant, on transmet l'exception
-      throw e;
-   }
-}
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4
{{SpecName('ES5.1', '#sec-12.13', 'throw statement')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-throw-statement', 'throw statement')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-throw-statement', 'throw statement')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.throw")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/throw/index.md b/files/fr/web/javascript/reference/statements/throw/index.md new file mode 100644 index 0000000000..4f250245c0 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/throw/index.md @@ -0,0 +1,198 @@ +--- +title: throw +slug: Web/JavaScript/Reference/Statements/throw +tags: + - Exception + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/throw +original_slug: Web/JavaScript/Reference/Instructions/throw +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction throw permet de lever une exception définie par l'utilisateur. L'exécution de la fonction courante sera stoppée (les instructions situées après l'instruction throw ne seront pas exécutées) et le contrôle sera passé au premier bloc {{jsxref("Instructions/try...catch","catch")}} de la pile d'appels. Si aucun bloc catch ne se trouve dans les fonctions de la pile d'appels, le programme sera terminé.

+ +
{{EmbedInteractiveExample("pages/js/statement-throw.html")}}
+ +

Syntaxe

+ +
throw expression; 
+ +
+
expression
+
L'expression qui fournit l'exception à lever.
+
+ +

Description

+ +

L'instruction throw permet de lever (throw en anglais) une exception. Lorsqu'on lève une exception, expression fournit la valeur de l'exception. Chacune des instructions ci-après permet de lever une exception :

+ +
throw "monErreur"; // génère une exception étant une chaîne de caractères
+throw 42;          // génère une exception ayant la valeur 42
+throw true;        // génère une exception ayant la valeur true
+throw new Error("Obligatoire");  // génère un objet Error avec le message "Obligatoire"
+ +

On notera également que l'instruction throw est affectée par {{jsxref("Grammaire_lexicale","l'insertion automatique de point-virgule","#Insertion_automatique_de_points-virgules",1)}} car il n'est pas permis d'avoir un caractère de fin de ligne entre le mot-clé throw et l'expression.

+ +

Exemples

+ +

Lever une exception qui est un objet

+ +

Il est possible de lever une exception qui est un objet et de faire référence aux propriétés de cet objet au sein du bloc catch. Dans l'exemple suivant, on crée un objet monException du type ExceptionUtilisateur puis on utilise cet objet avec une instruction throw.

+ +
function ExceptionUtilisateur(message) {
+   this.message = message;
+   this.name = "ExceptionUtilisateur";
+}
+function getNomMois(mo) {
+   mo = mo-1; // Adjust month number for array index (1=Jan, 12=Dec)
+   var mois = ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil",
+      "Août", "Sept", "Oct", "Nov", "Déc"];
+   if (mois[mo] !== undefined) {
+      return mois[mo];
+   } else {
+      throw new ExceptionUtilisateur("Numéro de mois invalide");
+   }
+}
+
+try {
+   // les instructions à tenter
+   var monMois = 15; // 15 est en dehors des limites prévues
+   var nomMois = getNomMois(monMois);
+} catch (e) {
+   nomMois = "unknown";
+   console.error(e.message, e.name); // on passe les caractéristiques de l'exception
+                                     // à un gestionnaire d'erreur
+}
+
+ +

Deuxième exemple avec un objet

+ +

Ici, on cherche à valider une chaîne de caractères représentant un code postal américain. Si le format utilisé est invalide, cela provoquera une exception avec un objet du type ZipFormatIncorrectException. (Le mot-clé {{jsxref("Instructions/const","const")}} introduit avec ECMAScript 6 est utilisé dans cet exemple).

+ +
/*
+ * Crée un objet ZipCode.
+ *
+ * Les formats acceptés sont :
+ *    12345
+ *    12345-6789
+ *    123456789
+ *    12345 6789
+ *
+ * Si l'argument passé au constructeur ZipCode n'est pas conforme
+ * à un de ces formats, une exception sera levée.
+ */
+
+function ZipCode(zip) {
+   zip = new String(zip);
+   pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
+   if (pattern.test(zip)) {
+      // la valeur du code sera la première correspondance
+      // dans la chaîne
+      this.value = zip.match(pattern)[0];
+      this.valueOf = function() {
+         return this.value
+      };
+      this.toString = function() {
+         return String(this.value)
+      };
+   } else {
+      throw new ZipFormatIncorrectException(zip);
+   }
+}
+
+function ZipFormatIncorrectException(value) {
+   this.value = value;
+   this.message = "le format n'est pas conforme";
+   this.toString = function() {
+      return this.value + this.message;
+   };
+}
+
+/*
+ * Cette fonction pourrait être utilisée dans un script
+ * pour valider des adresses
+ */
+
+const ZIPCODE_INVALID = -1;
+const ZIPCODE_UNKNOWN_ERROR = -2;
+
+function vérifierZipCode(z) {
+   try {
+      z = new ZipCode(z);
+   } catch (e) {
+      if (e instanceof ZipFormatIncorrectException) {
+         return ZIPCODE_INVALID;
+      } else {
+         return ZIPCODE_UNKNOWN_ERROR;
+      }
+   }
+   return z;
+}
+
+a = vérifierZipCode(95060);         // renvoie 95060
+b = vérifierZipCode(9560);          // renvoie -1
+c = vérifierZipCode("a");           // renvoie -1
+d = vérifierZipCode("95060");       // renvoie 95060
+e = vérifierZipCode("95060 1234");  // renvoie 95060 1234
+
+ +

Propager une exception

+ +

L'instruction throw peut être utilisée pour transmettre une exception qui aurait été interceptée avec {{jsxref("Instructions/try...catch","catch")}}. Dans l'exemple suivant, on intercepte une exception avec une valeur numérique et on propage l'exception si la valeur est supérieure à 50. L'exception qui est levée se propage dans la fonction appelante ou au niveau le plus haut, visible par l'utilisateur.

+ +
try {
+   throw n; // lève une exception avec une valeur numérique
+} catch (e) {
+   if (e <= 50) {
+      // des instructions pour gérer les cas entre 1 et 50
+   } else {
+      // ce cas ne peut pas être géré maintenant, on transmet l'exception
+      throw e;
+   }
+}
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4
{{SpecName('ES5.1', '#sec-12.13', 'throw statement')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-throw-statement', 'throw statement')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-throw-statement', 'throw statement')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.throw")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/try...catch/index.html b/files/fr/web/javascript/reference/statements/try...catch/index.html deleted file mode 100644 index 3eaf41da6e..0000000000 --- a/files/fr/web/javascript/reference/statements/try...catch/index.html +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: try...catch -slug: Web/JavaScript/Reference/Statements/try...catch -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/try...catch -original_slug: Web/JavaScript/Reference/Instructions/try...catch ---- -
{{jsSidebar("Statements")}}
- -

L'instruction try...catch regroupe des instructions à exécuter et définit une réponse si l'une de ces instructions provoque une exception.

- -
{{EmbedInteractiveExample("pages/js/statement-trycatch.html")}}
- -

Syntaxe

- -
try {
-   instructions_try
-}
-[catch (exception_var_1 if condition_1) { // non-standard
-   instructions_catch_1
-}]
-...
-[catch (exception_var_2) {
-   instructions_catch_2
-}]
-[finally {
-   instructions_finally
-}]
-
- -
-
instructions_try
-
Les instructions qu'on souhaite exécuter.
-
instructions_catch_1, instructions_catch_2
-
Les instructions à exécuter si une exception est levée dans le bloc try.
-
exception_var_1, exception_var_2
-
Un identifiant qui permet de récupérer la valeur de l'exception associée à la clause catch.
-
condition_1
-
Une expression conditionnelle.
-
instructions_finally
-
Les instructions à exécuter une fois que l'instruction try est terminée. Ces instructions s'exécuteront, qu'il y ait eu une exception ou non.
-
- -

Description

- -

L'instruction try est composée d'un bloc try contenant une ou plusieurs instructions, d'au moins une clause catch ou d'une clause finally ou des deux. On peut donc avoir les trois formes suivantes pour cette instruction :

- -
    -
  1. try...catch
  2. -
  3. try...finally
  4. -
  5. try...catch...finally
  6. -
- -

Une clause catch contient les instructions à exécuter si une exception est levée par une instruction du bloc try. On souhaite généralement que le bloc try se déroule sans problème. Si toutefois une erreur se produit, on veut pouvoir contrôler ce qui se passe et on transmet donc le contrôle au bloc catch. Si une instruction contenue dans le bloc try (ou une fonction appelée depuis le bloc try) renvoie une exception, le contrôle sera immédiatement passé à la clause catch. Si aucune exception n'est levée, la clause catch ne sera pas utilisée.

- -

La clause finally s'exécute après le bloc try et après le bloc catch (si celui-ci a été déclenché) mais avant les instructions qui suivent. Les instructions de cette clause sont toujours exécutées, qu'il y ait eu ou non une exception de déclenchée et/ou d'interceptée.

- -

Il est possible d'imbriquer plusieurs instructions try. Si un try imbriqué ne possède pas de clause catch, la clause catch du try du niveau supérieur sera utilisée (et ainsi de suite).

- -

Pour plus d'informations sur les exceptions et les erreurs en JavaScript, voir le chapitre du Guide JavaScript correspondant.

- -

Clause catch inconditionnelle

- -

Lorsqu'une seule clause catch inconditionnelle est utilisée, le bloc catch est utilisée pour n'importe quelle exception qui est levée. Ainsi, dans le fragment de code qui suit, pour toute exception produite, le contrôle de l'exécution passera à la clause catch.

- -
try {
-   throw "monException"; // génère une exception
-}
-catch (e) {
-   // les instructions utilisées pour gérer les
-   // exceptions
-   logErreurs(e); // on transfère l'objet de l'exception à une méthode
-                  // gestionnaire
-}
-
- -

La clause catch définit un identifiant (dans l'exemple précédent, c'est e) qui contient la valeur définie par l'instruction throw. Ce bloc catch est en quelque sorte unique en JavaScript car l'identifiant est créé lors de l'entrée dans le bloc catch, la valeur est alors ajoutée à la portée courant et la durée de vie de l'identifiant est limitée au bloc catch. Une fois que le bloc catch a été exécuté, l'identifiant n'est plus disponible.

- -

Clauses catch conditionnelles

- -

{{non-standard_header}}

- -

Il est aussi possible d'utiliser une ou plusieurs clauses catch conditionnelles afin de gérer des exceptions spécifiques. Dans ce cas, selon l'exception produite, la clause catch appropriée sera utilisée. Dans l'exemple qui suit, le code contenu dans le bloc try peut produire trois exceptions : {{jsxref("TypeError")}}, {{jsxref("RangeError")}}, et {{jsxref("EvalError")}}. Lorsqu'une exception se produit, le contrôle de l'exécution est passé à la clause catch correspondante. SI l'exception qui est déclenchée ne correspond à aucune des conditions, le contrôle passera à la clause catch non-conditionnelle si elle est trouvée..

- -

Si on utilise une clause catch inconditionnelle avec une ou plusieurs clauses catch conditionnelles, la clause inconditionnelle doit être spécifiée en dernière. Si ce n'est pas le cas, la clause catch inconditionnelle interceptera tous les types d'exceptions avant les autres clauses.

- -
try {
-    maRoutine(); // peut déclencher trois types d'exceptions
-} catch (e if e instanceof TypeError) {
-    // les instructions pour gérer TypeError
-} catch (e if e instanceof RangeError) {
-    // les instructions pour gérer RangeError
-} catch (e if e instanceof EvalError) {
-    // les instructions pour gérer EvalError
-} catch (e) {
-    // les instructions pour gérer les autres exceptions
-}
-
- -

Dans le fragment de code qui suit, on aura le même fonctionnement mais en utilisant uniquement des fonctionnalités standard (selon ECMAScript). Ce code est plus long mais fonctionne pour tous les environnements conformes à ECMAScript :

- -
try {
-    maRoutine(); // may throw three types of exceptions
-} catch (e) {
-    if (e instanceof TypeError) {
-        // les instructions pour gérer TypeError
-    } else if (e instanceof RangeError) {
-        // les instructions pour gérer RangeError
-    } else if (e instanceof EvalError) {
-        // les instructions pour gérer EvalError
-    } else {
-       // les instructions pour gérer les autres exceptions
-    }
-}
-
- -

L'identifiant de l'exception

- -

Lorsqu'une exception est levée dans le bloc try, exception_var (par exemple le e dans « catch (e) ») contient la valeur définie par l'instruction {{jsxref("Instructions/throw","throw")}}. Cet identifiant peut être utilisé pour accéder aux propriétés de l'objet et ainsi obtenir des informations sur l'exception qui a eu lieu. Cet identifiant est local à la clause catch, il est créé lorsqu'on rentre dans la clause catch et n'est plus disponible une fois que la clause a fini son exécution.

- -
function isValidJSON(txt){
-  try {
-    JSON.parse(txt);
-    return true;
-  } catch {
-    return false;
-  }
-}
- -

La clause finally

- -

La clause finally contient les instructions à exécuter après que les instructions du bloc try et éventuellement celles de la clause catch aient été exécutées mais avant que les instructions suivant l'instruction try soient exécutées. La clause finally est exécutée dans tous les cas (si on a eu une exception ou non). Si une exception est levée et qu'il n'y a pas de clause catch, les instructions de la clause finally sont tout de même exécutées.

- -

Cela peut paraître étrange qu'un bloc de code qui s'exécute même lorsqu'il y a une exception… Il faut comprendre que le code qui suit le bloc try...catch ne sera pas exécuté. Aussi, le bloc finally permet de contenir toutes les instructions de clôture/nettoyage nécessaire. On évite donc de dupliquer ce code qui doit toujours être utilisé.

- -

La clause finally peut être utilisée afin d'exécuter les actions nécessaires pour que le script « échoue correctement » en cas d'erreur. On peut par exemple tirer parti de finally pour fermer un flux, libérer une ressource, etc. Dans l'exemple suivant, exécuté côté serveur, le script accède à un fichier. Si une exception se produit lorsque le fichier est ouvert, la clause finally permet de fermer le fichier avant que le script échoue. Le code contenu dans le bloc finally sera exécuté même si on a une instruction return dans la section try ou dans la section catch.

- -
ouvrirMonFichier()
-try {
-   // on utilise une ressource
-   écrireDansMonFichier(mesDonnées);
-}
-finally {
-   fermerMonFichier(); // on ferme toujours la ressource
-}
-
- -

Exemples

- -

Blocs try imbriqués

- -

Tout d'abord, on utilise ce fragment de code, qui produit le résultat suivant :

- -
try {
-  try {
-    throw new Error("oups");
-  }
-  finally {
-    console.log("finally");
-  }
-}
-catch (ex) {
-  console.error("externe", ex.message);
-}
-
-// Produira dans la console :
-// "finally"
-// "externe" "oups"
-
- -

Et maintenant, si on a déjà intercepté l'exception avec une clause catch dans le bloc imbriqué :

- -
try {
-  try {
-    throw new Error("oups");
-  }
-  catch (ex) {
-    console.error("interne", ex.message);
-  }
-  finally {
-    console.log("finally");
-  }
-}
-catch (ex) {
-  console.error("externe", ex.message);
-}
-
-// Produira dans la console:
-// "interne" "oups"
-// "finally"
-
- -

Ensuite, si on propage l'erreur à nouveau :

- -
try {
-  try {
-    throw new Error("oups");
-  }
-  catch (ex) {
-    console.error("interne", ex.message);
-    throw ex;
-  }
-  finally {
-    console.log("finally");
-  }
-}
-catch (ex) {
-  console.error("externe", ex.message);
-}
-
-// Produira dans la console :
-// "interne" "oups"
-// "finally"
-// "externe" "oups"
-
- -

Toute exception ne sera interceptée qu'une seule fois par le bloc catch le plus « proche » à moins qu'elle ne soit retransmise à nouveau. Bien entendu, toute exception qui aura été levée par le bloc interne (il se peut que les instructions d'une clause catch provoquent une erreur) sera interceptée par le bloc externe.

- -

Valeur de retour et bloc finally

- -

Lorsque le bloc finally renvoie une valeur, c'est cette valeur qui devient la valeur de retour pour l'ensemble du bloc try-catch-finally et ce, peu importe, s'il y a des instructions {{jsxref("Instructions/return","return")}} dans les blocs try et catch. Cela inclue également les exceptions levées dans le bloc catch :

- -
try {
-  try {
-    throw new Error("oups");
-  }
-  catch (ex) {
-    console.error("interne", ex.message);
-    throw ex;
-  }
-  finally {
-    console.log("finally");
-    return;
-  }
-}
-catch (ex) {
-  console.error("externe", ex.message);
-}
-
-// Produira dans la console :
-// "interne" "oups"
-// "finally"
-
- -

Le "oups" externe n'est pas renvoyé car l'instruction return est utilisée dans la clause finally du bloc interne. Cela aurait également été le cas avec n'importe quelle valeur renvoyée par le bloc catch.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4
{{SpecName('ES5.1', '#sec-12.14', 'instruction try')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-try-statement', 'Instruction try')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-try-statement', 'try statement')}}{{Spec2('ESDraft')}}Points ne faisant pas partie du standard ECMA-262 actuel : utilisation de plusieurs clauses catch et de plusieurs clauses conditionnelles (extension liée à SpiderMonkey, correspondant à JavaScript 1.5).
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.try_catch")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/try...catch/index.md b/files/fr/web/javascript/reference/statements/try...catch/index.md new file mode 100644 index 0000000000..3eaf41da6e --- /dev/null +++ b/files/fr/web/javascript/reference/statements/try...catch/index.md @@ -0,0 +1,291 @@ +--- +title: try...catch +slug: Web/JavaScript/Reference/Statements/try...catch +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/try...catch +original_slug: Web/JavaScript/Reference/Instructions/try...catch +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction try...catch regroupe des instructions à exécuter et définit une réponse si l'une de ces instructions provoque une exception.

+ +
{{EmbedInteractiveExample("pages/js/statement-trycatch.html")}}
+ +

Syntaxe

+ +
try {
+   instructions_try
+}
+[catch (exception_var_1 if condition_1) { // non-standard
+   instructions_catch_1
+}]
+...
+[catch (exception_var_2) {
+   instructions_catch_2
+}]
+[finally {
+   instructions_finally
+}]
+
+ +
+
instructions_try
+
Les instructions qu'on souhaite exécuter.
+
instructions_catch_1, instructions_catch_2
+
Les instructions à exécuter si une exception est levée dans le bloc try.
+
exception_var_1, exception_var_2
+
Un identifiant qui permet de récupérer la valeur de l'exception associée à la clause catch.
+
condition_1
+
Une expression conditionnelle.
+
instructions_finally
+
Les instructions à exécuter une fois que l'instruction try est terminée. Ces instructions s'exécuteront, qu'il y ait eu une exception ou non.
+
+ +

Description

+ +

L'instruction try est composée d'un bloc try contenant une ou plusieurs instructions, d'au moins une clause catch ou d'une clause finally ou des deux. On peut donc avoir les trois formes suivantes pour cette instruction :

+ +
    +
  1. try...catch
  2. +
  3. try...finally
  4. +
  5. try...catch...finally
  6. +
+ +

Une clause catch contient les instructions à exécuter si une exception est levée par une instruction du bloc try. On souhaite généralement que le bloc try se déroule sans problème. Si toutefois une erreur se produit, on veut pouvoir contrôler ce qui se passe et on transmet donc le contrôle au bloc catch. Si une instruction contenue dans le bloc try (ou une fonction appelée depuis le bloc try) renvoie une exception, le contrôle sera immédiatement passé à la clause catch. Si aucune exception n'est levée, la clause catch ne sera pas utilisée.

+ +

La clause finally s'exécute après le bloc try et après le bloc catch (si celui-ci a été déclenché) mais avant les instructions qui suivent. Les instructions de cette clause sont toujours exécutées, qu'il y ait eu ou non une exception de déclenchée et/ou d'interceptée.

+ +

Il est possible d'imbriquer plusieurs instructions try. Si un try imbriqué ne possède pas de clause catch, la clause catch du try du niveau supérieur sera utilisée (et ainsi de suite).

+ +

Pour plus d'informations sur les exceptions et les erreurs en JavaScript, voir le chapitre du Guide JavaScript correspondant.

+ +

Clause catch inconditionnelle

+ +

Lorsqu'une seule clause catch inconditionnelle est utilisée, le bloc catch est utilisée pour n'importe quelle exception qui est levée. Ainsi, dans le fragment de code qui suit, pour toute exception produite, le contrôle de l'exécution passera à la clause catch.

+ +
try {
+   throw "monException"; // génère une exception
+}
+catch (e) {
+   // les instructions utilisées pour gérer les
+   // exceptions
+   logErreurs(e); // on transfère l'objet de l'exception à une méthode
+                  // gestionnaire
+}
+
+ +

La clause catch définit un identifiant (dans l'exemple précédent, c'est e) qui contient la valeur définie par l'instruction throw. Ce bloc catch est en quelque sorte unique en JavaScript car l'identifiant est créé lors de l'entrée dans le bloc catch, la valeur est alors ajoutée à la portée courant et la durée de vie de l'identifiant est limitée au bloc catch. Une fois que le bloc catch a été exécuté, l'identifiant n'est plus disponible.

+ +

Clauses catch conditionnelles

+ +

{{non-standard_header}}

+ +

Il est aussi possible d'utiliser une ou plusieurs clauses catch conditionnelles afin de gérer des exceptions spécifiques. Dans ce cas, selon l'exception produite, la clause catch appropriée sera utilisée. Dans l'exemple qui suit, le code contenu dans le bloc try peut produire trois exceptions : {{jsxref("TypeError")}}, {{jsxref("RangeError")}}, et {{jsxref("EvalError")}}. Lorsqu'une exception se produit, le contrôle de l'exécution est passé à la clause catch correspondante. SI l'exception qui est déclenchée ne correspond à aucune des conditions, le contrôle passera à la clause catch non-conditionnelle si elle est trouvée..

+ +

Si on utilise une clause catch inconditionnelle avec une ou plusieurs clauses catch conditionnelles, la clause inconditionnelle doit être spécifiée en dernière. Si ce n'est pas le cas, la clause catch inconditionnelle interceptera tous les types d'exceptions avant les autres clauses.

+ +
try {
+    maRoutine(); // peut déclencher trois types d'exceptions
+} catch (e if e instanceof TypeError) {
+    // les instructions pour gérer TypeError
+} catch (e if e instanceof RangeError) {
+    // les instructions pour gérer RangeError
+} catch (e if e instanceof EvalError) {
+    // les instructions pour gérer EvalError
+} catch (e) {
+    // les instructions pour gérer les autres exceptions
+}
+
+ +

Dans le fragment de code qui suit, on aura le même fonctionnement mais en utilisant uniquement des fonctionnalités standard (selon ECMAScript). Ce code est plus long mais fonctionne pour tous les environnements conformes à ECMAScript :

+ +
try {
+    maRoutine(); // may throw three types of exceptions
+} catch (e) {
+    if (e instanceof TypeError) {
+        // les instructions pour gérer TypeError
+    } else if (e instanceof RangeError) {
+        // les instructions pour gérer RangeError
+    } else if (e instanceof EvalError) {
+        // les instructions pour gérer EvalError
+    } else {
+       // les instructions pour gérer les autres exceptions
+    }
+}
+
+ +

L'identifiant de l'exception

+ +

Lorsqu'une exception est levée dans le bloc try, exception_var (par exemple le e dans « catch (e) ») contient la valeur définie par l'instruction {{jsxref("Instructions/throw","throw")}}. Cet identifiant peut être utilisé pour accéder aux propriétés de l'objet et ainsi obtenir des informations sur l'exception qui a eu lieu. Cet identifiant est local à la clause catch, il est créé lorsqu'on rentre dans la clause catch et n'est plus disponible une fois que la clause a fini son exécution.

+ +
function isValidJSON(txt){
+  try {
+    JSON.parse(txt);
+    return true;
+  } catch {
+    return false;
+  }
+}
+ +

La clause finally

+ +

La clause finally contient les instructions à exécuter après que les instructions du bloc try et éventuellement celles de la clause catch aient été exécutées mais avant que les instructions suivant l'instruction try soient exécutées. La clause finally est exécutée dans tous les cas (si on a eu une exception ou non). Si une exception est levée et qu'il n'y a pas de clause catch, les instructions de la clause finally sont tout de même exécutées.

+ +

Cela peut paraître étrange qu'un bloc de code qui s'exécute même lorsqu'il y a une exception… Il faut comprendre que le code qui suit le bloc try...catch ne sera pas exécuté. Aussi, le bloc finally permet de contenir toutes les instructions de clôture/nettoyage nécessaire. On évite donc de dupliquer ce code qui doit toujours être utilisé.

+ +

La clause finally peut être utilisée afin d'exécuter les actions nécessaires pour que le script « échoue correctement » en cas d'erreur. On peut par exemple tirer parti de finally pour fermer un flux, libérer une ressource, etc. Dans l'exemple suivant, exécuté côté serveur, le script accède à un fichier. Si une exception se produit lorsque le fichier est ouvert, la clause finally permet de fermer le fichier avant que le script échoue. Le code contenu dans le bloc finally sera exécuté même si on a une instruction return dans la section try ou dans la section catch.

+ +
ouvrirMonFichier()
+try {
+   // on utilise une ressource
+   écrireDansMonFichier(mesDonnées);
+}
+finally {
+   fermerMonFichier(); // on ferme toujours la ressource
+}
+
+ +

Exemples

+ +

Blocs try imbriqués

+ +

Tout d'abord, on utilise ce fragment de code, qui produit le résultat suivant :

+ +
try {
+  try {
+    throw new Error("oups");
+  }
+  finally {
+    console.log("finally");
+  }
+}
+catch (ex) {
+  console.error("externe", ex.message);
+}
+
+// Produira dans la console :
+// "finally"
+// "externe" "oups"
+
+ +

Et maintenant, si on a déjà intercepté l'exception avec une clause catch dans le bloc imbriqué :

+ +
try {
+  try {
+    throw new Error("oups");
+  }
+  catch (ex) {
+    console.error("interne", ex.message);
+  }
+  finally {
+    console.log("finally");
+  }
+}
+catch (ex) {
+  console.error("externe", ex.message);
+}
+
+// Produira dans la console:
+// "interne" "oups"
+// "finally"
+
+ +

Ensuite, si on propage l'erreur à nouveau :

+ +
try {
+  try {
+    throw new Error("oups");
+  }
+  catch (ex) {
+    console.error("interne", ex.message);
+    throw ex;
+  }
+  finally {
+    console.log("finally");
+  }
+}
+catch (ex) {
+  console.error("externe", ex.message);
+}
+
+// Produira dans la console :
+// "interne" "oups"
+// "finally"
+// "externe" "oups"
+
+ +

Toute exception ne sera interceptée qu'une seule fois par le bloc catch le plus « proche » à moins qu'elle ne soit retransmise à nouveau. Bien entendu, toute exception qui aura été levée par le bloc interne (il se peut que les instructions d'une clause catch provoquent une erreur) sera interceptée par le bloc externe.

+ +

Valeur de retour et bloc finally

+ +

Lorsque le bloc finally renvoie une valeur, c'est cette valeur qui devient la valeur de retour pour l'ensemble du bloc try-catch-finally et ce, peu importe, s'il y a des instructions {{jsxref("Instructions/return","return")}} dans les blocs try et catch. Cela inclue également les exceptions levées dans le bloc catch :

+ +
try {
+  try {
+    throw new Error("oups");
+  }
+  catch (ex) {
+    console.error("interne", ex.message);
+    throw ex;
+  }
+  finally {
+    console.log("finally");
+    return;
+  }
+}
+catch (ex) {
+  console.error("externe", ex.message);
+}
+
+// Produira dans la console :
+// "interne" "oups"
+// "finally"
+
+ +

Le "oups" externe n'est pas renvoyé car l'instruction return est utilisée dans la clause finally du bloc interne. Cela aurait également été le cas avec n'importe quelle valeur renvoyée par le bloc catch.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.4
{{SpecName('ES5.1', '#sec-12.14', 'instruction try')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-try-statement', 'Instruction try')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-try-statement', 'try statement')}}{{Spec2('ESDraft')}}Points ne faisant pas partie du standard ECMA-262 actuel : utilisation de plusieurs clauses catch et de plusieurs clauses conditionnelles (extension liée à SpiderMonkey, correspondant à JavaScript 1.5).
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.try_catch")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/var/index.html b/files/fr/web/javascript/reference/statements/var/index.html deleted file mode 100644 index 044870b84c..0000000000 --- a/files/fr/web/javascript/reference/statements/var/index.html +++ /dev/null @@ -1,217 +0,0 @@ ---- -title: var -slug: Web/JavaScript/Reference/Statements/var -tags: - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/var -original_slug: Web/JavaScript/Reference/Instructions/var ---- -
{{jsSidebar("Statements")}}
- -

L'instruction var (pour variable) permet de déclarer une variable et éventuellement d'initialiser sa valeur.

- -
{{EmbedInteractiveExample("pages/js/statement-var.html")}}
- -

Syntaxe

- -
var nomVar1 [= valeur1] [, nomVar2 [= valeur2] ... [, nomVarN [= valeurN]]];
- -
-
nomvarN
-
Le nom de la variable, cela peut être n'importe quel identifiant valide.
-
valeurN
-
La valeur initiale à affecter à la variable, cela peut être n'importe quelle expression valide. S'il n'y a aucune valeur fournie, la variable vaudra {{jsxref("undefined")}}.
-
- -

Description

- -

Les déclarations de variables sont traitées avant que le code soit exécuté, quel que soit leur emplacement dans le code. La portée d'une variable déclarée avec var est le contexte d'exécution courant, c'est-à-dire : la fonction qui contient la déclaration ou le contexte global si la variable est déclarée en dehors de toute fonction.

- -

Si on affecte une valeur à une variable qui n'a pas été déclarée (le mot-clé var n'a pas été utilisé), cela devient une variable globale (une propriété de l'objet global) lorsque l'affectation est exécutée. Les différences entre les variables déclarées et les variables non-déclarées sont :

- -
    -
  1. Les variables déclarées sont contraintes dans le contexte d'exécution dans lequel elles sont déclarées. Les variables non-déclarées sont toujours globales. -
    function x() {
    -  y = 1;   // Lève une exception ReferenceError en mode strict
    -  var z = 2;
    -}
    -
    -x();
    -
    -console.log(y); // Affiche "1" dans la console
    -console.log(z); // Lève une exception ReferenceError:
    -                // z n'est pas définie en dehors de x
    -
    -
  2. -
  3. Les variables déclarées sont créées avant que n'importe quel autre code soit exécuté. Les variables non-déclarées n'existent pas tant que leur code n'est pas exécuté. -
    console.log(a);                // Lève une exception ReferenceError.
    -console.log('on continue...'); // N'est jamais exécuté
    - -
    var a;
    -console.log(a);                // Affiche "undefined".
    -console.log('on continue...'); // Affiche "on continue...".
    -
  4. -
  5. Les variables déclarées sont des propriétés non-configurables de leur contexte d'exécution (la fonction courante ou le contexte global). Les variables non-déclarées sont configurables (ce qui signifie qu'elles peuvent être supprimées). -
    var a = 1;
    -b = 2;
    -
    -delete this.a; // Lève une TypeError en mode strict. Échoue silencieusement sinon.
    -delete this.b;
    -
    -console.log(a, b); // Lève une exception ReferenceError.
    -// La propriété 'b' a été supprimée et n'existe plus.
    -
  6. -
- -

En raison de ces trois différences, il faut éviter de ne pas déclarer une variable car cela peut provoquer des résultats inattendus. Il est donc fortement recommandé de toujours déclarer les variables, qu'elles soient dans une fonction ou dans la portée globale. Le mode strict, introduit avec ECMAScript 5, lève une exception lorsqu'une variable n'est pas déclarée.

- -

La remontée de variables (hoisting)

- -

Les déclarations de variables (et les déclarations en général) sont traitées avant que n'importe quel autre code soit exécuté. Ainsi, déclarer une variable n'importe où dans le code équivaut à la déclarer au début de son contexte d'exécution. Cela signifie qu'une variable peut également apparaître dans le code avant d'avoir été déclarée. Ce comportement est appelé « remontée » (hoisting en anglais) car la déclaration de la variable est « remontée » au début de la fonction courante ou du contexte global.

- -
bla = 2
-var bla;
-// ...
-
-// est implicitement traité comme :
-
-var bla;
-bla = 2;
-
- -

Étant donné ce comportement, il est recommandé de toujours déclarer les variables au début de leurs portées (le début du code global ou le début du corps de la fonction) afin de mieux (sa)voir quelles variables font partie de la fonction et lesquelles proviennent de la chaîne de portées.

- -

Il est important de noter que la remontée des variables affecte uniquement la déclaration et pas l'initialisation de la valeur. La valeur sera affectée lorsque le moteur accèdera à l'instruction d'affectation. Par exemple :

- -
function faireQuelqueChose() {
-  console.log(truc); // undefined
-  var truc = 111;
-  console.log(truc); // 111
-}
-
-// Correspond en fait à :
-function faireQuelqueChose() {
-  var truc;
-  console.log(truc); // undefined
-  truc = 111;
-  console.log(truc); // 111
-}
-
- -

Exemples

- -

Déclarer et initialiser deux variables

- -
var a = 0, b = 0;
-
- -

Affecter deux variables avec la même chaîne de caractères

- -
var a = "A";
-var b = a;
-
-// est équivalent à :
-
-var a, b = a = "A";
-
- -

Attention à l'ordre :

- -
var x = y, y = 'A';
-console.log(x + y); // undefinedA
-
- -

Ici, x et y sont déclarées avant que n'importe quel code soit exécuté, les affectations sont réalisées après ! Au moment où x = y est évalué, y existe donc on n'a pas d'erreur {{jsxref("ReferenceError")}} mais sa valeur est {{jsxref("undefined")}}. Ainsi, x reçoit la valeur undefined. Ensuite, y reçoit la valeur 'A'. Après la première ligne de code, on a donc la situation où x === undefined && y === 'A', ce qui explique le résultat.

- -

Initialiser plusieurs variables

- -
var x = 0; // Variable dans la portée globale (le fichier)
-
-function f(){
-  var x = y = 1; // x est déclaré localement
-                 // ce qui n'est pas le cas de y !
-}
-f();
-
-console.log(x, y); // 0, 1
-// x a bien la valeur globale attendue
-// y a été contaminé dans la fonction !
-// Une exception ReferenceError sera levée en mode
-// strict car y n'est pas défini dans cette portée
-
- -

Les variables globales implicites

- -

Il est possible de faire référence à des variables qui sont des variables globales implicites depuis la portée d'une fonction externe :

- -
var x = 0;  // Déclare x comme variable globale du fichier, on lui affecte 0
-
-console.log(typeof z); // "undefined", car z n'existe pas encore
-
-function a() {
-  var y = 2;   // Déclare y dans la portée de la fonction a
-               // Affecte 2 comme valeur à y
-
-  console.log(x, y);   // 0 2
-
-  function b() {
-    x = 3;  // Affecte 3 à la variable globale x
-            // Ne crée pas une nouvelle variable globale
-    y = 4;  // Affecte 4 à la variable externe y,
-            // Ne crée pas une nouvelle variable globale
-    z = 5;  // Crée une nouvelle variable globale
-            // et lui affecte la valeur 5.
-  }         // (lève une ReferenceError en mode strict.)
-
-  b();     // Crée z en tant que variable globale
-  console.log(x, y, z);  // 3 4 5
-}
-
-a();                   // l'appel à a() entraîne un appel à b()
-console.log(x, z);     // 3 5
-console.log(typeof y); // "undefined" car y est local à la fonction a
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0
{{SpecName('ES5.1', '#sec-12.2', 'instruction var')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-variable-statement', 'instruction de variable')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-variable-statement', 'variable statement')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.var")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/var/index.md b/files/fr/web/javascript/reference/statements/var/index.md new file mode 100644 index 0000000000..044870b84c --- /dev/null +++ b/files/fr/web/javascript/reference/statements/var/index.md @@ -0,0 +1,217 @@ +--- +title: var +slug: Web/JavaScript/Reference/Statements/var +tags: + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/var +original_slug: Web/JavaScript/Reference/Instructions/var +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction var (pour variable) permet de déclarer une variable et éventuellement d'initialiser sa valeur.

+ +
{{EmbedInteractiveExample("pages/js/statement-var.html")}}
+ +

Syntaxe

+ +
var nomVar1 [= valeur1] [, nomVar2 [= valeur2] ... [, nomVarN [= valeurN]]];
+ +
+
nomvarN
+
Le nom de la variable, cela peut être n'importe quel identifiant valide.
+
valeurN
+
La valeur initiale à affecter à la variable, cela peut être n'importe quelle expression valide. S'il n'y a aucune valeur fournie, la variable vaudra {{jsxref("undefined")}}.
+
+ +

Description

+ +

Les déclarations de variables sont traitées avant que le code soit exécuté, quel que soit leur emplacement dans le code. La portée d'une variable déclarée avec var est le contexte d'exécution courant, c'est-à-dire : la fonction qui contient la déclaration ou le contexte global si la variable est déclarée en dehors de toute fonction.

+ +

Si on affecte une valeur à une variable qui n'a pas été déclarée (le mot-clé var n'a pas été utilisé), cela devient une variable globale (une propriété de l'objet global) lorsque l'affectation est exécutée. Les différences entre les variables déclarées et les variables non-déclarées sont :

+ +
    +
  1. Les variables déclarées sont contraintes dans le contexte d'exécution dans lequel elles sont déclarées. Les variables non-déclarées sont toujours globales. +
    function x() {
    +  y = 1;   // Lève une exception ReferenceError en mode strict
    +  var z = 2;
    +}
    +
    +x();
    +
    +console.log(y); // Affiche "1" dans la console
    +console.log(z); // Lève une exception ReferenceError:
    +                // z n'est pas définie en dehors de x
    +
    +
  2. +
  3. Les variables déclarées sont créées avant que n'importe quel autre code soit exécuté. Les variables non-déclarées n'existent pas tant que leur code n'est pas exécuté. +
    console.log(a);                // Lève une exception ReferenceError.
    +console.log('on continue...'); // N'est jamais exécuté
    + +
    var a;
    +console.log(a);                // Affiche "undefined".
    +console.log('on continue...'); // Affiche "on continue...".
    +
  4. +
  5. Les variables déclarées sont des propriétés non-configurables de leur contexte d'exécution (la fonction courante ou le contexte global). Les variables non-déclarées sont configurables (ce qui signifie qu'elles peuvent être supprimées). +
    var a = 1;
    +b = 2;
    +
    +delete this.a; // Lève une TypeError en mode strict. Échoue silencieusement sinon.
    +delete this.b;
    +
    +console.log(a, b); // Lève une exception ReferenceError.
    +// La propriété 'b' a été supprimée et n'existe plus.
    +
  6. +
+ +

En raison de ces trois différences, il faut éviter de ne pas déclarer une variable car cela peut provoquer des résultats inattendus. Il est donc fortement recommandé de toujours déclarer les variables, qu'elles soient dans une fonction ou dans la portée globale. Le mode strict, introduit avec ECMAScript 5, lève une exception lorsqu'une variable n'est pas déclarée.

+ +

La remontée de variables (hoisting)

+ +

Les déclarations de variables (et les déclarations en général) sont traitées avant que n'importe quel autre code soit exécuté. Ainsi, déclarer une variable n'importe où dans le code équivaut à la déclarer au début de son contexte d'exécution. Cela signifie qu'une variable peut également apparaître dans le code avant d'avoir été déclarée. Ce comportement est appelé « remontée » (hoisting en anglais) car la déclaration de la variable est « remontée » au début de la fonction courante ou du contexte global.

+ +
bla = 2
+var bla;
+// ...
+
+// est implicitement traité comme :
+
+var bla;
+bla = 2;
+
+ +

Étant donné ce comportement, il est recommandé de toujours déclarer les variables au début de leurs portées (le début du code global ou le début du corps de la fonction) afin de mieux (sa)voir quelles variables font partie de la fonction et lesquelles proviennent de la chaîne de portées.

+ +

Il est important de noter que la remontée des variables affecte uniquement la déclaration et pas l'initialisation de la valeur. La valeur sera affectée lorsque le moteur accèdera à l'instruction d'affectation. Par exemple :

+ +
function faireQuelqueChose() {
+  console.log(truc); // undefined
+  var truc = 111;
+  console.log(truc); // 111
+}
+
+// Correspond en fait à :
+function faireQuelqueChose() {
+  var truc;
+  console.log(truc); // undefined
+  truc = 111;
+  console.log(truc); // 111
+}
+
+ +

Exemples

+ +

Déclarer et initialiser deux variables

+ +
var a = 0, b = 0;
+
+ +

Affecter deux variables avec la même chaîne de caractères

+ +
var a = "A";
+var b = a;
+
+// est équivalent à :
+
+var a, b = a = "A";
+
+ +

Attention à l'ordre :

+ +
var x = y, y = 'A';
+console.log(x + y); // undefinedA
+
+ +

Ici, x et y sont déclarées avant que n'importe quel code soit exécuté, les affectations sont réalisées après ! Au moment où x = y est évalué, y existe donc on n'a pas d'erreur {{jsxref("ReferenceError")}} mais sa valeur est {{jsxref("undefined")}}. Ainsi, x reçoit la valeur undefined. Ensuite, y reçoit la valeur 'A'. Après la première ligne de code, on a donc la situation où x === undefined && y === 'A', ce qui explique le résultat.

+ +

Initialiser plusieurs variables

+ +
var x = 0; // Variable dans la portée globale (le fichier)
+
+function f(){
+  var x = y = 1; // x est déclaré localement
+                 // ce qui n'est pas le cas de y !
+}
+f();
+
+console.log(x, y); // 0, 1
+// x a bien la valeur globale attendue
+// y a été contaminé dans la fonction !
+// Une exception ReferenceError sera levée en mode
+// strict car y n'est pas défini dans cette portée
+
+ +

Les variables globales implicites

+ +

Il est possible de faire référence à des variables qui sont des variables globales implicites depuis la portée d'une fonction externe :

+ +
var x = 0;  // Déclare x comme variable globale du fichier, on lui affecte 0
+
+console.log(typeof z); // "undefined", car z n'existe pas encore
+
+function a() {
+  var y = 2;   // Déclare y dans la portée de la fonction a
+               // Affecte 2 comme valeur à y
+
+  console.log(x, y);   // 0 2
+
+  function b() {
+    x = 3;  // Affecte 3 à la variable globale x
+            // Ne crée pas une nouvelle variable globale
+    y = 4;  // Affecte 4 à la variable externe y,
+            // Ne crée pas une nouvelle variable globale
+    z = 5;  // Crée une nouvelle variable globale
+            // et lui affecte la valeur 5.
+  }         // (lève une ReferenceError en mode strict.)
+
+  b();     // Crée z en tant que variable globale
+  console.log(x, y, z);  // 3 4 5
+}
+
+a();                   // l'appel à a() entraîne un appel à b()
+console.log(x, z);     // 3 5
+console.log(typeof y); // "undefined" car y est local à la fonction a
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES1')}}{{Spec2('ES1')}}Définition initiale. Implémentée avec JavaScript 1.0
{{SpecName('ES5.1', '#sec-12.2', 'instruction var')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-variable-statement', 'instruction de variable')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-variable-statement', 'variable statement')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.var")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/while/index.html b/files/fr/web/javascript/reference/statements/while/index.html deleted file mode 100644 index a9a03df043..0000000000 --- a/files/fr/web/javascript/reference/statements/while/index.html +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: while -slug: Web/JavaScript/Reference/Statements/while -tags: - - JavaScript - - Reference - - Statement -translation_of: Web/JavaScript/Reference/Statements/while -original_slug: Web/JavaScript/Reference/Instructions/while ---- -
{{jsSidebar("Statements")}}
- -

L'instruction while permet de créer une boucle qui s'exécute tant qu'une condition de test est vérifiée. La condition est évaluée avant d'exécuter l'instruction contenue dans la boucle.

- -
{{EmbedInteractiveExample("pages/js/statement-while.html")}}
- -

Syntaxe

- -
while (condition) instruction
- -
-
condition
-
Une expression qui est évaluée avant chaque passage dans la boucle. Si cette expression est évaluée à vrai, instruction est exécutée. Lorsque la condition n'est pas vérifiée, l'exécution se poursuit avec l'instruction qui suit la boucle while.
-
instruction
-
Une instruction optionnelle qui doit être exécutée tant que la condition d'entrée est vérifiée. Afin d'exécuter plusieurs instructions au sein de la boucle, on utilisera généralement un {{jsxref("Instructions/bloc","bloc d'instructions","",1)}} ({ ... }) pour les regrouper.
- Note : on pourra utiliser l'instruction break afin d'arrêter une boucle avant que la condition soit vérifiée.
-
- -

Exemples

- -

La boucle while qui suit s'exécute tant que n est strictement inférieur à 3.

- -
var n = 0;
-var x = 0;
-
-while (n < 3) {
-  n++;
-  x += n;
-}
- -

À chaque itération, la boucle incrémente la valeur de n et l'ajoute à x. Ainsi, x et n prennent les valeurs suivantes :

- - - -

Une fois que la troisième itération est exécutée, la condition n < 3 n'est plus vérifiée et donc la boucle se termine.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-while-statement', 'while statement')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-while-statement', 'while statement')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-12.6.2', 'while statement')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-12.6.2', 'while statement')}}{{Spec2('ES3')}}
{{SpecName('ES1', '#sec-12.6.1', 'while statement')}}{{Spec2('ES1')}}Définition initiale
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.while")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/while/index.md b/files/fr/web/javascript/reference/statements/while/index.md new file mode 100644 index 0000000000..a9a03df043 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/while/index.md @@ -0,0 +1,99 @@ +--- +title: while +slug: Web/JavaScript/Reference/Statements/while +tags: + - JavaScript + - Reference + - Statement +translation_of: Web/JavaScript/Reference/Statements/while +original_slug: Web/JavaScript/Reference/Instructions/while +--- +
{{jsSidebar("Statements")}}
+ +

L'instruction while permet de créer une boucle qui s'exécute tant qu'une condition de test est vérifiée. La condition est évaluée avant d'exécuter l'instruction contenue dans la boucle.

+ +
{{EmbedInteractiveExample("pages/js/statement-while.html")}}
+ +

Syntaxe

+ +
while (condition) instruction
+ +
+
condition
+
Une expression qui est évaluée avant chaque passage dans la boucle. Si cette expression est évaluée à vrai, instruction est exécutée. Lorsque la condition n'est pas vérifiée, l'exécution se poursuit avec l'instruction qui suit la boucle while.
+
instruction
+
Une instruction optionnelle qui doit être exécutée tant que la condition d'entrée est vérifiée. Afin d'exécuter plusieurs instructions au sein de la boucle, on utilisera généralement un {{jsxref("Instructions/bloc","bloc d'instructions","",1)}} ({ ... }) pour les regrouper.
+ Note : on pourra utiliser l'instruction break afin d'arrêter une boucle avant que la condition soit vérifiée.
+
+ +

Exemples

+ +

La boucle while qui suit s'exécute tant que n est strictement inférieur à 3.

+ +
var n = 0;
+var x = 0;
+
+while (n < 3) {
+  n++;
+  x += n;
+}
+ +

À chaque itération, la boucle incrémente la valeur de n et l'ajoute à x. Ainsi, x et n prennent les valeurs suivantes :

+ + + +

Une fois que la troisième itération est exécutée, la condition n < 3 n'est plus vérifiée et donc la boucle se termine.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationStatutCommentaires
{{SpecName('ESDraft', '#sec-while-statement', 'while statement')}}{{Spec2('ESDraft')}}
{{SpecName('ES6', '#sec-while-statement', 'while statement')}}{{Spec2('ES6')}}
{{SpecName('ES5.1', '#sec-12.6.2', 'while statement')}}{{Spec2('ES5.1')}}
{{SpecName('ES3', '#sec-12.6.2', 'while statement')}}{{Spec2('ES3')}}
{{SpecName('ES1', '#sec-12.6.1', 'while statement')}}{{Spec2('ES1')}}Définition initiale
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.while")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/statements/with/index.html b/files/fr/web/javascript/reference/statements/with/index.html deleted file mode 100644 index 7215a32ed2..0000000000 --- a/files/fr/web/javascript/reference/statements/with/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: with -slug: Web/JavaScript/Reference/Statements/with -tags: - - Déprécié - - Instruction - - JavaScript - - Reference -translation_of: Web/JavaScript/Reference/Statements/with -original_slug: Web/JavaScript/Reference/Instructions/with ---- -
{{jsSidebar("Statements")}}
- -

Attention :Il n'est pas recommandé d'utiliser l'instruction with. En effet, elle est parfois source de problèmes de compatibilité ou de bogues. Se référer au paragraphe « Inconvénient : l'ambiguïté » de la section « Description » pour plus de détails.

- -

L'instruction with permet d'étendre la portée chaînée d'une instruction.

- -

Syntaxe

- -
with (expression) {
-  instruction
-}
-
- -
-
expression
-
L'expression fournie est ajoutée à la portée chaînée utilisée lors de l'évaluation de l'instruction. Les parenthèses sont obligatoires.
-
instruction
-
N'importe quelle instruction. Afin d'utiliser plusieurs instructions, on peut utiliser un bloc d'instructions ({ ... }) pour les regrouper.
-
- -

Description

- -

Dès qu'un nom non-qualifié est utilisé, JavaScript cherche dans la chaîne des portées associée à l'exécution une fonction ou un script qui contiendrait ce nom. L'instruction with ajoute l'objet donné à la tête de la chaîne des portées lors de l'évaluation des instructions qu'elle contient. Si un nom non-qualifié est utilisé parmi ces instructions correspond à une propriété de la chaîne des portées, le nom sera alors lié à la propriété et à l'objet contenant cette propriété, sinon une erreur ReferenceError est renvoyée.

- -

Note : L'utilisation de l'instruction with n'est pas recommandée et est interdite dans le mode strict d'ECMAScript 5. L'alternative recommandée est d'assigner l'objet utilisant les propriétés désirées à une variable temporaire.

- -

Avantages et inconvénients : les performances

- - - -

Inconvénient : l'ambiguïté

- - - -

Exemples

- -

Utiliser with

- -

L'instruction with suivante indique que l'objet {{jsxref("Math")}} est l'objet par défaut. Les instructions qui suivent font référence à la propriété {{jsxref("Math.PI")}} et aux méthodes {{jsxref("Math.cos()")}} et {{jsxref("Math.sin()")}}, sans objet spécifié. JavaScript utilise donc l'objet Math pour ces références.

- -
var a, x, y;
-var r = 10;
-
-with (Math) {
-  a = PI * r * r;
-  x = r * cos(PI);
-  y = r * sin(PI / 2);
-}
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-with-statement', 'with statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-with-statement', 'Instruction with')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.10', 'Instruction with')}}{{Spec2('ES5.1')}}Désormais interdit en mode strict.
{{SpecName('ES3', '#sec-12.10', 'Instruction with')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.10', 'Instruction with')}}{{Spec2('ES1')}}Définition initiale.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.statements.with")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/statements/with/index.md b/files/fr/web/javascript/reference/statements/with/index.md new file mode 100644 index 0000000000..7215a32ed2 --- /dev/null +++ b/files/fr/web/javascript/reference/statements/with/index.md @@ -0,0 +1,134 @@ +--- +title: with +slug: Web/JavaScript/Reference/Statements/with +tags: + - Déprécié + - Instruction + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Statements/with +original_slug: Web/JavaScript/Reference/Instructions/with +--- +
{{jsSidebar("Statements")}}
+ +

Attention :Il n'est pas recommandé d'utiliser l'instruction with. En effet, elle est parfois source de problèmes de compatibilité ou de bogues. Se référer au paragraphe « Inconvénient : l'ambiguïté » de la section « Description » pour plus de détails.

+ +

L'instruction with permet d'étendre la portée chaînée d'une instruction.

+ +

Syntaxe

+ +
with (expression) {
+  instruction
+}
+
+ +
+
expression
+
L'expression fournie est ajoutée à la portée chaînée utilisée lors de l'évaluation de l'instruction. Les parenthèses sont obligatoires.
+
instruction
+
N'importe quelle instruction. Afin d'utiliser plusieurs instructions, on peut utiliser un bloc d'instructions ({ ... }) pour les regrouper.
+
+ +

Description

+ +

Dès qu'un nom non-qualifié est utilisé, JavaScript cherche dans la chaîne des portées associée à l'exécution une fonction ou un script qui contiendrait ce nom. L'instruction with ajoute l'objet donné à la tête de la chaîne des portées lors de l'évaluation des instructions qu'elle contient. Si un nom non-qualifié est utilisé parmi ces instructions correspond à une propriété de la chaîne des portées, le nom sera alors lié à la propriété et à l'objet contenant cette propriété, sinon une erreur ReferenceError est renvoyée.

+ +

Note : L'utilisation de l'instruction with n'est pas recommandée et est interdite dans le mode strict d'ECMAScript 5. L'alternative recommandée est d'assigner l'objet utilisant les propriétés désirées à une variable temporaire.

+ +

Avantages et inconvénients : les performances

+ + + +

Inconvénient : l'ambiguïté

+ + + +

Exemples

+ +

Utiliser with

+ +

L'instruction with suivante indique que l'objet {{jsxref("Math")}} est l'objet par défaut. Les instructions qui suivent font référence à la propriété {{jsxref("Math.PI")}} et aux méthodes {{jsxref("Math.cos()")}} et {{jsxref("Math.sin()")}}, sans objet spécifié. JavaScript utilise donc l'objet Math pour ces références.

+ +
var a, x, y;
+var r = 10;
+
+with (Math) {
+  a = PI * r * r;
+  x = r * cos(PI);
+  y = r * sin(PI / 2);
+}
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ESDraft', '#sec-with-statement', 'with statement')}}{{Spec2('ESDraft')}} 
{{SpecName('ES6', '#sec-with-statement', 'Instruction with')}}{{Spec2('ES6')}} 
{{SpecName('ES5.1', '#sec-12.10', 'Instruction with')}}{{Spec2('ES5.1')}}Désormais interdit en mode strict.
{{SpecName('ES3', '#sec-12.10', 'Instruction with')}}{{Spec2('ES3')}} 
{{SpecName('ES1', '#sec-12.10', 'Instruction with')}}{{Spec2('ES1')}}Définition initiale.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.statements.with")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/strict_mode/index.html b/files/fr/web/javascript/reference/strict_mode/index.html deleted file mode 100644 index 46af582e3f..0000000000 --- a/files/fr/web/javascript/reference/strict_mode/index.html +++ /dev/null @@ -1,378 +0,0 @@ ---- -title: Le mode strict -slug: Web/JavaScript/Reference/Strict_mode -tags: - - ECMAScript 5 - - JavaScript - - Reference - - Strict Mode -translation_of: Web/JavaScript/Reference/Strict_mode ---- -
{{JsSidebar("More")}}
- -

Le mode strict de ECMAScript 5 permet de choisir une variante restrictive de JavaScript. Le mode strict n'est pas seulement un sous-ensemble de JavaScript : il possède intentionnellement des sémantiques différentes du code normal. Les navigateurs ne supportant pas le mode strict exécuteront le code d'une façon légèrement différente de ceux le supportant, il ne faut donc pas compter sur le mode strict pour éviter des tests sur les navigateurs qui ne le supportent pas. Les codes en mode strict et en mode non-strict peuvent coexister, ce qui permet de réécrire les scripts en mode strict de façon incrémentale.

- -

Le mode strict apporte quelques changements à la sémantique « normale » de JavaScript:

- -
    -
  1. Le mode strict élimine quelques erreurs silencieuses de JavaScript en les changeant en erreurs explicites (une exception sera levée).
  2. -
  3. Le mode strict corrige les erreurs qui font qu'autrement il est difficile pour les moteurs JavaScript d'effectuer des optimisations. Le code sera donc exécuté plus rapidement en mode strict, sans changer une seule ligne si cela n'est pas nécessaire.
  4. -
  5. Le mode strict interdit les mot-clés susceptibles d'être définis dans les futures versions de ECMAScript.
  6. -
- -

Voir la page Passer au mode strict pour plus de détails quant à la migration d'une base de code non-stricte vers une base de code compatible avec le mode strict.

- -

Note : Le mode non strict (celui actif par défaut) est parfois appelé « sloppy mode » en anglais. Bien que ce ne soit pas la dénomination officielle, on la rencontre occasionnellement.

-
- -

Invoquer le mode strict

- -

Le mode strict s'applique à des scripts entiers ou à des fonctions individuelles. Il ne peut s'appliquer à des blocs d'instructions entourés d'accolades {}; essayer de l'appliquer dans ces contextes ne fera rien. Les codes présents dans {{jsxref("Objets_globaux/eval","eval()")}}, {{jsxref("Function")}}, les attributs d'événements et les chaînes passées à setTimeout, ou autres sont des scripts entiers, et invoquer le mode strict à l'intérieur de ceux-ci fonctionnera comme prévu.

- -

Le mode strict pour les scripts

- -

Pour invoquer le mode strict pour un script entier, on ajoutera l'instruction exacte "use strict"; (ou 'use strict';) avant toutes les autres instructions.

- -
// Script entier en mode strict
-"use strict";
-var v = "Allo ! Je suis en mode strict !";
-
- -

Cette syntaxe possède un piège dans lequel est déjà tombé un site web connu : il n'est pas possible de concaténer du script en mode strict et du code en mode non-strict. En effet, si on concatène du code non-strict à la suite d'un code strict, tout le code sera considéré comme strict. De même si on concatène du code strict à la suite d'un code non-strict, le code entier aura l'air non-strict. Ainsi, on peut concaténer entre eux des codes stricts sans aucun problème et de même concaténer uniquement des codes non-stricts sans problème. En revanche, lorsqu'on mélange les deux, cela pose un problème. Lors d'une phase de transition, il est donc recommandé de n'activer le mode strict que fonction par fonction.

- -

Il est aussi possible d'adopter une approche qui consiste à englober le code du script dans une fonction et à donner à cette dernière le mode strict. Ce procédé élimine le problème de concaténation mais cela signifie aussi qu'on doit exporter chaque variable globale hors de la fonction principale nouvellement créée.

- -

Le mode strict pour les fonctions

- -

De même, pour activer le mode strict pour une fonction, on placera l'instruction exacte "use strict"; (ou 'use strict';) dans le corps de la fonction avant toute autre déclaration.

- -
function strict() {
-  // Syntaxe en mode strict au niveau de la fonction
-  'use strict';
-  function nested() { return "Ho que oui, je le suis !"; }
-  return "Allô ! Je suis une fonction en mode strict ! " + nested();
-}
-function notStrict() { return "Je ne suis pas strict."; }
-
- -

Mode strict pour les modules

- -

ECMAScript 2015 a vu apparaître les modules JavaScript. Le code de ces modules est automatiquement en mode strict et aucune instruction n'est nécessaire pour passer dans ce mode.

- -
function maFonctionDeModule() {
-  // étant dans un module, le code présent
-  // ici sera d'office en mode strict
-}
-export default maFonctionDeModule;
- -

Différences du mode strict

- -

Le mode strict modifie à la fois la syntaxe et le comportement à l'exécution. Les changements se déclinent généralement en trois catégories : ceux qui convertissent les fautes en erreurs (comme des erreurs de syntaxe ou les erreurs d'exécution), ceux qui simplifient comment une variable pour un nom donné est traitée, simplifiant {{jsxref("Objets_globaux/eval","eval()")}} et {{jsxref("Fonctions/arguments","arguments")}} et ceux qui permettent d'écrire plus simplement du code JavaScript pérenne qui anticipe les évolutions futures d'ECMAScript.

- -

Convertir les fautes en erreurs

- -

Le mode strict change quelques fautes précédemment acceptées, en erreurs. JavaScript a été conçu pour les développeurs novices et, quelquefois, il ne crée pas d'erreur explicite pour certaines instructions qui devraient être des erreurs. Parfois cela règle un problème immédiatement, mais cela peut aussi créer d'autres erreurs, plus loin dans le code. Le mode strict traite ces fautes comme des erreurs afin qu'elles soient découvertes et rapidement traitées.

- -

Premièrement, en mode strict, il est impossible de créer accidentellement des variables globales. En mode normal, ne pas déclarer une variable lors d'une affectation (oublier l'instruction {{jsxref("Instructions/var","var")}}) crée une nouvelle propriété sur l'objet global et le code continue de fonctionner (même si ça peut être une source de problèmes par la suite). Les affectations qui pourraient accidentellement créer des variables globales lèveront une erreur en mode strict:

- -
"use strict";
-varialeMalDéclarée = 17; // lève une ReferenceError
-
- -

Deuxièmement, le mode strict fait en sorte que les affectations qui échoueraient silencieusement lèveront aussi une exception. Par exemple, {{jsxref("Objets_globaux/NaN","NaN")}} est une variable globale en lecture seule. En mode normal, une affectation à NaN ne fera rien ; le développeur ne recevra aucun retour par rapport à cette faute. En mode strict, affecter une valeur quelconque à NaN lèvera une exception. Toute affectation qui échouera silencieusement en mode non-strict (affectation à une propriété en lecture seule, affectation à une propriété sans méthode set, affectation à une nouvelle propriété sur un objet non-extensible) lèvera une exception en mode strict :

- -
"use strict";
-
-// Affectation à une propriété globale en lecture seule
-var undefined = 5;  // déclenche une exception TypeError
-var Infinity = 5;   // déclenche une exception TypeError
-
-// Affectation à une propriété en lecture seule
-var obj1 = {};
-Object.defineProperty(obj1, "x", { value: 42, writable: false });
-obj1.x = 9; // lève un TypeError
-
-// Affectation à une propriété qui n'a qu'une méthode get
-var obj2 = { get x() { return 17; } };
-obj2.x = 5; // lève un TypeError
-
-// Affectation d'une nouvelle propriété à un objet non-extensible
-var gele= {};
-Object.preventExtensions(gele);
-gele.nouvelleProp = "ohé"; // lève un TypeError
-
- -

Troisièmement, le mode strict lèvera une exception lors d'une tentative de suppression d'une propriété non-supprimable (là où cela ne produisait aucun effet en mode non strict) :

- -
"use strict";
-delete Object.prototype; // lève une TypeError
-
- -

Quatrièmement, le mode strict, avant Gecko 34, requiert que toutes les propriétés nommées dans un objet littéral soient uniques. En mode non-strict, les propriétés peuvent être spécifiées deux fois, JavaScript ne retenant que la dernière valeur de la propriété. Cette duplication en devient alors une source de confusion, surtout dans le cas où, dans une modification de ce même code, on se met à changer la valeur de la propriété autrement qu'en changeant la dernière instance. Les noms de propriété en double sont une erreur de syntaxe en mode strict :

- -
"use strict";
-var o = { p: 1, p: 2 }; // !!! erreur de syntaxe
-
- -
-

Note : Cela n'est plus le cas avec ECMAScript 2015 ({{bug(1041128)}}).

-
- -

Cinquièmement, le mode strict requiert que les noms de paramètres de fonction soient uniques. En mode non-strict, le dernier argument dupliqué cache les arguments précédents ayant le même nom. Ces arguments précédents demeurent disponibles via arguments[i], ils ne sont donc pas complètement inaccessibles. Pourtant, cette cachette n'a guère de sens et n'est probablement pas souhaitable (cela pourrait cacher une faute de frappe, par exemple). Donc en mode strict, les doublons de noms d'arguments sont une erreur de syntaxe :

- -
function somme(a, a, c) { // !!! erreur de syntaxe
-  "use strict";
-  return a + b + c; // Ce code va planter s'il est exécuté
-}
-
- -

Sixièmement, le mode strict interdit la syntaxe octale. La syntaxe octale ne fait pas partie d'ECMAScript 5, mais elle est supportée dans tous les navigateurs en préfixant le nombre octal d'un zéro : 0644 === 420 et "\045" === "%". La notation octale est supportée en utilisant le préfixe "0o" :

- -
let a = 0o10; // Notation octale ES2015
- -

Les développeurs novices croient parfois qu'un zéro débutant un nombre n'a pas de signification sémantique, alors ils l'utilisent comme moyen d'aligner des colonnes de nombres mais ce faisant, ils changent la valeur du nombre ! La syntaxe octale est rarement utile et peut être utilisée de manière fautive, donc le mode strict le considère comme étant une erreur de syntaxe :

- -
"use strict";
-var somme = 015 + // !!! erreur de syntaxe
-            197 +
-            142;
-
- -

Septièmement, le mode strict, à partir d'ECMAScript 2015 interdit de définir des propriétés sur des valeurs primitives. Sans mode strict, de telles définitions sont ignorées. En activant le mode strict cela lèvera une exception {{jsxref("TypeError")}}.

- -
(function() {
-"use strict";
-
-false.true = "";         // TypeError
-(14).calvados= "maison";     // TypeError
-"une chaîne".de = "caractères"; // TypeError
-
-})();
- -

Simplifier l'utilisation des variables

- -

Le mode strict simplifie la façon dont les noms de variables sont mis en correspondance avec les définitions de variables dans le code. De nombreuses optimisations du compilateur reposent sur la capacité à dire à quel endroit la variable X est stockée : cela est essentiel pour optimiser pleinement le code JavaScript. JavaScript rend parfois cette mise en correspondance impossible à réaliser avant l'exécution du code. Le mode strict élimine la plupart des cas où cela se produit, de sorte que le compilateur peut mieux optimiser le code en mode strict.

- -

Premièrement, le mode strict interdit l'utilisation de with. Le problème avec with est que tout nom de variable à l'intérieur du bloc peut faire référence à une propriété de l'objet qui lui est passé, ou encore à une variable déclarée à l'extérieur du bloc, globale ou non, à l'exécution : il est impossible de le savoir d'avance. Le mode strict fait de with une erreur de syntaxe, donc il n'y a aucune chance pour qu'un nom déclaré dans un with fasse référence à un lieu inconnu à l'exécution :

- -
"use strict";
-var x = 17;
-with (obj) // !!! erreur de syntaxe
-{
-  // Si on n'était pas en mode strict, serait-ce var x,
-  // ou serait-ce plutôt obj.x?  Il est impossible en général
-  // de le dire sans faire tourner le code, donc
-  // le nom ne peut pas être optimisé.
-  x;
-}
-
- -

Au lieu d'utiliser with, on peut très bien assigner l'objet à une variable avec un nom court, puis accéder aux propriétés correspondantes à cette variable.

- -

Deuxièmement, eval en mode strict ne doit pas créer de variables dont la portée dépasse celle du eval. En mode non-strict, eval("var x;") crée la variable x dans le code appelant eval. Ce qui signifie qu'en général, dans une fonction contenant un appel à eval, tous les noms qui ne réfèrent pas à un paramètre ou une variable locale devront être mis en correspondance avec une définition de variable lors de l'exécution (puisque cet eval a introduit une nouvelle variable qui serait susceptible de modifier la variable externe). En mode strict, eval ne crée des variables que pour le code étant évalué, ainsi eval ne peut pas réaliser d'affectation à une variable externe ou à une variable locale :

- -
var x = 17;
-var evalX = eval("'use strict'; var x = 42; x");
-console.log(x === 17);
-console.log(evalX === 42);
-
- -

De la même manière, si la fonction eval est invoquée par une expression de la forme eval(...) dans un code en mode strict, le code sera aussi évalué en mode strict. Le code peut déclarer explicitement le mode strict, mais il est inutile de le faire.

- -
function strict1(str) {
-  "use strict";
-  return eval(str); // str sera évalué en mode strict
-}
-function strict2(f, str) {
-  "use strict";
-  return f(str); // pas de eval(...) : str est strict si et seulement si il est déclaré en mode strict
-}
-function nonstrict(str) {
-  return eval(str); // str est strict si et seulement si il est déclaré en mode strict
-}
-
-strict1("'Mode strict!'");
-strict1("'use strict'; 'Mode strict!'");
-strict2(eval, "'Mode non-strict.'");
-strict2(eval, "'use strict'; 'Mode strict!'");
-nonstrict("'Mode non-strict.'");
-nonstrict("'use strict'; 'Mode strict!'");
-
- -

Ainsi, les noms dans le code eval en mode strict se comportent de la même façon que les noms dans le code en mode strict n'étant pas évalués comme le résultat de eval.

- -

Troisièmement, le mode strict interdit la suppression des variables déclarées. delete name en mode strict est une erreur de syntaxe:

- -
"use strict";
-eval("var x; delete x;"); // !!! erreur de syntaxe
-
- -

Rendre eval et arguments plus simples

- -

Le mode strict rend {{jsxref("Fonctions/arguments","arguments")}} et {{jsxref("Objets_globaux/eval","eval()")}} moins « étranges ». Les deux impliquent une quantité de comportements étranges dans le code en mode non-strict : eval afin d'ajouter et d'enlever des liaisons et pour changer les valeurs de liaisons, et arguments via ses propriétés indexées faisant référence à des arguments nommés. Le mode strict permet de mieux traîter eval et arguments comme des mots-clés à part entière, bien qu'une réparation complète ne devrait pas arriver avant une version future d'ECMAScript.

- -

Premièrement, les chaînes eval et arguments ne peuvent pas être utilisées comme identificateur. Tous les exemples suivants entraînent des erreurs de syntaxe :

- -
"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;");
-
- -

Deuxièmement, en mode strict on ne donnera pas d'alias aux propriétés de arguments avec les objets créées dans la fonction. En code normal, dans une fonction dont le premier argument est arg, modifier arg modifiera aussi arguments[0], et vice versa (à moins qu'aucun argument ne soit fourni ou que arguments[0] soit supprimé). Les objets de arguments pour les fonctions en mode strict stockent les argument originaux, au moment où la fonction a été appelée. arguments[i] ne reflète pas la valeur de l'argument nommé correspondant, et vice-versa.

- -
function f(a) {
-  "use strict";
-  a = 42;
-  return [a, arguments[0]];
-}
-var pair = f(17);
-console.log(pair[0] === 42);
-console.log(pair[1] === 17);
-
- -

Troisièmement, arguments.callee n'est plus supporté. En temps normal arguments.callee contient la référence de la fonction courante. Il suffit d'appeler la fonction courante par son nom si elle n'est pas anonyme. arguments.callee en mode strict est une propriété non supprimable qui lèvera une erreur si elle est définie ou récupérée :

- -
"use strict";
-var f = function() { return arguments.callee; };
-f(); // lève une TypeError
-
- -

« Sécuriser » JavaScript

- -

Le mode strict permet d'écrire plus simplement du code JavaScript sûr. Certains sites web fournissent aujourd'hui des outils pour que les utilisateurs puissent écrire du JavaScript qui sera exécuté sur le site pour les autres utilisateurs. Dans un navigateur web, le JavaScript peut accéder à certaines informations privées de l'utilisateur. Il faut donc transformer le JavaScript écrit par un utilisateur externe pour que le code correspondant soit exécuté de façon sécurisée pour les autres utilisateurs. Pour ce faire, il faut effectuer des vérifications au moment de l'exécution. En effet, JavaScript est suffisamment flexible pour que vérifier du code avant l'exécution soit très complexe voire impossible. En revanche, vérifier le comportement du code lors de l'exécution a un coût sur les performances. Pour réduire ce nombre de vérifications et bénéficier de meilleures performances dans ce scénario, on peut restreindre le code qui peut être envoyé à du code en mode strict.

- -

Tout d'abord, la valeur passée en tant que this à une fonction n'est pas nécessairement transformée en un objet en mode strict. Pour une fonction « normale », this est toujours un objet : soit l'objet fourni si la valeur fournie pour this était un objet, soit la valeur, transformée en un objet quand c'est un booléen, une chaîne de caractères ou un nombre. Cette valeur peut également être l'objet global si this vaut null ou undefined lorsqu'il est passé à la fonction. (Les fonctions {{jsxref("Function.prototype.call()")}}, {{jsxref("Function.prototype.apply()")}} ou {{jsxref("Function.prototype.bind()")}} peuvent être utilisées lorsqu'on souhaite spécifier une certaine valeur pour this.) Cette conversion automatique en objet a un certain coût en termes de performances mais cela peut également exposer l'objet global ce qui est dangereux dans les navigateurs : en effet, l'objet global permet d'accéder à certaines fonctionnalités qui rendraient le code non-sécurisé. Ainsi, en mode strict, la valeur this n'est pas transformée en un objet et si elle n'est pas définie, this sera {{jsxref("undefined")}} :

- -
"use strict";
-function fun() { return this; }
-console.log(fun() === undefined);
-console.log(fun.call(2) === 2);
-console.log(fun.apply(null) === null);
-console.log(fun.call(undefined) === undefined);
-console.log(fun.bind(true)() === true);
-
- -

Cela signifie entre autres qu'il est impossible de faire référence à l'objet window du navigateur grâce à this au sein d'une fonction en mode strict.

- -

Ensuite, en mode strict, il n'est plus possible de remonter la pile d'appels grâce aux extensions communément implémentées. Par exemple, dans du code non strict, lorsqu'une fonction fun est en train d'être appelée, fun.caller fait référence à la fonction qui a appelé fun la dernière et fun.arguments correspond à l'objet arguments pour cet appel à fun. Ces deux extensions posent problème pour la sécurité car elles permettent au code d'accéder à des fonctions privilégiées et à leurs arguments (éventuellement non sécurisés). Si fun est passée en mode strict, fun.caller et fun.arguments seront des propriétés non-supprimables qui lèveront une exception pour chaque tentative d'accès ou de modification :

- -
function restricted()
-{
-  "use strict";
-  restricted.caller;    // lève une TypeError
-  restricted.arguments; // lève une TypeError
-}
-function privilegedInvoker()
-{
-  return restricted();
-}
-privilegedInvoker();
-
- -

Enfin, pour une fonction en mode strict, arguments ne permet pas d'accéder aux variables passées à la fonction lors de l'appel. Dans certaines anciennes implémentations d'ECMAScript, arguments.caller était un objet dont les propriétés étaient des alias pour les variables passées à la fonction. Cela entraîne un problème de sécurité car cela empêche de cacher des valeurs privilégiées via l'abstraction des fonctions. Cela empêche aussi de nombreuses optimisations. Pour ces raisons, les navigateurs récents n'implémentent plus cet objet. Cependant, étant donné sa présence historique, en mode strict, arguments.caller est une propriété non-supprimable qui déclenche une exception pour toute tentative d'accès ou de modification :

- -
"use strict";
-function fun(a, b)
-{
-  "use strict";
-  var v = 12;
-  return arguments.caller; // lève une TypeError
-}
-fun(1, 2); // n'expose pas v (ni a ou b)
-
- -

Prévoir la suite : les prochaines versions d'ECMAScript

- -

Les prochaines versions d'ECMAScript inclueront certainement une nouvelle syntaxe, de nouveaux mots-clés. Le mode strict d'ECMAScript 5 applique certaines restrictions qui permettent de prévoir les transitions à venir lorsque des changements auront lieu. Il sera ainsi plus simple de modifier le code si les erreurs relatives à une nouvelle syntaxe sont mises en avant grâce au mode strict.

- -

Premièrement, en mode strict, une liste d'identifiants fait partie des mots-clés réservés. Ces termes sont : implements, interface, let, package, private, protected, public, static, et yield. En mode strict, il est donc impossible de nommer des variables ou des arguments avec ces noms.

- -
function package(protected) { // !!!
-  "use strict";
-  var implements; // !!!
-
-  interface: // !!!
-  while (true) {
-    break interface; // !!!
-  }
-
-  function private() { } // !!!
-}
-function fun(static) { 'use strict'; } // !!!
-
-
- -

Deux défauts liés à Mozilla Firefox : tout d'abord si votre code est en JavaScript 1.7 ou supérieur (par exemple pour du code qui concerne le chrome dans les extensions ou lorsqu'on utilise les balises <script type="">) et qu'il est en mode strict, let et yield fonctionnent de la façon dont ils fonctionnaient originellement au sein de Firefox. En revanche, pour du code strict utilisé sur une page web et chargé avec <script src=""> ou <script>...</script>, on ne pourra pas utiliser let/yield comme identifiants. Ensuite, bien qu'ES5 réserve les mots-clés class, enum, export, extends, import, et super pour le mode strict et le mode non strict, les versions antérieures à Firefox 5 ne réservaient ces mots-clés que pour le mode strict.

- -

Deuxièmement, le mode strict interdit les déclarations de fonctions qui ne sont pas au niveau le plus haut d'un script ou d'une fonction. En mode normal, il est possible de déclarer une fonction n'importe où avec une déclaration de fonction (voir {{jsxref("Instructions/function","function")}}). Ceci ne fait pas partie de la spécification ECMAScript et est donc une extension. Le mode strict interdit cela, ce qui permet de lever toute ambiguité par rapport aux futures spécifications ECMAScript sur cette fonctionnalité.  On notera que les instructions de fonctions écrites en dehors du plus haut niveau sont autorisées avec ES2015 :

- -
"use strict";
-if (true) {
-  function f() { } // !!! erreur de syntaxe
-  f();
-}
-
-for (var i = 0; i < 5; i++) {
-  function f2() { } // !!! erreur de syntaxe
-  f2();
-}
-
-function truc() { // OK
-  function bidule() { } // OK également
-}
-
- -

Cette interdiction n'est pas, à proprement parler, liée au mode strict. En effet, de telles déclarations de fonctions ne font pas partie d'ES5. Cependant, c'est un choix du comité ECMAScript que cette interdiction soit implémentée.

- -

Le mode strict dans les navigateurs

- -

Désormais, l'ensemble des navigateurs majeurs implémentent le mode strict. Cependant, il existe toujours un certain nombre de disparités et certains navigateurs actuels ou avec leurs anciennes versions ne supportent pas le mode strict. Le mode strict modifie des éléments de sémantique de JavaScript ; faire appel au mode strict pour des navigateurs qui ne le supportent pas peut donc entraîner des erreurs indésirables. Pour cette raison, il faut faire attention à la façon dont on exécute du code strict et bien tester ce code sur l'ensemble des navigateurs : ceux qui supportent le mode strict comme ceux qui ne supportent pas ce mode.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-10.1.1', 'Strict Mode Code')}}
- {{SpecName('ES5.1', '#sec-C', 'Strict mode restriction and exceptions')}}
{{Spec2('ES5.1')}}Définition initiale. Voir aussi : les restrictions du mode strict et les exceptions
{{SpecName('ES2015', '#sec-strict-mode-code', 'Strict Mode Code')}}
- {{SpecName('ES2015', '#sec-strict-mode-of-ecmascript', 'Strict mode restriction and exceptions')}}
{{Spec2('ES2015')}}Les restrictions du mode strict et les exceptions
{{SpecName('ESDraft', '#sec-strict-mode-code', 'Strict Mode Code')}}{{Spec2('ESDraft')}}Les restrictions du mode strict et les exceptions
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/strict_mode/index.md b/files/fr/web/javascript/reference/strict_mode/index.md new file mode 100644 index 0000000000..46af582e3f --- /dev/null +++ b/files/fr/web/javascript/reference/strict_mode/index.md @@ -0,0 +1,378 @@ +--- +title: Le mode strict +slug: Web/JavaScript/Reference/Strict_mode +tags: + - ECMAScript 5 + - JavaScript + - Reference + - Strict Mode +translation_of: Web/JavaScript/Reference/Strict_mode +--- +
{{JsSidebar("More")}}
+ +

Le mode strict de ECMAScript 5 permet de choisir une variante restrictive de JavaScript. Le mode strict n'est pas seulement un sous-ensemble de JavaScript : il possède intentionnellement des sémantiques différentes du code normal. Les navigateurs ne supportant pas le mode strict exécuteront le code d'une façon légèrement différente de ceux le supportant, il ne faut donc pas compter sur le mode strict pour éviter des tests sur les navigateurs qui ne le supportent pas. Les codes en mode strict et en mode non-strict peuvent coexister, ce qui permet de réécrire les scripts en mode strict de façon incrémentale.

+ +

Le mode strict apporte quelques changements à la sémantique « normale » de JavaScript:

+ +
    +
  1. Le mode strict élimine quelques erreurs silencieuses de JavaScript en les changeant en erreurs explicites (une exception sera levée).
  2. +
  3. Le mode strict corrige les erreurs qui font qu'autrement il est difficile pour les moteurs JavaScript d'effectuer des optimisations. Le code sera donc exécuté plus rapidement en mode strict, sans changer une seule ligne si cela n'est pas nécessaire.
  4. +
  5. Le mode strict interdit les mot-clés susceptibles d'être définis dans les futures versions de ECMAScript.
  6. +
+ +

Voir la page Passer au mode strict pour plus de détails quant à la migration d'une base de code non-stricte vers une base de code compatible avec le mode strict.

+ +

Note : Le mode non strict (celui actif par défaut) est parfois appelé « sloppy mode » en anglais. Bien que ce ne soit pas la dénomination officielle, on la rencontre occasionnellement.

+
+ +

Invoquer le mode strict

+ +

Le mode strict s'applique à des scripts entiers ou à des fonctions individuelles. Il ne peut s'appliquer à des blocs d'instructions entourés d'accolades {}; essayer de l'appliquer dans ces contextes ne fera rien. Les codes présents dans {{jsxref("Objets_globaux/eval","eval()")}}, {{jsxref("Function")}}, les attributs d'événements et les chaînes passées à setTimeout, ou autres sont des scripts entiers, et invoquer le mode strict à l'intérieur de ceux-ci fonctionnera comme prévu.

+ +

Le mode strict pour les scripts

+ +

Pour invoquer le mode strict pour un script entier, on ajoutera l'instruction exacte "use strict"; (ou 'use strict';) avant toutes les autres instructions.

+ +
// Script entier en mode strict
+"use strict";
+var v = "Allo ! Je suis en mode strict !";
+
+ +

Cette syntaxe possède un piège dans lequel est déjà tombé un site web connu : il n'est pas possible de concaténer du script en mode strict et du code en mode non-strict. En effet, si on concatène du code non-strict à la suite d'un code strict, tout le code sera considéré comme strict. De même si on concatène du code strict à la suite d'un code non-strict, le code entier aura l'air non-strict. Ainsi, on peut concaténer entre eux des codes stricts sans aucun problème et de même concaténer uniquement des codes non-stricts sans problème. En revanche, lorsqu'on mélange les deux, cela pose un problème. Lors d'une phase de transition, il est donc recommandé de n'activer le mode strict que fonction par fonction.

+ +

Il est aussi possible d'adopter une approche qui consiste à englober le code du script dans une fonction et à donner à cette dernière le mode strict. Ce procédé élimine le problème de concaténation mais cela signifie aussi qu'on doit exporter chaque variable globale hors de la fonction principale nouvellement créée.

+ +

Le mode strict pour les fonctions

+ +

De même, pour activer le mode strict pour une fonction, on placera l'instruction exacte "use strict"; (ou 'use strict';) dans le corps de la fonction avant toute autre déclaration.

+ +
function strict() {
+  // Syntaxe en mode strict au niveau de la fonction
+  'use strict';
+  function nested() { return "Ho que oui, je le suis !"; }
+  return "Allô ! Je suis une fonction en mode strict ! " + nested();
+}
+function notStrict() { return "Je ne suis pas strict."; }
+
+ +

Mode strict pour les modules

+ +

ECMAScript 2015 a vu apparaître les modules JavaScript. Le code de ces modules est automatiquement en mode strict et aucune instruction n'est nécessaire pour passer dans ce mode.

+ +
function maFonctionDeModule() {
+  // étant dans un module, le code présent
+  // ici sera d'office en mode strict
+}
+export default maFonctionDeModule;
+ +

Différences du mode strict

+ +

Le mode strict modifie à la fois la syntaxe et le comportement à l'exécution. Les changements se déclinent généralement en trois catégories : ceux qui convertissent les fautes en erreurs (comme des erreurs de syntaxe ou les erreurs d'exécution), ceux qui simplifient comment une variable pour un nom donné est traitée, simplifiant {{jsxref("Objets_globaux/eval","eval()")}} et {{jsxref("Fonctions/arguments","arguments")}} et ceux qui permettent d'écrire plus simplement du code JavaScript pérenne qui anticipe les évolutions futures d'ECMAScript.

+ +

Convertir les fautes en erreurs

+ +

Le mode strict change quelques fautes précédemment acceptées, en erreurs. JavaScript a été conçu pour les développeurs novices et, quelquefois, il ne crée pas d'erreur explicite pour certaines instructions qui devraient être des erreurs. Parfois cela règle un problème immédiatement, mais cela peut aussi créer d'autres erreurs, plus loin dans le code. Le mode strict traite ces fautes comme des erreurs afin qu'elles soient découvertes et rapidement traitées.

+ +

Premièrement, en mode strict, il est impossible de créer accidentellement des variables globales. En mode normal, ne pas déclarer une variable lors d'une affectation (oublier l'instruction {{jsxref("Instructions/var","var")}}) crée une nouvelle propriété sur l'objet global et le code continue de fonctionner (même si ça peut être une source de problèmes par la suite). Les affectations qui pourraient accidentellement créer des variables globales lèveront une erreur en mode strict:

+ +
"use strict";
+varialeMalDéclarée = 17; // lève une ReferenceError
+
+ +

Deuxièmement, le mode strict fait en sorte que les affectations qui échoueraient silencieusement lèveront aussi une exception. Par exemple, {{jsxref("Objets_globaux/NaN","NaN")}} est une variable globale en lecture seule. En mode normal, une affectation à NaN ne fera rien ; le développeur ne recevra aucun retour par rapport à cette faute. En mode strict, affecter une valeur quelconque à NaN lèvera une exception. Toute affectation qui échouera silencieusement en mode non-strict (affectation à une propriété en lecture seule, affectation à une propriété sans méthode set, affectation à une nouvelle propriété sur un objet non-extensible) lèvera une exception en mode strict :

+ +
"use strict";
+
+// Affectation à une propriété globale en lecture seule
+var undefined = 5;  // déclenche une exception TypeError
+var Infinity = 5;   // déclenche une exception TypeError
+
+// Affectation à une propriété en lecture seule
+var obj1 = {};
+Object.defineProperty(obj1, "x", { value: 42, writable: false });
+obj1.x = 9; // lève un TypeError
+
+// Affectation à une propriété qui n'a qu'une méthode get
+var obj2 = { get x() { return 17; } };
+obj2.x = 5; // lève un TypeError
+
+// Affectation d'une nouvelle propriété à un objet non-extensible
+var gele= {};
+Object.preventExtensions(gele);
+gele.nouvelleProp = "ohé"; // lève un TypeError
+
+ +

Troisièmement, le mode strict lèvera une exception lors d'une tentative de suppression d'une propriété non-supprimable (là où cela ne produisait aucun effet en mode non strict) :

+ +
"use strict";
+delete Object.prototype; // lève une TypeError
+
+ +

Quatrièmement, le mode strict, avant Gecko 34, requiert que toutes les propriétés nommées dans un objet littéral soient uniques. En mode non-strict, les propriétés peuvent être spécifiées deux fois, JavaScript ne retenant que la dernière valeur de la propriété. Cette duplication en devient alors une source de confusion, surtout dans le cas où, dans une modification de ce même code, on se met à changer la valeur de la propriété autrement qu'en changeant la dernière instance. Les noms de propriété en double sont une erreur de syntaxe en mode strict :

+ +
"use strict";
+var o = { p: 1, p: 2 }; // !!! erreur de syntaxe
+
+ +
+

Note : Cela n'est plus le cas avec ECMAScript 2015 ({{bug(1041128)}}).

+
+ +

Cinquièmement, le mode strict requiert que les noms de paramètres de fonction soient uniques. En mode non-strict, le dernier argument dupliqué cache les arguments précédents ayant le même nom. Ces arguments précédents demeurent disponibles via arguments[i], ils ne sont donc pas complètement inaccessibles. Pourtant, cette cachette n'a guère de sens et n'est probablement pas souhaitable (cela pourrait cacher une faute de frappe, par exemple). Donc en mode strict, les doublons de noms d'arguments sont une erreur de syntaxe :

+ +
function somme(a, a, c) { // !!! erreur de syntaxe
+  "use strict";
+  return a + b + c; // Ce code va planter s'il est exécuté
+}
+
+ +

Sixièmement, le mode strict interdit la syntaxe octale. La syntaxe octale ne fait pas partie d'ECMAScript 5, mais elle est supportée dans tous les navigateurs en préfixant le nombre octal d'un zéro : 0644 === 420 et "\045" === "%". La notation octale est supportée en utilisant le préfixe "0o" :

+ +
let a = 0o10; // Notation octale ES2015
+ +

Les développeurs novices croient parfois qu'un zéro débutant un nombre n'a pas de signification sémantique, alors ils l'utilisent comme moyen d'aligner des colonnes de nombres mais ce faisant, ils changent la valeur du nombre ! La syntaxe octale est rarement utile et peut être utilisée de manière fautive, donc le mode strict le considère comme étant une erreur de syntaxe :

+ +
"use strict";
+var somme = 015 + // !!! erreur de syntaxe
+            197 +
+            142;
+
+ +

Septièmement, le mode strict, à partir d'ECMAScript 2015 interdit de définir des propriétés sur des valeurs primitives. Sans mode strict, de telles définitions sont ignorées. En activant le mode strict cela lèvera une exception {{jsxref("TypeError")}}.

+ +
(function() {
+"use strict";
+
+false.true = "";         // TypeError
+(14).calvados= "maison";     // TypeError
+"une chaîne".de = "caractères"; // TypeError
+
+})();
+ +

Simplifier l'utilisation des variables

+ +

Le mode strict simplifie la façon dont les noms de variables sont mis en correspondance avec les définitions de variables dans le code. De nombreuses optimisations du compilateur reposent sur la capacité à dire à quel endroit la variable X est stockée : cela est essentiel pour optimiser pleinement le code JavaScript. JavaScript rend parfois cette mise en correspondance impossible à réaliser avant l'exécution du code. Le mode strict élimine la plupart des cas où cela se produit, de sorte que le compilateur peut mieux optimiser le code en mode strict.

+ +

Premièrement, le mode strict interdit l'utilisation de with. Le problème avec with est que tout nom de variable à l'intérieur du bloc peut faire référence à une propriété de l'objet qui lui est passé, ou encore à une variable déclarée à l'extérieur du bloc, globale ou non, à l'exécution : il est impossible de le savoir d'avance. Le mode strict fait de with une erreur de syntaxe, donc il n'y a aucune chance pour qu'un nom déclaré dans un with fasse référence à un lieu inconnu à l'exécution :

+ +
"use strict";
+var x = 17;
+with (obj) // !!! erreur de syntaxe
+{
+  // Si on n'était pas en mode strict, serait-ce var x,
+  // ou serait-ce plutôt obj.x?  Il est impossible en général
+  // de le dire sans faire tourner le code, donc
+  // le nom ne peut pas être optimisé.
+  x;
+}
+
+ +

Au lieu d'utiliser with, on peut très bien assigner l'objet à une variable avec un nom court, puis accéder aux propriétés correspondantes à cette variable.

+ +

Deuxièmement, eval en mode strict ne doit pas créer de variables dont la portée dépasse celle du eval. En mode non-strict, eval("var x;") crée la variable x dans le code appelant eval. Ce qui signifie qu'en général, dans une fonction contenant un appel à eval, tous les noms qui ne réfèrent pas à un paramètre ou une variable locale devront être mis en correspondance avec une définition de variable lors de l'exécution (puisque cet eval a introduit une nouvelle variable qui serait susceptible de modifier la variable externe). En mode strict, eval ne crée des variables que pour le code étant évalué, ainsi eval ne peut pas réaliser d'affectation à une variable externe ou à une variable locale :

+ +
var x = 17;
+var evalX = eval("'use strict'; var x = 42; x");
+console.log(x === 17);
+console.log(evalX === 42);
+
+ +

De la même manière, si la fonction eval est invoquée par une expression de la forme eval(...) dans un code en mode strict, le code sera aussi évalué en mode strict. Le code peut déclarer explicitement le mode strict, mais il est inutile de le faire.

+ +
function strict1(str) {
+  "use strict";
+  return eval(str); // str sera évalué en mode strict
+}
+function strict2(f, str) {
+  "use strict";
+  return f(str); // pas de eval(...) : str est strict si et seulement si il est déclaré en mode strict
+}
+function nonstrict(str) {
+  return eval(str); // str est strict si et seulement si il est déclaré en mode strict
+}
+
+strict1("'Mode strict!'");
+strict1("'use strict'; 'Mode strict!'");
+strict2(eval, "'Mode non-strict.'");
+strict2(eval, "'use strict'; 'Mode strict!'");
+nonstrict("'Mode non-strict.'");
+nonstrict("'use strict'; 'Mode strict!'");
+
+ +

Ainsi, les noms dans le code eval en mode strict se comportent de la même façon que les noms dans le code en mode strict n'étant pas évalués comme le résultat de eval.

+ +

Troisièmement, le mode strict interdit la suppression des variables déclarées. delete name en mode strict est une erreur de syntaxe:

+ +
"use strict";
+eval("var x; delete x;"); // !!! erreur de syntaxe
+
+ +

Rendre eval et arguments plus simples

+ +

Le mode strict rend {{jsxref("Fonctions/arguments","arguments")}} et {{jsxref("Objets_globaux/eval","eval()")}} moins « étranges ». Les deux impliquent une quantité de comportements étranges dans le code en mode non-strict : eval afin d'ajouter et d'enlever des liaisons et pour changer les valeurs de liaisons, et arguments via ses propriétés indexées faisant référence à des arguments nommés. Le mode strict permet de mieux traîter eval et arguments comme des mots-clés à part entière, bien qu'une réparation complète ne devrait pas arriver avant une version future d'ECMAScript.

+ +

Premièrement, les chaînes eval et arguments ne peuvent pas être utilisées comme identificateur. Tous les exemples suivants entraînent des erreurs de syntaxe :

+ +
"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;");
+
+ +

Deuxièmement, en mode strict on ne donnera pas d'alias aux propriétés de arguments avec les objets créées dans la fonction. En code normal, dans une fonction dont le premier argument est arg, modifier arg modifiera aussi arguments[0], et vice versa (à moins qu'aucun argument ne soit fourni ou que arguments[0] soit supprimé). Les objets de arguments pour les fonctions en mode strict stockent les argument originaux, au moment où la fonction a été appelée. arguments[i] ne reflète pas la valeur de l'argument nommé correspondant, et vice-versa.

+ +
function f(a) {
+  "use strict";
+  a = 42;
+  return [a, arguments[0]];
+}
+var pair = f(17);
+console.log(pair[0] === 42);
+console.log(pair[1] === 17);
+
+ +

Troisièmement, arguments.callee n'est plus supporté. En temps normal arguments.callee contient la référence de la fonction courante. Il suffit d'appeler la fonction courante par son nom si elle n'est pas anonyme. arguments.callee en mode strict est une propriété non supprimable qui lèvera une erreur si elle est définie ou récupérée :

+ +
"use strict";
+var f = function() { return arguments.callee; };
+f(); // lève une TypeError
+
+ +

« Sécuriser » JavaScript

+ +

Le mode strict permet d'écrire plus simplement du code JavaScript sûr. Certains sites web fournissent aujourd'hui des outils pour que les utilisateurs puissent écrire du JavaScript qui sera exécuté sur le site pour les autres utilisateurs. Dans un navigateur web, le JavaScript peut accéder à certaines informations privées de l'utilisateur. Il faut donc transformer le JavaScript écrit par un utilisateur externe pour que le code correspondant soit exécuté de façon sécurisée pour les autres utilisateurs. Pour ce faire, il faut effectuer des vérifications au moment de l'exécution. En effet, JavaScript est suffisamment flexible pour que vérifier du code avant l'exécution soit très complexe voire impossible. En revanche, vérifier le comportement du code lors de l'exécution a un coût sur les performances. Pour réduire ce nombre de vérifications et bénéficier de meilleures performances dans ce scénario, on peut restreindre le code qui peut être envoyé à du code en mode strict.

+ +

Tout d'abord, la valeur passée en tant que this à une fonction n'est pas nécessairement transformée en un objet en mode strict. Pour une fonction « normale », this est toujours un objet : soit l'objet fourni si la valeur fournie pour this était un objet, soit la valeur, transformée en un objet quand c'est un booléen, une chaîne de caractères ou un nombre. Cette valeur peut également être l'objet global si this vaut null ou undefined lorsqu'il est passé à la fonction. (Les fonctions {{jsxref("Function.prototype.call()")}}, {{jsxref("Function.prototype.apply()")}} ou {{jsxref("Function.prototype.bind()")}} peuvent être utilisées lorsqu'on souhaite spécifier une certaine valeur pour this.) Cette conversion automatique en objet a un certain coût en termes de performances mais cela peut également exposer l'objet global ce qui est dangereux dans les navigateurs : en effet, l'objet global permet d'accéder à certaines fonctionnalités qui rendraient le code non-sécurisé. Ainsi, en mode strict, la valeur this n'est pas transformée en un objet et si elle n'est pas définie, this sera {{jsxref("undefined")}} :

+ +
"use strict";
+function fun() { return this; }
+console.log(fun() === undefined);
+console.log(fun.call(2) === 2);
+console.log(fun.apply(null) === null);
+console.log(fun.call(undefined) === undefined);
+console.log(fun.bind(true)() === true);
+
+ +

Cela signifie entre autres qu'il est impossible de faire référence à l'objet window du navigateur grâce à this au sein d'une fonction en mode strict.

+ +

Ensuite, en mode strict, il n'est plus possible de remonter la pile d'appels grâce aux extensions communément implémentées. Par exemple, dans du code non strict, lorsqu'une fonction fun est en train d'être appelée, fun.caller fait référence à la fonction qui a appelé fun la dernière et fun.arguments correspond à l'objet arguments pour cet appel à fun. Ces deux extensions posent problème pour la sécurité car elles permettent au code d'accéder à des fonctions privilégiées et à leurs arguments (éventuellement non sécurisés). Si fun est passée en mode strict, fun.caller et fun.arguments seront des propriétés non-supprimables qui lèveront une exception pour chaque tentative d'accès ou de modification :

+ +
function restricted()
+{
+  "use strict";
+  restricted.caller;    // lève une TypeError
+  restricted.arguments; // lève une TypeError
+}
+function privilegedInvoker()
+{
+  return restricted();
+}
+privilegedInvoker();
+
+ +

Enfin, pour une fonction en mode strict, arguments ne permet pas d'accéder aux variables passées à la fonction lors de l'appel. Dans certaines anciennes implémentations d'ECMAScript, arguments.caller était un objet dont les propriétés étaient des alias pour les variables passées à la fonction. Cela entraîne un problème de sécurité car cela empêche de cacher des valeurs privilégiées via l'abstraction des fonctions. Cela empêche aussi de nombreuses optimisations. Pour ces raisons, les navigateurs récents n'implémentent plus cet objet. Cependant, étant donné sa présence historique, en mode strict, arguments.caller est une propriété non-supprimable qui déclenche une exception pour toute tentative d'accès ou de modification :

+ +
"use strict";
+function fun(a, b)
+{
+  "use strict";
+  var v = 12;
+  return arguments.caller; // lève une TypeError
+}
+fun(1, 2); // n'expose pas v (ni a ou b)
+
+ +

Prévoir la suite : les prochaines versions d'ECMAScript

+ +

Les prochaines versions d'ECMAScript inclueront certainement une nouvelle syntaxe, de nouveaux mots-clés. Le mode strict d'ECMAScript 5 applique certaines restrictions qui permettent de prévoir les transitions à venir lorsque des changements auront lieu. Il sera ainsi plus simple de modifier le code si les erreurs relatives à une nouvelle syntaxe sont mises en avant grâce au mode strict.

+ +

Premièrement, en mode strict, une liste d'identifiants fait partie des mots-clés réservés. Ces termes sont : implements, interface, let, package, private, protected, public, static, et yield. En mode strict, il est donc impossible de nommer des variables ou des arguments avec ces noms.

+ +
function package(protected) { // !!!
+  "use strict";
+  var implements; // !!!
+
+  interface: // !!!
+  while (true) {
+    break interface; // !!!
+  }
+
+  function private() { } // !!!
+}
+function fun(static) { 'use strict'; } // !!!
+
+
+ +

Deux défauts liés à Mozilla Firefox : tout d'abord si votre code est en JavaScript 1.7 ou supérieur (par exemple pour du code qui concerne le chrome dans les extensions ou lorsqu'on utilise les balises <script type="">) et qu'il est en mode strict, let et yield fonctionnent de la façon dont ils fonctionnaient originellement au sein de Firefox. En revanche, pour du code strict utilisé sur une page web et chargé avec <script src=""> ou <script>...</script>, on ne pourra pas utiliser let/yield comme identifiants. Ensuite, bien qu'ES5 réserve les mots-clés class, enum, export, extends, import, et super pour le mode strict et le mode non strict, les versions antérieures à Firefox 5 ne réservaient ces mots-clés que pour le mode strict.

+ +

Deuxièmement, le mode strict interdit les déclarations de fonctions qui ne sont pas au niveau le plus haut d'un script ou d'une fonction. En mode normal, il est possible de déclarer une fonction n'importe où avec une déclaration de fonction (voir {{jsxref("Instructions/function","function")}}). Ceci ne fait pas partie de la spécification ECMAScript et est donc une extension. Le mode strict interdit cela, ce qui permet de lever toute ambiguité par rapport aux futures spécifications ECMAScript sur cette fonctionnalité.  On notera que les instructions de fonctions écrites en dehors du plus haut niveau sont autorisées avec ES2015 :

+ +
"use strict";
+if (true) {
+  function f() { } // !!! erreur de syntaxe
+  f();
+}
+
+for (var i = 0; i < 5; i++) {
+  function f2() { } // !!! erreur de syntaxe
+  f2();
+}
+
+function truc() { // OK
+  function bidule() { } // OK également
+}
+
+ +

Cette interdiction n'est pas, à proprement parler, liée au mode strict. En effet, de telles déclarations de fonctions ne font pas partie d'ES5. Cependant, c'est un choix du comité ECMAScript que cette interdiction soit implémentée.

+ +

Le mode strict dans les navigateurs

+ +

Désormais, l'ensemble des navigateurs majeurs implémentent le mode strict. Cependant, il existe toujours un certain nombre de disparités et certains navigateurs actuels ou avec leurs anciennes versions ne supportent pas le mode strict. Le mode strict modifie des éléments de sémantique de JavaScript ; faire appel au mode strict pour des navigateurs qui ne le supportent pas peut donc entraîner des erreurs indésirables. Pour cette raison, il faut faire attention à la façon dont on exécute du code strict et bien tester ce code sur l'ensemble des navigateurs : ceux qui supportent le mode strict comme ceux qui ne supportent pas ce mode.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1', '#sec-10.1.1', 'Strict Mode Code')}}
+ {{SpecName('ES5.1', '#sec-C', 'Strict mode restriction and exceptions')}}
{{Spec2('ES5.1')}}Définition initiale. Voir aussi : les restrictions du mode strict et les exceptions
{{SpecName('ES2015', '#sec-strict-mode-code', 'Strict Mode Code')}}
+ {{SpecName('ES2015', '#sec-strict-mode-of-ecmascript', 'Strict mode restriction and exceptions')}}
{{Spec2('ES2015')}}Les restrictions du mode strict et les exceptions
{{SpecName('ESDraft', '#sec-strict-mode-code', 'Strict Mode Code')}}{{Spec2('ESDraft')}}Les restrictions du mode strict et les exceptions
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html b/files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html deleted file mode 100644 index 09bbdd415f..0000000000 --- a/files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Passer au mode strict -slug: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode -tags: - - Avancé - - JavaScript -translation_of: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode -original_slug: Web/JavaScript/Reference/Strict_mode/Passer_au_mode_strict ---- -
{{jsSidebar("More")}}
- -

Le mode strict fut introduit avec ECMAScript 5 et est désormais présent dans les principaux navigateurs. Pour indiquer au navigateur l'utilisation de ce mode, il suffit d'ajouter "use strict"; au début du code source. En revanche, il faut un peu plus de travail afin de migrer une base de code existante afin qu'elle utilise intégralement le mode strict.

- -

Cet article a pour but de guider les développeurs qui souhaitent effectuer cette migration.

- -

Transition progressive

- -

Le mode strict a été conçu afin que la transition puisse être effectuée de façon progressive. Il est possible de modifier chaque fichier individuellement voire, éventuellement, de descendre cette granularité aux fonctions.

- -

Différences entre strict et non-strict

- -

Erreurs de syntaxe

- -

En utilisant "use strict";, certaines instructions ou fragments de code lanceront une exception {{jsxref("SyntaxError")}} avant l'exécution du script :

- - - -

Ces erreurs sont bienvenues car elles révèlent des mauvaises pratiques et certaines erreurs claires. Elles apparaissent avant l'exécution du code.

- -

Erreurs à l'exécution

- -

JavaScript échoue silencieusement dans certains contextes où une erreur se produit. Le mode strict lance une exception dans ces cas. Si votre code contient certains de ces cas, il sera nécessaire de faire des tests afin de vous assurer que rien n'est cassé. Encore une fois, il est possible d'utiliser le mode strict à la granularité des fonctions.

- -

Attribuer une valeur à une variable non déclarée

- -
function f(x){
-  "use strict";
-  var a = 12;
-  b = a + x*35; // erreur !
-}
-f(42);
-
- -

Cela a pour effet de changer une valeur de l'objet global, ce qui est rarement voulu. Si vous souhaitez définir une valeur pour l'objet global, utilisez le comme argument et assignez la propriété de façon explicite :

- -
// au niveau le plus haut "this" fait toujours référence
-// à l'objet global
-var global = this;
-
-function f(x){
-  "use strict";
-  var a = 12;
-  global.b = a + x*35;
-}
-f(42);
-
- -

Essayer de supprimer une propriété non-configurable

- -
"use strict";
-delete Object.prototype; // erreur !
-
- -

En mode non-strict, cela serait passé sous silence (contrairement à ce à quoi l'utilisateur pourrait s'attendre).

- -

Utiliser les mauvaises propriétés d'arguments et function

- -

Utiliser arguments.callee, arguments.caller, anyFunction.caller ou encore anyFunction.arguments renverra une erreur en mode strict. Le seul cas légitime pour les utiliser serait :

- -
// exemple tiré de vanillajs: http://vanilla-js.com/
-var s = document.getElementById('truc').style;
-s.opacity = 1;
-(function(){
-  if((s.opacity-=.1) < 0)
-    s.display="none";
-  else
-    setTimeout(arguments.callee, 40);
-})();
- -

qu'on peut réécrire en :

- -
"use strict";
-var s = document.getElementById('truc').style;
-s.opacity = 1;
-(function fadeOut(){ // on nomme la fonction
-  if((s.opacity-=.1) < 0)
-    s.display="none";
-  else
-    setTimeout(fadeOut, 40); // on utilise ce nom
-})();
- -

Les différences sémantiques

- -

Ces différences sont très subtiles et il est possible qu'un ensemble de tests ne détecte pas ces différences. Il peut être alors nécessaire d'analyser votre code avec précaution afin de vérifier que la signification du code n'ait pas changé. Encore une fois, cela peut être fait fonction par fonction.

- -

Le sens de this dans les appels de fonction

- -

Lors de l'appel à une fonction comme f(), la valeur de this correspondait à l'objet global. En mode strict, cette valeur devient undefined. Lorsqu'une fonction était appelée avec {{jsxref("Function.prototype.call","call()")}} ou {{jsxref("Function.prototype.apply","apply()")}}, si la valeur était une valeur primitive, elle était placée dans un objet (ou dans l'objet global pour undefined et null). En mode strict, la valeur est passée directement, sans conversion ni remplacement.

- -

arguments ne crée pas d'alias pour les arguments nommés d'une fonction

- -

En mode non-strict, la modification d'une valeur de l'objet arguments entraînait la modification de l'argument correspondant. Cela complexifie les optimisations des moteurs JavaScript et et la lecture du code. En mode strict, l'objet arguments est créé et initialisé avec les mêmes valeurs que les arguments nommés. En revanche, les changements apportés à l'objet arguments ou aux arguments nommés ne sont pas reproduit de l'un vers l'autre et réciproquement.

- -

Changements apportés à eval

- -

En mode strict, eval ne crée pas de nouvelle variable dans la portée depuis laquelle il a été appelé. Bien entendu, la chaîne évaluée est évaluée selon les règles du mode strict. Pour s'assurer du bon fonctionnement de cette évaluation, il faut s'assurer des cas de figures qui s'y présentent pour les tester. Rappel : il ne faut utiliser eval que si cela est nécessaire (les dangers liés à cette fonction font qu'on observe de mauvaises pratiques).

- -

La neutralité du code quant au mode strict

- -

Un des aspects négatifs de cette migration est la sémantique : le sens du code pourrait être différent dans les navigateurs historiques qui n'implémentent pas le mode strict. Dans quelques rares cas (une mauvaise concaténation ou minification), votre code pourrait ne pas fonctionner dans le mode que vous avez testé. Voici quelques règles pour que le code soit le plus neutre possible quant au mode choisi (strict ou non-strict) :

- -
    -
  1. Écrivez votre code « strictement » et assurez vous de lancer des exceptions dans le cadre d'erreurs liées au mode non-strict (voir la section « Erreurs à l'exécution » ci-avant)
  2. -
  3. Minimisez l'utilisation des éléments dont la sémantique pourrait changer : -
      -
    1. eval : n'utilisez cette fonction uniquement si vous êtes certains que c'est l'unique solution
    2. -
    3. arguments : utilisez les arguments d'une fonction via leur nom ou faites une copie de l'objet en utilisant :
      - var args = Array.prototype.slice.call(arguments)
      - au tout début de votre fonction
    4. -
    5. this : n'utilisez this que pour faire référence à un objet que vous avez créé
    6. -
    -
  4. -
- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.md b/files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.md new file mode 100644 index 0000000000..09bbdd415f --- /dev/null +++ b/files/fr/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.md @@ -0,0 +1,142 @@ +--- +title: Passer au mode strict +slug: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode +tags: + - Avancé + - JavaScript +translation_of: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode +original_slug: Web/JavaScript/Reference/Strict_mode/Passer_au_mode_strict +--- +
{{jsSidebar("More")}}
+ +

Le mode strict fut introduit avec ECMAScript 5 et est désormais présent dans les principaux navigateurs. Pour indiquer au navigateur l'utilisation de ce mode, il suffit d'ajouter "use strict"; au début du code source. En revanche, il faut un peu plus de travail afin de migrer une base de code existante afin qu'elle utilise intégralement le mode strict.

+ +

Cet article a pour but de guider les développeurs qui souhaitent effectuer cette migration.

+ +

Transition progressive

+ +

Le mode strict a été conçu afin que la transition puisse être effectuée de façon progressive. Il est possible de modifier chaque fichier individuellement voire, éventuellement, de descendre cette granularité aux fonctions.

+ +

Différences entre strict et non-strict

+ +

Erreurs de syntaxe

+ +

En utilisant "use strict";, certaines instructions ou fragments de code lanceront une exception {{jsxref("SyntaxError")}} avant l'exécution du script :

+ + + +

Ces erreurs sont bienvenues car elles révèlent des mauvaises pratiques et certaines erreurs claires. Elles apparaissent avant l'exécution du code.

+ +

Erreurs à l'exécution

+ +

JavaScript échoue silencieusement dans certains contextes où une erreur se produit. Le mode strict lance une exception dans ces cas. Si votre code contient certains de ces cas, il sera nécessaire de faire des tests afin de vous assurer que rien n'est cassé. Encore une fois, il est possible d'utiliser le mode strict à la granularité des fonctions.

+ +

Attribuer une valeur à une variable non déclarée

+ +
function f(x){
+  "use strict";
+  var a = 12;
+  b = a + x*35; // erreur !
+}
+f(42);
+
+ +

Cela a pour effet de changer une valeur de l'objet global, ce qui est rarement voulu. Si vous souhaitez définir une valeur pour l'objet global, utilisez le comme argument et assignez la propriété de façon explicite :

+ +
// au niveau le plus haut "this" fait toujours référence
+// à l'objet global
+var global = this;
+
+function f(x){
+  "use strict";
+  var a = 12;
+  global.b = a + x*35;
+}
+f(42);
+
+ +

Essayer de supprimer une propriété non-configurable

+ +
"use strict";
+delete Object.prototype; // erreur !
+
+ +

En mode non-strict, cela serait passé sous silence (contrairement à ce à quoi l'utilisateur pourrait s'attendre).

+ +

Utiliser les mauvaises propriétés d'arguments et function

+ +

Utiliser arguments.callee, arguments.caller, anyFunction.caller ou encore anyFunction.arguments renverra une erreur en mode strict. Le seul cas légitime pour les utiliser serait :

+ +
// exemple tiré de vanillajs: http://vanilla-js.com/
+var s = document.getElementById('truc').style;
+s.opacity = 1;
+(function(){
+  if((s.opacity-=.1) < 0)
+    s.display="none";
+  else
+    setTimeout(arguments.callee, 40);
+})();
+ +

qu'on peut réécrire en :

+ +
"use strict";
+var s = document.getElementById('truc').style;
+s.opacity = 1;
+(function fadeOut(){ // on nomme la fonction
+  if((s.opacity-=.1) < 0)
+    s.display="none";
+  else
+    setTimeout(fadeOut, 40); // on utilise ce nom
+})();
+ +

Les différences sémantiques

+ +

Ces différences sont très subtiles et il est possible qu'un ensemble de tests ne détecte pas ces différences. Il peut être alors nécessaire d'analyser votre code avec précaution afin de vérifier que la signification du code n'ait pas changé. Encore une fois, cela peut être fait fonction par fonction.

+ +

Le sens de this dans les appels de fonction

+ +

Lors de l'appel à une fonction comme f(), la valeur de this correspondait à l'objet global. En mode strict, cette valeur devient undefined. Lorsqu'une fonction était appelée avec {{jsxref("Function.prototype.call","call()")}} ou {{jsxref("Function.prototype.apply","apply()")}}, si la valeur était une valeur primitive, elle était placée dans un objet (ou dans l'objet global pour undefined et null). En mode strict, la valeur est passée directement, sans conversion ni remplacement.

+ +

arguments ne crée pas d'alias pour les arguments nommés d'une fonction

+ +

En mode non-strict, la modification d'une valeur de l'objet arguments entraînait la modification de l'argument correspondant. Cela complexifie les optimisations des moteurs JavaScript et et la lecture du code. En mode strict, l'objet arguments est créé et initialisé avec les mêmes valeurs que les arguments nommés. En revanche, les changements apportés à l'objet arguments ou aux arguments nommés ne sont pas reproduit de l'un vers l'autre et réciproquement.

+ +

Changements apportés à eval

+ +

En mode strict, eval ne crée pas de nouvelle variable dans la portée depuis laquelle il a été appelé. Bien entendu, la chaîne évaluée est évaluée selon les règles du mode strict. Pour s'assurer du bon fonctionnement de cette évaluation, il faut s'assurer des cas de figures qui s'y présentent pour les tester. Rappel : il ne faut utiliser eval que si cela est nécessaire (les dangers liés à cette fonction font qu'on observe de mauvaises pratiques).

+ +

La neutralité du code quant au mode strict

+ +

Un des aspects négatifs de cette migration est la sémantique : le sens du code pourrait être différent dans les navigateurs historiques qui n'implémentent pas le mode strict. Dans quelques rares cas (une mauvaise concaténation ou minification), votre code pourrait ne pas fonctionner dans le mode que vous avez testé. Voici quelques règles pour que le code soit le plus neutre possible quant au mode choisi (strict ou non-strict) :

+ +
    +
  1. Écrivez votre code « strictement » et assurez vous de lancer des exceptions dans le cadre d'erreurs liées au mode non-strict (voir la section « Erreurs à l'exécution » ci-avant)
  2. +
  3. Minimisez l'utilisation des éléments dont la sémantique pourrait changer : +
      +
    1. eval : n'utilisez cette fonction uniquement si vous êtes certains que c'est l'unique solution
    2. +
    3. arguments : utilisez les arguments d'une fonction via leur nom ou faites une copie de l'objet en utilisant :
      + var args = Array.prototype.slice.call(arguments)
      + au tout début de votre fonction
    4. +
    5. this : n'utilisez this que pour faire référence à un objet que vous avez créé
    6. +
    +
  4. +
+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/template_literals/index.html b/files/fr/web/javascript/reference/template_literals/index.html deleted file mode 100644 index 4f266479e0..0000000000 --- a/files/fr/web/javascript/reference/template_literals/index.html +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: Littéraux de gabarits -slug: Web/JavaScript/Reference/Template_literals -tags: - - Chaîne de caractères - - ECMAScript 2015 - - Guide - - JavaScript - - Littéraux de gabarits -translation_of: Web/JavaScript/Reference/Template_literals -original_slug: Web/JavaScript/Reference/Littéraux_gabarits ---- -
{{JsSidebar("More")}}
- -

Les littéraux de gabarits sont des littéraux de chaînes de caractères permettant d'intégrer des expressions. Avec eux, on peut utiliser des chaînes de caractères multi-lignes et des fonctionnalités d'interpolation.

- -
-

Note : Dans les premières versions de la spécification ECMAScript 2015, cette fonctionnalité était intitulée « gabarits de chaîne de caractères ». Dans la suite de cet article, les expressions « gabarits de texte », « gabarits de libellés », « littéraux de gabarits » et « gabarits » seront équivalents.

-
- -

Syntaxe

- -
`texte`
-
-`ligne de texte 1
- ligne de texte 2`
-
-`texte ${expression} texte`
-
-etiquette `texte ${expression} texte`
-
- -

Description

- -

Les gabarits sont délimités par des caractères accent grave (` `)  au lieu des apostrophes doubles ou simples. Les gabarits peuvent contenir des espaces réservés (placeholders). Ces espaces sont indiqués par le signe dollar ($) et des accolades (${expression}). Les expressions dans les espaces réservés et le texte compris dans ces espaces sont passés à une fonction.

- -

Pour créer la chaîne finale, la fonction par défaut concatène simplement les différentes parties en une seule chaîne. Toutefois, on peut utiliser une fonction spécifique pour obtenir un comportement différent et recomposer la chaîne avec une autre logique. On parlera alors de gabarit étiqueté (cf. ci-après).

- -
let rep = 42;
-console.log(`La réponse est ${rep}`); // Gabarit simple avec la concaténation par défaut
-
-function concatenationAdHoc(chaines, reponse){
-  let parite;
-  if(reponse % 2 === 0){
-    parite = "paire";
-  } else {
-    parite = "impaire";
-  }
-  return `${chaines[0]}${parite}.`;
-}
-// concaténation spécifique où on modifie la sortie
-console.log(concatenationAdHoc`La réponse est ${rep}.`);
-
- -

Pour utiliser des accents graves dans un gabarit, on les échappera avec une barre oblique inverse (\) :

- -
`\`` === "`"; // true
- -

Les chaînes de caractères multi-lignes

- -

Tous les caractères de saut de ligne insérés dans la source font partie du gabarit. Avec des chaînes de caractères normales, il aurait fallu utiliser la syntaxe suivante pour obtenir des chaînes multi-lignes :

- -
console.log('ligne de texte 1\n'+
-'ligne de texte 2');
-// "ligne de texte 1
-// ligne de texte 2"
- -

Pour obtenir le même effet avec les gabarits, on peut désormais écrire :

- -
console.log(`ligne de texte 1
-ligne de texte 2`);
-// "ligne de texte 1
-//  ligne de texte 2"
- -

Interpolation d'expressions

- -

Pour intégrer des expressions dans des chaînes de caractères normales, il fallait utiliser la syntaxe suivante :

- -
let a = 5;
-let b = 10;
-console.log('Quinze vaut ' + (a + b) + ' et\nnon ' + (2 * a + b) + '.');
-// "Quinze vaut 15 et
-// non 20."
- -

On peut désormais utiliser le sucre syntaxique fourni par les gabarits pour rendre les substitutions plus lisibles :

- -
let a = 5;
-let b = 10;
-console.log(`Quinze vaut ${a + b} et
-non ${2 * a + b}.`);
-// "Quinze vaut 15 et
-// non 20."
- -

Imbrication de gabarits

- -

Parfois, l'imbrication d'un gabarit est la solution la plus simple (et peut-être la plus lisible) pour obtenir des chaînes de caractères configurables.

- -

En ES5 :

- -
let classes = 'header'
-classes += (isLargeScreen() ?
-   '' : item.isCollapsed ?
-     ' icon-expander' : ' icon-collapser');
-
- -

En ES2015 avec des gabarits et sans imbrication :

- -
const classes = `header ${ isLargeScreen() ? '' :
-    (item.isCollapsed ? 'icon-expander' : 'icon-collapser') }`;
- -

En ES2015 avec des gabarits imbriqués :

- -
const classes = `header ${ isLargeScreen() ? '' :
- `icon-${item.isCollapsed ? 'expander' : 'collapser'}` }`;
- -

Gabarits étiquetés

- -

Les gabarits étiquetés (tagged templates) sont une forme plus avancée de gabarits. On peut ici utiliser une fonction pour analyser les différents fragments du gabarit. Le premier argument passé à la fonction est l'ensemble de valeurs issues de chaînes de caractères sous la forme d'un tableau. Les arguments ensuite passés à la fonction seront les expressions contenues dans le gabarit. La fonction pourra ainsi créer une chaîne avec une autre forme de concaténation et utiliser une logique spécifique. La fonction utilisée pour le formatage du gabarit peut être nommée comme n'importe quelle autre fonction.

- -
let personne = 'Michou';
-let age = 28;
-
-function monEtiquette(chaines, expPersonne, expAge) {
-  let chn0 = chaines[0]; // "ce "
-  let chn1 = chaines[1]; // " est un "
-
-  // Techniquement, il y a une chaîne après
-  // l'expression finale (dans notre exemple),
-  // mais elle est vide (""), donc ne pas en tenir compte.
-  // var chn2 = chaines[2];
-
-  let chnAge;
-  if (expAge > 99){
-    chnAge = 'centenaire';
-  } else {
-    chnAge = 'jeunot';
-  }
-  // On peut tout à fait renvoyer une chaîne construite
-  // avec un gabarit
-  return `${chn0}${expPersonne}${chn1}${chnAge}`;
-}
-
-let sortie = monEtiquette`ce ${ personne } est un ${ age }`;
-
-console.log(sortie);
-// ce Michou est un jeunot
-
- -

Chaînes brutes

- -

La propriété spéciale raw, disponible sur le premier argument de la fonction du gabarit étiqueté, vous permet d'accéder aux chaînes brutes, telles qu'elles ont été entrées, sans traiter les séquences d'échappement.

- -
function etiquette(chaines) {
-  console.log(chaines.raw[0]);
-}
-
-etiquette`ligne de texte 1 \n ligne de texte 2`;
-// affichera dans la console :
-// "ligne de texte 1 \n ligne de texte 2"
-
- -

En outre, la méthode {{jsxref("String.raw()")}} a pour fonction de créer des chaînes de caractères brutes, exactement comme la fonction de gabarit et de concaténation de chaînes par défaut le ferait :

- -
let chn = String.raw`Salut\n${2+3}!`;
-// "Salut\n5!"
-
-chn.length;
-// 9
-
-chn.split('').join(',');
-// "S,a,l,u,t,\,n,5,!"
-
- -

Les gabarits étiquetés et les séquences d'échappement

- -

Comportement de ES2016

- -

Quant à ECMAScript 2016, les gabarits étiquetés se conforment aux règles de séquences d'échappement suivantes :

- - - -

Cela signifie qu'un gabarit étiqueté comme celui qui suit pose problème du fait que, selon la grammaire ECMAScript, un analyseur recherchera des séquences d'échappement Unicode valides, mais trouvera la syntaxe mal formée :

- -
latex`\unicode`
-// Génère, dans les anciennes versions ECMAScript (ES2016 et précédentes)
-// SyntaxError: malformed Unicode character escape sequence
- -

Révision ES2018 pour les séquences d'échappement illégales

- -

Les gabarits étiquetés doivent permettre l'intégration d'autres langages (par exemple, des DSL ou du LaTeX), dans lesquels d'autres séquences d'échappement sont fréquentes. La proposition Template Literal Revision pour ECMAScript (étape 4, à intégrer dans le standard ECMAScript 2018) supprime la restriction syntaxique des séquences d'échappement dans les gabarits étiquetés.

- -

Toutefois, les séquences d'échappement illégales doivent toujours être représentées dans la version "bidouillée". Elles seront affichées comme un élément {{jsxref("undefined")}} dans le tableau "bidouillé" :

- -
function latex(chn) {
- return { "bidouillee": chn[0], "brute": chn.raw[0] }
-}
-
-latex`\unicode`
-
-// { bidouillee: undefined, brute: "\\unicode" }
- -

Notez que la restriction sur les séquences d'échappement est uniquement supprimée pour les gabarits étiquetés, et non pour les gabarits de libellés non étiquetés :

- -
let mauvaise = `mauvaise séquence d'échappement : \unicode`;
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-template-literals', 'Template Literals')}}{{Spec2('ES2015')}}Définition initiale. Définie dans plusieurs sections de la spécification : Template Literals, Tagged Templates
{{SpecName('ESDraft', '#sec-template-literals', 'Template Literals')}}{{Spec2('ESDraft')}}Définie dans plusieurs sections de la spécification : Template Literals, Tagged Templates
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.grammar.template_literals")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/template_literals/index.md b/files/fr/web/javascript/reference/template_literals/index.md new file mode 100644 index 0000000000..4f266479e0 --- /dev/null +++ b/files/fr/web/javascript/reference/template_literals/index.md @@ -0,0 +1,246 @@ +--- +title: Littéraux de gabarits +slug: Web/JavaScript/Reference/Template_literals +tags: + - Chaîne de caractères + - ECMAScript 2015 + - Guide + - JavaScript + - Littéraux de gabarits +translation_of: Web/JavaScript/Reference/Template_literals +original_slug: Web/JavaScript/Reference/Littéraux_gabarits +--- +
{{JsSidebar("More")}}
+ +

Les littéraux de gabarits sont des littéraux de chaînes de caractères permettant d'intégrer des expressions. Avec eux, on peut utiliser des chaînes de caractères multi-lignes et des fonctionnalités d'interpolation.

+ +
+

Note : Dans les premières versions de la spécification ECMAScript 2015, cette fonctionnalité était intitulée « gabarits de chaîne de caractères ». Dans la suite de cet article, les expressions « gabarits de texte », « gabarits de libellés », « littéraux de gabarits » et « gabarits » seront équivalents.

+
+ +

Syntaxe

+ +
`texte`
+
+`ligne de texte 1
+ ligne de texte 2`
+
+`texte ${expression} texte`
+
+etiquette `texte ${expression} texte`
+
+ +

Description

+ +

Les gabarits sont délimités par des caractères accent grave (` `)  au lieu des apostrophes doubles ou simples. Les gabarits peuvent contenir des espaces réservés (placeholders). Ces espaces sont indiqués par le signe dollar ($) et des accolades (${expression}). Les expressions dans les espaces réservés et le texte compris dans ces espaces sont passés à une fonction.

+ +

Pour créer la chaîne finale, la fonction par défaut concatène simplement les différentes parties en une seule chaîne. Toutefois, on peut utiliser une fonction spécifique pour obtenir un comportement différent et recomposer la chaîne avec une autre logique. On parlera alors de gabarit étiqueté (cf. ci-après).

+ +
let rep = 42;
+console.log(`La réponse est ${rep}`); // Gabarit simple avec la concaténation par défaut
+
+function concatenationAdHoc(chaines, reponse){
+  let parite;
+  if(reponse % 2 === 0){
+    parite = "paire";
+  } else {
+    parite = "impaire";
+  }
+  return `${chaines[0]}${parite}.`;
+}
+// concaténation spécifique où on modifie la sortie
+console.log(concatenationAdHoc`La réponse est ${rep}.`);
+
+ +

Pour utiliser des accents graves dans un gabarit, on les échappera avec une barre oblique inverse (\) :

+ +
`\`` === "`"; // true
+ +

Les chaînes de caractères multi-lignes

+ +

Tous les caractères de saut de ligne insérés dans la source font partie du gabarit. Avec des chaînes de caractères normales, il aurait fallu utiliser la syntaxe suivante pour obtenir des chaînes multi-lignes :

+ +
console.log('ligne de texte 1\n'+
+'ligne de texte 2');
+// "ligne de texte 1
+// ligne de texte 2"
+ +

Pour obtenir le même effet avec les gabarits, on peut désormais écrire :

+ +
console.log(`ligne de texte 1
+ligne de texte 2`);
+// "ligne de texte 1
+//  ligne de texte 2"
+ +

Interpolation d'expressions

+ +

Pour intégrer des expressions dans des chaînes de caractères normales, il fallait utiliser la syntaxe suivante :

+ +
let a = 5;
+let b = 10;
+console.log('Quinze vaut ' + (a + b) + ' et\nnon ' + (2 * a + b) + '.');
+// "Quinze vaut 15 et
+// non 20."
+ +

On peut désormais utiliser le sucre syntaxique fourni par les gabarits pour rendre les substitutions plus lisibles :

+ +
let a = 5;
+let b = 10;
+console.log(`Quinze vaut ${a + b} et
+non ${2 * a + b}.`);
+// "Quinze vaut 15 et
+// non 20."
+ +

Imbrication de gabarits

+ +

Parfois, l'imbrication d'un gabarit est la solution la plus simple (et peut-être la plus lisible) pour obtenir des chaînes de caractères configurables.

+ +

En ES5 :

+ +
let classes = 'header'
+classes += (isLargeScreen() ?
+   '' : item.isCollapsed ?
+     ' icon-expander' : ' icon-collapser');
+
+ +

En ES2015 avec des gabarits et sans imbrication :

+ +
const classes = `header ${ isLargeScreen() ? '' :
+    (item.isCollapsed ? 'icon-expander' : 'icon-collapser') }`;
+ +

En ES2015 avec des gabarits imbriqués :

+ +
const classes = `header ${ isLargeScreen() ? '' :
+ `icon-${item.isCollapsed ? 'expander' : 'collapser'}` }`;
+ +

Gabarits étiquetés

+ +

Les gabarits étiquetés (tagged templates) sont une forme plus avancée de gabarits. On peut ici utiliser une fonction pour analyser les différents fragments du gabarit. Le premier argument passé à la fonction est l'ensemble de valeurs issues de chaînes de caractères sous la forme d'un tableau. Les arguments ensuite passés à la fonction seront les expressions contenues dans le gabarit. La fonction pourra ainsi créer une chaîne avec une autre forme de concaténation et utiliser une logique spécifique. La fonction utilisée pour le formatage du gabarit peut être nommée comme n'importe quelle autre fonction.

+ +
let personne = 'Michou';
+let age = 28;
+
+function monEtiquette(chaines, expPersonne, expAge) {
+  let chn0 = chaines[0]; // "ce "
+  let chn1 = chaines[1]; // " est un "
+
+  // Techniquement, il y a une chaîne après
+  // l'expression finale (dans notre exemple),
+  // mais elle est vide (""), donc ne pas en tenir compte.
+  // var chn2 = chaines[2];
+
+  let chnAge;
+  if (expAge > 99){
+    chnAge = 'centenaire';
+  } else {
+    chnAge = 'jeunot';
+  }
+  // On peut tout à fait renvoyer une chaîne construite
+  // avec un gabarit
+  return `${chn0}${expPersonne}${chn1}${chnAge}`;
+}
+
+let sortie = monEtiquette`ce ${ personne } est un ${ age }`;
+
+console.log(sortie);
+// ce Michou est un jeunot
+
+ +

Chaînes brutes

+ +

La propriété spéciale raw, disponible sur le premier argument de la fonction du gabarit étiqueté, vous permet d'accéder aux chaînes brutes, telles qu'elles ont été entrées, sans traiter les séquences d'échappement.

+ +
function etiquette(chaines) {
+  console.log(chaines.raw[0]);
+}
+
+etiquette`ligne de texte 1 \n ligne de texte 2`;
+// affichera dans la console :
+// "ligne de texte 1 \n ligne de texte 2"
+
+ +

En outre, la méthode {{jsxref("String.raw()")}} a pour fonction de créer des chaînes de caractères brutes, exactement comme la fonction de gabarit et de concaténation de chaînes par défaut le ferait :

+ +
let chn = String.raw`Salut\n${2+3}!`;
+// "Salut\n5!"
+
+chn.length;
+// 9
+
+chn.split('').join(',');
+// "S,a,l,u,t,\,n,5,!"
+
+ +

Les gabarits étiquetés et les séquences d'échappement

+ +

Comportement de ES2016

+ +

Quant à ECMAScript 2016, les gabarits étiquetés se conforment aux règles de séquences d'échappement suivantes :

+ + + +

Cela signifie qu'un gabarit étiqueté comme celui qui suit pose problème du fait que, selon la grammaire ECMAScript, un analyseur recherchera des séquences d'échappement Unicode valides, mais trouvera la syntaxe mal formée :

+ +
latex`\unicode`
+// Génère, dans les anciennes versions ECMAScript (ES2016 et précédentes)
+// SyntaxError: malformed Unicode character escape sequence
+ +

Révision ES2018 pour les séquences d'échappement illégales

+ +

Les gabarits étiquetés doivent permettre l'intégration d'autres langages (par exemple, des DSL ou du LaTeX), dans lesquels d'autres séquences d'échappement sont fréquentes. La proposition Template Literal Revision pour ECMAScript (étape 4, à intégrer dans le standard ECMAScript 2018) supprime la restriction syntaxique des séquences d'échappement dans les gabarits étiquetés.

+ +

Toutefois, les séquences d'échappement illégales doivent toujours être représentées dans la version "bidouillée". Elles seront affichées comme un élément {{jsxref("undefined")}} dans le tableau "bidouillé" :

+ +
function latex(chn) {
+ return { "bidouillee": chn[0], "brute": chn.raw[0] }
+}
+
+latex`\unicode`
+
+// { bidouillee: undefined, brute: "\\unicode" }
+ +

Notez que la restriction sur les séquences d'échappement est uniquement supprimée pour les gabarits étiquetés, et non pour les gabarits de libellés non étiquetés :

+ +
let mauvaise = `mauvaise séquence d'échappement : \unicode`;
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-template-literals', 'Template Literals')}}{{Spec2('ES2015')}}Définition initiale. Définie dans plusieurs sections de la spécification : Template Literals, Tagged Templates
{{SpecName('ESDraft', '#sec-template-literals', 'Template Literals')}}{{Spec2('ESDraft')}}Définie dans plusieurs sections de la spécification : Template Literals, Tagged Templates
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.grammar.template_literals")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/trailing_commas/index.html b/files/fr/web/javascript/reference/trailing_commas/index.html deleted file mode 100644 index 7c7f2f3a55..0000000000 --- a/files/fr/web/javascript/reference/trailing_commas/index.html +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: Virgules finales (trailing commas) -slug: Web/JavaScript/Reference/Trailing_commas -tags: - - ECMAScript2017 - - ECMAScript5 - - JavaScript - - Syntaxe - - Virgule -translation_of: Web/JavaScript/Reference/Trailing_commas -original_slug: Web/JavaScript/Reference/Virgules_finales ---- -
{{JsSidebar("More")}}
- -

Les virgules finales (trailing commas en anglais) s'avèrent utiles lorsqu'on souhaite ajouter de nouveaux éléments, paramètres ou de nouvelles propriétés à du code JavaScript. Si on souhaite ajouter une propriété en fin de course, on peut simplement ajouter une ligne sans avoir à modifier la précédente si celle-ci utilise une virgule finale. Cela permet d'avoir des vues de différences (diffs) plus claires et de simplifier l'édition de code.

- -

Les virgules finales peuvent être utilisées dans les littéraux de tableau depuis le début. Elles sont été ajoutées dans les littéraux objets à partir d'ECMAScript 5 et ECMAScript 2017 permet de les utiliser dans la liste des paramètres d'une fonction.

- -

{{Glossary("JSON")}}, en revanche, ne permet pas d'utiliser des virgules finales.

- -

Les virgules finales dans les littéraux

- -

Tableaux

- -

JavaScript ignore les virgules finales dans les tableaux :

- -
var arr = [
-  1,
-  2,
-  3,
-];
-
-arr; // [1, 2, 3]
-arr.length; // 3
- -

Si plusieurs virgules finales sont utilisées, cela crée un vide dans le tableau. Un tableau avec des vides est parfois qualifié de parsemé (ou sparse en anglais). Lorsqu'on parcourt un tableau avec les méthodes {{jsxref("Array.prototype.forEach()")}} ou {{jsxref("Array.prototype.map()")}}, par exemple, ces vides sont ignorés.

- -
var arr = [1, 2, 3,,,];
-arr.length; // 5
-
- -

Objets

- -

À partir d'ECMAScript 5, on peut également utiliser les virgules finales dans les littéraux objets :

- -
var objet = {
-  toto: "truc",
-  bidule: "azerty",
-  age: 42,
-};
- -

Les virgules finales dans les fonctions

- -

ECMAScript 2017 permet d'utiliser les virgules finales dans la liste des paramètres d'une fonction.

- -

Définitions des paramètres

- -

Pour chacune des deux paires de définitions qui suivent, les deux définitions sont autorisées et équivalentes entre elles. Les virgules finales n'ont pas d'impact sur la propriété length de la fonction ni sur l'objet arguments.

- -
function f(p) {}
-function f(p,) {}
-
-(p) => {};
-(p,) => {};
-
- -

Les virgules finales peuvent également être utilisées lors des définitions de méthodes dans les objets et les classes :

- -
class C {
-  un(a,) {},
-  deux(a, b,) {},
-}
-
-var obj = {
-  un(a,) {},
-  deux(a, b,) {},
-};
-
- -

Appels de fonctions

- -

Pour chacune des deux paires d'appels qui suivent, les deux appels sont équivalents entre eux :

- -
f(p);
-f(p,);
-
-Math.max(10, 20);
-Math.max(10, 20,);
-
- -

Virgules finales non-autorisées

- -

Les définitions de paramètres ou les appels de fonctions qui ne contiennent qu'une seule virgule lèveront une exception {{Jsxref("SyntaxError")}}. Par ailleurs, on ne peut pas utiliser de virgule finale avec les paramètres du reste :

- -
function f(,) {} // SyntaxError: missing formal parameter
-(,) => {};       // SyntaxError: expected expression, got ','
-f(,)             // SyntaxError: expected expression, got ','
-
-function f(...p,) {} // SyntaxError: parameter after rest parameter
-(...p,) => {}        // SyntaxError: expected closing parenthesis, got ','
-
- -

Les virgules finales et la décomposition

- -

On peut aussi utiliser une virgule finale dans l'opérande gauche lorsqu'on utilise l'affectation par décomposition :

- -
// Décomposition d'un tableau avec
-// une virgule finale
-[a, b,] = [1, 2];
-
-// Décomposition d'un objet avec une
-// virgule finale
-var o = {
-  p: 42,
-  q: true,
-};
-var {p, q,} = o;
-
- -

Là encore, si on utilise un élément du reste, une exception {{jsxref("SyntaxError")}} sera levée :

- -
var [a, ...b,] = [1, 2, 3];
-// SyntaxError: rest element may not have a trailing comma
- -

Les virgules finales en JSON

- -

L'utilisation des virgules finales dans les objets a été introduite avec ECMAScript 5. Toutefois, le format JSON est basé sur la syntaxe JavaScript antérieure à ES5 et les virgules finales sont donc interdites en JSON.

- -

Les deux lignes suivantes lèveront une exception {{jsxref("SyntaxError")}} :

- -
JSON.parse('[1, 2, 3, 4, ]');
-JSON.parse('{"foo" : 1, }');
-// SyntaxError JSON.parse: unexpected character
-// at line 1 column 14 of the JSON data
-
- -

Pour analyser le JSON correctement, on évitera les virgules finales :

- -
JSON.parse('[1, 2, 3, 4 ]');
-JSON.parse('{"foo" : 1 }');
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES5.1')}}{{Spec2('ES5.1')}}Ajout des virgules finales pour les littéraux objets.
{{SpecName('ES6')}}{{Spec2('ES6')}}Aucune modification.
{{SpecName('ES2017')}}{{Spec2('ES2017')}}Ajout des virgules finales à la liste des arguments d'une fonction (déclaration et appels).
{{SpecName('ESDraft')}}{{Spec2('ESDraft')}}ES2017 added trailing function commas.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.grammar.trailing_commas")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/trailing_commas/index.md b/files/fr/web/javascript/reference/trailing_commas/index.md new file mode 100644 index 0000000000..7c7f2f3a55 --- /dev/null +++ b/files/fr/web/javascript/reference/trailing_commas/index.md @@ -0,0 +1,182 @@ +--- +title: Virgules finales (trailing commas) +slug: Web/JavaScript/Reference/Trailing_commas +tags: + - ECMAScript2017 + - ECMAScript5 + - JavaScript + - Syntaxe + - Virgule +translation_of: Web/JavaScript/Reference/Trailing_commas +original_slug: Web/JavaScript/Reference/Virgules_finales +--- +
{{JsSidebar("More")}}
+ +

Les virgules finales (trailing commas en anglais) s'avèrent utiles lorsqu'on souhaite ajouter de nouveaux éléments, paramètres ou de nouvelles propriétés à du code JavaScript. Si on souhaite ajouter une propriété en fin de course, on peut simplement ajouter une ligne sans avoir à modifier la précédente si celle-ci utilise une virgule finale. Cela permet d'avoir des vues de différences (diffs) plus claires et de simplifier l'édition de code.

+ +

Les virgules finales peuvent être utilisées dans les littéraux de tableau depuis le début. Elles sont été ajoutées dans les littéraux objets à partir d'ECMAScript 5 et ECMAScript 2017 permet de les utiliser dans la liste des paramètres d'une fonction.

+ +

{{Glossary("JSON")}}, en revanche, ne permet pas d'utiliser des virgules finales.

+ +

Les virgules finales dans les littéraux

+ +

Tableaux

+ +

JavaScript ignore les virgules finales dans les tableaux :

+ +
var arr = [
+  1,
+  2,
+  3,
+];
+
+arr; // [1, 2, 3]
+arr.length; // 3
+ +

Si plusieurs virgules finales sont utilisées, cela crée un vide dans le tableau. Un tableau avec des vides est parfois qualifié de parsemé (ou sparse en anglais). Lorsqu'on parcourt un tableau avec les méthodes {{jsxref("Array.prototype.forEach()")}} ou {{jsxref("Array.prototype.map()")}}, par exemple, ces vides sont ignorés.

+ +
var arr = [1, 2, 3,,,];
+arr.length; // 5
+
+ +

Objets

+ +

À partir d'ECMAScript 5, on peut également utiliser les virgules finales dans les littéraux objets :

+ +
var objet = {
+  toto: "truc",
+  bidule: "azerty",
+  age: 42,
+};
+ +

Les virgules finales dans les fonctions

+ +

ECMAScript 2017 permet d'utiliser les virgules finales dans la liste des paramètres d'une fonction.

+ +

Définitions des paramètres

+ +

Pour chacune des deux paires de définitions qui suivent, les deux définitions sont autorisées et équivalentes entre elles. Les virgules finales n'ont pas d'impact sur la propriété length de la fonction ni sur l'objet arguments.

+ +
function f(p) {}
+function f(p,) {}
+
+(p) => {};
+(p,) => {};
+
+ +

Les virgules finales peuvent également être utilisées lors des définitions de méthodes dans les objets et les classes :

+ +
class C {
+  un(a,) {},
+  deux(a, b,) {},
+}
+
+var obj = {
+  un(a,) {},
+  deux(a, b,) {},
+};
+
+ +

Appels de fonctions

+ +

Pour chacune des deux paires d'appels qui suivent, les deux appels sont équivalents entre eux :

+ +
f(p);
+f(p,);
+
+Math.max(10, 20);
+Math.max(10, 20,);
+
+ +

Virgules finales non-autorisées

+ +

Les définitions de paramètres ou les appels de fonctions qui ne contiennent qu'une seule virgule lèveront une exception {{Jsxref("SyntaxError")}}. Par ailleurs, on ne peut pas utiliser de virgule finale avec les paramètres du reste :

+ +
function f(,) {} // SyntaxError: missing formal parameter
+(,) => {};       // SyntaxError: expected expression, got ','
+f(,)             // SyntaxError: expected expression, got ','
+
+function f(...p,) {} // SyntaxError: parameter after rest parameter
+(...p,) => {}        // SyntaxError: expected closing parenthesis, got ','
+
+ +

Les virgules finales et la décomposition

+ +

On peut aussi utiliser une virgule finale dans l'opérande gauche lorsqu'on utilise l'affectation par décomposition :

+ +
// Décomposition d'un tableau avec
+// une virgule finale
+[a, b,] = [1, 2];
+
+// Décomposition d'un objet avec une
+// virgule finale
+var o = {
+  p: 42,
+  q: true,
+};
+var {p, q,} = o;
+
+ +

Là encore, si on utilise un élément du reste, une exception {{jsxref("SyntaxError")}} sera levée :

+ +
var [a, ...b,] = [1, 2, 3];
+// SyntaxError: rest element may not have a trailing comma
+ +

Les virgules finales en JSON

+ +

L'utilisation des virgules finales dans les objets a été introduite avec ECMAScript 5. Toutefois, le format JSON est basé sur la syntaxe JavaScript antérieure à ES5 et les virgules finales sont donc interdites en JSON.

+ +

Les deux lignes suivantes lèveront une exception {{jsxref("SyntaxError")}} :

+ +
JSON.parse('[1, 2, 3, 4, ]');
+JSON.parse('{"foo" : 1, }');
+// SyntaxError JSON.parse: unexpected character
+// at line 1 column 14 of the JSON data
+
+ +

Pour analyser le JSON correctement, on évitera les virgules finales :

+ +
JSON.parse('[1, 2, 3, 4 ]');
+JSON.parse('{"foo" : 1 }');
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES5.1')}}{{Spec2('ES5.1')}}Ajout des virgules finales pour les littéraux objets.
{{SpecName('ES6')}}{{Spec2('ES6')}}Aucune modification.
{{SpecName('ES2017')}}{{Spec2('ES2017')}}Ajout des virgules finales à la liste des arguments d'une fonction (déclaration et appels).
{{SpecName('ESDraft')}}{{Spec2('ESDraft')}}ES2017 added trailing function commas.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.grammar.trailing_commas")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/shells/index.html b/files/fr/web/javascript/shells/index.html deleted file mode 100644 index 735982aea9..0000000000 --- a/files/fr/web/javascript/shells/index.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Shells JavaScript -slug: Web/JavaScript/Shells -tags: - - Extension - - JavaScript - - Tools -translation_of: Web/JavaScript/Shells ---- -
{{JsSidebar}}
- -

Un shell (ou une interface système) JavaScript permet de tester rapidement des fragments de code JavaScript sans devoir recharger constamment une page web. Ce type d'outil est très utile pour développer et déboguer du code.

- -

Des shells JavaScript autonomes

- -

Les shells JavaScript suivants sont des environnements autonomes, comme ceux que l'on peut trouver pour Perl ou Python.

- - - -

Liste des shells JavaScript

- -

Les shells suivants fonctionnent avec Mozilla.

- - diff --git a/files/fr/web/javascript/shells/index.md b/files/fr/web/javascript/shells/index.md new file mode 100644 index 0000000000..735982aea9 --- /dev/null +++ b/files/fr/web/javascript/shells/index.md @@ -0,0 +1,43 @@ +--- +title: Shells JavaScript +slug: Web/JavaScript/Shells +tags: + - Extension + - JavaScript + - Tools +translation_of: Web/JavaScript/Shells +--- +
{{JsSidebar}}
+ +

Un shell (ou une interface système) JavaScript permet de tester rapidement des fragments de code JavaScript sans devoir recharger constamment une page web. Ce type d'outil est très utile pour développer et déboguer du code.

+ +

Des shells JavaScript autonomes

+ +

Les shells JavaScript suivants sont des environnements autonomes, comme ceux que l'on peut trouver pour Perl ou Python.

+ + + +

Liste des shells JavaScript

+ +

Les shells suivants fonctionnent avec Mozilla.

+ + diff --git a/files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.html b/files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.html deleted file mode 100644 index cbdd057f2a..0000000000 --- a/files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.html +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: 'Performance : les dangers liés à la modification de [[Prototype]' -slug: Web/JavaScript/The_performance_hazards_of_prototype_mutation -tags: - - JavaScript - - Performance -translation_of: Web/JavaScript/The_performance_hazards_of__[[Prototype]]_mutation -original_slug: Web/JavaScript/Performance_les_dangers_liés_à_la_modification_de_Prototype ---- -
{{draft}}
- -

Chaque objet JavaScript possède un prototype (que nous désignerons par la suite par [[Prototype]], la notation utilisée par la spécification et les implémentations). Lorsqu'on recherche des propriétés sur un objet, on consulte d'abord cet objet puis on analyse son prototype (on « remonte la chaîne ») et ensuite le prototype de ce dernier et ainsi de suite jusqu'à trouver la propriété en question ou jusqu'à ce que la chaîne soit terminée. Cette chaîne est particulièrement utile pour émuler l'héritage entre objets.

- -

ECMAScript 6 introduit certaines méthode pour modifier [[Prototype]]. Cette flexibilité a un coût : la dégradation significative des performances. Modifier [[Prototype]] impacte négativement les performances pour tous les moteurs JavaScript modernes. Dans cet article, nous expliquerons pourquoi et nous verrons les alternatives à privilégier.

- -

De l'optimisation des accès aux propriétés dans les moteurs JavaScript

- -

Les objets sont des tables de hachage, ainsi, en théorie (et en pratique) l'accès à une propriété se fait en temps constant. En revanche, ce « temps constant » peut se décomposer en milliers d'instructions machine. Heureusement, les objets et les propriétés sont souvent « prédictibles » et dans ces cas, la structure sous-jacente peut également être prédictible. Les compilateurs à la volée (ou JIT pour Just In Time) reposent sur ce constat pour rendre les accès plus rapides.

- -

L'optimisation des moteurs s'applique grâce à l'ordre selon lequel les propriétés sont ajoutées aux objets. La plupart des propriétés ajoutées aux objets sont ajoutés dans un ordre semblable (exception faite des accès effectués sous la forme obj[val]val est une valeur dynamique non constante).

- -
function Landmark(lat, lon, desc) {
-  this.location = { lat: lat, long: lon };
-  this.description = desc;
-}
-var lm1 = new Landmark(-90, 0, "South Pole");
-var lm2 = new Landmark(-24.3756466, -128.311018, "Pitcairn Islands");
- -

Dans cet exemple, chaque Landmark possède les propriétés location et description, dans cet ordre. Chaque objet location représentant l'emplacement enregistrera la latitude puis la longitude, dans cet ordre. Le code qui suit pourrait supprimer une propriété mais comme c'est peu probable, les moteurs peuvent être amenés à produire du code non optimal pour ces cas de figure. Pour SpiderMonkey, le moteur JavaScript de Firefox, l'ordre spécifique des propriétés (et de certains de leurs aspects en dehors de leurs valeurs) est appelé une forme (le moteur V8, utilisé par Chrome, intitule ce concept structure ID). Si deux objets partagent la même forme, leurs propriétés seront stockées de façon identique.

- -

À l'intérieur des moteurs, on retrouve donc une version C++ semblable à celle-ci (simplifiée ici) :

- -
struct Property {
-  Property* prev;     // null si c'est la première propriété
-  String name;        // le nom de la propriété
-  unsigned int index; // l'index de la valeur dans le stockage
-};
-using Shape = Property*;
-struct Object {
-  Shape shape;
-  Value* properties;
-  Object* prototype;
-};
- -

Avec ces exemples, voici à quoi correspondraient diverses expressions JavaScript basées sur le code ci-dessus, une fois traduites en C++ :

- -
lm1->properties[0]; // loc1.location
-lm1->properties[1]; // loc1.description
-lm2->properties[0].toObject()->properties[1]; // loc2.location.long
- -

Si un moteur connaît la forme d'un objet, il pourra présupposer la position des index pour toutes les propriétés de l'objet. Ainsi, quand on souhaite accéder à une propriété donnée, il suffit de quelques accès indirects par pointeur. Le code machine peut facilement vérifier si un objet a une forme donnée. Si c'est le cas, on utilisera la version rapide et sinon on utilisera la méthode lente.

- -

L'optimisation naïve des propriétés héritées

- -

La plupart des propriétés ne sont pas rattachées directement aux objets. Il faut souvent passer par la chaîne de prototypes. On ajoute donc quelques « sauts » via le champ prototype pour atterrir sur l'objet qui contient la propriété. Pour obtenir une optimisation correcte, il faut vérifier qu'aucun objet de la chaîne de prototypes n'a cette propriété. Autrement dit, à chaque saut, il faut vérifier la forme de l'objet.

- -
var d = new Date();
-d.toDateString(); // Date.prototype.toDateString
-
-function Pair(x, y) { this.x = x; this.y = y; }
-Pair.prototype.sum = function() { return this.x + this.y; };
-
-var p = new Pair(3, 7);
-p.sum(); // Pair.prototype.sum
- -

Dans la plupart des cas, les moteurs utilisent cette approche rapide. Toutefois, lorsque les performances jouent un rôle déterminant, cette approche n'est pas suffisante.

- -

L'optimisation intelligente des propriétés héritées

- -

Lors des accès prédictibles, on trouve généralement la propriété en un nombre constant de sauts le long de la chaîne. Les objets de chaîne n'acquièrent généralement pas de nouvelle propriétés et l'objet final n'est généralement pas affecté par une suppression de propriétés. Enfin, la modification de [[Prototype]] est rare.  Ces hypothèses sont nécessaires pour éviter de « sauter » sur chacun des prototypes. Les différents moteurs optent pour différentes approches afin d'optimiser les propriétés héritées de façon intelligente.

- -
-
La forme de l'objet final qui contient la propriété héritée peut être vérifiée.
-
Dans ce cas, si on teste les formes, cela implique qu'aucun prototype n'a été modifié sur la chaîne. Ainsi, lorsqu'un prototype est modifié, les formes de tous les objets situés sur le long de la chaîne doivent être changées. -
var obj1 = {};
-var obj2 = Object.create(obj1);
-var obj3 = Object.create(obj2);
-
-// Les objets dont la forme va changer
-// obj3, obj2, obj1, Object.prototype
-obj3.__proto__ = {};
-
-
La forme de l'objet initial peut être vérifiée.
-
Chaque objet qui peut hériter d'une propriété via un prototype modifié doit être modifié afin de refléter ces changements. -
var obj1 = {};
-var obj2 = Object.create(obj1);
-var obj3 = Object.create(obj2);
-
-// Les objets dont la forme va changer
-// obj1, obj2, obj3
-obj1.__proto__ = {};
-
-
- -

Les effets néfastes de la modification de [[Prototype]]

- -

Les changements de [[Prototype]] impactent les performances sur deux phases : lors du changement puis par la suite. Pour commencer, modifier [[Prototype]] est lent, ensuite modifier [[Prototype]] ralentit le code qui doit interagir avec les objets dont [[Prototype]] a été modifié.

- -

Modifier un [[Prototype]] prend du temps

- -

Bien que la spécification représente le changement de [[Prototype]] comme la simple modification d'une propriété cachée, les implémentations réelles sont beaucoup plus complexes. Les tactiques précédentes utilisant les formes nécessitent d'examiner (et de modifier) plus d'un objet. Dans la pratique, l'approche qui modifiera le moins d'objets sera différente en fonction de la charge provoquée par le cas d'usage.

- -

Les [[Prototype]]s modifiés ralentissent le code

- -

Les mauvaises nouvelles ne s'arrêtent une fois la modification terminée. De nombreuses opérations utilisées pour examiner les propriétés reposent sur l'hypothèse de conservation de la chaîne de [[Prototype]]. Lorsque le moteur observe une modification, l'objet avec le prototype modifié « empoisonne » tout le code qui manipule cet objet. Voici un cas d'école assez désastreux :

- -
var obj = {};
-obj.__proto__ = { x: 3 }; // modification gratuite
-
-var arr = [obj];
-for (var i = 0; i < 5; i++)
-  arr.push({ x: i });
-
-function f(v, i) {
-  var elt = v[i];
-  var r =  elt.x > 2 // non optimal
-           ? elt
-           : { x: elt.x + 1 };
-  return r;
-}
-var c = f(arr, 0);
-c.x; // non optimal : la valeur a des propriétés inconnues
-c = f(arr, 1);
-c.x; // non optimal !
-
-var arr2 = [c];
-arr2[0].x; // non optimal
-
- -

Seul le code exécuté à de nombreuses reprises est optimisé et cet exemple ne déclenche pas tous ces comportements. En revanche pour du code « chaud », on pourrait rencontrer ces problèmes.

- -

Pouvoir tracer l'utilisation d'un objet dont le prototype a été modifié, souvent parmi différents scripts, est extraordinairement complexe. Cela nécessite une analyse textuelle soignée et dépend des comportements à l'exécution. Des modifications indépendentes en apparence peuvent avoir des impacts bien plus loin et le code employé, auparavant optimal, sera alors sous-optimal et plus lent.

- -

Il faudrait sinon pouvoir stocker des informations cross-objet.

- -

Les informations cross-objet sont différentes des formes et on ne peut pas les vérifier simplement. Une modification apportée à cette information pourrait avoir des impacts à de nombreux emplacements, pas nécessairement évidents : dans ce cas, où vérifier que les hypothèses sont respectées ? Ainsi, plutôt que de vérifier ces hypothèses avant l'utilisation, on invalide toutes les hypothèses lorsqu'une modification se produit. Lorsque [[Prototype]] change, tout le code qui en dépend doit être rejeté.  L'opération obj.__proto__ = ... est donc lente par nature. En rejetant du code optimisé, cela rend le code beaucoup plus lent par la suite.

- -

Encore pire, lorsqu'on évalue obj.prop, le moteur voit que l'objet a eu son [[Prototype]] changé et les informations précédemment enregistrées à propos de l'objet deviennent inutiles et SpiderMonkey considère que l'objet possède des caractéristiques inconnues. Ainsi, tout code qui manipule cet objet par la suite prendra l'hypothèse correspondant au pire des cas. L'optimisation des moteurs de compilation à la volée fonctionnent sur l'hypothèse que l'exécution à venir est similaire à l'exécution passée. Si du code observe un objet avec un [[Prototype]] modifié, ce code observera vraisemblablement d'autres objets. C'est pourquoi, toutes les opérations qui intéragissent avec un objet dont le [[Prototype]] a changé, ne peuvent pas être optimisées.

diff --git a/files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.md b/files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.md new file mode 100644 index 0000000000..cbdd057f2a --- /dev/null +++ b/files/fr/web/javascript/the_performance_hazards_of_prototype_mutation/index.md @@ -0,0 +1,138 @@ +--- +title: 'Performance : les dangers liés à la modification de [[Prototype]' +slug: Web/JavaScript/The_performance_hazards_of_prototype_mutation +tags: + - JavaScript + - Performance +translation_of: Web/JavaScript/The_performance_hazards_of__[[Prototype]]_mutation +original_slug: Web/JavaScript/Performance_les_dangers_liés_à_la_modification_de_Prototype +--- +
{{draft}}
+ +

Chaque objet JavaScript possède un prototype (que nous désignerons par la suite par [[Prototype]], la notation utilisée par la spécification et les implémentations). Lorsqu'on recherche des propriétés sur un objet, on consulte d'abord cet objet puis on analyse son prototype (on « remonte la chaîne ») et ensuite le prototype de ce dernier et ainsi de suite jusqu'à trouver la propriété en question ou jusqu'à ce que la chaîne soit terminée. Cette chaîne est particulièrement utile pour émuler l'héritage entre objets.

+ +

ECMAScript 6 introduit certaines méthode pour modifier [[Prototype]]. Cette flexibilité a un coût : la dégradation significative des performances. Modifier [[Prototype]] impacte négativement les performances pour tous les moteurs JavaScript modernes. Dans cet article, nous expliquerons pourquoi et nous verrons les alternatives à privilégier.

+ +

De l'optimisation des accès aux propriétés dans les moteurs JavaScript

+ +

Les objets sont des tables de hachage, ainsi, en théorie (et en pratique) l'accès à une propriété se fait en temps constant. En revanche, ce « temps constant » peut se décomposer en milliers d'instructions machine. Heureusement, les objets et les propriétés sont souvent « prédictibles » et dans ces cas, la structure sous-jacente peut également être prédictible. Les compilateurs à la volée (ou JIT pour Just In Time) reposent sur ce constat pour rendre les accès plus rapides.

+ +

L'optimisation des moteurs s'applique grâce à l'ordre selon lequel les propriétés sont ajoutées aux objets. La plupart des propriétés ajoutées aux objets sont ajoutés dans un ordre semblable (exception faite des accès effectués sous la forme obj[val]val est une valeur dynamique non constante).

+ +
function Landmark(lat, lon, desc) {
+  this.location = { lat: lat, long: lon };
+  this.description = desc;
+}
+var lm1 = new Landmark(-90, 0, "South Pole");
+var lm2 = new Landmark(-24.3756466, -128.311018, "Pitcairn Islands");
+ +

Dans cet exemple, chaque Landmark possède les propriétés location et description, dans cet ordre. Chaque objet location représentant l'emplacement enregistrera la latitude puis la longitude, dans cet ordre. Le code qui suit pourrait supprimer une propriété mais comme c'est peu probable, les moteurs peuvent être amenés à produire du code non optimal pour ces cas de figure. Pour SpiderMonkey, le moteur JavaScript de Firefox, l'ordre spécifique des propriétés (et de certains de leurs aspects en dehors de leurs valeurs) est appelé une forme (le moteur V8, utilisé par Chrome, intitule ce concept structure ID). Si deux objets partagent la même forme, leurs propriétés seront stockées de façon identique.

+ +

À l'intérieur des moteurs, on retrouve donc une version C++ semblable à celle-ci (simplifiée ici) :

+ +
struct Property {
+  Property* prev;     // null si c'est la première propriété
+  String name;        // le nom de la propriété
+  unsigned int index; // l'index de la valeur dans le stockage
+};
+using Shape = Property*;
+struct Object {
+  Shape shape;
+  Value* properties;
+  Object* prototype;
+};
+ +

Avec ces exemples, voici à quoi correspondraient diverses expressions JavaScript basées sur le code ci-dessus, une fois traduites en C++ :

+ +
lm1->properties[0]; // loc1.location
+lm1->properties[1]; // loc1.description
+lm2->properties[0].toObject()->properties[1]; // loc2.location.long
+ +

Si un moteur connaît la forme d'un objet, il pourra présupposer la position des index pour toutes les propriétés de l'objet. Ainsi, quand on souhaite accéder à une propriété donnée, il suffit de quelques accès indirects par pointeur. Le code machine peut facilement vérifier si un objet a une forme donnée. Si c'est le cas, on utilisera la version rapide et sinon on utilisera la méthode lente.

+ +

L'optimisation naïve des propriétés héritées

+ +

La plupart des propriétés ne sont pas rattachées directement aux objets. Il faut souvent passer par la chaîne de prototypes. On ajoute donc quelques « sauts » via le champ prototype pour atterrir sur l'objet qui contient la propriété. Pour obtenir une optimisation correcte, il faut vérifier qu'aucun objet de la chaîne de prototypes n'a cette propriété. Autrement dit, à chaque saut, il faut vérifier la forme de l'objet.

+ +
var d = new Date();
+d.toDateString(); // Date.prototype.toDateString
+
+function Pair(x, y) { this.x = x; this.y = y; }
+Pair.prototype.sum = function() { return this.x + this.y; };
+
+var p = new Pair(3, 7);
+p.sum(); // Pair.prototype.sum
+ +

Dans la plupart des cas, les moteurs utilisent cette approche rapide. Toutefois, lorsque les performances jouent un rôle déterminant, cette approche n'est pas suffisante.

+ +

L'optimisation intelligente des propriétés héritées

+ +

Lors des accès prédictibles, on trouve généralement la propriété en un nombre constant de sauts le long de la chaîne. Les objets de chaîne n'acquièrent généralement pas de nouvelle propriétés et l'objet final n'est généralement pas affecté par une suppression de propriétés. Enfin, la modification de [[Prototype]] est rare.  Ces hypothèses sont nécessaires pour éviter de « sauter » sur chacun des prototypes. Les différents moteurs optent pour différentes approches afin d'optimiser les propriétés héritées de façon intelligente.

+ +
+
La forme de l'objet final qui contient la propriété héritée peut être vérifiée.
+
Dans ce cas, si on teste les formes, cela implique qu'aucun prototype n'a été modifié sur la chaîne. Ainsi, lorsqu'un prototype est modifié, les formes de tous les objets situés sur le long de la chaîne doivent être changées. +
var obj1 = {};
+var obj2 = Object.create(obj1);
+var obj3 = Object.create(obj2);
+
+// Les objets dont la forme va changer
+// obj3, obj2, obj1, Object.prototype
+obj3.__proto__ = {};
+
+
La forme de l'objet initial peut être vérifiée.
+
Chaque objet qui peut hériter d'une propriété via un prototype modifié doit être modifié afin de refléter ces changements. +
var obj1 = {};
+var obj2 = Object.create(obj1);
+var obj3 = Object.create(obj2);
+
+// Les objets dont la forme va changer
+// obj1, obj2, obj3
+obj1.__proto__ = {};
+
+
+ +

Les effets néfastes de la modification de [[Prototype]]

+ +

Les changements de [[Prototype]] impactent les performances sur deux phases : lors du changement puis par la suite. Pour commencer, modifier [[Prototype]] est lent, ensuite modifier [[Prototype]] ralentit le code qui doit interagir avec les objets dont [[Prototype]] a été modifié.

+ +

Modifier un [[Prototype]] prend du temps

+ +

Bien que la spécification représente le changement de [[Prototype]] comme la simple modification d'une propriété cachée, les implémentations réelles sont beaucoup plus complexes. Les tactiques précédentes utilisant les formes nécessitent d'examiner (et de modifier) plus d'un objet. Dans la pratique, l'approche qui modifiera le moins d'objets sera différente en fonction de la charge provoquée par le cas d'usage.

+ +

Les [[Prototype]]s modifiés ralentissent le code

+ +

Les mauvaises nouvelles ne s'arrêtent une fois la modification terminée. De nombreuses opérations utilisées pour examiner les propriétés reposent sur l'hypothèse de conservation de la chaîne de [[Prototype]]. Lorsque le moteur observe une modification, l'objet avec le prototype modifié « empoisonne » tout le code qui manipule cet objet. Voici un cas d'école assez désastreux :

+ +
var obj = {};
+obj.__proto__ = { x: 3 }; // modification gratuite
+
+var arr = [obj];
+for (var i = 0; i < 5; i++)
+  arr.push({ x: i });
+
+function f(v, i) {
+  var elt = v[i];
+  var r =  elt.x > 2 // non optimal
+           ? elt
+           : { x: elt.x + 1 };
+  return r;
+}
+var c = f(arr, 0);
+c.x; // non optimal : la valeur a des propriétés inconnues
+c = f(arr, 1);
+c.x; // non optimal !
+
+var arr2 = [c];
+arr2[0].x; // non optimal
+
+ +

Seul le code exécuté à de nombreuses reprises est optimisé et cet exemple ne déclenche pas tous ces comportements. En revanche pour du code « chaud », on pourrait rencontrer ces problèmes.

+ +

Pouvoir tracer l'utilisation d'un objet dont le prototype a été modifié, souvent parmi différents scripts, est extraordinairement complexe. Cela nécessite une analyse textuelle soignée et dépend des comportements à l'exécution. Des modifications indépendentes en apparence peuvent avoir des impacts bien plus loin et le code employé, auparavant optimal, sera alors sous-optimal et plus lent.

+ +

Il faudrait sinon pouvoir stocker des informations cross-objet.

+ +

Les informations cross-objet sont différentes des formes et on ne peut pas les vérifier simplement. Une modification apportée à cette information pourrait avoir des impacts à de nombreux emplacements, pas nécessairement évidents : dans ce cas, où vérifier que les hypothèses sont respectées ? Ainsi, plutôt que de vérifier ces hypothèses avant l'utilisation, on invalide toutes les hypothèses lorsqu'une modification se produit. Lorsque [[Prototype]] change, tout le code qui en dépend doit être rejeté.  L'opération obj.__proto__ = ... est donc lente par nature. En rejetant du code optimisé, cela rend le code beaucoup plus lent par la suite.

+ +

Encore pire, lorsqu'on évalue obj.prop, le moteur voit que l'objet a eu son [[Prototype]] changé et les informations précédemment enregistrées à propos de l'objet deviennent inutiles et SpiderMonkey considère que l'objet possède des caractéristiques inconnues. Ainsi, tout code qui manipule cet objet par la suite prendra l'hypothèse correspondant au pire des cas. L'optimisation des moteurs de compilation à la volée fonctionnent sur l'hypothèse que l'exécution à venir est similaire à l'exécution passée. Si du code observe un objet avec un [[Prototype]] modifié, ce code observera vraisemblablement d'autres objets. C'est pourquoi, toutes les opérations qui intéragissent avec un objet dont le [[Prototype]] a changé, ne peuvent pas être optimisées.

diff --git a/files/fr/web/javascript/typed_arrays/index.html b/files/fr/web/javascript/typed_arrays/index.html deleted file mode 100644 index 40bf2f727b..0000000000 --- a/files/fr/web/javascript/typed_arrays/index.html +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Les tableaux typés en JavaScript -slug: Web/JavaScript/Typed_arrays -tags: - - Advanced - - Guide - - JavaScript - - Typed Arrays -translation_of: Web/JavaScript/Typed_arrays -original_slug: Web/JavaScript/Tableaux_typés ---- -
{{JsSidebar("Advanced")}}
- -

Les tableaux typés JavaScript sont des objets semblables à des tableaux qui permettent d'accéder à des données binaires brutes. Pour rappel, les objets {{jsxref("Array")}} qui représentent des tableaux en JavaScript peuvent être agrandis ou réduits dynamiquement et permettent de stocker n'importe quelle valeur JavaScript. Afin que la manipulation de ces objets soit efficace, le moteur JavaScript applique un certain nombre d'optimisations. Cependant, avec les avancées réalisées (telles que les flux audio et vidéo avec WebRTC et les WebSockets), il devient nécessaire de pouvoir manipuler des données binaires brutes au sein de tableaux typés, c'est pour ça que ces objets ont été introduits.

- -

Ne pas confondre les tableaux typés et les tableaux « classiques » ({{jsxref("Array")}}). En effet, la méthode {{jsxref("Array.isArray()")}} renverra false lorsqu'elle sera utilisée sur un tableau typé. De plus, certaines des méthodes des tableaux « classiques » ne sont pas disponibles pour les tableaux typés (par exemple push et pop).

- -

Tampon de mémoire et vue : l'architecture des tableaux typés

- -

Afin de permettre une meilleure efficacité et une meilleure flexibilité, l'implémentation des tableaux typés JavaScript est séparée entre : les tampons de mémoire (buffers) d'une part et les vues (views) d'autre part. Un tampon de mémoire, implémenté avec l'objet {{jsxref("ArrayBuffer")}}, est un objet qui représente un fragment de données, il n'a pas de format à proprement parler et n'offre aucune fonctionnalité pour accéder à son contenu. Afin d'accéder à la mémoire contenue dans le tampon, on doit utiliser une vue. Une vue fournit un contexte (c'est-à-dire un type de donnée, un emplacement pour le début de la lecture (offset) et un nombre d'éléments ; c'est ce contexte qui permet de définir le tableau typé.

- -

Typed arrays in an ArrayBuffer

- -

ArrayBuffer

- -

Le type {{jsxref("ArrayBuffer")}} est un type de données générique pour représenter un tampon de données de longueur fixe. Le contenu d'un ArrayBuffer ne peut pas être manipulé directement, il faut pour cela créer une vue sous forme d'un tableau typé ou une vue {{jsxref("DataView")}} qui représente le tampon dans un format donné et utiliser cet objet pour lire et écrire du contenu dans le tampon de données.

- -

Les vues sous forme de tableaux typés

- -

Les tableaux typés qui sont les vues sur ces tampons de mémoire possèdent des noms explicites correspondant aux types numériques habituels tels que Int8, Uint32, Float64 et ainsi de suite. Il existe un type de tableau typé spécial, Uint8ClampedArray. Ce type permet de ramener (clamp) les valeurs observées entre 0 et 255. Cela peut notamment être utilisé pour traiter les données d'un canvas par exemple.

- -

{{page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray", "Les_objets_TypedArray")}}

- -

DataView

- -

Le type {{jsxref("DataView")}} permet de créer des objets qui seront des interfaces (bas niveau) pour lire/écrire des données dans le tampon de mémoire. Cela peut par exemple être utile lorsqu'on souhaite manipuler différents types de données. Les vues sous forme de tableaux typés suivent le même boutisme (endianness) que la plate-forme. Avec un objet DataView, il est possible de définir l'ordre des octets à considérer (qui sera par défaut du grand boutisme (big-endian) mais qui pourra être défini en petit boutisme (little-endian) dans les différentes méthodes d'accès/écriture).

- -

Les API Web utilisant les tableaux typés

- -
-
FileReader.prototype.readAsArrayBuffer()
-
La méthode FileReader.prototype.readAsArrayBuffer() permet de lire le contenu d'un Blob ou File donné.
-
XMLHttpRequest.prototype.send()
-
XMLHttpRequest et sa méthode send() peuvent désormais être utilisées avec un argument qui est un tableau typé ou un {{jsxref("ArrayBuffer")}}.
-
ImageData.data
-
Un objet du type {{jsxref("Uint8ClampedArray")}} qui représente un tableau unidimensionnel contenant les données de l'image dans l'ordre RGBA, les entiers utilisés sont compris entre 0 et 255 (au sens large).
-
- -

Exemples

- -

Utiliser les vues et les tampons

- -

Tout d'abord, il faut créer un tampon (buffer). Ici, on crée un buffer de 16 octets :

- -
let buffer = new ArrayBuffer(16);
-
- -

Grâce à cette instruction, on dispose désormaits d'un fragment de mémoire dont tous les octets sont pré-initialisés à 0. Si c'est déjà une bonne chose de faite, cela n'a pas grande utilité. On peut déjà confirmer que la longueur du tampon est bien celle spécifiée initialement :

- -
if (buffer.byteLength === 16) {
-  console.log("Oui, il mesure bien 16 octets.");
-} else {
-  console.log("Non, ce n'est pas la bonne taille !");
-}
-
- -

Avant qu'on puisse travailler avec ce tampon, il faut créer une vue. Ici, on crée une vue qui traite le tampon comme un tableau d'entiers signés représentés sur 32 bits :

- -
let int32View = new Int32Array(buffer);
-
- -

Désormais, on peut accéder aux éléments du tableau typé comme avec un tableau classique :

- -
for (let i = 0; i < int32View.length; i++) {
-  int32View[i] = i * 2;
-}
-
- -

Ce fragment de code permet de remplir les 4 éléments du tableau (4 éléments faisant chacun 4 octets, ce qui remplit les 16 octets du tableau) avec les valeurs 0, 2, 4, et 6.

- -

Plusieurs vues sur les mêmes données

- -

On commence à avoir des cas d'utilisation intéressants quand on peut créer plusieurs vues sur les mêmes données. Ainsi, en utilisant le code précédent, on peut continuer avec :

- -
let int16View = new Int16Array(buffer);
-
-for (let i = 0; i < int16View.length; i++) {
-  console.log("Élément " + i + " : " + int16View[i]);
-}
-
- -

Ici, on crée une vue pour des éléments sur 16 bits qui partage le même tampon que la vue précédente (qui était une vue avec des éléments sur 32 bits) et on affiche les valeurs contenues dans le tampon sous formes d'entiers représentés sur 16 bits. Le résultat obtenu est ici 0, 0, 2, 0, 4, 0, 6, 0.

- -

On peut aller encore plus loin, par exemple :

- -
int16View[0] = 32;
-console.log("L'élément 0 du tableau 32 bits est désormais " + int32View[0]);
-
- -

Le résultat obtenu sera "L'élément 0 du tableau 32 bits est désormais 32". Autrement dit, les deux tableaux typés construits ne sont que des vues sur le même tampon de données. Ce genre de manipulation peut être effectuée avec n'importe quel type de vue.

- -

Manipuler des structures de données complexes

- -

En combinant un même tampon et plusieurs vue de différents types, chacune commençant à un endroit différent dans le tampon, il est possible d'interagir avec des données qui représentent des objets contenant plusieurs types de données. Cela permet entre autres d'intéragir avec des structures de données complexes telles que WebGL, des fichiers de données, des structures C (notamment avec js-ctypes).

- -

Si on a cette structure C :

- -
struct uneStruct {
-  unsigned long id;
-  char nom_utilisateur[16];
-  float montant;
-};
- -

On peut réceptionner les données d'un tampon qui contiendrait des objets de ce type grâce à:

- -
let buffer = new ArrayBuffer(24);
-
-// ... on lit les données dans le tampon ...
-
-let vueId = new Uint32Array(buffer, 0, 1);
-let vueNomUtilisateur = new Uint8Array(buffer, 4, 16);
-let vueMontant = new Float32Array(buffer, 20, 1);
- -

On peut ensuite accéder au montant lié à un utilisateur, par exemple, avec vueMontant[0].

- -

Note : L'alignement des structures de données dans une structure C dépend de la plate-forme. Il est donc nécessaire de prendre des précautions quant au format attendu.

- -

Convertir un tableau typé en un tableau normal

- -

Dans certains cas d'utilisation, après avoir traité un tableau typé, il peut être utile de convertir le tableau typé en un tableau normal ({{jsxref("Array")}}) afin de bénificier des propriétés du prototype d'Array. Pour cela, on peut utiliser la méthode {{jsxref("Array.from")}}. Si Array.from() n'est pas disponible, on peut effectuer cette conversion de la façon suivante :

- -
let tableauTypé = new Uint8Array([1, 2, 3, 4]),
-    tableauNormal = Array.prototype.slice.call(tableauTypé);
-tableauNormal.length === 4;
-tableauNormal.constructor === Array;
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015.
{{SpecName('ES2015', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

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

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/typed_arrays/index.md b/files/fr/web/javascript/typed_arrays/index.md new file mode 100644 index 0000000000..40bf2f727b --- /dev/null +++ b/files/fr/web/javascript/typed_arrays/index.md @@ -0,0 +1,177 @@ +--- +title: Les tableaux typés en JavaScript +slug: Web/JavaScript/Typed_arrays +tags: + - Advanced + - Guide + - JavaScript + - Typed Arrays +translation_of: Web/JavaScript/Typed_arrays +original_slug: Web/JavaScript/Tableaux_typés +--- +
{{JsSidebar("Advanced")}}
+ +

Les tableaux typés JavaScript sont des objets semblables à des tableaux qui permettent d'accéder à des données binaires brutes. Pour rappel, les objets {{jsxref("Array")}} qui représentent des tableaux en JavaScript peuvent être agrandis ou réduits dynamiquement et permettent de stocker n'importe quelle valeur JavaScript. Afin que la manipulation de ces objets soit efficace, le moteur JavaScript applique un certain nombre d'optimisations. Cependant, avec les avancées réalisées (telles que les flux audio et vidéo avec WebRTC et les WebSockets), il devient nécessaire de pouvoir manipuler des données binaires brutes au sein de tableaux typés, c'est pour ça que ces objets ont été introduits.

+ +

Ne pas confondre les tableaux typés et les tableaux « classiques » ({{jsxref("Array")}}). En effet, la méthode {{jsxref("Array.isArray()")}} renverra false lorsqu'elle sera utilisée sur un tableau typé. De plus, certaines des méthodes des tableaux « classiques » ne sont pas disponibles pour les tableaux typés (par exemple push et pop).

+ +

Tampon de mémoire et vue : l'architecture des tableaux typés

+ +

Afin de permettre une meilleure efficacité et une meilleure flexibilité, l'implémentation des tableaux typés JavaScript est séparée entre : les tampons de mémoire (buffers) d'une part et les vues (views) d'autre part. Un tampon de mémoire, implémenté avec l'objet {{jsxref("ArrayBuffer")}}, est un objet qui représente un fragment de données, il n'a pas de format à proprement parler et n'offre aucune fonctionnalité pour accéder à son contenu. Afin d'accéder à la mémoire contenue dans le tampon, on doit utiliser une vue. Une vue fournit un contexte (c'est-à-dire un type de donnée, un emplacement pour le début de la lecture (offset) et un nombre d'éléments ; c'est ce contexte qui permet de définir le tableau typé.

+ +

Typed arrays in an ArrayBuffer

+ +

ArrayBuffer

+ +

Le type {{jsxref("ArrayBuffer")}} est un type de données générique pour représenter un tampon de données de longueur fixe. Le contenu d'un ArrayBuffer ne peut pas être manipulé directement, il faut pour cela créer une vue sous forme d'un tableau typé ou une vue {{jsxref("DataView")}} qui représente le tampon dans un format donné et utiliser cet objet pour lire et écrire du contenu dans le tampon de données.

+ +

Les vues sous forme de tableaux typés

+ +

Les tableaux typés qui sont les vues sur ces tampons de mémoire possèdent des noms explicites correspondant aux types numériques habituels tels que Int8, Uint32, Float64 et ainsi de suite. Il existe un type de tableau typé spécial, Uint8ClampedArray. Ce type permet de ramener (clamp) les valeurs observées entre 0 et 255. Cela peut notamment être utilisé pour traiter les données d'un canvas par exemple.

+ +

{{page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/TypedArray", "Les_objets_TypedArray")}}

+ +

DataView

+ +

Le type {{jsxref("DataView")}} permet de créer des objets qui seront des interfaces (bas niveau) pour lire/écrire des données dans le tampon de mémoire. Cela peut par exemple être utile lorsqu'on souhaite manipuler différents types de données. Les vues sous forme de tableaux typés suivent le même boutisme (endianness) que la plate-forme. Avec un objet DataView, il est possible de définir l'ordre des octets à considérer (qui sera par défaut du grand boutisme (big-endian) mais qui pourra être défini en petit boutisme (little-endian) dans les différentes méthodes d'accès/écriture).

+ +

Les API Web utilisant les tableaux typés

+ +
+
FileReader.prototype.readAsArrayBuffer()
+
La méthode FileReader.prototype.readAsArrayBuffer() permet de lire le contenu d'un Blob ou File donné.
+
XMLHttpRequest.prototype.send()
+
XMLHttpRequest et sa méthode send() peuvent désormais être utilisées avec un argument qui est un tableau typé ou un {{jsxref("ArrayBuffer")}}.
+
ImageData.data
+
Un objet du type {{jsxref("Uint8ClampedArray")}} qui représente un tableau unidimensionnel contenant les données de l'image dans l'ordre RGBA, les entiers utilisés sont compris entre 0 et 255 (au sens large).
+
+ +

Exemples

+ +

Utiliser les vues et les tampons

+ +

Tout d'abord, il faut créer un tampon (buffer). Ici, on crée un buffer de 16 octets :

+ +
let buffer = new ArrayBuffer(16);
+
+ +

Grâce à cette instruction, on dispose désormaits d'un fragment de mémoire dont tous les octets sont pré-initialisés à 0. Si c'est déjà une bonne chose de faite, cela n'a pas grande utilité. On peut déjà confirmer que la longueur du tampon est bien celle spécifiée initialement :

+ +
if (buffer.byteLength === 16) {
+  console.log("Oui, il mesure bien 16 octets.");
+} else {
+  console.log("Non, ce n'est pas la bonne taille !");
+}
+
+ +

Avant qu'on puisse travailler avec ce tampon, il faut créer une vue. Ici, on crée une vue qui traite le tampon comme un tableau d'entiers signés représentés sur 32 bits :

+ +
let int32View = new Int32Array(buffer);
+
+ +

Désormais, on peut accéder aux éléments du tableau typé comme avec un tableau classique :

+ +
for (let i = 0; i < int32View.length; i++) {
+  int32View[i] = i * 2;
+}
+
+ +

Ce fragment de code permet de remplir les 4 éléments du tableau (4 éléments faisant chacun 4 octets, ce qui remplit les 16 octets du tableau) avec les valeurs 0, 2, 4, et 6.

+ +

Plusieurs vues sur les mêmes données

+ +

On commence à avoir des cas d'utilisation intéressants quand on peut créer plusieurs vues sur les mêmes données. Ainsi, en utilisant le code précédent, on peut continuer avec :

+ +
let int16View = new Int16Array(buffer);
+
+for (let i = 0; i < int16View.length; i++) {
+  console.log("Élément " + i + " : " + int16View[i]);
+}
+
+ +

Ici, on crée une vue pour des éléments sur 16 bits qui partage le même tampon que la vue précédente (qui était une vue avec des éléments sur 32 bits) et on affiche les valeurs contenues dans le tampon sous formes d'entiers représentés sur 16 bits. Le résultat obtenu est ici 0, 0, 2, 0, 4, 0, 6, 0.

+ +

On peut aller encore plus loin, par exemple :

+ +
int16View[0] = 32;
+console.log("L'élément 0 du tableau 32 bits est désormais " + int32View[0]);
+
+ +

Le résultat obtenu sera "L'élément 0 du tableau 32 bits est désormais 32". Autrement dit, les deux tableaux typés construits ne sont que des vues sur le même tampon de données. Ce genre de manipulation peut être effectuée avec n'importe quel type de vue.

+ +

Manipuler des structures de données complexes

+ +

En combinant un même tampon et plusieurs vue de différents types, chacune commençant à un endroit différent dans le tampon, il est possible d'interagir avec des données qui représentent des objets contenant plusieurs types de données. Cela permet entre autres d'intéragir avec des structures de données complexes telles que WebGL, des fichiers de données, des structures C (notamment avec js-ctypes).

+ +

Si on a cette structure C :

+ +
struct uneStruct {
+  unsigned long id;
+  char nom_utilisateur[16];
+  float montant;
+};
+ +

On peut réceptionner les données d'un tampon qui contiendrait des objets de ce type grâce à:

+ +
let buffer = new ArrayBuffer(24);
+
+// ... on lit les données dans le tampon ...
+
+let vueId = new Uint32Array(buffer, 0, 1);
+let vueNomUtilisateur = new Uint8Array(buffer, 4, 16);
+let vueMontant = new Float32Array(buffer, 20, 1);
+ +

On peut ensuite accéder au montant lié à un utilisateur, par exemple, avec vueMontant[0].

+ +

Note : L'alignement des structures de données dans une structure C dépend de la plate-forme. Il est donc nécessaire de prendre des précautions quant au format attendu.

+ +

Convertir un tableau typé en un tableau normal

+ +

Dans certains cas d'utilisation, après avoir traité un tableau typé, il peut être utile de convertir le tableau typé en un tableau normal ({{jsxref("Array")}}) afin de bénificier des propriétés du prototype d'Array. Pour cela, on peut utiliser la méthode {{jsxref("Array.from")}}. Si Array.from() n'est pas disponible, on peut effectuer cette conversion de la façon suivante :

+ +
let tableauTypé = new Uint8Array([1, 2, 3, 4]),
+    tableauNormal = Array.prototype.slice.call(tableauTypé);
+tableauNormal.length === 4;
+tableauNormal.constructor === Array;
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Remplacée par ECMAScript 2015.
{{SpecName('ES2015', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ES2015')}}Définition initiale au sein d'un standard ECMA.
{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

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

+ +

Voir aussi

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